写在前面
OTA 全称 Over-the-Air,空中升级;硬件 OTA 广义有两层含义:
1)固件 OTA(最常用):给 MCU、SOC、单片机、模组刷写固件(底层程序),大家日常说的硬件 OTA 基本都是这个;
2)硬件参数 OTA:不换固件,只远程下发配置参数(阈值、通信地址、校准系数),很多项目里也归到硬件 OTA 体系。
区分:APP 升级叫软件 OTA;单片机 / 设备固件升级 叫 硬件 OTA。
名词区分:
FOTA升级:Firmware Over The Air,中文:固件空中升级 ,是针对直连云设备。
FUOTA升级:LoRaWAN Firmware Update Over The Air ,中文 LoRaWAN固件空中升级,针对携带LoRa 通信模组的子设备。
硬件OTA分类
1. 无线 OTA
-
WiFi OTA: 设备连路由器,HTTP/HTTPS 从服务器拉取固件包。常见于智能家居, 优点:带宽大、包传输快;缺点:依赖局域网 WiFi,无 WiFi 不能升级。
-
4G/5G 蜂窝 OTA :设备内置 4G/5G 模组,公网下载固件,工业设备、车载、野外传感器。 优点:不受局域网限制;缺点:流量成本高,一般固件做差分包减小体积。
-
NB-IoT / Cat.1 OTA :低功耗物联网设备(水表、气表、烟感),带宽很小,只适合小固件或者分片差分升级,大固件基本不直接全量升级。
-
蓝牙 BLE OTA :手机蓝牙直连设备,手机作为中转,把固件传给硬件。典型:手环、蓝牙耳机、传感器模块。 特点是不需要网络,手机本地传包;缺点传输慢,适合小包。
-
LoRa OTA :远距离低功耗物联网,带宽极低,只能极小固件,一般只做参数 OTA,很少完整固件升级。
2. 有线 OTA
也属于硬件 OTA,很多场景叫本地 OTA。
-
USB OTA:USB 连接电脑,上位机下发固件(如 STM32 DFU)
-
UART/RS485 OTA:串口有线升级,工厂产线、现场调试
-
CAN 总线 OTA:车载 ECU,CAN FD 传输固件包,汽车行业标准
-
Ethernet 有线网口 OTA:工业交换机、PLC
说明:通道只是传输介质,OTA 升级逻辑是独立的,不管蓝牙、4G、串口,底层升级框架原理一致。
硬件OTA流程

