#nxp #led-strip #neopixel #imxrt #ws2812 #flexio

no-std ws2812-flexio

基于NXP i.MX RT FlexIO总线的高级像素驱动程序

3个版本 (重大更改)

0.3.0 2024年6月23日
0.2.0 2023年11月15日
0.1.0 2023年7月22日

#227嵌入式开发

Download history 132/week @ 2024-04-26 162/week @ 2024-06-21 6/week @ 2024-06-28 5/week @ 2024-07-05

每月182次下载

MIT/Apache

46KB
825

ws2812-flexio

Crates.io Crates.io License Build Status docs.rs

基于NXP i.MX RT FlexIO总线的高级像素驱动程序。

像素类型

NeoPixel LED灯带的默认颜色空间是8位线性sRGB,因此推荐的像素类型是LinSrgb<u8>

请注意,这与正常的伽玛校正sRGB不同;需要进行转换。更多信息可以在palette包的文档中找到。

操作模式

此包可以以阻塞模式或DMA驱动异步模式运行。

规格

并行灯带

该库可以并行驱动多个灯带。更具体地说,从同一FlexIO实例驱动多个灯带需要2 + 2 * strips FlexIO计时器,因此例如具有8计时器的FlexIO实例可以并行驱动3条灯带。

帧率

该库以800kHz的帧率和300us的锁存时间驱动LED灯带。这给出了以下公式

fps = 100,000 / ((num_pixels + 1) x bytes_per_pixel + 30)

示例:对于有332 SK6805像素的灯带,我们可以实现100,000 / ((332 + 1) * 3 + 30) = 97.18 fps。

请注意,此帧率仅适用于基于DMA的写入;使用阻塞写入时,在下一帧计算过程中会额外浪费时间。

示例

- 以下示例适用于Teensy 4.0板-

先决条件

以下硬件是示例所需的

  • A Teensy 4.0开发板
  • 读取Teensy的UART的方法,例如USB-UART转换器

必须安装以下软件工具

  • Python3(作为python3,或修改run.py以使用python二进制文件)
  • llvm-objcopy
    • 安装LLVM工具套件
  • teensy-loader-cli

运行

  • 通过USB电缆将Teensy连接到PC。
  • 运行cargo run --release --example triple_332
  • 读取Teensy的UART上的示例输出。
  • 引脚6、7和8输出长度为332的NeoPixel RGB条带的数据(例如 P/N: S010332ZA3SA8)。注意,这些引脚输出3.3V,而大多数NeoPixel LED条带需要5V数据信号,这意味着需要一个外部电平转换器。

依赖项

~28MB
~753K SLoC