产品卖到现场,跑一趟升级固件成本太高,IAP 是必选项。但升级过程中断电变砖是最痛的,分享下我们的双分区方案:

1. Flash 分三区:Bootloader 区(写保护)、APP A 区、APP B 区,外加一个很小的升级标志区(记录当前运行区、新固件校验状态)。
2. 升级流程:新固件先完整写进备用区,写完后做整包 CRC 校验,校验通过才把"下次从备用区启动"的标志写进标志区,最后复位。任何一步失败都保持原分区启动。
3. 标志区要掉电安全:标志的写入用"先写新值、再擦旧值"的顺序,或者用两个互备的标志位,避免写一半断电导致标志损坏。
4. Bootloader 只做最小的事:校验标志、跳转 APP。别在 Bootloader 里加花哨功能,它是最后的救命稻草,越简单越可靠。
5. 留硬件救砖口:SWD/JTAG 口别为了"安全"全封死,至少留测试点。真变砖了还能飞线救回来。

这套方案我们用了三年,经历过现场断电、升级包损坏,都没变过砖。大家 IAP 升级时,升级包是整包下发还是差分包?差分升级的坑多吗?