RTC、NVS 与数据安全
分区
| 分区 | 偏移 | 大小 | 用途 |
|---|---|---|---|
nvs | 0x9000 | 24 KiB | primary/backup 存档 |
phy_init | 0xF000 | 4 KiB | PHY |
factory | 0x10000 | 8 MiB | 正式应用 |
storage | 0x810000 | 7 MiB | 后续内容预留 |
coredump | 0xF10000 | 512 KiB | 崩溃诊断 |
Save envelope
固件存档包含 magic PSTR、schema、state size、可信墙钟标志和 FNV checksum。读取顺序为 primary → backup;损坏或未知格式被拒绝,不把随机字节 normalize 成“看起来能玩”的状态。
Schema 演进
| 阶段 | Envelope / State | 变化 |
|---|---|---|
| v6 | schema1 / v2 | 基础设置与 240-byte state |
| v7 初版 | schema2 / v3 | 倾斜档位等 v7 状态 |
| 2026-08-19 | schema3 / v4 | ambient display 与电源保存收口 |
host tests 覆盖 schema 1/2/3 迁移、v4 round-trip、损坏 primary 回退 backup、checksum 拒绝、空存档和 factory seal。
写入节流
- 普通 dirty 状态最多每 60 秒写一次。
- 购买、设置、TEAM、星礼、发射立即写。
- ambient entry、restart、poweroff 使用同步保存屏障。
- 关机前读回并解码验证;保存失败取消软件关机。
RTC 与离线收益
PCF85063 保持断电墙钟。启动时读取 integrity;不可信时用固件构建时间播种。只有当前与存档时间都可信才结算,避免 RTC 初始值或回拨制造无限资源。
实机验证从 v6 读取 schema1/v2,迁移并写 schema2/v3,后续复位直接读取新 primary;v4 升级又在电源循环前后核对 taps / purchases / settings 与星火离线增量。
回滚与 coredump
烧录前完整备份 16 MiB Flash。coredump 分区已初始化,验证期间没有有效崩溃转储。恢复原机属于覆盖整片 Flash 的破坏操作,必须确认端口和镜像哈希后单独执行。
