E-31回归留档:产品固件台架验证PASS(@test闭环+既有卷resume+配置保留+全片回读一致)
This commit is contained in:
@@ -142,7 +142,7 @@ E-60"write_enable WRTC2 与手册矛盾"经三方复核(手册表头 D7~D0 顺
|
||||
- **触发**:resume 扫描(大量页读)中**任何一次**瞬态读失败——ECC glitch / SPI 瞬断 / WIP 轮询超时(2026-09-20 台架瞬态读异常,其低 VDD 归因与"混合页"解读后续均被证伪——见 GD5F Trap 05;曾为它引入的 2ms settle 已于 2026-09-21 移除,就绪判定回归 WIP 轮询)
|
||||
- **影响**:全部逻辑→物理映射静默丢弃 → FatFs 探针判卷无效 → **整卷重格式化**(2026-09-20 `.fschk` 重格式化循环为同族事故)→ 全部用户数据丢失;仅一行 info 级日志。dhara 本可区分 `DHARA_E_TOO_BAD`(真空白芯片,正当 fresh)与 `DHARA_E_ECC`/`BAD_BLOCK`/`CORRUPT_MAP`(真实完整性故障)——glue 层丢弃了全部区分信息
|
||||
- **修复方向**:按 `err` 分类——仅 `DHARA_E_TOO_BAD`/无 checkpoint 判 fresh;其余错误**返回失败给 mount 层**,由自检上报、禁止静默 `dhara_map_clear`(重格式化须显式确认/自愈策略明确)
|
||||
- **已修复(2026-09-21,commit da1a6e8,第一档 #2)**:① `Lib/dhara/journal.c` 错误源治理——`find_checkblock`/`find_root` 不再把扫描中的读失败覆盖为 `DHARA_E_TOO_BAD`(扫描出现过读失败 → 上报首个 I/O 错误如 ECC;仅扫描全程 I/O 干净且无 checkpoint 才报 `TOO_BAD`);`read_checkpage`/`find_root` 的"读成功但 checkpoint magic/epoch 不符"改报 `DHARA_E_CORRUPT_MAP`(该点之前 checkpoint 环的存在性已被证明,"空白卷"不成立)→ resume 任何 -1 返回值都携带可分类的真实错误码 ② `nand_ftl.c` `disk_initialize` 分类:仅 `err == DHARA_E_TOO_BAD`(真空白卷)走 fresh(journal 已被失败 resume 复位为空态);其余失败 `return STA_NOINIT` 给 mount 层——禁止静默清 map,卷原样保留 → `f_mount` 失败(FR_NOT_READY)→ defaultTask 自检 `filesystem fault` ③ `freertos.c` 明确自愈策略:原启动块重构为 `storage_bring_up()`(挂载+空卷建卷+两击探针+自愈重格式化+日志挂载+配置加载+就绪屏障,均幂等);启动期失败后主循环每 2s 重试(`STORAGE_BRINGUP_RETRIES=3`),成功即补跑"存储就绪"序列(瞬态毛刺数秒内免重启恢复);耗尽重试维持无存储降级态(自检已上报、卷保留、不重格式化,等下次上电重新 resume)。构建 0 错误 0 警告;残余特性说明见下条
|
||||
- **已修复(2026-09-21,commit da1a6e8,第一档 #2)**:① `Lib/dhara/journal.c` 错误源治理——`find_checkblock`/`find_root` 不再把扫描中的读失败覆盖为 `DHARA_E_TOO_BAD`(扫描出现过读失败 → 上报首个 I/O 错误如 ECC;仅扫描全程 I/O 干净且无 checkpoint 才报 `TOO_BAD`);`read_checkpage`/`find_root` 的"读成功但 checkpoint magic/epoch 不符"改报 `DHARA_E_CORRUPT_MAP`(该点之前 checkpoint 环的存在性已被证明,"空白卷"不成立)→ resume 任何 -1 返回值都携带可分类的真实错误码 ② `nand_ftl.c` `disk_initialize` 分类:仅 `err == DHARA_E_TOO_BAD`(真空白卷)走 fresh(journal 已被失败 resume 复位为空态);其余失败 `return STA_NOINIT` 给 mount 层——禁止静默清 map,卷原样保留 → `f_mount` 失败(FR_NOT_READY)→ defaultTask 自检 `filesystem fault` ③ `freertos.c` 明确自愈策略:原启动块重构为 `storage_bring_up()`(挂载+空卷建卷+两击探针+自愈重格式化+日志挂载+配置加载+就绪屏障,均幂等);启动期失败后主循环每 2s 重试(`STORAGE_BRINGUP_RETRIES=3`),成功即补跑"存储就绪"序列(瞬态毛刺数秒内免重启恢复);耗尽重试维持无存储降级态(自检已上报、卷保留、不重格式化,等下次上电重新 resume)。构建 0 错误 0 警告;产品固件台架回归 PASS(2026-09-21 19:19,commit da1a6e8 构建:`@test` 闭环 Required 全中/Forbidden 零命中,`Map resumed: 2441/96064 sectors used` 既有卷 resume 成功、`FATFS mounted`、`[CFG] load: OK (523B)` 用户配置保留、`[FTP] waiting for connection` 屏障链通、ST-LINK 全片回读 No difference);残余特性说明见下条
|
||||
- **残余特性(修复范围外,留档)**:`find_checkblock` 首扫窗口 = 块 0 起至多 `DHARA_MAX_RETRIES`(8) 块——环已回卷且回卷后 journal 尚未写满一个 checkpoint 周期(<32 页/64KB)即掉电的窄窗口内,checkpoint 均不在块 0–7 → 扫描 I/O 干净但找不到 checkpoint → 仍判 `TOO_BAD` fresh(与修复前行为一致,非瞬态读失败触发);根治需扩大首扫窗口/环定位,属独立设计项(与 E-10/E-53 驱动错误通道统一一并评估)
|
||||
|
||||
### 3.2 P1(22 项)
|
||||
@@ -523,4 +523,4 @@ E-60"write_enable WRTC2 与手册矛盾"经三方复核(手册表头 D7~D0 顺
|
||||
|
||||
---
|
||||
|
||||
*报告完。59 项发现全部带 file:line 落点;P0/P1 核心机制经父审计组逐行复核(含 `docs/芯片手册/SD2506API-G.md` L392-398/L537/§4.8 原文核对与 `SD2506_Trap_Records.md` 硬件观测交叉验证)。2026-09-21 复核修订:E-32 由 P0 降 P2(充电器 P0 链被"出厂 82H"证伪)、E-39 机制改写(ARST 在 CTR3、驱动从未写过 CTR3)、E-60"write_enable WRTC2 与手册矛盾"经手册表头位序 + DFRobot GravityRtc 官方库/社区代码 + 实测三方复核证伪(0x84 本已含 D2=WRTC2,代码与手册 L392 一致)移除,见 §7-19;18H 寄存器事实经手册 §4.8 专用表复核(Bit7=EN_Charge、Bit1=Charge1、Bit0=Charge0,复位 0x03,出厂 0x82=EN+5k,总表 L119 该行转录有误以 §4.8 为准);§6 交叉引用补 P2-2/P2-6。审计期间未修改任何代码、未执行构建;2026-09-21 依第一档 #1 完成 E-32 修复(commit 41e111b:18H 回读校验 + 漂移时写允许窗口重置与回读验证、0FH 死写与误注移除、充电宏位订正;构建 0 错误 0 警告,台架 RTC 套件 Phase 1 6/6 + Phase 2 累计 17/17 PASS 含 set==readback,产品固件重烧后启动校验 PASS,ST-LINK 全片回读 No difference);同日依第一档 #2 完成 E-31 修复(commit da1a6e8:journal.c 三处错误源治理——扫描读失败不再覆盖为 TOO_BAD、读成功但 checkpoint 不符判 CORRUPT_MAP + nand_ftl.c 错误分类——仅真空白判 fresh、其余失败返回 STA_NOINIT 给 mount 层 + freertos.c 启动块重构为 storage_bring_up() 并加 3×2s 有界重试自愈策略;构建 0 错误 0 警告;台架/产品固件回归验证待执行)。*
|
||||
*报告完。59 项发现全部带 file:line 落点;P0/P1 核心机制经父审计组逐行复核(含 `docs/芯片手册/SD2506API-G.md` L392-398/L537/§4.8 原文核对与 `SD2506_Trap_Records.md` 硬件观测交叉验证)。2026-09-21 复核修订:E-32 由 P0 降 P2(充电器 P0 链被"出厂 82H"证伪)、E-39 机制改写(ARST 在 CTR3、驱动从未写过 CTR3)、E-60"write_enable WRTC2 与手册矛盾"经手册表头位序 + DFRobot GravityRtc 官方库/社区代码 + 实测三方复核证伪(0x84 本已含 D2=WRTC2,代码与手册 L392 一致)移除,见 §7-19;18H 寄存器事实经手册 §4.8 专用表复核(Bit7=EN_Charge、Bit1=Charge1、Bit0=Charge0,复位 0x03,出厂 0x82=EN+5k,总表 L119 该行转录有误以 §4.8 为准);§6 交叉引用补 P2-2/P2-6。审计期间未修改任何代码、未执行构建;2026-09-21 依第一档 #1 完成 E-32 修复(commit 41e111b:18H 回读校验 + 漂移时写允许窗口重置与回读验证、0FH 死写与误注移除、充电宏位订正;构建 0 错误 0 警告,台架 RTC 套件 Phase 1 6/6 + Phase 2 累计 17/17 PASS 含 set==readback,产品固件重烧后启动校验 PASS,ST-LINK 全片回读 No difference);同日依第一档 #2 完成 E-31 修复(commit da1a6e8:journal.c 三处错误源治理——扫描读失败不再覆盖为 TOO_BAD、读成功但 checkpoint 不符判 CORRUPT_MAP + nand_ftl.c 错误分类——仅真空白判 fresh、其余失败返回 STA_NOINIT 给 mount 层 + freertos.c 启动块重构为 storage_bring_up() 并加 3×2s 有界重试自愈策略;构建 0 错误 0 警告;产品固件台架回归 PASS:`@test` 闭环 Required(含 `Map resumed`/`FATFS mounted`)全中、Forbidden 零命中,既有卷 2441/96064 扇区 resume 成功、用户配置 523B 原样加载、FTP 屏障链通,ST-LINK 全片回读 No difference)。*
|
||||
|
||||
Reference in New Issue
Block a user