点阵型 LED 控制器

支持的 IC[ RTL8721F ]

简介

点阵型 LED 驱动芯片通常通过同步串行通讯或私有接口协议与主控进行数据交互,主控端需要模拟相应协议完成通讯。相较软件模拟方式,专有硬件 IP 可以在复位域做专门处理,确保即使在显示更新阶段发生异常也不会影响显示效果。

点阵型 LED 控制器是一种支持伪 I2C 协议的 LEDC 驱动模块,具有单向数据传输特性,无需从机应答和地址确认,单次可传输最多 127 字节数据。

特性

  • 双线 I2C 串行接口:SCL 和 SDA

  • 支持起始信号和停止信号生成

  • 支持的传输速率:100Kbps、400Kbps 和 1Mbps

  • 伪 I2C 模式:

    • 最大传输大小:127 字节

    • 仅主机模式

    • 无需 ACK/NACK 信号

  • 电源和复位特性:

    • 在软件复位、看门狗复位和系统复位期间保持工作

框图

点阵型 LED 控制器模块的框图如下所示:

../../_images/ledc_pro_block_diagram.svg
  • 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 寄存器写入 0x696969690x96969696,触发硬件从共享缓冲区读取数据并执行伪 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 数据,因此复位后需重新执行引脚复用配置和模块初始化。

寄存器

RTL8721F:

Base Address: 0x4080B200

Name

Address offset

Access

Description

REG_LED_PALY_CTL0

000h

R/W

REG_PSDO_I2C_CTL

008h

R/W

REG_SEQUENCE_CHECK0

00Ch

R/W

REG_SEQUENCE_CHECK1

010h

R/W

REG_LED_RAM

080h

R/W

REG_LED_PALY_CTL0

  • Size: 32

  • Address offset: 000h

  • Read/write access: R/W

31:21 RSVD 20 R_SEQ_PASS_FLAG 19:18 RSVD 17 R_LED_BUF_CLEAR 16:0 RSVD

Bit

Symbol

Access

INI

Description

31:21

RSVD

R

-

Reserved

20

R_SEQ_PASS_FLAG

R

0

  • 1: indicate 0x0c[31:0] sequence check pass, clear 0 when read

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

31:16 RSVD 15 DUMMY 14:8 R_I2C_DATA_NUM 7 R_PSEDO_I2C_EN 6 R_I2C_TX_STATUS 5:0 R_I2C_CLK_DIV

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

  • 1: psdo i2c is idle, 0: psdo i2c is working

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

31:0 R_SEQ_CHK0

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

31:0 R_SEQ_CHK1

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

31:0 R_LED_RAM_DATA

Bit

Symbol

Access

INI

Description

31:0

R_LED_RAM_DATA

R/W

0

Baseaddr+0x80~0xFF 128bytes