# 闪存布局与固件可控路径(4.2寸 DA14585 设备) > 证据:analysis/web/PP_4.2_CH.bin / PP_4.2_NEW.bin(vendor 线刷固件,file_down.php 下载)、 > app/firmware-PP_da14585_4.2_CH.img(OTA 镜像)、docs/firmware-analysis.md ## 1. 工厂布局(线刷 .bin,总 0x38018 字节) | 区域 | 偏移 | 内容 | |---|---|---| | 二级引导 | 0x00000–0x01FFF | **'pP'**(0x5070)+ 向量表(SP=0x07FD7B00, Reset=0x07FC00B5) | | Bank A | 0x02000–0x13FFF | **'pQ' 应用镜像 1**(CH: 72424B / NEW: 71460B,flags 0x01AA) | | Bank B | 0x14000–0x37FFF | **'pQ' 应用镜像 2**(50416B,flags 0x00AA,无版本串——恢复/备援镜像) | | 产品头 | 0x38000 | **'pR'**(24B):`7052 0000 0020 0000 0040 0100 ffff…` | 产品头格式(24B):`[0:2] 'pR' · [4:8] image1_addr=0x00002000 · [8:12] image2_addr=0x00014000 · 其余 0xFF`。 验证:NEW.bin 的 app1 体与 vendor OTA 的 NEW.img 体**完全一致**——OTA .img 即 bank 镜像。 ## 2. 本机布局(实测推断) 本机 0x0000 处为 'pQ' 应用(raw 直写单镜像,无 'pP' 引导、无 app2、**0x38000 无 'pR'**)。 证据:SUOTA 首缓冲校验 0x38000 产品头失败(状态 20,GPIO 电气有效下真读结果)。 引导链:DA14585 boot ROM → 0x38000 有 'pR' 时走产品头双 bank;无则裸启 0x0 的 'pQ'(本机路径)。 ## 3. SUOTA 与布局的关系 固件 SUOTA 接收器(0x07FCB3F0)首缓冲处理时: 1. 读 0x38000 'pR' → 定当前活动 bank 2. 把新镜像写入**另一 bank**(0x2000/0x14000 之一) 3. END 时更新产品头指向新 bank → 复位 → boot ROM 按 'pR' 引导新固件 本机无 'pR' → 校验失败(状态 20)→ 全程零写入。**vendor OTA 在裸布局设备上同败**(vendor 级前提:设备须为工厂布局)。 ## 4. 固件可控路径(G4 完整解法) ### 路径 A:线刷恢复工厂布局(一次性硬件操作) - 固件:`analysis/web/PP_4.2_CH.bin`(或 NEW.bin)——本仓库已存档 - 方法:DA14585 ROM UART 线刷。芯片无有效镜像时 ROM 进入 UART boot(公开协议,Dialog AN-B-011;vendor 亦提供 ota.apk/线刷工具入口) - 硬件:开盖,接 UART(DA14585 UART boot 引脚 P0_4/P0_5 区域,需查板焊盘)+ USB-UART 适配器 - 效果:恢复工厂布局 → vendor OTA 与 `ppclock ota` 均可用(含 CH→NEW 升级通道) ### 路径 B:免线刷的软件利用(当前已具备) - 图像上传(cmd 03)写 flash 0x2E000 区——可用于自定义显示内容持久化 - EF 激活写 flash 0x3Fxxx 区——无门禁,已可离线激活(`activate --auto`) - 其余全部功能经 BLE 可控(见 field-test-result.md) ## 5. 遗留确认项 - 板级 UART 焊盘位置与线刷触发方式(需开盖万用表/试触,用户物理操作) - vendor 线刷工具(file_down.php 的 ota.apk 或其一键激活页 onejihuo.html 线索)