cancel
Showing results for 
Search instead for 
Did you mean: 

STM32H7S Uart TX using GPDMA only transmits 0x00 if DCache is enabled

ThorPS
Associate II

Hi,

I have a well functioning application transmitting on uart4 using GPDMA1 CH1.

If I turn on DCache, then it does transmit the correct length, only all characters are 0x00 (no problem in turning ICache on).

In HAL_UART_Transmit_DMA(huart, (const uint8_t*)pTx, len), if I make this substitution: HAL_UART_Transmit_DMA(huart, (const uint8_t*)"Hi "/*pTx*/, 3/*len*/), then it works.

I have tried allocating the variable pointed to by pTx to just about any available memory area / type without success.

Any suggestions?

 

1 ACCEPTED SOLUTION

Accepted Solutions
TDK
Super User

After writing the values to memory, but before sending them with DMA, clean the cache with SCB_CleanDCache_by_Addr.  You'll need to ensure the buffer is aligned to a cache page.

 

Managing Cache Coherency on Cortex-M7 Based MCUs

If you feel a post has answered your question, please click "Accept as Solution".

View solution in original post

4 REPLIES 4
TDK
Super User

After writing the values to memory, but before sending them with DMA, clean the cache with SCB_CleanDCache_by_Addr.  You'll need to ensure the buffer is aligned to a cache page.

 

Managing Cache Coherency on Cortex-M7 Based MCUs

If you feel a post has answered your question, please click "Accept as Solution".
ThorPS
Associate II

Thanks, it solved the problem about transmission.

It seems there is a similar issue with reception, but now I know what to do I guess.

 

> It seems there is a similar issue with reception

As the app note says, after receiving data with DMA, but before reading it with the CPU, invalidate that region with SCB_InvalidateDCache_by_Addr.

If you feel a post has answered your question, please click "Accept as Solution".
ThorPS
Associate II

Thanks. I tried it without success.

As enabling DCache also makes my TouchGFX application malfunction, I won't investigate further for now.

Anyway, I'm sure the information provided will help me to fix this eventually.