固件 0.1.5~0.1.13-c5:刷机模式、多组 WiFi、热插拔初始化、总线锁误判、硬重启断 VBUS

- 0.1.5/0.1.6:刷机模式(flash_mode,最多 2 路,60 分钟可加钟)——窗口内顶高按 4450 mV 绝对值判、不断 VBUS
- 0.1.7/0.1.8:反灌断 VBUS 阈值放宽到 -300 mA(adb reboot bootloader 过渡实测 -208 mA)
- 0.1.9:WiFi 最多存 4 组,连不上轮换;NVS v1 自动迁移并双写(OTA 回滚仍能上网)
- 0.1.10:热插拔进来的刀片重新初始化 PCA9555 + INA226(否则 VBUS 常开、电流恒读 0)
- 0.1.11:i2cbus 嵌套检测改看本任务持锁(原全局标志让 key 随机回 busy、vbus 随机回 io)
- 0.1.12:硬重启先断 VBUS,开机校验通过 60 s 后再接回(否则假重启 / 误判没开机 / 进关机充电)
- 0.1.13:这一路被安全判据断电时一并退出刷机模式(事件 21 arg 254)

26 ctest 全绿;新增用例均先在旧代码上确认变红。板 B 已 OTA 到 0.1.13-c5 并实测。

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
这个提交包含在:
zhou yang
2026-09-29 08:16:21 +08:00
共同撰写人 Claude Opus 5.5
父节点 385d2f9c47
当前提交 9fb5bba367
共修改 35 个文件,包含 5120 行新增和 3675 行删除
+13
查看文件
@@ -135,6 +135,13 @@ extern "C" {
/* CLEANUP 重试间隔,以及空闲时建议任务睡多久(A12 会换成「带超时地等队列」)。 */
#define ACT_CLEANUP_RETRY_MS 5
/* 0.1.11:硬重启开始时断掉的 VBUS,开机校验通过后**再等这么久**才接回(执行器此时已空闲,
不挡别的命令)。校验通过时手机才起来几秒,还在 bootloader / 内核早期 —— 关充电的内核补丁
没生效,这时接回 USB,充电器立刻把节点顶到 4.4 V、SW-8 当场断 VBUS(2026-09-28 板 B
实测:硬重启后 13 s「顶高断 VBUS」4394 mV)。60 s 时 Android 内核早已 probe 完充电驱动。
没刷补丁的手机接回后照样会被 SW-8 断掉 —— 那是对的。 */
#define ACT_HR_VBUS_BACK_MS 60000
#define ACT_IDLE_WAIT_MS 100
/* ---- 按键:逻辑键位,不是器件上的位号 -----------------------------------
@@ -235,6 +242,12 @@ hal_err_t t_actuator_edl(int rail);
或者再开一次都是自作主张;断电是 A10 的判据和上位机命令的事。 */
void t_actuator_abort(int rail);
/* 取消「过一会儿把 VBUS 接回去」(ACT_HR_VBUS_BACK_MS)。有人手动动了这一路的
VBUS / 电(`vbus` / `power` 命令)就该调:人的意图优先,别 60 s 后又被改回去。
硬重启 / EDL / abort 自己会取消。 */
void t_actuator_cancel_vbus_back(int rail);
bool t_actuator_vbus_back_pending(int rail);
/* 推一步。返回**下次最晚多久再来**(ms):五路里最近的那个截止时刻。
全空闲返回 ACT_IDLE_WAIT_MS。醒早了没关系 —— 每个状态都是拿绝对时刻算的,
早来就再返回一个剩余时间。(ESP-IDF 默认 `CONFIG_FREERTOS_HZ=100`,