Files

3.9 KiB
Raw Permalink Blame History

I2C-Inject — LT8619C 寄存器择机注入工具

更新:2026-09-03。由两部分组成:RP2040 注入器固件mcu-rp2040/,刷入 BPI-Pico-RP2040MicroPython+ PC 端 GUIi2c_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]):

  1. 第一排左侧:串口下拉 →"刷新"扫描 → 选中注入器端口 →"连接"(日志出现"已连接"
  2. 第一排右侧:输入 Bank/寄存器/值(十六进制)→ 写入(自动读回校验)/读取
  3. 0x606E 快捷块(位交换,语义为 demo 板 LA 实测):
    • 00=关交换;20=镜像 D[7:0](载蓝色分量的组,实测立即生效)
    • 40/80=另外两组(demo 板未单独实测,自板点亮时验证)
  4. 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 锁定
  5. 回显格式:= 正常结果(绿色,含"读回=xx"校验值)、! 告警/失败(橙色)
  6. 收尾:把改过的寄存器写回原值(0x606E 原值 000x606D 原值 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