2022-05-26 10:35 PM
Hi,
I'm using OTG HS, in device mode, as a CDC VCP. It works when "Internal IP DMA" is disabled. If I enable DMA, the USB device enumerates but CDC_Transmit_HS() no longer works.
I saw the article on USB DMA with the STM32H7, and I tried similar things:
-Disabled the D-Cache globally.
-Edited my linker script to not use DTCM, by skipping past it like this:
"RAM (xrw) : ORIGIN = 0x20010000, LENGTH = 192K"
-I have confirmed that the buffer I am trying to transmit is word aligned (memory address is a multiple of 4.)
-I am trying to transmit 20800 bytes, which is also a multiple of 4.
-I also put "__DSB();" immediately before each call to "CDC_Transmit_HS()"
Is there some other trick I need to use?
I would like to use OTG HS with DMA because I need to transfer a lot of data. With DMA disabled, and D-Cache enabled, I am only able to transfer about 16MBps (128Mbps). That is achieved with a loop in main() that non-stop calls CDC_Transmit_HS() to transmit packets that are 20800 bytes long. This is far below the theoretical 480Mbps. I know there is overhead, but this seems way off?
I have SYSCLK at 144MHz, because I need APB2 at 72MHz, because I need the ADCs to run at the highest possible clock of 36MHz. Looking at the clock tree, this seems to be the fastest I can run SYSCLK at if I want the ADCs running at 36MHz.
Thanks,
-Farrell
2023-01-07 1:06 PM
Hello
I am writing this reply as I saw the same problem with STM32F746.
I also tried similar things with you, but the USB doesn't work properly.
If you solved this issue already, please let me know the solution.
Best regards,
Tian Zhang.
We’re moving the ST Community to a new platform to give you a better and more reliable community experience.