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 核心技术特点

  1. 前向纠错编码:通过 LDPC 算法实现数据冗余编码,即使部分数据包丢失也能恢复完整固件
  2. 分片传输:将固件文件分割为固定大小的数据块(Fragment),逐个下发
  3. 无重传机制:理想情况下仅依靠单向下行通信完成传输,减少网络负载
  4. 高容错性:支持 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)

步骤

  1. 将固件文件等长划分为 M 个数据块,每块包含 FragSize 字节 - 原始数据矩阵:[B1, B2, B3, ..., Bm]
  2. 通过 LDPC 算法生成 N-M 个冗余数据块(N > M) - 冗余数据:[Bm+1, Bm+2, ..., BN]
  3. 每个冗余块 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)
  • 优势:针对低丢包率场景优化,大幅减少内存需求

解码步骤

  1. 设备接收数据块,记录丢包位图
  2. 收到编码数据块后,尝试恢复丢失的原始数据块
  3. 当接收到的有效数据块数量 ≥ M 时,启动解码
  4. 通过矩阵运算(高斯消元)恢复所有原始数据块
  5. 对恢复的固件进行 CRC32/SHA256 校验
  6. 校验通过后,写入 Flash 存储并重启升级

10.4 技术优势

  1. 高可靠性:LDPC 前向纠错,适应 LoRaWAN 高丢包环境
  2. 低网络负载:无需上行确认,减少空口时间
  3. 批量升级:支持多播,可同时升级数百个设备
  4. 断点续传:设备断电重启后可继续接收剩余分片
  5. 兼容性强:基于 LoRa Alliance 标准协议,适配多种设备

10.5 支持的设备类型

IMX93-GW8016 网关与 深圳市唯传科技自研的 LoRaWAN 设备产品(如 Sensor Box 系列)完美适配,支持以下设备的 FUOTA:

  • 多功能传感器盒
  • 工业级 I/O 控制器