MCU 升级服务

更新时间:2024-07-30 03:03:29下载pdf

本文介绍如何进行 MCU 升级。何时进行 MCU 升级,由您在涂鸦开发者平台的产品页面配置相关升级选项触发。模组仅作为支持 MCU 升级的数据传输通道,不对数据内容做任何解析。

升级方式

目前,涂鸦的 MCU 升级支持以下三种升级方式的配置:

  • App 提醒升级:有新版本后,用户每次进入设备控制面板都会收到升级提醒的弹窗,是否确认升级由用户自己在 App 确认。
  • App 强制升级:App 端会有升级提醒弹窗,如果用户不确认升级,就没法正常使用该产品的控制面板。
  • App 检测升级:App 端不会有任何升级提醒的弹窗,必须要用户在 App 端单击相关固件版本检测。如果有高版本的固件配置,才会显示升级提示信息。

升级流程

MCU 升级流程如下:

  1. NB-IoT 模组发送完所有的升级包,重新发送 01 命令字(查询产品信息)。

  2. MCU 需要在一分钟回复产品信息中的 MCU 软件版本号(升级后的版本号)。版本号需要和在涂鸦开发者平台配置升级的版本号保持一致。

详细升级流程如下所示:

MCU 升级服务

升级启动(0x0C)

用于传输升级包大小、文件 CRC32 通知。

模组发送

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x0C
数据包长度 2 0x0008
数据 8
  • Data[0-3]:文件长度,0x000013CF
  • Data[4-7]:文件 CRC32,0xC20A5FBB
校验和 1 从帧头开始按字节求和,得出的结果对 256 求余

示例

55 AA 00 0C 00 08 000013CF C20A5FBB DB

MCU 返回

返回断点地址,可以支持从断点位置下载。

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x0C
数据长度 2 0x0001/0x0005
数据 5
  • Data[0]:
    • 0x00:64 字节每包传输
    • 0x01:128 字节每包传输
    • 0x02:256 字节每包传输
  • Data[1-4]:断点下载偏移地址
注意:数据长度为 0x0001 时,不传断点地址的话,默认从 0 地址开始完整下载文件。这是为了兼容之前 0x0001 长度协议。
校验和 1 从帧头开始按字节求和,得出的结果对 256 求余

示例

55 AA 00 0C 00 01 00 0C        // 64 字节
55 AA 00 0C 00 01 01 0D        // 128 字节
55 AA 00 0C 00 01 02 0E        // 256 字节
55 AA 00 0C 00 05 02 00000800 1A        // 从 2048 字节断点地址开始下载

升级包传输(0x0D)

模组发送信息

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x0D
数据长度 2 0x0044(包偏移 + 数据长度)
数据 4
  • Data[0-3]:OTA 包偏移,0x00000000
  • Data[4-n]:实际 OTA 数据
校验和 1 从帧头开始按字节求和,得出的结果对 256 求余

示例

升级文件大小 530 字节,最后一包也要回复。

  • 第一包,包偏移 0x00000000,数据包长度 256 字节

    55 AA 00 0D 01 04 00000000 xxx...xxx XX
    
  • 第二包,包偏移 0x00000100,数据包大小 256 字节

    55 AA 00 0D 01 04 00000100 xxx...xxx XX
    
  • 倒数第 2 包,包偏移 0x00000200,数据包大小 18 字节

    55 AA 00 0D 01 04 00000200 xxx...xxx XX
    
  • 最后一包,包偏移 0x00000212,数据包大小 0 字节

    55 AA 00 0D 00 04 00000212 XX
    

MCU 返回信息

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x0D
数据长度 2 0x0000/0x0001
数据 1 Data[0]:
  • 00:MCU CRC32 校验成功。
  • 01:MCU CRC32 校验失败。
注意:最后一包需要等待 MCU 回复 CRC32 校验结果,兼容之前的协议,旧协议不改动也能正常运行,可参考示例。
校验和 1 从帧头开始按字节求和,得出的结果对 256 求余

示例

升级文件大小为 530 字节,最后一包也要回复。

  • 模组最后一包,包偏移 0x00000212,数据包大小 0 zi:

    55 AA 00 0D 00 04 00000212 XX
    
  • MCU 回复:

    10s 不回复           // 默认 MCU 校验文件 CRC32 成功
    55 AA 00 0D 00 00 0C          // MCU 校验文件 CRC32 成功
    55 AA 00 0D 00 01 00 0D     // MCU 校验文件 CRC32 成功
    55 AA 00 0D 00 01 01 0E     // MCU 校验文件 CRC32 失败
    

查询文件下载百分比(0xC3)

只要是文件下载,就能查询百分比,包括 Schema 文件、NB-IoT 升级文件、MCU 升级文件、MCU 通用文件下载。任何一个文件都有下载百分比。

MCU 发送信息

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

MCU 发送示例

55 aa 00 c3 00 00 c2

模组返回信息

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0xC3
数据长度 2 0x0002
数据 2 下载状态与百分比
BYTE[0] 1
  • 0x00:无下载
  • 0x01:正在下载
BYTE[1] 1 下载百分比(0-100)
校验和 1 从帧头开始按字节求和,得出的结果对 256 求余

示例

55 aa 00 c3 00 01 01 18 dc