docs: 规划手环级联双 RGB 灯珠硬件 SPI 级联传输驱动与消噪保护时序

This commit is contained in:
2026-07-09 14:48:24 +08:00
parent e052aca2ed
commit cf25a89c0f
2 changed files with 16 additions and 4 deletions

View File

@@ -6,9 +6,10 @@
* **职责范围**
1. 在系统启动时,配置 WS2812 的物理输出引脚 `P2.3` (MOSI)。
2. 提供高速的硬件 SPI 发送驱动,配合 LUT 查表展宽算法,输出满足单线纳秒级精度的 WS2812 时序波形
3. 硬件 SPI 传输 24位灯效数据时采取临时关闭中断并把复用的 `P2.5` 配置为高阻输入的隔离防噪处理
4. 维护软件定时闪烁状态机,提供报警状态下的指示灯颜色与特定频率闪烁效果
2. 支持一上一下级联Daisy-chained的双 WS2812B/FCOB-2.7 灯珠驱动。上灯的 DOUT 串行连接至下灯的 DIN
3. 提供高速的硬件 SPI 发送驱动,配合 LUT 查表展宽算法,连续发送 48-bit (24-bit × 2) 的 GRB 级联数据流,输出满足单线纳秒级精度的 WS2812 时序波形,使两个灯珠同步亮起相同的颜色
4. 在硬件 SPI 传输 48位灯效数据时采取临时关闭中断并把复用的 `P2.5` 配置为高阻输入的隔离防噪处理
5. 维护软件定时闪烁状态机,提供报警状态下的指示灯颜色与特定频率闪烁效果。
## 2. LED 报警色彩矩阵

View File

@@ -55,7 +55,18 @@ void WS2812_Write24Bit(u8 g, u8 r, u8 b) {
SPDAT = b0; // 发送数据
SPCTL = 0xD0; // 开启 SPI 硬件传输
// 展开的非阻塞高速发送时序 (300ns 传输间隔)
// 展开的非阻塞高速发送时序 - 发送第 1 个灯珠 (Top LED)
while (!(SPSTAT & 0x80)); SPSTAT = 0xC0; SPDAT = b1;
while (!(SPSTAT & 0x80)); SPSTAT = 0xC0; SPDAT = b2;
while (!(SPSTAT & 0x80)); SPSTAT = 0xC0; SPDAT = b3;
while (!(SPSTAT & 0x80)); SPSTAT = 0xC0; SPDAT = b4;
while (!(SPSTAT & 0x80)); SPSTAT = 0xC0; SPDAT = b5;
while (!(SPSTAT & 0x80)); SPSTAT = 0xC0; SPDAT = b6;
while (!(SPSTAT & 0x80)); SPSTAT = 0xC0; SPDAT = b7;
while (!(SPSTAT & 0x80)); SPSTAT = 0xC0; SPDAT = b8;
while (!(SPSTAT & 0x80)); SPSTAT = 0xC0; SPDAT = b9;
// 展开的非阻塞高速发送时序 - 发送第 2 个灯珠 (Bottom LED, 级联相同颜色)
while (!(SPSTAT & 0x80)); SPSTAT = 0xC0; SPDAT = b1;
while (!(SPSTAT & 0x80)); SPSTAT = 0xC0; SPDAT = b2;
while (!(SPSTAT & 0x80)); SPSTAT = 0xC0; SPDAT = b3;