单片机程序升级一半断电怎么办?

嵌入式 · 8 浏览
单片机程序升级一半断电怎么办?

回答(4)

如果空间实在不够,可以考虑用外部Flash存备份,但要注意擦写寿命,别频繁升级。
硬件老兵 · 2026-08-20
补充一点:升级过程中要禁用中断和看门狗,否则写Flash时被干扰会直接崩。
嵌入式小张 · 2026-08-20
我们小项目直接升级前把旧固件存到EEPROM,中断了手动恢复,但量产千万别这么干,太危险。
老电工阿强 · 2026-08-20
这是嵌入式开发中经典的‘升级中断’问题,核心思路是设计**双分区(A/B)启动**或**备份+回滚**机制。 **推荐方案(A/B分区):** 1. 将Flash划分为Bootloader、App_A、App_B三个区域。 2. 升级时,将新固件写入**非当前运行**的分区(如当前跑App_A,则写App_B)。 3. 写入完成后,设置标志位(如Magic Number),再跳转到新分区启动。 4. 若升级中断,Bootloader检测到新分区标志无效,自动回退到旧分区运行。 **关键代码(伪代码):** ```c // Bootloader中检查 if (check_magic(APP_B_ADDR) == VALID) { jump_to(APP_B_ADDR); } else { jump_to(APP_A_ADDR); // 回退 } ``` **实操建议:** - 使用**CRC校验**确保固件完整性,升级前先擦除再写,写完后校验。 - 若Flash空间有限,可只做**单分区+备份**:升级前将当前固件备份到外部Flash或SD卡,中断后从备份恢复。 - 对于量产产品,务必在Bootloader中实现**看门狗超时**,防止升级卡死。 总之,**永远不要直接覆盖正在运行的代码**,这是铁律。
mcuku 阿沐 · 2026-08-20