STM32DMA的性能

ele   2009-11-5 12:10 楼主
为了快速传送一个数据块,使用 DMA 传送程序(Mem to Mem 16bits) 测量了一下传送的时间,128个16b数据大约用了12us (72Mhz 时钟)。 换句话来说,STM32 DMA 性能为10M/s

   又使用memcpy 来比对一下,用时约4us ,显然memcpy 要快很多。

   btw, 在ST的手册里面未见对DMA性能的表述。

回复评论 (7)

DMA传送数据的速度不会比CPU直接传送数据快,因为总线频率没有变。

当CPU也在运行执行指令时,DMA传送数据的速度会比CPU直接传送数据慢,这是因为DMA与CPU分时使用同一条总线的缘故。
点赞  2009-11-5 13:27
为了快速传送一个数据块,使用 DMA 传送程序(Mem to Mem 16bits) 测量了一下传送的时间,128个16b数据大约用了12us (72Mhz 时钟)。 换句话来说,STM32 DMA 性能为10M/s

   又使用memcpy 来比对一下,用时约4us ,显 ...
有一个专门讲DMA性能的手册的,你可以在官网上找到的
里面对DMA的性能描述得很清楚
AN2548 Using the STM32F101xx and STM32F103xx DMA controller
点赞  2009-11-5 14:44
DMA传送数据的速度不会比CPU直接传送数据快,因为总线频率没有变。

当CPU也在运行执行指令时,DMA传送数据的速度会比CPU直接传送数据慢,这是因为DMA与CPU分时使用同一条总线的缘故。 ...
这个说法有点问题
DMA数据传送是memory->memory
memcpy是memory -> cpu_internal_register -> memory

memcpy快应该是因为1. memcpy采用了ldm/stm指令,这个对提高速度很有帮助 2. 总线仲裁偏袒cpu core
点赞  2009-11-9 18:38
                                 不错DMA数据传送是memory->memory,但是DMA控制器并不在memory之内,DMA控制器仍然要通过数据总线控制存储器。关于这一点,楼上可以看看STM32的内部框图。
点赞  2009-11-9 18:46
                                 恩............ DMA控制器并不在memory之内?我想你的意思是指MASTER DMA吧,像PCI那样。但即使是legacy dma,由dma controller通过硬件的方式存取memory在通常情况下也应该比cpu快,因为不需要取指/解码/执行这样的流程。不过stm32的controller不支持bust mode确实对其速度有很大影响,而ldm/stm指令实际上起到了bust mode的作用,可以在一次取指/解码/执行过程中操作多个数据。如果controller支持burst,相信就可以超越memcpy的速度了。目前来看stm32 dma的速度确实不如memcpy,其最大的好处在于cpu可以不参与其过程。
点赞  2009-11-10 17:51
                                 非常同意byeyear 的解释,顺便问一句,其他品牌的M3的DMA是否也不支持 burst 模式?
点赞  2009-11-10 18:42
                                 DMA并不一定快,只是提高了有效代码的运行效率。
点赞  2009-11-12 13:16
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复