这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » STM32C5系列的Flash双Bank特性

共1条 1/1 1 跳转至

STM32C5系列的Flash双Bank特性

院士
2026-09-17 13:55:56     打赏
STM32C5系列的Flash双Bank特性

STM32C5系列的双Bank  Flash是其面向工业级固件安全升级的核心硬件特性,最大1MB的Flash空间被硬件划分为两个完全独立的存储区域,支持一边在Bank A运行业务代码,一边在Bank B完成固件升级,断点续传,全程不会出现代码运行中断,彻底解决传统单Bank IAP升级过程中掉电变砖的痛点。

双Bank硬件设计

STM32C5的双Bank采用硬件级完全隔离设计:

  • 两个Bank拥有独立的擦写控制逻辑、独立的保护寄存器,互不干扰

  • 支持边运行边擦写:在BankA正常执行业务代码的同时,可对BankB进行全扇区擦除和新固件烧写,完全不影响当前业务运行

  • 内置FB_MODE内存重映射开关,通过配置寄存器位即可一键切换两个Bank的启动映射地址,无需修改任何链接脚本

  • 额外支持EDATA专用数据Flash区域,可独立划分出部分空间模拟EEPROM,用于存储配置参数,完全不占用业务固件空间

典型应用场景

1. 固件A/B区升级(最主流用法)

原子级安全固件A/B升级,这是双Bank最核心的工业级应用,全程实现"零风险"固件更新:

  1. 设备出厂时,BankA烧写稳定版业务固件,BankB留空作为升级接收区

  2. 设备通过网络/串口接收新固件,直接写入BankB,全程BankA的业务代码正常运行,设备不会停机

  3. 新固件全部写入完成后,先做SHA256完整性校验,确认固件完整无损坏

  4. 配置Flash控制寄存器的BFB2位,下次复位后自动从BankB启动运行新固件

  5. 新固件启动后自检运行正常,再把BankA擦除,将新固件完整备份回BankA,完成全量升级

  6. 极端场景下升级中途掉电,BankA的旧固件始终完整可用,设备上电后自动回滚到旧版本,绝对不会变砖

2. 双固件冗余备份运行

对可靠性要求极高的工业控制场景,可在两个Bank同时烧写两份完全相同的业务固件:

  • 系统启动后自动校验两个Bank的固件完整性,一旦检测到某一个Bank的Flash因为位翻转出现数据损坏,自动切换到另一个Bank运行

  • 后台静默将完好的固件重新擦写覆盖损坏的Bank,全程业务不中断,实现硬件级的固件冗余防护

3. 在线参数分区存储

将其中一个小容量Bank专门划分为参数存储区:

  • 业务固件运行在Bank1,Bank2不存放业务代码,专门用于存储设备的运行日志、校准参数、用户配置

  • 业务代码运行时直接对Bank2进行擦写操作,完全不会影响Bank1中正在运行的代码执行,避免传统单Bank擦写参数时必须暂停业务的问题

关键配置步骤

  1. 在STM32CubeMX中开启双Bank划分,将1MB Flash平均划分为两个512KB的独立Bank,自动生成对应的分区链接脚本

  2. 配置Flash选项字节中的BFB2位,开启双Bank启动映射功能,支持复位时自动选择启动Bank

  3. 移植ST官方AN4767应用笔记中的双Bank升级驱动,实现固件写入、完整性校验、Bank切换的全套逻辑

  4. 配置独立看门狗超时时间大于整个固件升级流程的最大耗时,避免升级过程中误触发复位

总结

  • 双Bank擦写操作时,必须确保当前运行代码所在的Bank不会被意外擦除,硬件会自动禁止对当前正在执行代码的Bank进行擦写操作

  • 升级过程中所有中断向量表必须重定位到RAM中运行,避免擦写另一个Bank时意外影响中断响应

  • STM32C5没有集成TrustZone安全隔离,可直接通过软件配置实现双Bank的读写保护,防止固件被非法篡改




关键词: 双bank     Flash    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]