3.9 KiB
3.9 KiB
I2C-Inject — LT8619C 寄存器择机注入工具
更新:2026-09-03。由两部分组成:RP2040 注入器固件(
mcu-rp2040/,刷入 BPI-Pico-RP2040,MicroPython)+ PC 端 GUI(i2c_inject_gui.py/ 打包版I2C-Inject.exe)。可在 LT8619C demo 板的 I2C 总线上安全地在线读写寄存器。 固件细节、刷写步骤与串口命令详见 mcu-rp2040/README.md。
1. 工作原理(为什么不会和 demo 板冲突)
demo 板 MCU 每 ~500ms 轮询一次 LT8619C。注入器的时序:
监听总线边沿 -> 等下一轮活动结束 -> 总线静置 50ms -> 发射
(切 bank -> 写 -> 读回校验), 失败自动重试 3 次 -> 立即释放总线回监听
静置窗口落在两次轮询之间的 ~490ms 空窗内,单次注入序列 <2ms,冲突概率趋近零; 即使撞上也表现为读回不符,自动重试覆盖。板载 LED:常亮 = 监听中,上电快闪 3 次 = 自检。
2. 硬件准备
| RP2040 板 | 接 LT8619C 总线 |
|---|---|
| GP8(物理脚 11) | SDA |
| GP9(物理脚 12) | SCL |
| GND | GND |
- 不接 VCC、不外加干扰:总线由 demo 板自带上拉(先确认上拉为 3.3V)
- 固件分两层:MicroPython 运行时 UF2 + 注入器应用脚本(上传为板上
main.py自启动) ——完整刷写步骤、串口命令表、工作机制见 mcu-rp2040/README.md - 固件内置 viper 编译的总线嗅探(
c [ms]命令,~3MHz 采样),串口回吐边沿数据可离线解码 I2C
3. GUI 使用
双击 I2C-Inject.exe(或 python i2c_inject_gui.py [COMx]):
- 第一排左侧:串口下拉 →"刷新"扫描 → 选中注入器端口 →"连接"(日志出现"已连接")
- 第一排右侧:输入 Bank/寄存器/值(十六进制)→ 写入(自动读回校验)/读取
- 0x606E 快捷块(位交换,语义为 demo 板 LA 实测):
00=关交换;20=镜像 D[7:0](载蓝色分量的组,实测立即生效)40/80=另外两组(demo 板未单独实测,自板点亮时验证)
- 0x606D 快捷块(RGB 整组顺序,蓝+红双色实测=手册 naive 读法):
00 BGR / 03 BRG / 04 GBR / 05 GRB / 06 RBG / 07 RGB- 字母串顺序 = D[23:16]/D[15:8]/D[7:0] 携带的分量;切换实时生效,不影响 HDMI 锁定
- 回显格式:
=正常结果(绿色,含"读回=xx"校验值)、!告警/失败(橙色) - 收尾:把改过的寄存器写回原值(0x606E 原值 00;0x606D 原值 07)
4. 已实测的寄存器事实速查(demo 板)
| 寄存器 | 实测结论 |
|---|---|
| 0x606E | bit5(0x20)=镜像 D[7:0](蓝值组),立即生效、含消隐码;bit7(0x80) 对该组无效;稳态下写入可持续(实测 6.7s+),板子非稳态时 0.3~0.5s 内被刷回 00 → 先投图等稳态再写,写完立即读回确认 |
| 0x606D | 000/001/010=BGR、011=BRG、100=GBR、101=GRB、110=RBG、111=RGB(字母串=D[23:16]/D[15:8]/D[7:0]),切换实时生效;demo 板 init 值 07 |
5. 目录内容
| 文件 | 用途 |
|---|---|
I2C-Inject.exe |
打包好的单文件 PC 端 GUI(需 pyserial,已打包在内) |
i2c_inject_gui.py |
PC 端 GUI 源码(python build_exe.py 重新打包) |
mcu-rp2040/ |
RP2040 总线端:注入器固件脚本 + MicroPython 运行时 UF2 + 刷写说明(README) |
logos/ |
图标源文件与 make_ico_i2c.py(改 logo 后重跑再打包) |
6. 故障排查
- 写入回显
OK 读回=xx但稍后读回变了 → demo 板把它刷回了(见 §4 稳态提醒),先确认 HDMI 已稳定出图 - 读寄存器 NAK/失败 → 检查三根接线与共地;用
s命令看边沿计数是否在增长(增长=监听正常,总线有活动) - 串口列表空白 → 换 USB 口/检查设备管理器(应出现
USB 串行设备,VID_2E8A)