标题: 请教一个WS2812ELD数据传输问题 [打印本页]

作者: 芙蓉焊料    时间: 2024-11-17 13:32
标题: 请教一个WS2812ELD数据传输问题
很多控制ws2812的程序是spi+DMA实现的,请问不使用DMA功能实现ws2812的控制有什么区别呢?
谢谢!

作者: lkc8210    时间: 2024-11-17 22:08
DMA可以释放芯片的算力
一颗WS2812 24位元的数据耗时1.3us X 24 = 31.2us
如果数量少不用DMA也可以
但如果数量一多起来
耗时很久,严重堵塞芯片运行
作者: zhuls    时间: 2024-11-18 21:53
DMA可是好东西!
DMA,是“直接内存访问”的E文缩写,即“Direct Memory Access”的首字连起来的。。
在大规模的数据搬运时,都会采用这种方式,除非你用的MCU没有这个功能。
常见的有3种数据传输模式:外设到内存,内存到外设,内存到内存。
楼主控制WS2812,可选用“内存到外设”,即把数据准备好,就可以激发DMA,开始自动通过SPIx往外发送数据。
灯串有200个LED灯珠,每珠24bit,按2812的时序,每珠约耗时30us,200珠需约6ms...
因为2812的数据传输时不能被打断,所以在这6ms的时间内什么事都做不了,只能等数据完全发完。。
用上DMA,你只要开一个600byte的缓存区,数据准备好后,激发DMA就OK了,DMA发完数据会给你一个中断...
其间你还可以检测按健、做ADC动作....

如楼上所说,DMA在传输数据时,数据量越大,效果越明显,少量数据的话,用不用DMA没啥区别。


https://m.bilibili.com/video/BV18CUxYJEnw?buvid=XU41BF74046114B601AC24A729FB5CAC6AF03(1.54和2.0的4线SPI屏)

前50次没有用DMA,后50次用上了DMA,效果天差地别。。
这个示例与楼主这个没多大关系,但DMA确实好用











作者: Y_G_G    时间: 2024-11-18 22:39
WS2812时序并不是特别的严格,但却不能被中断打断,不然,灯的着色很容易是一个古怪的,并不是你想的着色
所以,在写稿时,要先关闭中断,中断本身就是为"意外"准备的,如果你关闭了,就有可能会丢失某个意外
而且,写入也是要时间的,如果你有几百个灯的话,就能明显的感觉到单片机卡了
但如果用了DMA就不同了,我就不百度DMA是什么了,反正没有上面的缺点就是了
作者: 芙蓉焊料    时间: 2024-11-19 07:14
zhuls 发表于 2024-11-18 21:53
DMA可是好东西!
DMA,是“直接内存访问”的E文缩写,即“Direct Memory Access”的首字连起来的。。
在 ...

谢谢解答,是RGB-3字节X200==600byte吧?只是现在不知道怎样准备数据!看了视频效果不错!!!
作者: coody_sz    时间: 2024-11-19 10:36
比如控制1000个灯,耗时30ms,如果不用DMA,则驱动时MCU全部或大部分时间都耗在输出驱动上了,而DMA可以省去这个时间。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1