1、如何判断设备是否携带 IP协议栈?
这是TCP/IP 第一层 网络接口层的知识,也就是在第一层就能区分出对应设备是自己拉包完成升级,还是依靠网关给自己发包完成升级。
设备是否携带 IP协议栈,也就是有没有完整TCP/IP 协议栈。这主要取决于设备本身的通信模组,其可以查阅模组规格书/模组SDK获取。通用的设备都有哪些通信协议?它们哪些有完整TCP/IP 协议栈?请看下表:
| 通信模组类型 | 是否内置 TCP/IP 栈 | 是否有 IP | OTA 方式 | 覆盖范围 | 适合场景 |
|---|---|---|---|---|---|
| WiFi 模组 (ESP32) | ✅完整 | ✅内网 IP | 设备主动拉包 FOTA | 覆盖 50~100 米室内 | 智能家居、工业采集器、WiFi 网关 |
| Cat.1 4G 模组(广域覆盖、插SIM卡) | ✅完整 | ✅运营商 IP | 设备主动拉包 FOTA | 全国只要有 4G 信号就能联网 | 野外设备直接上云,上报数据、图片、日志,远程下发指令 |
| NB-IoT 模组 (带宽极低、强穿透、插SIM卡) | ✅精简 IP 栈 | ✅IP | 设备可 FOTA,只适合小固件 | 密集地0.3~1.5km;郊区1~5km;开阔10~15m.城市几百米~几公里 | 智能水表、燃气表、地下井盖、烟雾探测器、低频小数据野外传感器 |
| LoRa 子设备模组(休眠功耗极低) | ❌无 | ❌无 IP | 网关代理 FUOTA 分片下发 | 通信距离 2~15km | 野外农业传感器、水库监测、远程抄表、园区大量低功耗传感器 |
| BLE 蓝牙子模组(超低功耗) | ❌无 | ❌无 IP | 网关 / 手机本地推送固件 | 距离 10~30 米 | 手环、温感标签、蓝牙门锁、近距离配置调试 |
| ZigBee 子模组(低功耗、可穿墙、Mesh 组网) | ❌无 | ❌无 IP | 网关推送固件分片 | 室内10~30 米;室外开阔50~100 米 | 全屋智能家居传感器、厂房大量采集节点 |
| 5G 工业模组(超高带宽、低时延) | ✅完整 | ✅公网 IP | 设备主动拉包 FOTA | 全国只要有 5G 信号就能联网 | 工业网关、高清视频监控、边缘计算终端 |
备注:一个设备可以携带多种通信模组,如LoRa网关,既有LoRa 射频模组与LoRa子设备通信,又带4G模组,把设备的数据上云。
-
单协议设备:升级流程只需考虑这一种链路的特性(比如NB-IoT必须用LwM2M做分片传输)。
-
多协议设备/网关 :OTA策略会更复杂,但也是优势。比如,网关可以用4G/以太网这种高带宽链路下载自己的固件 ,同时通过LoRa/Zigbee把子设备的固件分包转发下去。这样,网关就变成了子设备OTA的"代理下载器"。
升级时长
| 通信协议 | 固件大小 | 下载/总升级时长 | 关键条件 |
|---|---|---|---|
| 蓝牙 (BLE) | ~60 KB | 约 1 秒 (传输) | 优化连接参数、内部对测环境 |
| BLE (低功耗设计) | ~180 KB | 2.8 秒 (传输) / 5.4 秒 (总计) | 含加载,2M PHY,无压缩加密 |
| CoAP (IEEE 802.15.4) | 未注明 | 17.26 秒 (无线) | 512 字节块大小,无线 Mesh 环境 |
| MQTT-SN (IEEE 802.15.4) | 未注明 | 30.15 秒 (无线) | 512 字节块大小,受超时重传机制拖累 |
| LoRa (自定义方案) | 1 KB | 约 118 秒 | 单邻居,极低带宽,时长随固件增大激增 |
| LoRa (自定义方案) | 100 KB | 约 449 秒 (~7.5分钟) | 单邻居,100KB 固件 |
| LoRa (分块方案) | 0.641 KB | 1.61 分钟 | 极小差分/分块固件 |
| NB 模组 (BC26) + TCP 透传 | 110 KB | 约 3 分钟多 (下载) | 每包 256 字节、间隔 500ms,440 包计算得出 |
| NB-IoT 模组固件升级 | 未注明 | 最长 15 分钟 | 厂商工具升级模组本身的固件,含擦写流程 |
| 华为云 LwM2M FOTA | 未注明 | 下载超时 60 分钟 ,上报超时 30 分钟 | 平台侧的超时阈值,非实际耗时,但反映了工程预期的上限 |
| 多设备 LAN 场景 OTA | 未注明 | 全流程 1-2 分钟 | 含下载、重启、确认,20 台设备并发时增量很小 |
QA
什么时候升级
根据实际情况来设置,1)上传完单个升级固件包,就开始升级;2)上传完多个升级固件包,再统一时间升级,这种情况一般是跟软件版本迭代放一起,方便一起通知到用户。
什么情况下会升级失败
分三种情况:
1)下载升级固件包阶段
- 网络通信问题
- 4G/NB 信号弱、丢包高、基站波动;NB PSM/eDRX 唤醒超时,分片拉取不到
- MQTT/CoAP/HTTPS 连接断开、服务器断连、证书过期、DTLS/TLS 握手失败
- 分片丢失,重传次数耗尽;CoAP Block2 / HTTP Range 请求失败
- 固件包本身问题
- 固件包损坏、包不完整;平台下发错误版本、固件和硬件型号不匹配
- 固件大小超出 Flash 可用空间,存储空间不足
- 设备资源不足 RAM 内存不够,分片缓存溢出;Flash 读写异常(Flash 磨损、坏块)
- 权限 / 校验不通过 固件签名校验失败、CRC/SHA 校验不通过,设备直接拒绝写入。
2)激活/重启失败阶段
固件已经写入备用分区,标记准备升级,重启环节出问题。
- Bootloader 读取 B 分区固件失败:Flash 坏块、写入时断电,固件损坏
- 固件镜像校验失败(签名、哈希不对),Bootloader 放弃启动新固件,触发回滚到老版本(A/B 分区保护)
- 新固件启动崩溃:
- 新固件 Bug:初始化硬件(球阀执行器、阀位采集、4G/NB 模组)直接 HardFault、看门狗复位
- 硬件兼容性 Bug,例如:新版本驱动和当前 PCB / 外围器件不兼容
A/B 分区作用:启动自检失败,Bootloader 自动回滚旧固件,设备还能正常工作。
3)运行自检阶段
新固件成功启动,但是业务自检不通过,判定升级失败,触发回滚:
- 外设自检失败:阀位采集异常、球阀执行器通讯异常、传感器读取失败
- 通信自检失败:无法连上 IoT 平台,MQTT 无法建立连接
- 看门狗频繁复位,设备反复重启;业务心跳超时
4)硬件本身原因导致升级失败(底层硬件问题)
- Flash 芯片老化、坏块,写入固件分片失败;擦写次数耗尽
- 电源不稳:升级擦写 Flash 瞬间电压跌落,写 Flash 出错(工业现场很常见)
- 硬件电路故障:MCU、射频模组硬件损坏,无法联网或者无法读写 Flash
5)边界场景:单分区升级(无 A/B,高危,新项目不用)
固件直接覆盖运行区。一旦写入中途断电,固件彻底损坏,设备变砖,无法自恢复。
升级后设备是否要重启
设备升级前,一般可以做到保持当前运行状态,比如球阀开着浇水,可以不做不做任何调整做无感升级。但升级后,如果是主程序升级就需要重启(这是系统强制重启)、补丁类升级就不用重启。正在