71 lines
3.9 KiB
Markdown
71 lines
3.9 KiB
Markdown
# 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](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](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 原值 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)
|