1. MCU升级概述:为什么需要固件升级?

大家好,我是你们这门课的老朋友。咱们直接开门见山——MCU 为什么要升级?

说白了,没有永远不出 Bug 的固件,也没有一成不变的需求。我做了十几年嵌入式,见过太多产品出厂时跑得挺好,一到现场就出幺蛾子。这时候,固件升级就是你的救命稻草。

核心观点:固件升级不是锦上添花,而是产品生命周期的必备能力。它解决的是「产品出厂后,如何持续修复、优化、增加功能」的问题。

1.1 为什么需要固件升级?

我归纳了四个最典型的场景,你想想看,哪个没遇到过:

  • Bug 修复:产品量产后才发现的逻辑漏洞、临界条件崩溃、外设驱动异常。我记得有一次,一个温控器项目,出货 5000 台后才发现 I2C 通信在低温下偶发超时……嗯,只能靠升级固件来救场。
  • 功能迭代:客户要加新协议、改 UI 交互、调整算法参数。没有升级能力,就得派人去现场拆机烧录,成本高得吓人。
  • 安全补丁:物联网设备越来越多,固件漏洞被利用的新闻还少吗?远程打补丁是基本要求。
  • 产线校准与配置:同一套硬件,通过升级不同固件来适配不同 SKU,省去硬件改版。

我的经验:做产品定义时,我建议把「是否支持远程升级」作为硬性需求写进规格书。否则后期想加,架构上可能要大改,甚至换芯片。

1.2 OTA 与有线升级的区别

升级方式就两大类:有线升级和 OTA(Over-The-Air)升级。它们各有各的脾气。

对比维度 有线升级(UART / USB / SWD / JTAG) OTA 升级(Wi-Fi / BLE / LoRa / NB-IoT)
传输介质 物理线缆 无线射频
速度 快(通常 115200 bps ~ 1 Mbps+) 慢(受限于无线带宽和信号质量)
可靠性 极高(有线连接,干扰少) 中等(易受干扰、丢包、断连)
安全性 物理隔离,相对安全 需加密、签名、防重放攻击
适用场景 产线烧录、研发调试、售后维修 远程批量升级、现场无人值守设备
成本 低(无需无线模块) 高(需要无线硬件和云平台)

为什么会这样?有线升级就像用网线传文件,又快又稳。OTA 升级就像用手机流量下载,方便但随时可能掉线。我个人习惯是:研发阶段用有线,稳定高效;量产部署后,能 OTA 就 OTA,省心。

避坑指南:我曾经在一个 BLE 门锁项目里,OTA 升级到一半,手机走远了,蓝牙断开……固件只写了一半,设备直接变砖。从那以后,我坚持所有 OTA 方案必须搭配「断点续传」和「备份区回滚」机制。

1.3 全量升级与差分升级的对比

这是升级策略的核心选择。你想想看,一个 1MB 的固件,每次升级都全量下载,还是只传变化的部分?

全量升级

就是把完整的固件镜像(.bin / .hex)整个下载到设备,覆盖旧固件。

  • 优点:实现简单,逻辑清晰,不需要复杂的差分算法。新旧固件完全独立,兼容性好。
  • 缺点:传输数据量大,耗时久,占用带宽高。对于资源受限的 MCU,需要更大的 Flash 来存储接收缓冲区。

差分升级

只传输新旧固件之间的差异部分(patch / delta),设备端用旧固件 + 差异数据,合成新固件。

  • 优点:传输数据量小,通常只有全量的 10%~30%,升级快,省流量。
  • 缺点:实现复杂,需要差分算法(如 bsdiff、xdelta、HDiffPatch)。设备端需要足够 RAM 和算力来执行合成。如果旧固件被破坏,差分升级会失败。
对比项 全量升级 差分升级
传输数据量 大(整个固件) 小(仅差异部分)
升级耗时 长 短
实现复杂度 低 高(需差分工具 + 合成逻辑)
对旧固件依赖 无(直接覆盖) 强(旧固件必须完整且正确)
适用场景 首次烧录、重大版本变更、旧固件不可靠 频繁小版本迭代、带宽/流量受限(如 NB-IoT)
Flash 占用 需要额外存储区存放新固件 需要额外存储区存放 patch 和合成临时区

我的建议:如果你的 MCU Flash 够大(比如 2MB 以上),且升级不频繁,全量升级是最稳妥的选择。如果 Flash 只有 256KB,还要通过 LoRa 升级,那差分升级几乎是唯一出路。

1.4 知识体系总览

下面这张图,把本章的核心知识点串起来了。你可以把它当作后续学习的导航图。

MCU固件升级知识体系总览 MCU 固件升级知识体系 固件升级 为什么升级? 升级方式 升级策略 Bug 修复 功能迭代 安全补丁 产线配置 有线升级 OTA 升级 全量升级 差分升级 全量 vs 差分 核心取舍 全量:简单可靠,但数据量大 差分:省流量省时间,但实现复杂 有线 vs OTA 核心取舍 有线:稳定快速,但需要物理接触 OTA:远程便捷,但需处理断连/安全 选择依据:Flash 大小、带宽、可靠性要求、成本

1.5 本章小结

这一章我们聊了三个核心问题:

  1. 为什么升级?—— Bug 修复、功能迭代、安全补丁、产线配置,缺一不可。
  2. 怎么升级?—— 有线升级稳但受限,OTA 升级方便但有风险,选型要权衡。
  3. 升级策略怎么选?—— 全量升级简单粗暴,差分升级精打细算。没有银弹,只有最适合你项目的方案。

给新人的一句话:别一上来就追求高大上的差分升级。先把全量升级的流程跑通,把 Bootloader 和应用程序分区搞明白,再考虑优化。我见过太多团队,差分算法还没调通,项目 deadline 先到了。