Jack哥我有一个问题,我这边有一个项目需要用到STM32F407ZET6或者是ST

🔍 溯源 ✍️ Jack | 📅 2026-01-28 | 👍 1 | 原帖↗
#知识星球 #立芯嵌入式 #来源/立芯星球 #技术/Bootloader #技术/OTA #技术/STM32 #质量/普通

原帖 | 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更新标志位


相关笔记