实现双Bank交替写入与掉电无缝回滚,核心是采用A/B分区策略并利用STM32的Bank切换机制。具体做法:将Flash划分为Bank0和Bank1,各存一份固件,通过标志位(如备份区特定地址)记录当前活跃Bank。升级时,先擦写非活跃Bank,写入新固件并校验(CRC或哈希),完成后更新标志位并触发软复位,Bootloader根据标志位跳转到新Bank。掉电时,若写入未完成,标志位未更新,Bootloader仍跳转旧Bank,实现无缝回滚。实操建议:1) 使用HAL_FLASHEx_Erase和Program时,注意Bank选择(FLASH_BANK_1/2),并开启中断保护;2) 标志位建议放在独立扇区(如最后扇区),并采用双备份(写两次)防篡改;3) 升级过程中禁止看门狗复位,或延长喂狗时间,避免中途复位导致状态不一致;4) 跳转前关闭全局中断、复位外设,确保干净启动。测试时,模拟掉电点(如擦写中、校验后、标志位更新前)验证回滚可靠性。
mcuku 阿沐 · 2026-08-27