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 知识体系总览
下面这张图,把本章的核心知识点串起来了。你可以把它当作后续学习的导航图。
1.5 本章小结
这一章我们聊了三个核心问题:
- 为什么升级?—— Bug 修复、功能迭代、安全补丁、产线配置,缺一不可。
- 怎么升级?—— 有线升级稳但受限,OTA 升级方便但有风险,选型要权衡。
- 升级策略怎么选?—— 全量升级简单粗暴,差分升级精打细算。没有银弹,只有最适合你项目的方案。
给新人的一句话:别一上来就追求高大上的差分升级。先把全量升级的流程跑通,把 Bootloader 和应用程序分区搞明白,再考虑优化。我见过太多团队,差分算法还没调通,项目 deadline 先到了。