点阵型 LED 控制器
支持的 IC[ RTL8721F ]
简介
点阵型 LED 驱动芯片通常通过同步串行通讯或私有接口协议与主控进行数据交互,主控端需要模拟相应协议完成通讯。相较软件模拟方式,专有硬件 IP 可以在复位域做专门处理,确保即使在显示更新阶段发生异常也不会影响显示效果。
点阵型 LED 控制器是一种支持伪 I2C 协议的 LEDC 驱动模块,具有单向数据传输特性,无需从机应答和地址确认,单次可传输最多 127 字节数据。
特性
双线 I2C 串行接口:SCL 和 SDA
支持起始信号和停止信号生成
支持的传输速率:100Kbps、400Kbps 和 1Mbps
伪 I2C 模式:
最大传输大小:127 字节
仅主机模式
无需 ACK/NACK 信号
电源和复位特性:
在软件复位、看门狗复位和系统复位期间保持工作
框图
点阵型 LED 控制器模块的框图如下所示:
Register Table:寄存器表,存储控制参数与状态信息
ShareBuf:128×8 位共享缓冲区,缓存待传输数据
Trig Reg:触发寄存器,写入特定序列后触发伪 I2C 主机写操作
Pseudo I2C:伪 I2C 控制器,从共享缓冲区读取数据并生成 SCL/SDA 信号
OSC4M:模块工作时钟
功能描述
寄存器保护
模块对时钟分频 LEDC_PRO_R_I2C_CLK_DIV 和数据长度 LEDC_PRO_R_I2C_DATA_NUM 两个关键配置寄存器实施了写保护,防止传输过程中因意外写入而改变通信参数。软件修改受保护寄存器前,需向 LEDC_PRO_SEQUENCE_CHECK1 (寄存器 0x10[31:0]) 写入 0xa5a5a5a5 解除保护,配置完成后再写入 0x00000000 重新锁定。
分频系数设定
在模块初始化时,软件需先对模块执行软件复位(关闭再重新使能模块时钟),随后置位 LEDC_PRO_PSDO_I2C_CTL 寄存器的 LEDC_PRO_BIT_R_PSEDO_I2C_EN (寄存器 0x08[7]) 使能伪 I2C 模式。
使能后,软件需解除寄存器保护,通过 LEDC_PRO_R_I2C_CLK_DIV (寄存器 0x08[5:0]) 设定时钟分频因子,实际分频系数为设定值的两倍,最小有效值为 2,设定完成后重新使能寄存器保护。
时序控制
当软件写入触发序列后,SDA 在 SCL 维持高电平期间被拉低,分频计数器启动,待计满 LEDC_PRO_R_I2C_CLK_DIV x 2 - 1 个时钟周期后,SCL 也被拉低,起始信号生成完毕,硬件开始逐位发送数据。
当 LEDC_PRO_R_I2C_DATA_NUM 指定的全部数据字节传输完毕后,硬件自动进入停止阶段。SCL 先被驱动为高电平,分频计数器继续计数,待计满 LEDC_PRO_R_I2C_CLK_DIV x 2 - 1 个时钟周期后,SDA 也被驱动为高电平,生成停止信号。
传输控制
空闲状态确认
每次发起数据传输前,软件需轮询 LEDC_PRO_PSDO_I2C_CTL 寄存器的 LEDC_PRO_BIT_R_I2C_TX_STATUS (寄存器 0x08[6]),直到该位为 1 时表示伪 I2C 处于空闲状态,方可继续后续操作。若该位为 0 则说明上一次传输尚未完成,软件应持续等待。
清除 RAM 数据
确认模块空闲后,软件需向 LEDC_PRO_LED_PALY_CTL0 寄存器的 LEDC_PRO_BIT_R_LED_BUF_CLEAR (寄存器 0x00[17]) 写入 1,产生一个清除脉冲将 RAM 中的残留数据清零,确保本次写入的数据不受历史内容影响。
写入数据并设定传输长度
软件将要发送的数据写入 LEDC_PRO_LED_RAM 寄存器。数据写入完成后,软件需解除寄存器保护,通过 LEDC_PRO_PSDO_I2C_CTL 寄存器的 LEDC_PRO_R_I2C_DATA_NUM (寄存器 0x08[14:8]) 设定本次传输的总字节数,最大支持 127 字节,设定完成后需重新使能寄存器保护。
触发硬件传输
数据准备就绪后,软件依次向 LEDC_PRO_SEQUENCE_CHECK0 寄存器写入 0x69696969 和 0x96969696,触发硬件从共享缓冲区读取数据并执行伪 I2C 传输。触发成功后, LEDC_PRO_LED_PALY_CTL0 寄存器的 LEDC_PRO_BIT_R_SEQ_PASS_FLAG (寄存器 0x00[20]) 被置为 1,该位在软件读取后自动清除,软件可据此判断本次传输已结束并准备下一次数据写入。
传输完成后,状态机回到空闲状态, LEDC_PRO_PSDO_I2C_CTL 寄存器的 LEDC_PRO_BIT_R_I2C_TX_STATUS 自动恢复为 1。
复位保护
在发生软件复位、看门狗复位和系统复位期间,该模块及其 pad 接口的状态不被清除,不会影响正常显示输出。
当软件需要主动复位模块时,可通过先关闭再重新使能模块时钟来实现。复位操作将清除所有内部寄存器状态和 RAM 数据,因此复位后需重新执行引脚复用配置和模块初始化。
寄存器
Base Address: 0x4080B200
Name |
Address offset |
Access |
Description |
|---|---|---|---|
000h |
R/W |
||
008h |
R/W |
||
00Ch |
R/W |
||
010h |
R/W |
||
080h |
R/W |
REG_LED_PALY_CTL0
Size: 32
Address offset: 000h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:21 |
RSVD |
R |
- |
Reserved |
20 |
R_SEQ_PASS_FLAG |
R |
0 |
|
19:18 |
RSVD |
R |
- |
Reserved |
17 |
R_LED_BUF_CLEAR |
R/W |
0 |
Write 1 generate one pulse. Clear and reset ram data |
16:0 |
RSVD |
R |
- |
Reserved |
REG_PSDO_I2C_CTL
Size: 32
Address offset: 008h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:16 |
RSVD |
R |
- |
Reserved |
15 |
DUMMY |
R/W |
0 |
Dummy |
14:8 |
R_I2C_DATA_NUM |
R/W |
0 |
Psdo i2c data num, unit: byte |
7 |
R_PSEDO_I2C_EN |
R/W |
0 |
Indicate psedo i2c in working, only when this bit=1 can access psedo i2c ram |
6 |
R_I2C_TX_STATUS |
R |
1 |
|
5:0 |
R_I2C_CLK_DIV |
R/W |
0 |
Clock division factor = r_i2c_clk_div * 2, minimum value is 2 |
REG_SEQUENCE_CHECK0
Size: 32
Address offset: 00Ch
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
R_SEQ_CHK0 |
R/W |
0 |
Sequence check, when this field first write 0x69696969, then write 0x96969696, tirgger led/i2c work |
REG_SEQUENCE_CHECK1
Size: 32
Address offset: 010h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
R_SEQ_CHK1 |
R/W |
0 |
Register protect sequence check, when this field = 0xa5a5a5a5, enable access protect register |
REG_LED_RAM
Size: 32
Address offset: 080h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
R_LED_RAM_DATA |
R/W |
0 |
Baseaddr+0x80~0xFF 128bytes |