Files
qianbian/docs/firmware-layout.md

2.9 KiB
Raw Permalink Blame History

闪存布局与固件可控路径(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 线索)