#spi #spi-driver #led #smart-leds #chips #embedded-hal #ws2811

no-std ws2811-spi

基于SPI的ws2811芯片驱动程序

6个版本

0.1.5 2024年2月21日
0.1.4 2024年2月16日
0.1.2 2023年12月14日
0.1.1 2023年11月13日
0.1.0 2023年8月3日

#712 in 嵌入式开发

Download history 1/week @ 2024-03-14 15/week @ 2024-03-28 7/week @ 2024-04-04 54/week @ 2024-04-25

每月131次下载

MIT/Apache

15KB
219

嵌入式-hal spi traits的Ws2811驱动程序

基于 ws2812-spi-rs 的分支

用于与 smart-leds crate 一起使用。

使用SPI作为时序提供者的嵌入式-hal ws2811 led驱动程序。

它提供了两种变体

  • 常规使用

    您的SPI外设必须在1.6MHz和3.2MHz之间运行,且SPI数据实时生成。这意味着您的核心必须相当快(48 MHz应该足够)。

  • 预渲染

    如果您的核心太慢(例如,AVR系列),您可能想使用这个。它事先创建所有数据,然后发送。这意味着您必须提供一个足够大的数据数组,以容纳所有SPI数据。

它不起作用!!!

  • 您使用的是常规变体吗?您的SPI运行在正确的频率吗?

    您的CPU可能太慢,但这也可能取决于HAL实现和您的迭代器链。尝试使用prerendered变体可能有所帮助。对于许多SPI外设,时钟生成方式比例如UART外设简单得多。您应该通过研究数据手册和hal代码或使用逻辑分析仪来验证它是否在可接受的频率下运行。一个基于fx2的,通常在10美元以下,效果非常好。

  • 如果第一个LED总是亮着,无论您输入什么数据,您的SPI可能没有在空闲时将MOSI线设置为低(您可以使用万用表检查)。这也可能是在发送第一个位时的时序问题,例如stm32f030上的2MHz。

    您可以使用mosi_idle_high特性,它可能有所帮助。

  • 您的设备足够快吗?您的迭代器足够快吗?太长时间可能会完全破坏常规版本的时序。尝试预渲染变体。

  • 所有东西都是白色的吗?这可能源于太慢的SPI外设或在字节之间花费太多时间的SPI外设

  • 你的第一个LED亮度/颜色是否不正确,而其他LED则按预期工作?这是因为数据线的电压低,或者Vin和Din之间的电压差太大,导致一些“高”位被芯片读取为“低”位。由于芯片的电路,这些电压在传递到线上的下一个LED时被调节,这就是为什么其他LED按预期工作。(关于这里具体发生了什么,请参见 Hackaday | 5V WS2812 控制使用 3.3V 数据的欺骗

  • 你是否使用了 --release 编译器标志?

    通过SPI传递每个字节的时序非常敏感,编译未经完全优化的代码可能会影响时序。始终使用 --release 标志与你的 cargo <command> 一起使用,或者另设 [profile.dev] opt-level = "3" 确保时序与你的编程相匹配。一个明显的迹象是所有像素在每种颜色下都达到全亮度。

当你打开一个关于错误/奇怪数据的问题时,如果包含你的代码(当然)以及示波器/逻辑分析仪捕获的MOSI & SCK,将会有所帮助。

作者

👤 Le French POC

支持我们

如果这个项目帮到了你,请给一个 ⭐️!

许可证

许可方式任选其一:

由你选择。

贡献

除非你明确表示,否则根据 Apache-2.0 许可证定义的,你提交的任何有意用于包含在工作中的贡献,将按上述方式双重许可,不附加任何额外的条款或条件。

依赖

~170KB