固件 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 行删除
+6 -4
查看文件
@@ -69,13 +69,14 @@ Rinj 107k→150k,输出上限 4.22V→**4.01V**(§4.3 / §5)。P2-CHANNEL
| 9 | **侧键接 3 个**(PWR / VOL+ / VOL−)×5 台 = 15 路 MOS | §13.3 |
| 10 | **尾插装原厂小板**(不自制 BM24 转接板) | §13.5 方案 A |
| 11 | **USB 仅接电脑 / Hub(恒 5V),不接快充充电器** | §15.1 |
| 12 | USB 三条对策全做:软件关充电 + VBUS 负载开关 + 12V 母线泄放 | §15.2 |
| 12 | USB 三条对策全做:软件关充电 + VBUS 负载开关 + 12V 母线泄放。**例外:刷机模式**(固件 0.1.5,2026-09-28)—— 按路限时、最多 2 路,允许充电不断 USB;靠 eFuse 反向阻断兜住反灌,见需求 SR-10 | §15.2 |
| 13 | 15 路按键经 **74HC595 ×3**(24 位链,含 5 路 EDL_EN + HUB_RST)驱动,EN / VBUS_EN 保持 GPIO 直连。**2026-09-06 起三片 595 + 15 颗按键 MOS 整窝在载板**(§26.23) | §8.1 / §26.23 |
| 14 | **侧键接触改中框式焊盘,顶针取消**(2026-09-06):载板顶层 4ר1.5 裸铜盘(ENIG、钢网不开口),螺丝把主板压在载板上、间隙 **1.0 mm**,主板自带弹片直压铜盘。定位孔 **H5 不打**(每台 6 颗螺钉)。 | §22.3e |
| 15 | **走线方向规则(2026-09-07):顶层水平、底层纵向**。两块板共用的栅格布线器按此计价(软规则,逆向走法 2 倍代价) | §10.1b |
| 16 | **风扇改 FAN-R2(2026-09-07)**:五个 3 针风扇 → **两只 4 线 PWM 风扇**(山洋 9G0612P4S001,一进一出),高边 P-MOS 默认关电 + 独立 PWM 开漏 + **两路独立测速**。连带把 12V 预算从 8.3 A 顶到 **≈10 A**,`IO5=FAN_EN` / `IO4=FAN_TACH_OUT` | §22.6 |
| 16 | **风扇改 FAN-R2(2026-09-07)**:五个 3 针风扇 → **两只 4 线 PWM 风扇**(~~山洋 9G0612P4S001~~ ⇒ **2026-09-13 改 60×60×10 薄风扇**(广诚散热科技、小 4PIN = PC 标准 4 线口、孔距 50.2,配机箱自攻螺丝;**MPN / 电压 / 电流 / PWM·TACH 规格待补**),一进一出;为缩短 R2 机箱,见 R2 §3.3),高边 P-MOS 默认关电 + 独立 PWM 开漏 + **两路独立测速**。连带把 12V 预算从 8.3 A 顶到 **≈10 A**,`IO5=FAN_EN` / `IO4=FAN_TACH_OUT` | §22.6 |
| 18 | ~~**U32 的 `PRT_SWP1~5` 各 100k 下拉**:`R900~R904`~~ **已被 #19 取代(同日)** —— 五颗里有三颗(CH1/CH2/CH3)在载板上**布不出线**,见 §21.6a 末尾 | §21.6a |
| 19 | **U32 改 `CFG_SEL[2:0]=110`(2026-09-07,取代 #18)**:Table 5-2 的「Internal Default Configuration • **Strap Options are Disabled**」——十个 strap 脚根本不采样,`R900~R904` 一颗不装。`CFG_SEL2`(13) 是纯输入(`I`),由硬接 GND 改**硬接 `+3V3_HUB`**(不加电阻);`CFG_SEL1` 的 `R712` 由下拉改上拉;`CFG_SEL0` 的 `R711` 不动。**必须连带删掉 `R714`/`R715`**(否则口 6/7 变幽灵口)。BOM 净 −7 颗 | §21.6b |
| 19a | **R2 底板(刀片式)2026-09-10 改回 `CFG_SEL=000`**:`PRT_SWP1~3` 各 100k 上拉 = 口 1~3 D+/D− 片内对调(底板上北去三对不再 U 形掉头),`PRT_SWP4~6` 各 100k 下拉;`CFG_SEL2` 接 GND、`R712` 改下拉。**只改底板,R1 载板仍按 #19**。理由与接法见 `.claude/r2/a4_hub.py` 文件头 | R2 |
| 17 | **C737 换固态钽(2026-09-07)**:AMS1117-3.3 的 22 µF 输出电容按手册 §Stability 用 **KEMET T491A226K010AT**(C116575),不再用陶瓷。**1 脚是正极** | §26.25 |
| 20 | **12V 输入座改圆形 DC 电源座(2026-09-08)**:`J1` 由 XT30PW-M 换成 **`DC-005-5.5*2.5`**(C9900017043,封装 `DC-IN-TH_DC-005-2`)。理由是成品 12V/10A 适配器出厂就是 5.5×2.5 圆头,装配上顺手。⚠️ **代价是插座超额定**:家族额定 2~5 A、本板最坏 9.99 A,发热在**插头内芯与插座弹片的接触面**,板上加铜救不了 —— **用户已明确接受、不降载**。板端唯一缓解:`pin2`/`pin3` 两个负极触点**都接地并联**,接触电阻减半。引脚:1=中心正极 / 2=负极静触点 / 3=负极动触点(2-3 无插头时短接)。⚠️ 装配前用万用表核:无插头时 2-3 通、1 对 2/3 断 | §1 / §22.6 |
@@ -1163,7 +1164,7 @@ GND 靠地平面 + 散热盘阵列一个就够。出线宽度 1.0 mm ——
**不阻塞打样,但要定**
- [ ] 主板机械固定方式(建议连中框,见 §13.6)。
- [ ] `input_suspend` 节点在目标 ROM 上的实际路径(§15.2 对策 1)。
- [x] ~~`input_suspend` 节点在目标 ROM 上的实际路径(§15.2 对策 1)~~ → **2026-09-28 小米8(MIUI / Android 10)实测:`/sys/class/power_supply/battery/input_suspend`**,写 1 后 `status=Discharging`、`usb/online=0`,VBUS 常开不再顶高母线。由 Magisk 模块 `phone/magisk-phonerail/`(service.sh,日志 `/data/local/tmp/phonerail_chg.log`)开机自动写入 = 需求 SW-7。
---
@@ -2593,6 +2594,7 @@ Table 7.1:06h Config Data Byte 1 内部默认 ROM = 9Bh = 1001_1011b
| **R708** | **12.0 kΩ ±1%**(C25752) | `RBIAS`(63) → GND | Table 5.1:「A 12.0kΩ (+/-1%) resistor…to set the transceiver's internal bias」。**这个值不能动** |
| **Y1** | **24 MHz ±10ppm, CL=9pF**(C2762192) | `XTAL1`(61) / `XTAL2`(60) | §9.1:「Parallel Resonant, Fundamental Mode, **24 MHz ±350ppm**」。选 ±10ppm 余量很大 |
| **C740 / C741** | **12 pF C0G**(C1547)×2 | 晶振两端 → GND | 按 Figure 9.2:`CL = (C1+CS1)(C2+CS2)/(C1+CS1+C2+CS2)`,取杂散 ~3pF、CL=9pF → C1=C2≈12pF |
| **1 MΩ 跨接**(⚠ 2026-09-10 补,R1 起就漏了)| **1 MΩ 0402**(`0402WGF1004TCE` / C26083)| `XTAL1`(61) ↔ `XTAL2`(60) | USB2517 Hardware Design Checklist p9 原文:「A 1 MΩ resistor connected across XTAL1 and XTAL2 is **required**. Failure to place this resistor will result in unstable crystal operation.」数据手册 p52 Figure 9-1 也画着 1Meg。R2 底板 = `R723`;**R1 载板待补**(用户 2026-09-10 定:两块都补) |
| **C742 / C743** | **1 µF 0402**(C52923)×2 | `VDD18`(25)、`VDD18PLL`(62) → GND | Table 5.1 两处都写「must have a **1.0µF (or greater) ±20% (ESR <0.1Ω)** capacitor to VSS」 |
| **R709 / R710** | 100 kΩ / 100 kΩ | 上游 VBUS → 分压 → `VBUS_DET`(44) | §7.1.2 + Table 5.1:「When designing a **detachable** hub, this pin must be connected to the VBUS power pin of the USB port that is upstream」。我们的上游是可插拔的 USB-C,**属于 detachable**,所以要真接、不能拉到 3.3V。该脚是 3.3V 逻辑,5V 必须分压 |
| **R711~R713** | 10 kΩ ×3 | `CFG_SEL[2:0]` → GND | §21.3 |
@@ -3343,7 +3345,7 @@ U33: QA=EDL_EN1 QB=EDL_EN2 QC=EDL_EN3 QD=EDL_EN4 QE=EDL_EN5 QF/QG/QH 备用
| 项 | 现行 |
|---|---|
| 风扇 | **山洋 SANYO DENKI 9G0612P4S001 ×2**(`C2920592`),60×60×25,12V 四线 PWM |
| 风扇 | ~~山洋 SANYO DENKI 9G0612P4S001 ×2(`C2920592`),60×60×25~~ ⇒ **2026-09-13 改:60×60×10 薄风扇 ×2**(广诚散热科技,小 4PIN / PC 4 线:1 GND、2 +12V、3 TACH、4 PWM —— 与 J26/J27 针序一致;孔距 50.2 / 孔 Ø4.4,配机箱自攻螺丝)。⚠ **额定电压、电流、风量、静压、PWM/TACH 规格均未取得**,12 V 预算里的风扇电流沿用旧值、待核 |
| 布置 | **一进一出**:J26 = 进风、J27 = 排风,分列左右两侧;原顶部排风孔取消 |
| 额定 | 100% PWM 时每只 0.67 A / 8.04 W、11000 RPM;**0% PWM 仍转 3300 RPM**、每只 0.07 A |
| 供电 | 高边 P-MOS **默认关电**:`+12V --Q7(AO3401A)--> FAN_12V_SW` |