固件 0.1.1-c5:硬重启后自动开机、MQTT 发布死锁、欠压放宽到 −250 mV

- 硬重启等到 PG 后长按电源键 5 s(新状态 hr-boot):电池端上电的小米8
  停在关机态,原来的 power_cycle 等于关机。ACT_KEY_MS_ON 2000 → 5000
  (实测 2 s 松手即掉电)。NO_PG 时不按。
- 修死锁:执行器持 s_mtx 等 esp-mqtt 的 api_lock,esp-mqtt 任务持 api_lock
  分发 DISCONNECTED 时等 s_mtx。热点一断 USB/WiFi 全失联、按键可能松不开。
  执行器现在只往 s_outbox 拷贝,由 t_link 交给 esp-mqtt。
- SR-5 欠压一侧 −100 → −250 mV(T_SAFETY_UNDER_MV),过压仍 +100 mV:
  带屏开机峰值 2.1 A 时实测 −115 mV 被误关。需求 SR-5 / SW-2 / SW-5 / 验收表同步。

板 B 上板:power_cycle → hr-boot → 手机开机,最低 3778 mV / 2.12 A 不再跳闸。

Co-Authored-By: Claude Opus 5.5 <[email protected]>
这个提交包含在:
zhou yang
2026-09-28 01:13:58 +08:00
共同撰写人 Claude Opus 5.5
父节点 afc5e81299
当前提交 1f6862ac38
共修改 10 个文件,包含 211 行新增和 47 行删除
+14 -3
查看文件
@@ -4,7 +4,7 @@
| 序列 | 时序 | 出处 |
|---|---|---|
| 硬重启 | `EFUSE_EN↓` → 等 3~5 s → `EFUSE_EN↑` → 等 **17 ms** → 等 PG 置位 | 设计文档 §7.4 |
| 硬重启 | `EFUSE_EN↓` → 等 3~5 s → `EFUSE_EN↑` → 等 **17 ms** → 等 PG 置位 → 长按电源键 5 s 开机 | 设计文档 §7.4;开机那一步见 `ACT_HR_BOOT_KEY_MS` |
| 按键 | 置位 → 保持 T(100 ms / 2 s / 10 s)→ 清零 | SW-5 / §13.3 |
| EDL | `EDL_EN=1` → `VBUS_EN=1` → 等枚举 → `EDL_EN=0` | SW-6 / §22.4 |
@@ -80,9 +80,19 @@ extern "C" {
会退化成「一律等满 500 ms」,而测试与遥测都看不出区别。 */
#define ACT_HR_PG_POLL_MS 5
/* SW-5 的三档按键时长。 */
/* 硬重启的最后一步:等到 PG 之后长按电源键开机。电池端上电的手机**停在关机态**
(小米8 实测:重新上电后只漏 ~2 mA,不按键就一直关着),不按这一下的硬重启
等于「关机」。时长就是 SW-5 的开机档。
⚠️ 只在**等到 PG** 时按:NO_PG 多半是这一片 PCA9555 读不到,键也在同一片上,
去按只会让这一路卡在 CLEANUP 里重试。 */
#define ACT_HR_BOOT_KEY_MS ACT_KEY_MS_ON
/* SW-5 的三档按键时长。
⚠️ 开机那一档 2026-09-28 小米8 实测:按 2 s 时 PMIC 起来了(415 mA),一松手 3 s 内
掉回 ~1 mA —— SoC 还没接住 PS_HOLD。按 5 s 松手后稳在 ~210 mA、约 45 s 进系统。
上限是 ACT_KEY_MS_FORCE:按到 10 s 就成了强制重启。 */
#define ACT_KEY_MS_TAP 100 /* 短按:唤醒 / 息屏 */
#define ACT_KEY_MS_ON 2000 /* 长按:开机 */
#define ACT_KEY_MS_ON 5000 /* 长按:开机 */
#define ACT_KEY_MS_FORCE 10000 /* 长按:强制重启(两级重启的「一级(软)」) */
/* 按键时长上限。上层传进来一个 10 分钟,等于把电源键按死 ——
@@ -138,6 +148,7 @@ typedef enum {
ACT_ST_HR_OFF, /* `EFUSE_EN` 已拉低,等 3~5 s(放电由硬件自己做) */
ACT_ST_HR_RAMP, /* `EFUSE_EN` 已拉高,等 17 ms 走完 tON + 斜坡 */
ACT_ST_HR_PG, /* 等 PG 置位 */
ACT_ST_HR_BOOT, /* PG 到了,电源键按着,保持 ACT_HR_BOOT_KEY_MS 开机 */
ACT_ST_KEY_HOLD, /* 键已按下,保持 T */
ACT_ST_EDL_SHORT, /* `EDL_EN=1`,等短接建立 */
ACT_ST_EDL_ENUM, /* `VBUS_EN=1`,等枚举 */