关注+星标公众,不错过精彩内容

来源 | 亚细亚的老鱼

OTA:Over-the-Air ,空中下载,也就是远程升级的意思。

现在OTA升级已经成了很多汽车电子、IoT 等嵌入式设备的必要功能,就连很多几块钱的电子产品,都具备了这个功能。


为了避免升级过程中断电、传输错误导致设备“变砖”,业内普遍采用 A/B 双分区机制。本文总结几种经典方案,并结合实际 MCU的特性,给出实现思路。



一、A/B 双分区的经典方案

  1. 静态 A/B(切换入口)

  • 内部 Flash 分两个完整应用区:A 和 B。

  • 升级时,把新固件写到非活动区,重启后 Bootloader 根据控制标志选择启动 A 或 B。

  • 优点:切换快、升级稳定。

  • 缺点:需要两倍程序空间。

  • 下载区 + 拷贝区

    • 当前运行 A,新固件先写入 B,重启时 Bootloader 把 B 拷贝覆盖 A,再启动。

    • 优点:兼容只需一个活动分区的旧系统。

    • 缺点:拷贝耗时,掉电恢复逻辑复杂。

  • 外部 Flash A/B

    • 固件存放在外部 QSPI/OSPI Flash,Bootloader 校验后可直接 XIP 启动,或拷贝到内部。

    • 优点:突破 MCU 内部 Flash 限制。

    • 缺点:需要额外硬件。

  • 差分升级(Delta Patch)

    • 只传输差分数据,在目标分区合成新固件。

    • 优点:数据量小。

    • 缺点:实现复杂,可靠性要求高。



    二、典型内存布局

    | Boot Control Block (BCB) |  状态标志区
    |--------------------------|
    | Bootloader (保护段)    |  固定不被擦写
    |--------------------------|
    | 应用分区 A           |  App + 校验信息
    |--------------------------|
    | 应用分区 B           |  App + 校验信息
    • Bootloader:放在 MCU Boot Segment,用硬件保护。

    • BCB:存储当前激活分区、待验证分区、版本号、CRC、签名等。建议双份保存,带自校验。

    • 分区 A/B:完整固件镜像,包含入口向量表、代码、CRC/签名。



    三、升级完整逻辑

    1. 下载阶段

    • 应用程序选择非活动区(比如当前跑 A,则写 B)。

    • 擦除目标分区 → 分块写入(对齐到 MCU 写入粒度)。

    • 写入完成后,计算 CRC/校验签名。

    • 校验通过 → 更新 BCB:标记 pending_slot = B,允许试运行。


    2. 启动阶段(Bootloader)

    1. 检查 BCB,若有待验证分区 → 优先启动它。

    2. 校验 Header、CRC、签名。

    3. 如果失败 → 回滚到旧分区。

    4. 如果通过 → 进入试运行模式。


    3. 试运行与确认

    • 新固件启动后,应用需在规定时间内完成自检(通讯、功能检查)。

    • 确认无误 → 写入健康标志,Bootloader 更新 BCB,正式切换 active_slot = B

    • 若未确认、频繁看门狗复位 → Bootloader 自动回退 A。



    四、关键点与注意事项

    • 原子性:BCB 更新必须双份,掉电也能恢复。

    • 写入顺序:先写数据,最后写头信息,避免“半成品”被误启动。

    • 安全性:推荐固件签名校验(如 ECDSA),公钥固化在 Bootloader 段。

    • 可靠性:升级过程必须能应对掉电、通信中断。

    • 试运行保护:通过看门狗 + 健康标志,确保只有稳定固件才能“转正”。



    五、应用场景

    • 汽车 ECU:动力、空调压缩机等对可靠性极高的场景。

    • IoT 网关:要求远程批量更新,但不能因单台设备失败而中断服务。

    • 工业控制:现场无法人工介入时,A/B 机制能避免停机风险。



    六、总结

    A/B 双分区 OTA 升级的核心是:

    • 双镜像存储 → 确保一份固件始终可用;

    • Bootloader 决策 → 负责校验、选择、回退;

    • 应用自确认 → 确保新固件可稳定运行。

    这套机制被广泛应用于汽车电子和物联网设备,是目前最可靠的 OTA 设计之一。

    ------------ END ------------

    图片

    ●专栏《嵌入式工具

    ●专栏《嵌入式开发》

    ●专栏《Keil教程》

    ●嵌入式专栏精选教程

    关注公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。

    点击“阅读原文”查看更多分享。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