原帖 | Jack | 2026-01-28 20:35 | 👍1 | 阅读约1
Jack哥我有一个问题,我这边有一个项目需要用到STM32F407ZET6或者是STM32F407ZGT6,然后不需要存储UI图片或者日志信息,所以不外接FLASH,我现在想规划一下内部的FLASH来做OTA升级这块,为什么网上都推荐用两块16KB的空间来存储断电需保存的配置文件呢?
我现在的规划是
0x0800_0000
├─ [S0 16KB] Bootloader
├─ [S1 16KB] Bootloader → Bootloader 总计 32KB
├─ [S2 16KB] Config 参数区
├─ [S3 16KB] Config 参数备份区
├─ [S4 64KB] Upgrade Flag / CRC / 校验信息区
├─ [S5 128KB] APP
├─ [S6 128KB] Firmware Storage(新固件/升级包)
└─ [S7 128KB] Firmware Rollback(回滚固件)
0x0807_FFFF
答:
因为 STM32F407 的 Flash 只能按 Sector 擦除,所以你如果“配置”需要偶尔更新,大家自然优先用最小的 16KB。然后这两个16k互为备份。
├─ [S4 64KB] Upgrade Flag / CRC / 校验信息区 这个64k 如果你放了flag的话,这个会很容易擦很久。
做法一般是:
升级状态/flag:跟 config 一样放 16KB(甚至跟 config 放同一套 A/B 里都行)
校验信息/固件头/版本/CRC:可以放 16KB 或者单独再给一个 16KB,flag是频繁改变的。
升级标志位为何应由 Bootloader 掌握、信任链如何设计,另见 OTA,一定要bootloader负责刷写flash更新标志位。
相关笔记