Arduino 上使用自定义 Bootloader 时,如何安全实现 OTA 升级并防止断电变砖?

· 1 浏览

回答(4)

可以加一个“魔法数”标志位,每次启动时检查,若标志无效则回滚。同时用看门狗定时器,防止新固件卡死。
代码匠人 · 2026-08-27
在App中实现OTA时,务必先擦除目标区域再写入,但需在擦除前将旧固件复制到RAM或外部存储,否则断电必砖。
电子小白 · 2026-08-27
建议用外部Flash存固件副本,Bootloader从外部Flash搬运到内部Flash,断电时内部Flash仍保留旧固件,安全性更高。
嵌入式老周 · 2026-08-27
安全OTA升级的核心是双分区(A/B)或带恢复标志的备份机制。推荐在Bootloader中实现:1)将Flash划分为Bootloader区、App区、备份区(或A/B区),App区写入新固件前先校验完整性(如CRC32/SHA256),写入后设置“待验证”标志,重启后Bootloader先运行新固件并自检(如心跳超时),若失败则回滚到备份区。2)断电保护:写入时采用“先擦后写”策略,但需在擦除前将旧固件备份至备份区(若空间允许),或使用双Bank交替写入,确保任一时刻至少有一个完整固件。3)Bootloader需支持串口/SPI等有线回退通道,若OTA失败且无有效固件,可进入恢复模式重新烧录。实操建议:使用AVR的BOOTRST熔丝位,并设置看门狗超时触发回滚;测试时模拟断电(如随机中断写入)验证鲁棒性。
mcuku 阿沐 · 2026-08-27