5个版本 (破坏性)
0.5.0 | 2024年7月29日 |
---|---|
0.4.0 | 2020年12月2日 |
0.3.0 | 2020年2月9日 |
0.2.0 | 2019年5月3日 |
0.1.0 | 2019年3月5日 |
#265 在 嵌入式开发
每月969次下载
用于 3 crates
5MB
340 行
嵌入式-hal spi traits的Ws2812驱动器
与smart-leds crate一起使用。
使用SPI作为时序提供者的嵌入式-hal驱动器,用于ws2812 LED。
它提供了三种变体
-
常规使用
您的SPI外设必须以2MHz至3.8MHz的速度运行,SPI数据将在现场生成。这意味着您的核心必须足够快(48 MHz应该足够)。
-
预渲染
如果您的核心速度太慢(例如,AVR系列),您可能想使用这个。它事先创建所有数据,然后发送。这意味着您必须提供一个足够大的数据数组,以便存储所有SPI数据。
-
托管
适用于Raspberry Pi或其他Linux SBC等设备。类似于预渲染,它事先创建所有数据,但使用单个调用发送。它不起作用!!!
它不起作用!!!
-
您使用的是常规变体?您的SPI是否在正确的频率下运行?
您的CPU可能太慢,但这也可能取决于HAL实现和您的Iterator链。使用
prerendered
变体可能有所帮助。对于许多SPI外设,时钟生成要简单得多,例如UART外设。您应该验证它是否以可接受的频率运行,可以通过研究数据手册和HAL代码,或者使用逻辑分析仪。一个fx2基于的,通常在10美元以下,效果很好。 -
如果第一个LED始终开启,无论您放入什么数据,您的SPI可能没有在空闲时将mosi线设为低(您可以用万用表检查)。这还可能是第一个发送的位的时间问题,这是stm32f030在2MHz时的情况。
您可以尝试使用
mosi_idle_high
功能,这可能有所帮助。 -
您的设备是否足够快?您的迭代器是否足够快?如果花费时间过长,可能会完全破坏正常版本的时序。尝试使用预渲染的变体。
-
一切都是白色吗?这可能是由于SPI外围设备速度过慢,或者在字节之间花费了太多时间。
-
当您的第一个LED亮度/颜色不正确,而其他LED表现如预期时,这是由于数据线电压低,或者Vin和Din电压之间电压差太大,使得一些“高”位被芯片读作“低”位。由于芯片电路,这些电压在传递到线上的下一个LED时被调节,这就是为什么其他LED表现如预期。(关于这里具体发生的事情,请参阅Hackaday | Cheating at 5V WS2812 Control to Use 3.3V Data)
-
您是否使用了
--release
编译器标志?通过SPI传递的每个字节的时序非常敏感,使用没有完全优化的代码编译可能会破坏您的时序。始终使用与您的
cargo <command>
一起的--release
标志,或者另设[profile.dev] opt-level = "3"
以确保时序与您的编程相匹配。一个明显的迹象是所有像素在每种颜色下都达到全亮度。
当提交关于错误/奇怪数据的issue时,如果包括您的代码(当然)以及从示波器/逻辑分析仪捕获的MOSI和SCK,这将有所帮助。
许可
根据您的选择,许可如下
- Apache License,版本2.0(LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可(LICENSE-MIT或http://opensource.org/licenses/MIT)
。
贡献
除非您明确说明,否则任何有意提交给作品以包含在内的贡献,如Apache-2.0许可中定义的,应如上所述双许可,不附加任何额外的条款或条件。