10 给lorawan设备做固件远程升级(FUOTA)
IMX93-GW8016 网关支持 FUOTA(Firmware Update Over-The-Air)固件空中升级功能,可实现 LoRaWAN 设备的远程固件更新,无需现场操作即可完成设备软件升级和维护。
10.1 FUOTA 技术原理
FUOTA 基于 LoRa Alliance 的 《LoRaWAN Fragmented Data Block Transport Specification》 协议,采用 LDPC(Low Density Parity Check)前向纠错算法,在 LoRaWAN 低速率、不稳定的无线环境中实现可靠的大数据块传输。
10.1.1 核心技术特点
- 前向纠错编码:通过 LDPC 算法实现数据冗余编码,即使部分数据包丢失也能恢复完整固件
- 分片传输:将固件文件分割为固定大小的数据块(Fragment),逐个下发
- 无重传机制:理想情况下仅依靠单向下行通信完成传输,减少网络负载
- 高容错性:支持 20-30% 的丢包率,仍能成功恢复固件
10.2 FUOTA 架构图
graph TB
subgraph "网关 Gateway"
GW["IMX93-GW8016<br/>FUOTA 服务器"]
ENCODER["LDPC 编码器"]
FRAGMENT["分片管理器"]
SCHEDULER["下行调度器"]
end
subgraph "LoRa 无线传输"
AIR["LoRaWAN 下行<br/>丢包率: 0-30%"]
end
subgraph "LoRaWAN 设备 End Device"
DEV["传感器节点"]
DECODER["LDPC 解码器"]
STORAGE["Flash 存储"]
BOOTLOADER["Bootloader"]
end
subgraph "FUOTA 流程"
FLOW1["① 固件编码<br/>M块 → N块<br/>(N > M)"]
FLOW2["② 分片下发<br/>逐个发送"]
FLOW3["③ 接收解码<br/>恢复 M 块"]
FLOW4["④ 固件校验<br/>CRC32/SHA256"]
FLOW5["⑤ 应用升级<br/>重启生效"]
end
%% 编码流程
GW -->|固件文件| ENCODER
ENCODER -->|编码数据块| FRAGMENT
FRAGMENT -->|分片序列| SCHEDULER
SCHEDULER -->|LoRa 下行| AIR
%% 无线传输
AIR -.->|部分丢包| DEV
%% 解码流程
DEV -->|接收数据块| DECODER
DECODER -->|恢复固件| STORAGE
STORAGE -->|校验通过| BOOTLOADER
BOOTLOADER -->|升级完成| DEV
%% 流程标注
ENCODER -.->|对应| FLOW1
SCHEDULER -.->|对应| FLOW2
DECODER -.->|对应| FLOW3
STORAGE -.->|对应| FLOW4
BOOTLOADER -.->|对应| FLOW5
%% 样式
classDef gateway fill:#e3f2fd,stroke:#0d47a1,stroke-width:2px
classDef device fill:#e8f5e9,stroke:#1b5e20,stroke-width:2px
classDef air fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef flow fill:#fce4ec,stroke:#880e4f,stroke-width:2px
class GW,ENCODER,FRAGMENT,SCHEDULER gateway
class DEV,DECODER,STORAGE,BOOTLOADER device
class AIR air
class FLOW1,FLOW2,FLOW3,FLOW4,FLOW5 flow
10.3 LDPC 算法原理
10.3.1 编码过程(Encode)
步骤:
- 将固件文件等长划分为 M 个数据块,每块包含
FragSize字节 - 原始数据矩阵:[B1, B2, B3, ..., Bm] - 通过 LDPC 算法生成 N-M 个冗余数据块(N > M) - 冗余数据:
[Bm+1, Bm+2, ..., BN] - 每个冗余块
Bx由原始数据块的异或运算生成: -Bx = Cx1·B1 ⊕ Cx2·B2 ⊕ ... ⊕ Cxm·Bm- 其中Cx是由matrix_line(x-m, M)函数生成的伪随机布尔向量
示例:
- 固件大小:50 KB,分片大小:200 字节
- 原始数据块:M = 256 块
- 编码数据块:N = 320 块(冗余率 25%)
- 理论可容忍丢包:64 块(20%)
10.3.2 解码过程(Decode)
网关采用 算法二(Semtech 优化实现),相比协议标准算法一,内存占用更低:
算法一(协议标准):
- 内存占用:
M × M + 2 × M - 适用场景:通用型,无内存限制
算法二(Semtech 实现):
- 内存占用:
T × T + 2 × T + 2 × M - 其中
T为允许的最大丢包数(T ≤ M) - 优势:针对低丢包率场景优化,大幅减少内存需求
解码步骤:
- 设备接收数据块,记录丢包位图
- 收到编码数据块后,尝试恢复丢失的原始数据块
- 当接收到的有效数据块数量 ≥ M 时,启动解码
- 通过矩阵运算(高斯消元)恢复所有原始数据块
- 对恢复的固件进行 CRC32/SHA256 校验
- 校验通过后,写入 Flash 存储并重启升级
10.4 技术优势
- 高可靠性:LDPC 前向纠错,适应 LoRaWAN 高丢包环境
- 低网络负载:无需上行确认,减少空口时间
- 批量升级:支持多播,可同时升级数百个设备
- 断点续传:设备断电重启后可继续接收剩余分片
- 兼容性强:基于 LoRa Alliance 标准协议,适配多种设备
10.5 支持的设备类型
IMX93-GW8016 网关与 深圳市唯传科技自研的 LoRaWAN 设备产品(如 Sensor Box 系列)完美适配,支持以下设备的 FUOTA:
- 多功能传感器盒
- 工业级 I/O 控制器