diff --git a/I2C-Inject/README.md b/I2C-Inject/README.md index 46d422f..7fd8c2a 100644 --- a/I2C-Inject/README.md +++ b/I2C-Inject/README.md @@ -1,8 +1,9 @@ # I2C-Inject — LT8619C 寄存器择机注入工具 -> 更新:2026-09-03。由两部分组成:**RP2040 注入器固件**(`rp2040_inject.py`,刷入 +> 更新: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)。 --- @@ -27,9 +28,8 @@ demo 板 MCU 每 ~500ms 轮询一次 LT8619C。注入器的时序: | GND | GND | - **不接 VCC、不外加干扰**:总线由 demo 板自带上拉(先确认上拉为 3.3V) -- 固件刷写:板子插 USB → 已有 MicroPython 则直接 - `py -m pip install mpremote && py -m mpremote connect COMx cp rp2040_inject.py :main.py` - → 复位后自启动(刷新 MicroPython UF2 会清掉 main.py,重传一次即可) +- 固件分两层:MicroPython 运行时 UF2 + 注入器应用脚本(上传为板上 `main.py` 自启动) + ——完整刷写步骤、串口命令表、工作机制见 [mcu-rp2040/README.md](mcu-rp2040/README.md) - 固件内置 viper 编译的总线嗅探(`c [ms]` 命令,~3MHz 采样),串口回吐边沿数据可离线解码 I2C ## 3. GUI 使用 @@ -60,7 +60,7 @@ demo 板 MCU 每 ~500ms 轮询一次 LT8619C。注入器的时序: |---|---| | `I2C-Inject.exe` | 打包好的单文件 PC 端 GUI(需 pyserial,已打包在内) | | `i2c_inject_gui.py` | PC 端 GUI 源码(`python build_exe.py` 重新打包) | -| `rp2040_inject.py` | RP2040 注入器固件(MicroPython,刷成 main.py 自启动) | +| `mcu-rp2040/` | RP2040 总线端:注入器固件脚本 + MicroPython 运行时 UF2 + 刷写说明(README) | | `logos/` | 图标源文件与 `make_ico_i2c.py`(改 logo 后重跑再打包) | ## 6. 故障排查 diff --git a/I2C-Inject/i2c_inject_gui.py b/I2C-Inject/i2c_inject_gui.py index 6d65b74..0e6675d 100644 --- a/I2C-Inject/i2c_inject_gui.py +++ b/I2C-Inject/i2c_inject_gui.py @@ -3,7 +3,7 @@ """ I2C-Inject — LT8619C 寄存器择机注入工具 ================================================ -配合 RP2040 注入器固件(tools/rp2040_inject.py, 刷入 BPI-Pico-RP2040)使用, +配合 RP2040 注入器固件(mcu-rp2040/rp2040_inject.py, 刷入 BPI-Pico-RP2040)使用, 在 LT8619C demo 板的 I2C 总线上择机读写寄存器。 特性: diff --git a/I2C-Inject/mcu-rp2040/README.md b/I2C-Inject/mcu-rp2040/README.md new file mode 100644 index 0000000..809ce5c --- /dev/null +++ b/I2C-Inject/mcu-rp2040/README.md @@ -0,0 +1,79 @@ +# mcu-rp2040 — RP2040 注入器固件 + +本目录存放 **I2C-Inject 的总线端**:跑在 BPI-Pico-RP2040(RP2040 + MicroPython)上的 +注入器应用脚本,以及配套的 MicroPython 运行时 UF2。 + +> PC 端 GUI 见上级目录 [../README.md](../README.md)。两者通过 USB 虚拟串口通信。 + +## 1. 文件说明 + +| 文件 | 用途 | +|---|---| +| `rp2040_inject.py` | 注入器应用(MicroPython 脚本)。上传为板上 `main.py`,上电自启动 | +| `RPI_PICO-20260824-v1.29.0.uf2` | MicroPython 运行时(标准 RP2040 构建,v1.29.0,2026-08-24)。首次使用或升级时刷 | + +⚠️ UF2 必须是 **RPI_PICO** 标准构建(RP2040 芯片);`PICO_W`(带 WiFi 芯片)与 +`RPI_PICO2`(RP2350 芯片)变体不可用。 + +## 2. 硬件与接线 + +| BPI-Pico-RP2040 | 接 LT8619C 总线 | 说明 | +|---|---|---| +| GP8(物理脚 11) | SDA | 平时高阻输入只听,注入时才驱动 | +| GP9(物理脚 12) | SCL | 同上 | +| GND | GND | 必须共地 | + +- **不接 VCC/3V3**(各喂各的电)、**不外加任何上拉电阻**(总线用 demo 板自带上拉) +- 动手前确认总线上拉电平为 3.3V(RP2040 不耐 5V) + +## 3. 刷写步骤 + +```text +① 刷 MicroPython 运行时(首次/升级): + 按住板上 BOOTSEL 键插入 USB → 出现 RPI-RP2 U 盘 + → 把 RPI_PICO-20260824-v1.29.0.uf2 拖入 → 自动重启 + ⚠ 刷 UF2 可能重建板载文件系统, 之后需重传 ② 的 main.py + +② 上传注入器应用(每次刷 UF2 后, 或应用更新后): + py -m pip install mpremote + py -m mpremote connect COMx cp rp2040_inject.py :main.py + py -m mpremote connect COMx reset # 复位, main.py 自启动 + +③ 验证: 串口终端(任意波特率)应看到 + LT8619C 注入器就绪 GP8=SDA GP9=SCL 100kHz addr 0x32 +``` + +**LED 状态**:上电快闪 3 次 = 自检;**常亮 = 总线监听中**。 + +## 4. 串口命令(USB CDC,十六进制参数,一行一令) + +| 命令 | 功能 | 回显示例 | +|---|---|---| +| `w ` | 择机写 + 读回校验 | `= w 60 6E 80 : OK 读回=80` | +| `r ` | 择机读 | `= r 60 6E : OK 00` | +| `s` | 总线边沿计数(接好线后在涨 = 监听正常) | `= 边沿计数 2958` | +| `c [ms]` | 嗅探捕获(默认 700ms),输出边沿时间戳供离线解码 I2C | `= capture 1207 edges / 700 ms` + `C` 行 | +| `?` | 帮助 | | + +- 回显行首:`=` 正常结果 / `!` 告警(校验不符、总线错误、静置超时) +- 读回不符(被 demo 板 MCU 插队)会自动整组重试,最多 3 次 + +## 5. 工作机制(择机注入) + +``` +监听 SDA/SCL 边沿(双沿中断) → 等下一轮总线活动出现 +→ 活动结束后总线静置满 50ms → 立即发射: + START→[bank 写]→START→[reg/数据 写]→RESTART→[读回]→STOP +→ 成功/失败(重试) → 立即释放总线回监听 +``` + +- demo 板 MCU 以 ~500ms 周期轮询,注入序列 <2ms,落在周期间空窗内冲突概率趋近零 +- 嗅探捕获采用 viper 裸指针读 GPIO(~0.27µs/次 ≈ 3MHz 采样),字节码路径仅 ~12µs/次(会混叠)作兜底 + +## 6. 已知实测行为(demo 板) + +- 0x606E:bit5(0x20) 镜像 D[7:0](蓝值组)立即生效;板子非稳态时 0.3~0.5s 内会被其固件刷回 0x00 + → **先投图等稳态再写,写完立即读回确认** +- 0x606D:000/001/010=BGR、011=BRG、100=GBR、101=GRB、110=RBG、111=RGB(字母串= + D[23:16]/D[15:8]/D[7:0] 分量顺序),切换实时生效,不影响 HDMI 锁定 +- 过程数据与完整规程见上游主仓库 `doc/architecture/rgb_bit_swap_test.md` diff --git a/I2C-Inject/mcu-rp2040/RPI_PICO-20260824-v1.29.0.uf2 b/I2C-Inject/mcu-rp2040/RPI_PICO-20260824-v1.29.0.uf2 new file mode 100644 index 0000000..efd2ef7 Binary files /dev/null and b/I2C-Inject/mcu-rp2040/RPI_PICO-20260824-v1.29.0.uf2 differ diff --git a/I2C-Inject/rp2040_inject.py b/I2C-Inject/mcu-rp2040/rp2040_inject.py similarity index 100% rename from I2C-Inject/rp2040_inject.py rename to I2C-Inject/mcu-rp2040/rp2040_inject.py