找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1028|回复: 5
打印 上一主题 下一主题
收起左侧

请教一个WS2812ELD数据传输问题

[复制链接]
跳转到指定楼层
楼主
ID:891876 发表于 2024-11-17 13:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
很多控制ws2812的程序是spi+DMA实现的,请问不使用DMA功能实现ws2812的控制有什么区别呢?
谢谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:161164 发表于 2024-11-17 22:08 | 只看该作者
DMA可以释放芯片的算力
一颗WS2812 24位元的数据耗时1.3us X 24 = 31.2us
如果数量少不用DMA也可以
但如果数量一多起来
耗时很久,严重堵塞芯片运行
回复

使用道具 举报

板凳
ID:69038 发表于 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确实好用










回复

使用道具 举报

地板
ID:401564 发表于 2024-11-18 22:39 | 只看该作者
WS2812时序并不是特别的严格,但却不能被中断打断,不然,灯的着色很容易是一个古怪的,并不是你想的着色
所以,在写稿时,要先关闭中断,中断本身就是为"意外"准备的,如果你关闭了,就有可能会丢失某个意外
而且,写入也是要时间的,如果你有几百个灯的话,就能明显的感觉到单片机卡了
但如果用了DMA就不同了,我就不百度DMA是什么了,反正没有上面的缺点就是了
回复

使用道具 举报

5#
ID:891876 发表于 2024-11-19 07:14 | 只看该作者
zhuls 发表于 2024-11-18 21:53
DMA可是好东西!
DMA,是“直接内存访问”的E文缩写,即“Direct Memory Access”的首字连起来的。。
在 ...

谢谢解答,是RGB-3字节X200==600byte吧?只是现在不知道怎样准备数据!看了视频效果不错!!!
回复

使用道具 举报

6#
ID:1034262 发表于 2024-11-19 10:36 | 只看该作者
比如控制1000个灯,耗时30ms,如果不用DMA,则驱动时MCU全部或大部分时间都耗在输出驱动上了,而DMA可以省去这个时间。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表