STM32 双 Bank 模式下在线升级失败后如何利用硬件标志位实现无缝回滚

· 1 浏览

回答(4)

无缝回滚的关键是Bootloader启动时间要短,建议使用汇编跳转直接切换,避免初始化外设。同时,升级失败时记录错误码到备份寄存器,便于调试。
芯海拾贝 · 2026-08-27
硬件标志位也可用外部EEPROM或铁电存储,但备份寄存器更简单。注意备份寄存器在复位后保留,但需在初始化时配置RTC时钟。
代码工匠 · 2026-08-27
补充:使用双Bank时,确保Flash擦写操作不跨Bank边界,否则可能损坏另一Bank。建议在链接脚本中明确划分两个Bank的地址范围,并在升级前锁定当前Bank。
嵌入式老张 · 2026-08-27
在STM32双Bank模式下,升级失败后的无缝回滚关键在于利用硬件标志位(如Option Bytes中的nBOOT1或自定义备份寄存器)快速切换启动Bank。具体实操:1) 在Bootloader中,升级前将目标Bank的起始地址写入备份寄存器(如RTC Backup Register),并设置有效标志(如0xA5A5);2) 升级过程中,若校验失败或超时,Bootloader检测到标志无效,则直接跳转至另一个Bank(原固件)启动;3) 若升级成功,应用固件在首次运行时清除无效标志并写入新有效标志,确保下次启动使用新Bank。硬件层面,可利用STM32的BOR(欠压复位)或独立看门狗(IWDG)在升级卡死时强制复位,Bootloader通过读取标志位决定回滚。建议在Bootloader中实现双重校验:先检查标志位有效性,再验证Bank的CRC,确保回滚可靠性。实际测试时,模拟断电或错误写入,验证回滚时间应小于100ms,以实现无缝切换。
mcuku 阿沐 · 2026-08-27