版本比较
标识
- 该行被添加。
- 该行被删除。
- 格式已经改变。
器件概述
一款整合了WS2811的LED器件规格书:TY 5022 AW12-2.pdf
WS2811是一款三通道恒流LED驱动IC,支持256级灰度,常用于驱动LED全彩发光字灯条,LED像素彩屏,设备跑马灯之类的产品。WS2811只是一个驱动芯片,不具备发光功能,所以一般是将WS2811和RGB三色LED灯封装在一起使用,就像LCD屏和LCD驱动芯片也经常封装在一起使用一样。以下是一些WS2811的产品形态:
以下是一颗集成了WS2811的RGB三色LED灯珠:
通信协议与数据格式
WS2811支持串行接口和接口级联,通过一根信号线即可完成对所有串联LED的控制,其典型连接如下:
数据协议采用单极性归零码的通讯方式,所有LED上电自动复位,复位后默认不亮灯,然后DIN端接收从控制器发过来的数据。首先送过来的24bit数据被第一颗LED提取并锁存,剩余的数据经过内部整形电路放大后通过DOUT继续输送给下一个LED。每经过一颗LED,信号减少24bit。芯片采用自动整形转发技术,使得级联个数不受信号传送的限制,仅仅受限信号传输速度要求。LED灯接收到数据后并不会立即输出对应的RGB,而是要等到DIN脚接收到280us以上的低电平RESET码后,才会将锁存的24bit RGB数据转化成PWM数据脉宽输出到RGB引脚上。
WS2811采用单极性归零码,其时序要求和时序图如下:
注:
- 码元周期最低要求为1.2us。
- 0码、1码的高电平时间需要按照上表的规定范围,0码、1码的低电平时间可以稍微延长一些,但不能超过20us。
数据格式:
调试注意点
整个调试对接过程最需要注意的是时序必须完全按照规格书的要求来,特别是0码和1码的高电平的时间,必须严格符合给定的区间,否则LED灯只会亮白光,RGB无法调整。由于时序在ns秒级,普通MCU如果GPIO电平切换速率不够,将无法对接。如果有条件,最好还是用逻辑分析仪抓取一下输出波形,以确保时序符合要求。下面是一份在海思LiteOS上通过GPIO驱动2811的关键代码,所有时间都是通过逻辑分析仪获取的:整个调试对接过程最需要注意的是时序必须完全按照规格书的要求来,特别是0码和1码的高电平的时间,必须严格符合给定的区间,否则LED灯只会亮白光,RGB无法调整。由于时序在ns秒级,普通MCU如果GPIO电平切换速率不够,将无法对接。如果有条件,最好还是用逻辑分析仪抓取一下输出波形,以确保时序符合要求。下面是一份在海思Hi3518EV300 LiteOS系统上通过GPIO驱动2811的关键代码,所有时间都是通过逻辑分析仪获取的:
代码块 |
---|
static inline hi_void delay(hi_u32 n) { hi_u32 i; for(i = 0; i < n; i++) { __asm__ __volatile__("nop"); } } static inline hi_void write0() { // TOH writel(0xff, GPI016_DATA); // 写一次寄存器时间大概是340ns,这里必须使用最底层的写寄存器方式,以节省写寄存器时间 // TOL writel(0x0, GPI016_DATA); // 写两次寄存器,时间为680ns,满足单极性归零码时序要求 writel(0x0, GPI016_DATA); delay(200); // 码元周期必须大于1.2us,这里通过空指令延时约360ns,这样整个码元周期就是1.38us,满足要求 } static inline hi_void write1() { // T1H writel(0xff, GPI016_DATA); writel(0xff, GPI016_DATA); // T1L writel(0x0, GPI016_DATA); delay(200); } static inline hi_void reset() { // Trst writel(0x0, GPI016_DATA); usleep(300); } |
目录 |
---|