Files
JBao_JL7016_MOD_FW/Doc/OTA升级流程.md
wuchuyuan c0b5fcc4c5 加上模组 OTA:APP 用 55AA 的 0x30~0x39 升级,MCU 和模组分开升。
- MCU 升级:模组只原样转发,不存 MCU 固件
- 模组自己升级:写到备用区,校验通过后再切过去,成功回 0x34,等 APP 回 0x35 再重启
- 升模组时先通知 MCU 先别上报;升的过程中不跑心跳、不处理普通控制
- 关掉原来的 JSON OTA,改走这条协议
2026-08-20 16:12:08 +08:00

5.4 KiB
Raw Permalink Blame History

OTA升级流程

修订记录

文档版本 日期 编写人 修订类型 修订内容
V1.0.0 2026-07-09 麦田 新建 首次发布OTA升级流程文档

APP获取设备版本

设备连接服务器后,主动上报当前版本给服务器,服务器进行维护。

服务器维护:

字段 说明
固件类型 BLE / MCU
固件版本 当前版本号

APP进入设备页面后,找服务器获取当前固件版本。

服务器返回:

MCU固件
当前版本:V1.0.0

BLE固件
当前版本:V2.0.0

服务器推送OTA版本给APP

用户在服务器上传了bin文件,并填写了版本号和固件类型,点击发布。APP进入设备页面之后,服务器推送OTA文件信息给APP。

服务器推送:

MCU固件
OTA版本:V1.2.0
长度:128KB
CRC320x12345678

BLE固件
OTA版本:V2.0.1
长度:256KB
CRC320x87654321

APP进行版本比较

APP比较:

OTA版本 VS 设备当前版本

例如:

固件 当前版本 OTA版本 是否升级
MCU V1.0.0 V1.2.0
BLE V2.0.0 V2.0.1

如果两个固件都需要升级:

升级顺序:

第一步:MCU升级
第二步:BLE升级

避免 BLE 升级过程中影响 MCU OTA 通讯。


APP通知BLE准备OTA

APP发送OTA升级请求告诉 BLE 本次升级目标。

例如升级 MCU

Target:MCU
Firmware Version:V1.2.0
Payload Length:128KB
Payload CRC32:xxxx

BLE判断升级目标

BLE收到:OTA升级请求

进行固件类型判断:

情况1:升级BLE

流程:

APP
 |
 | OTA升级请求
 |
BLE
 |
 | 自身检查
 |
BLE返回准备结果

检查:

  • Flash空间

  • OTA状态

  • 固件信息

返回:OTA请求应答

成功:

Result = 0x00
Max Data Length = xxx

然后APP开始发送BLE Bin。


情况2:升级MCU

流程:

APP
↓
BLE
↓
MCU

BLE收到后:

提取:

  • Firmware Version

  • Payload Length

  • Payload CRC32

发送:

BLE 
|
|  OTA升级请求
↓ 
MCU

MCU检查OTA条件

MCU收到升级请求。

检查:

  1. 固件版本 :新版本 > 当前版本

  2. Flash空间

  3. OTA状态 返回:OTA请求应答

结果:

Result 含义
0x00 允许升级
0x20 无需升级(版本一致)
0x21 OTA 版本低于当前版本
0x22 Flash 空间不足
0x23 Bootloader 不支持
0x24 OTA 状态错误
0x25 固件类型不支持

同时返回:

Max Data Length

例如:

512 Byte

APP发送OTA Bin数据

APP按照:

Max Data Length

进行分包。

例如:

MCU允许:

512 Byte

发送:

当前分包序号
总分包数
OTA数据

流程:

APP
↓
OTA_DATA
↓
BLE
↓
OTA_DATA
↓
MCU

MCU接收OTA数据

MCU每收到一包:

  1. 校验数据包

  2. 写入OTA区域

  3. 累计接收长度

例如:

第一次:

received = 512

第二次:

received = 1024

直到:

received == Payload Length

表示:

数据接收完成。


OTA数据包应答

每包数据:

MCU返回:OTA数据应答

例如

成功:

Result=0x00

失败:

Result=错误码

如果失败:

BLE停止发送。


MCU完成OTA校验

全部数据接收完成。

MCU

计算:CRC32

比较:CRC32 VS OTA升级请求中的CRC32


校验成功

MCU:保存升级信息。

返回:OTA_RESULT

然后:重启。


校验失败

返回:OTA_RESULT

错误码:

例如:

CRC错误

MCU通知BLE升级结果

MCU升级完成后主动发送:MCU OTA完成通知

协议:0x34

内容:

OTA Result
MCU Version

BLE收到:添加上类型(0x01 MCU)

上传APP。


BLE通知APP升级结果

BLE发送:OTA完成通知

告诉APP

MCU升级完成
版本:V1.2.0
结果:成功

如果BLE也需要升级

MCU升级成功后:

APP继续:

Target = BLE

流程重新开始:

APP
↓
BLE
↓
BLE自身OTA

完成后:

BLE通知:

OTA成功

APP更新最终状态。


完整流程图

云服务器
                    |
                    |
                    ▼
             获取最新固件信息
                    |
                    ▼    
        APP比较版本,决定升级顺序
                    |
        ┌───────────┴───────────┐
        │                       │
     MCU升级                 BLE升级
        │                       │
     OTA升级请求              OTA升级请求
        │                       │
        ▼                       ▼
       BLE                     BLE
        │                       │
        │ 解包                  ▼
        ▼                    自身准备
     OTA升级请求              
        │
        ▼
       MCU
        │
        ▼
     OTA请求应答
        │
        ▼
     OTA数据
        │
        ▼
     OTA数据应答
        │
        ▼
     CRC校验
        │
        ▼
     OTA_RESULT
        │
        ▼
     MCU通知BLE
        │
        ▼
     BLE通知APP