MCU 升级服务

更新时间:2024-05-30 10:34:58下载pdf

本文介绍蜂窝 MCU OTA 升级服务的流程及指令说明。

  • OTA(Over-the-Air)即空中下载技术,通过网络远程为设备更新和升级软件程序。

  • 蜂窝标准协议接入支持 MCU OTA 功能。通过 涂鸦 IoT 开发平台,先将需要更新的固件文件上传至涂鸦服务器,然后蜂窝模组通过涂鸦协议对文件进行分包传输,最后 MCU 接收升级包并写入本地闪存,最终实现固件的升级。详细的平台操作,参考 固件升级选择和管理固件版本

功能流程

MCU OTA 功能需要设备 MCU 资源支持,设备配网成功后,通过平台配置或升级检测,可以启动 OTA 流程。升级流程如下:

模组MCU发送 MCU 升级启动回复升级包分包传输大小发送第 1 包固件数据存储固件数据,并在 5 秒内回复接收正确如果 5 秒内未收到回复,重发 3 次,未收到回复则升级失败发送第 N 包固件数据回复接收正确发送最后一包固件数据校准固件信息,并切换新固件,成功后重启,升级完成模组MCU

升级启动(0x0a)

升级启动方式含自动及手动升级。

  • 当处于自动升级时,模组检测到云端 MCU 有更新版本固件,则自动启动与 MCU 升级包交互流程。
  • 当处于手动升级时,通过 App 确定,模组才启动与 MCU 升级包交互流程。

模组发送

  • U: 0 协议版本:0x00

    字段 字节数 说明
    帧头 2 0x55aa
    版本 1 0x00
    命令字 1 0x0a
    数据长度 2 0x0004
    数据 4 固件包字节数,类型为 unsigned int,采用大端传输
    校验和 1 从帧头开始按字节求和,得出的结果对 256 求余

    示例:0x55aa 00 0a 0004 00006800 75(固件包长度 26624,即 26KB)

  • U: 1 协议版本:0x01

    字段 字节数 说明
    帧头 2 0x55aa
    版本 1 0x01
    命令字 1 0x0a
    数据长度 2 0x004F
    数据 40
    • 4 字节固件包大小,类型为 unsigned int,采用大端传输
    • 32 字节 MD5 字符串
    • 1 字节通道号
    • 3 字节版本,如版本为 01.2.04,则为 010204
    校验和 1 从帧头开始按字节求和,得出的结果对 256 求余

MCU 返回

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x03
命令字 1 0x0a
数据长度 2 0x0001
数据 1 升级包分包传输大小:
  • 0x00:默认 256 字节(兼容旧固件)
  • 0x01:512 字节
  • 0x02:1024 字节
校验和 1 从帧头开始按字节求和,得出的结果对 256 求余

示例:0x55aa 03 0a 0001 00 0d

升级包传输(0x0b)

  • 升级包传输数据格式为:

    通道号(协议版本 01) + 包偏移(unsigned short) + 包数据

  • MCU 若收到该帧数据长度为 4,且包偏移大于等于固件大小,则包传输结束。

  • 最后一包,包偏移为固件大小,数据包长度为 0。

模组发送

  • U: 0 协议版本 0x00:

    字段 字节数 说明
    帧头 2 0x55aa
    版本 1 0x00
    命令字 1 0x0b
    数据长度 2 0x0004+数据包长度
    数据 4+N 前四字节,固定为包偏移,后面为数据包内容
    校验和 1 从帧头开始按字节求和,得出的结果对 256 求余
  • U: 1 协议版本 0x01:

    字段 字节数 说明
    帧头 2 0x55aa
    版本 1 0x01
    命令字 1 0x0b
    数据长度 2 0x0005+数据包长度
    数据 5+N
    • 通道号,1 字节
    • 包偏移,4 字节
    • 数据包,N 字节
    校验和 1 从帧头开始按字节求和,得出的结果对 256 求余

示例:若要升级的文件大小 530 字节,最后一包数据可不回复。

  • 第一包数据,包偏移为 0x00000000,数据包长度为 256 字节,0x55aa 00 0b 0104 00000000 xx…xx XX
  • 第二包数据,包偏移为 0x00000100,数据包长度为 256 字节,0x55aa 00 0b 0104 00000100 xx…xx XX
  • 第三包数据,包偏移为 0x00000200,数据包长度为 18 字节,0x55aa 00 0b 0016 00000200 xx…xx XX
  • 最后一包,包偏移为 0x00000212,数据包长度为 0 字节,0x55aa 00 0b 0004 00000212 xx...xx XX

MCU 返回

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x03
命令字 1 0x0b
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始按字节求和,得出的结果对 256 求余

示例:0x55aa 03 0b 0000 0d

升级状态通知(0x34 09)

模组发送

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x34
数据长度 2 0x0002
数据 2
  • 0x09(子命令):1 字节
  • 0x01(状态):1 字节,表示升级文件校验失败
校验和 1 从帧头开始按字节求和,得出的结果对 256 求余

MCU 返回

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x03
命令字 1 0x34
数据长度 2 0x0001
数据 1 0x09(子命令)
校验和 1 从帧头开始按字节求和,得出的结果对 256 求余