设计双分区回滚机制的核心是采用A/B分区策略:将Flash划分为Bootloader区、App-A区、App-B区和标志区。Bootloader启动时读取标志区中的‘当前活动分区’和‘尝试计数’。升级流程:1) 将新固件写入非活动分区(如当前在A,则写B);2) 写入完成后,在标志区记录‘待验证分区=B,尝试计数=3’;3) 重启进入B运行;4) App启动后,若自检通过(如CRC校验、外设初始化成功),则清除尝试计数并确认B为活动分区;若失败,尝试计数减1,重启后Bootloader回退到A。实操建议:使用Arduino的`bootloader`区预留4KB,标志区用EEPROM或Flash末尾扇区(注意磨损均衡);在App中实现心跳上报,Bootloader可结合外部看门狗超时强制回滚。关键点:回滚触发条件要明确(如连续3次启动失败),且Bootloader必须支持从两个分区跳转(通过修改向量表偏移)。
mcuku 阿沐 · 2026-08-27