固件 0.1.1-c3:I²C 不应答不再被报成「没初始化 / 忙」(关电回 busy 的根因)

- 根因:IDF 5.4 的 i2c_master_transmit / receive / transmit_receive 在从机 NACK / SCL 超时时返回
  ESP_ERR_INVALID_STATE,HAL 照翻成 HAL_ERR_STATE(= 没 init);命令层 from_hal 又把 STATE 当成
  「执行器忙」⇒ PCA9555 不应答时 power off 回 busy(eFuse 其实已关、意图已清),I2C_LOST 错误码是 5
- hal_i2c_esp.c:传输函数用 map_xfer_err(INVALID_STATE → NAK);总线没建起来仍单独报 STATE
- cmd_exec.c:新增 from_bus,set_voltage / vbus / power 的器件失败一律 io;from_hal 只留给执行器
- sim:sim_i2c_inject_err_ch() 可指定注入的错误码;test_cmd 加 STATE 注入 ⇒ 必须 io 不是 busy
  (改回 from_hal 时这段确实红)。26 个 ctest 全绿
- 板 B(台架镜像,CH1 强制在位,未提交):power off 回 io、CH1 关掉;I2C_LOST 错误码 5 → 2。现跑 0.1.1-c3

Co-Authored-By: Claude Opus 5.5 <[email protected]>
这个提交包含在:
zhou yang
2026-09-27 14:45:38 +08:00
共同撰写人 Claude Opus 5.5
父节点 7bf30e3c38
当前提交 284571de20
共修改 8 个文件,包含 76 行新增和 13 行删除
+5
查看文件
@@ -1,5 +1,10 @@
# 进度与交接
## ⭐ 2026-09-27 夜:固件 0.1.1-c3 —— I²C 不应答不再被报成「没初始化 / 忙」
- IDF 5.4 的 NACK 返回 `ESP_ERR_INVALID_STATE`,HAL 照翻成 STATE ⇒ 关电在 PCA9555 不应答时回 `busy`(其实已经关了)。
HAL 改翻成 NAK;命令层 I²C 路径失败一律 `io`。板 B 实测 `power off` 回 io、I2C_LOST 错误码 5 → 2。详见 `firmware/HANDOFF.md`。
## ⭐ 2026-09-27 夜:固件 0.1.0-c3「重启不断电」,已上板
- OTA 换固件 / 超时回滚锁住 `EFUSE_EN`、新固件接管,手机不断电;崩溃 / 看门狗 / 上电仍全关。**SR-6 已改写**(需求 §10.9「重启不断电」)。