# PhoneRail 的分区表(C2 重排:双槽 OTA,16 MB flash)。 # # ⚠️ **nvs 的位置与大小一格都不许动**(0x9000 / 0x6000):里面是 WiFi / MQTT 配置 # 和 `rail_want`(每路上电意图)。挪了 = 板子失联 + 重启后一路都不开。 # # ota_0 / ota_1:各 3 MB。C2 时 app 是 0xE9920(≈0.9 MB),留 3 倍余量; # 改大小要跟着改 `ota.h` 的 OTA_SLOT_BYTES(ota_esp_init 会核一遍,不一致打错误日志)。 # 没有 factory:回滚的对象是「上一个好的 OTA 槽」,factory 只是第三份永远不更新的旧版。 # otadata:两个扇区,记「从哪个槽启动 + 那个槽的验证状态」。bootloader 的回滚靠它。 # 0x10000 之前放不下(nvs + phy_init 刚好顶到 0x10000,app 又必须 64 KB 对齐),所以放在两个槽后面。 # # evlog:**裸的 data 分区**,不是 nvs、也不是 spiffs(理由见 hal_store_esp.c 开头)。 # 大小 0x11000 = 17 个扇区。为什么是 17 而不是 §10.7 里写的「4096 条 ≈ 64 KB」: # 每个扇区要拿一个 16 B 的槽当扇区头(epoch),于是一扇区只装得下 255 条, # 16 扇区 = 4080 条,**差 16 条不够 4096**。17 扇区 = 4335 条, # `test_capacity_meets_the_requirement()` 卡的就是这个 ≥4096。 # C2 把它从 0x110000 挪到了 0x612000:evlog 按 label 找分区、格式不变,**只是历史事件清空一次**。 # # ⚠️ 改了 evlog 的大小要跟着改 `sim_hal.h` 的 SIM_STORE_SECTORS —— 两边不一致时 # 宿主机测试仍然全绿,板子上却是另一个容量。测试里有一条断言把它们钉在一起。 # # ⚠️ 换了分区表之后**第一次必须经 USB 整片烧**(bootloader + 分区表 + otadata + app), # 之后才能走 OTA。 # # Name, Type, SubType, Offset, Size, Flags nvs, data, nvs, 0x9000, 0x6000, phy_init, data, phy, 0xf000, 0x1000, ota_0, app, ota_0, 0x10000, 0x300000, ota_1, app, ota_1, 0x310000, 0x300000, otadata, data, ota, 0x610000, 0x2000, evlog, data, undefined, 0x612000, 0x11000,