Files
simba-rmic-2026/docs/firmware-provisioning-test-matrix.csv
T
sloray e3acb37d32
构建客户端 / 检查(类型 + 单元测试) (push) Canceled after 0s
构建客户端 / Linux x64(deb + AppImage) (push) Canceled after 0s
构建客户端 / Windows x64(NSIS 安装包) (push) Canceled after 0s
构建客户端 / macOS 通用(.app + .dmg) (push) Canceled after 0s
docs: 按 humanizer 重写项目文档并同步 RMIC::2026 现状
2026-10-19 10:47:00 +08:00

40 lines
8.2 KiB
CSV
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
id,category,priority,precondition,steps,expected,pass_criteria,evidence,tools,est_minutes
"N-01","正常","P0","健康板;新模板;工具版本锁定","分段写 Bootloader/分区表/App;逐段 verify;复位;串口与 UDP 验收","3 段 verify OK;启动日志正常;15 s 内收到完整帧","verify 全通过;无 panic/brownout;perf 帧率>=15 fps 且丢帧<=5%","verify 日志;serial.log;perf.json","esptool;perf_probe;serial_soak","20"
"N-02","正常","P0","健康板;已 provision;同布局","只写新 App;verify;复位;检查 config 保留","App 版本更新;原 SSID 配置仍生效","App hash 与 manifest 一致;config seq 不变;联网正常","verify;serial;perf","esptool;perf_probe","15"
"N-03","正常","P0","健康板;已 provision;模板支持 config","只 patch config(换 SSID);不写 App;复位","新 SSID 生效;App SHA-256 不变","app-readback SHA-256 与 manifest 一致;serial 显示 config source=partition;联网正常","app hash;serial;perf","esptool;provision.py;perf_probe","10"
"N-04","正常","P1","健康板","连续 provisioning 3 次(相同输入)","幂等;无 brick;报告一致","3/3 通过;设备身份一致;无重复写入错误","3 份 result.json","provision.py","20"
"N-05","正常","P1","健康板;归档镜像","写 merged image 并 verify(对照)","记录是否通过;不用于坏板","结果记录;不改变坏板策略","verify 日志","esptool","10"
"B-01","坏板","P0","故障板;E1 备份已验证","牺牲板 E2 写读表征;生产板定向读 0xFADE7/0x10863 + 扫描模板写入区","E2 复现缺陷;生产板地图正确;恢复 verify","至少识别两个已知地址;恢复后关键区 verify OK","scan.json;verify;backup hash","esptool;provision.py","30"
"B-02","坏板","P0","故障板;新布局;模板镜像","分段写新 App/表;verify;复位","写入区不含坏地址;App 实际镜像 verify OK;启动","3 段 verify OK;serial live;UDP 有帧","verify;serial;perf","esptool;perf_probe","25"
"B-03","坏板","P0","故障板;强制 App 槽包含坏字节","写实际镜像;读回比较","若镜像字节不可写则 verify 失败;工具换槽或拒绝;不 brick","失败可定位到地址;设备仍可进下载模式;报告不报成功","verify;scan;report","esptool;provision.py","25"
"B-04","坏板","P0","故障板;config 一个槽含坏扇区","写 config 多副本;复位","跳过坏槽;至少一个副本有效;联网","serial 显示有效 seq;报告记录 skipped 槽;App hash 不变","scan;serial;report","esptool;provision.py","20"
"B-05","坏板","P1","故障板;merged 镜像","写 merged image(对照)","预期失败或高风险;工具默认禁止","记录失败地址/错误;后续流程仍走分段","verify 日志;report","esptool","15"
"B-06","坏板","P1","故障板;疑似间歇坏字节","同一扇区扫描 3 次;不同温度/供电","标记 SUSPECT;隔离;不用于 App","3 次结果一致或明确记录间歇;SUSPECT 不进 App 槽","scan.json","esptool;provision.py","30"
"B-07","坏板","P2","故障板;全片备份","全片扫描 + 恢复","得到全片地图;恢复关键区;不丢数据","恢复后关键区 verify OK;时间记录","scan.json;backup hash","esptool","60"
"O-01","OTA","P1","OTA-ready;Bootloader rollback","写 ota_0;切换;复位","新版本启动;分区日志正确","serial 显示 ota_0;版本正确;联网","serial;otatool","otatool.py;perf_probe","30"
"O-02","OTA","P1","OTA-ready;当前槽有效","写损坏镜像/错误 SHA;复位","Bootloader 拒绝;旧槽仍启动","旧版本启动;无 brick;serial 有拒绝原因","serial","otatool.py;esptool","20"
"O-03","OTA","P1","OTA-ready;USB 继电器","OTA 写入 25/50/75% 时断电;恢复","至少一个槽可启动;无需整片擦","3 个断点均能启动;版本/分区符合预期","serial;relay log","otatool.py;relay","45"
"O-04","OTA","P1","OTA-ready;目标槽含坏区","OTA 到坏槽;复位","安全失败;旧槽不受影响","旧版本启动;无 brick;报告记录坏槽","serial;scan","otatool.py;esptool","25"
"O-05","OTA","P2","启用 anti-rollback","OTA 降级;复位","按策略拒绝或接受;不 brick","策略与日志一致;设备可启动","serial","otatool.py","20"
"H-01","热插拔","P0","1 块板;驱动已装","插拔 20 次;记录发现时间","20/20 发现;P95<=2 s","无漏检;无端口残留;无错板","discovery.json","serialport;provision.py","20"
"H-02","热插拔","P0","2 块板同时插入","按 MAC 选择;执行 patch/verify","0 次错板;端口/MAC 正确","两块设备报告 MAC 与操作一致","report","serialport;provision.py","20"
"H-03","热插拔","P1","写入进行中","拔掉 USB","报错;设备可恢复;不报成功","错误码明确;重插后可进下载模式","log;report","provision.py","15"
"H-04","热插拔","P1","扫描进行中","拔掉 USB","报错;备份可恢复;不半写成功","重插后恢复;关键区 verify OK","log;backup","provision.py","20"
"H-05","热插拔","P1","串口监视器占用端口","执行 provisioning","明确端口占用;不挂死","错误码/提示;进程退出","log","provision.py;espflash monitor","10"
"H-06","热插拔","P0","错固件/错芯片","选择不兼容 manifest","写入前拒绝;设备不变","App hash 前后一致;错误码 3","report","provision.py","10"
"P-01","断电","P0","健康板/坏板;可恢复","App 写入 50% 断电;上电;重刷","可进下载模式;重刷后启动;不 brick","BOOT 恢复;verify OK;serial live","serial;verify","esptool;relay","20"
"P-02","断电","P0","config 已有一个有效副本","config 写入时断电;上电","旧副本有效;启动","serial 显示旧 seq;联网正常","serial","esptool;relay","15"
"P-03","断电","P1","分区表迁移中","分区表写入时断电;上电;重刷","BOOT 恢复;重刷表/App;不 brick","可进下载模式;重刷后启动","serial;verify","esptool;relay","25"
"P-04","断电","P2","Bootloader 更新中(最高风险)","Bootloader 写入时断电;上电;BOOT 恢复","可恢复;不 permanent brick","BOOT 可进下载;重刷后启动","serial;verify","esptool;relay","30"
"P-05","断电","P2","扫描/恢复中","拔 USB/断电;恢复","备份可用;关键区不丢","关键区 verify OK;无半写成功","backup hash","esptool","30"
"S-01","安全","P0","正常 provision","检查日志、报告、命令行历史","无密码明文;只有 SSID/hash/seq","grep 不到密码;报告字段合规","grep;report","provision.py","10"
"S-02","安全","P1","Secure Boot/加密板(如有)","espefuse summary;尝试未签名 patch","检测 eFuse;拒绝未签名/未加密 patch","工具退出码 10;设备不变","espefuse 输出;report","espefuse;espsecure","20"
"S-03","安全","P1","篡改 manifest/App","校验 SHA-256 后烧录","拒绝烧录","错误码 3;设备不变","report","provision.py","10"
"S-04","安全","P2","伪造 VID/PID 设备","主动探测 chip/MAC/Flash","识别不匹配;拒绝","不写入;报告记录","report","serialport;esptool","20"
"R-01","回归","P0","host 环境","pytest 全部 host tests","100% 通过","0 failed;覆盖 config/分区/manifest/选择逻辑","JUnit/HTML","pytest","10"
"R-02","回归","P1","硬件在环","20 次循环(N/B/H 子集)","首次通过率>=95%;0 brick;0 错板","统计达标;失败可定位","summary.json","pytest;provision.py","120"
"R-03","回归","P0","锁定工具版本","重复执行同一命令 3 次","同输入同命令/同结果","版本/哈希/输出一致","versions.txt;report","all","15"
"R-04","回归","P1","报告 schema","用 jsonschema 校验 result/scan/manifest","全部通过","0 schema error","schema 校验日志","pytest;jsonschema","10"
"M-01","迁移","P1","旧布局 0x70000 板","备份;写新 App→新表→可选 Bootloader;保留 NVS/PHY;复位","新布局启动;NVS/PHY 保留;config 可用","serial live;MAC 不变;Wi-Fi 校准未丢","serial;report","esptool;provision.py","30"
"M-02","迁移","P0","旧布局板","尝试只 patch config","工具拒绝并提示迁移","错误码 3/提示明确;设备不变","report","provision.py","10"