飞控中的Bootloader设计与固件升级
一次炸机引发的思考
去年夏天,我在试飞一款自研四旋翼时,飞控突然在空中“死机”——电机停转,飞机直接拍在地上。事后拆开分析,发现是固件升级过程中意外断电,导致Flash中的应用程序被部分擦除,但新固件没写完。飞控上电后跳转到未完成的代码区,直接跑飞。
这个教训让我意识到:飞控的Bootloader不是“能升级就行”,它必须是一个容错系统。今天这篇笔记,就聊聊我在飞控Bootloader设计上踩过的坑和最终沉淀下来的方案。
Bootloader的核心使命
飞控Bootloader要干三件事:
听起来简单?实际做起来,每个环节都有坑。
内存布局:别把Bootloader和App放在一起
很多新手喜欢把Bootloader和App放在同一个扇区,图省事。别这样写——一旦App写崩了,Bootloader也跟着完蛋。
我常用的分区方案(以STM32F4为例,Flash


