- 根因: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]>
24 行
681 B
C
24 行
681 B
C
/* PhoneRail 固件公共头 —— 与硬件无关,宿主机与 ESP32-S3 上都编得过。 */
|
|
#ifndef PHONERAIL_H
|
|
#define PHONERAIL_H
|
|
|
|
/* 固件版本。规则:<主>.<次>.<修订>-<最后完成的任务包> */
|
|
#define PHONERAIL_FW_VERSION "0.1.1-c3"
|
|
|
|
/* 通道数。五路直供,见设计文档 §2。 */
|
|
#define PHONERAIL_RAIL_COUNT 5
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* 返回 PHONERAIL_FW_VERSION。存在的意义是让宿主机测试有一个真的会被链接进去的
|
|
符号 —— 骨架期用来证明「同一份 main/ 源码两个目标都编得过」。 */
|
|
const char *phonerail_version(void);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* PHONERAIL_H */
|