Skip to main content
Visitor II
December 15, 2022
Question

How to properly configure DMA in order to use linked list in non secure Application (TZEN = 1) on STM32U585

  • December 15, 2022
  • 1 reply
  • 1075 views

Hi,

our porject use TZEN =1;

A custom Bootlaoder (secure app) is executed at begin and after we call a non secure Application.

The non secure Application as already been tested/validated with TZEN = 0.

This application use GPDAM channel 10 ro read data from ADC4.

With TZEN = 1 , HAL_ADC_Start_DMA is not wroking.

I Put GPDMA register config arround __HAL_DMA_ENABLE

0693W00000WL5hyQAD.pngDMA return USEF error.

Does anyone has an idea of why it fail?

SRAM 1-2-3 are configure as non secure (application can read/write inside it).

All peripheral are configured as non secure from Bootloader

HAL_GTZC_TZSC_ConfigPeriphAttributes(GTZC_PERIPH_ALL, GTZC_TZSC_PERIPH_NSEC|GTZC_TZSC_PERIPH_NPRIV)

This is DMA node configuration :

pNodeConfig.NodeType = DMA_GPDMA_LINEAR_NODE;
 pNodeConfig.Init.Request = GPDMA1_REQUEST_ADC4;
 pNodeConfig.Init.BlkHWRequest = DMA_BREQ_SINGLE_BURST;
 pNodeConfig.Init.Direction = DMA_PERIPH_TO_MEMORY;
 pNodeConfig.Init.SrcInc = DMA_SINC_FIXED;
 pNodeConfig.Init.DestInc = DMA_DINC_INCREMENTED;
 pNodeConfig.Init.SrcDataWidth = DMA_SRC_DATAWIDTH_HALFWORD;
 pNodeConfig.Init.DestDataWidth = DMA_DEST_DATAWIDTH_HALFWORD;
 pNodeConfig.Init.SrcBurstLength = 1;
 pNodeConfig.Init.DestBurstLength = 1;
 pNodeConfig.Init.TransferAllocatedPort = DMA_SRC_ALLOCATED_PORT0|DMA_DEST_ALLOCATED_PORT0;
 pNodeConfig.Init.TransferEventMode = DMA_TCEM_BLOCK_TRANSFER;
 pNodeConfig.TriggerConfig.TriggerPolarity = DMA_TRIG_POLARITY_MASKED;
 pNodeConfig.DataHandlingConfig.DataExchange = DMA_EXCHANGE_NONE;
 pNodeConfig.DataHandlingConfig.DataAlignment = DMA_DATA_RIGHTALIGN_ZEROPADDED;
 pNodeConfig.SrcAddress = 0;
 pNodeConfig.DstAddress = 0;
 pNodeConfig.DataSize = 0;
 
 /* Build ADC4_Node Node */
 ret |= HAL_DMAEx_List_BuildNode(&pNodeConfig, &ADC4_Node);
 
 /* Insert ADC4_Node to Queue */
 ret |= HAL_DMAEx_List_InsertNode_Tail(&ADC4_Queue, &ADC4_Node);

I don't understand why it fail:

  • Bootloader doesn't use DMA
  • Non secure App can configure DMA so I expect that DMA is correctly clocked
  • Memory is accessilbe from non secure APP

Thanks for your help

    This topic has been closed for replies.

    1 reply

    ST Employee
    December 24, 2022

    This forum thread was marked by the moderator as needing a little more investigation, so a Support case was created in your name and will be handled off-line. Should anyone have any similar questions, please feel free to open a Support case directly at your myST portal: https://st.com/ols