更新时间:2025-10-16 09:30:37下载pdf
OTA(Over the air)即空中下载技术,通过网络远程为设备更新软件程序。
蓝牙 Mesh 标准协议(通用对接固件 key:keyen8gu,版本为 v0.2 以上)接入支持 MCU OTA 功能。
首先将需要升级的固件文件通过 涂鸦开发者平台 上传至涂鸦服务器,配置好升级操作。蓝牙模组收到云端推送后会根据以下协议将文件进行分包传输,最终 MCU 接收升级文件并写入本地闪存,实现固件的升级。详细的平台操作,请参考 固件升级 和 选择固件版本。
| 命令字 | 命令说明 |
|---|---|
| 0xD8 | 模组主动获取 MCU 当前版本号 |
| 0xD9 | MCU 主动上报当前版本号 |
| 0xDA | MCU OTA 升级请求 |
| 0xDB | MCU OTA 升级文件信息 |
| 0xDC | MCU OTA 升级文件偏移 |
| 0xDD | MCU OTA 升级数据传输 |
| 0xDE | MCU OTA 升级校验 |
| 0xDF | MCU OTA 升级结束 |
模组发送
| 序号 | 长度(字节) | 字段 | 说明 |
|---|---|---|---|
| 01 | 2 | 帧头 | 0x550xAA |
| 2 | 1 | 版本号 | 0x00 |
| 3 | 1 | 命令字(CMD) | 0xD8 |
| 45 | 2 | 数据长度 | 0x000x00 |
| 6 | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
MCU 返回
| 序号 | 长度(字节) | 字段 | 说明 |
|---|---|---|---|
| 01 | 2 | 帧头 | 0x550xAA |
| 2 | 1 | 版本号 | 0x00 |
| 3 | 1 | 命令字(CMD) | 0xD8 |
| 45 | 2 | 数据长度 | 0x000x08 |
| 6-13 | 8 | Data | 见下表 |
| 14 | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
Data 格式
| 1-3 | 4-6 | 7-8 |
|---|---|---|
| MCU-soft-version | MCU-hard-version | Len |
MCU-soft-version:MCU 当前固件软件版本号,例如 0x010000 代表版本号为 1.0.0。MCU-hard-version:MCU 当前固件硬件版本号(PCBA 版本号),例如 0x010000 代表版本号为 1.0.0。Len:此长度为 OTA 升级数据(0xDD)中数据包最大长度,MCU 根据自身资源情况,通过此接口设定后续升级数据包最大长度。MCU 发送
| 序号 | 长度(字节) | 字段 | 说明 |
|---|---|---|---|
| 01 | 2 | 帧头 | 0x550xAA |
| 2 | 1 | 版本号 | 0x00 |
| 3 | 1 | 命令字(CMD) | 0xD9 |
| 45 | 2 | 数据长度 | 0x000x08 |
| 6-13 | 8 | Data | 见下表 |
| 14 | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
Data 格式
| 1-3 | 4-6 | 7-8 |
|---|---|---|
| MCU-soft-version | MCU-hard-version | Len |
MCU-soft-version:MCU 当前固件软件版本号,例如 0x010000 代表版本号为 1.0.0。MCU-hard-version:MCU 当前固件硬件版本号(PCBA 版本号),例如 0x010000 代表版本号为 1.0.0。Len:此长度为 OTA 升级数据(0xDD)中数据包最大长度,MCU 根据自身资源情况,通过此接口设定后续升级数据包最大长度。模组返回
| 序号 | 长度(字节) | 字段 | 说明 |
|---|---|---|---|
| 01 | 2 | 帧头 | 0x550xAA |
| 2 | 1 | 版本号 | 0x00 |
| 3 | 1 | 命令字(CMD) | 0xD9 |
| 45 | 2 | 数据长度 | 0x000x08 |
| 6 | 1 | State |
|
| 7 | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
模组发送
| 序号 | 长度(字节) | 字段 | 说明 |
|---|---|---|---|
| 01 | 2 | 帧头 | 0x550xAA |
| 2 | 1 | 版本号 | 0x00 |
| 3 | 1 | 命令字(CMD) | 0xDA |
| 45 | 2 | 数据长度 | 0x000x00 |
| 6 | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
MCU 返回
| 序号 | 长度(字节) | 字段 | 说明 |
|---|---|---|---|
| 01 | 2 | 帧头 | 0x550xAA |
| 2 | 1 | 版本号 | 0x00 |
| 3 | 1 | 命令字(CMD) | 0xDA |
| 45 | 2 | 数据长度 | 0x000x04 |
| 6-9 | 4 | Data | 见下表 |
| 10 | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
Data 格式
| 1 | 4-6 |
|---|---|
| State | version |
State:
0x00:允许升级0x01:拒绝升级version:当前固件版本号,例如 0x010002 代表版本号为 1.0.2。描述 MCU 升级文件的信息,MCU 可以对升级信息进行对比。
模组发送
| 序号 | 长度(字节) | 字段 | 说明 |
|---|---|---|---|
| 01 | 2 | 帧头 | 0x550xAA |
| 2 | 1 | 版本号 | 0x00 |
| 3 | 1 | 命令字(CMD) | 0xDB |
| 45 | 2 | 数据长度 | 0x000x23 |
| 6-40 | 35 | Data | 见下表 |
| 41 | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
Data 格式
| 8 字节 | 3 字节 | 16 字节 | 4 字节 | 4 字节 |
|---|---|---|---|---|
| 产品 PID | 版本号(目前不适用) | 文件 MD5(目前不适用) | 文件长度 | CRC32 |
产品 PID:MCU 的 PID。版本号:将升级的文件版本,例如,0x010001 代表版本号为 1.0.2(目前不适用)。文件 MD5:升级固件的 MD5 值(目前不适用)。文件长度:升级固件的总长度,单位为字节。CRC32:升级固件的 CRC32。MCU 返回
| 序号 | 长度(字节) | 字段 | 说明 |
|---|---|---|---|
| 01 | 2 | 帧头 | 0x550xAA |
| 2 | 1 | 版本号 | 0x00 |
| 3 | 1 | 命令字(CMD) | 0xDB |
| 45 | 2 | 数据长度 | 0x000x19 |
| 6-30 | 25 | Data | 见下表 |
| 31 | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
Data 格式
| 1 字节 | 4 字节 | 4 字节 | 16 字节 |
|---|---|---|---|
| State | 已存储文件长度 | 已存储文件 CRC32 | 已存储文件 MD5(目前不适用) |
State:
0x00:正常升级0x01:产品 PID 不一致0x02:保留0x03:文件大小超过范围已存储文件长度:代表上次升级意外中断,MCU 已经升级的部分文件长度。已存储文件 CRC32:代表上次升级意外中断,MCU 已经升级的部分文件计算的 CRC32。0,表示从头开始传输。0 回复。若使用网关升级并在网关升选择的是群升操作,那么不支持断电续传功能,无论 MCU 端回复的已存储的文件信息是上次升级的偏移量还是 0,都会从偏移量 0 开始传输。
下发文件起始传输偏移量,并比较 MCU 返回的偏移量。如果它们匹配,表示文件传输可以从该偏移量处继续。如果不匹配,将重新开始传输整个文件。
模组发送
| 序号 | 长度(字节) | 字段 | 说明 |
|---|---|---|---|
| 01 | 2 | 帧头 | 0x550xAA |
| 2 | 1 | 版本号 | 0x00 |
| 3 | 1 | 命令字(CMD) | 0xDC |
| 45 | 2 | 数据长度 | 0x000x04 |
| 6-9 | 4 | Offset | 文件起始传输偏移量,四字节 |
| 10 | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
Offset:手机或者网关根据 0xDB 设备回复的已存储长度和 CRC32 匹配的偏移量。
MCU 返回
| 序号 | 长度(字节) | 字段 | 说明 |
|---|---|---|---|
| 01 | 2 | 帧头 | 0x550xAA |
| 2 | 1 | 版本号 | 0x00 |
| 3 | 1 | 命令字(CMD) | 0xDC |
| 45 | 2 | 数据长度 | 0x000x04 |
| 6-9 | 4 | Offset | MCU 要求的起始传输文件偏移量 |
| 10 | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
Offset:设备本地维护的升级偏移量。
0。模组发送
| 序号 | 长度(字节) | 字段 | 说明 |
|---|---|---|---|
| 01 | 2 | 帧头 | 0x550xAA |
| 2 | 1 | 版本号 | 0x00 |
| 3 | 1 | 命令字(CMD) | 0xDD |
| 45 | 2 | 数据长度 Len | 长度高 8 位长度低 8 位 |
| 6 - 6+Len-1 | Len | Data | 见下表 |
| 6+Len | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
Data 格式
| 4 字节 | 2 字节 | 2 字节 | n 字节 |
|---|---|---|---|
| 数据偏移 | 当前包数据长度 n | 当前包数据 CRC16 | 当前包数据 |
0xd8 和 0xd9 指令中设置的 Len)。MCU 返回
| 序号 | 长度(字节) | 字段 | 说明 |
|---|---|---|---|
| 01 | 2 | 帧头 | 0x550xAA |
| 2 | 1 | 版本号 | 0x00 |
| 3 | 1 | 命令字(CMD) | 0xDD |
| 45 | 2 | 数据长度 | 0x000x01 |
| 6 | 1 | State |
|
| 11 | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
模组发送
| 序号 | 长度(字节) | 字段 | 说明 |
|---|---|---|---|
| 01 | 2 | 帧头 | 0x550xAA |
| 2 | 1 | 版本号 | 0x00 |
| 3 | 1 | 命令字(CMD) | 0xDE |
| 45 | 2 | 数据长度 | 0x000x00 |
| 6 | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
MCU 返回
| 序号 | 长度(字节) | 字段 | 说明 |
|---|---|---|---|
| 01 | 2 | 帧头 | 0x550xAA |
| 2 | 1 | 版本号 | 0x00 |
| 3 | 1 | 命令字(CMD) | 0xDE |
| 45 | 2 | 数据长度 | 0x000x01 |
| 6 | 1 | State |
|
| 7 | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
模组发送
| 序号 | 长度(字节) | 字段 | 说明 |
|---|---|---|---|
| 01 | 2 | 帧头 | 0x550xAA |
| 2 | 1 | 版本号 | 0x00 |
| 3 | 1 | 命令字(CMD) | 0xDF |
| 45 | 2 | 数据长度 | 0x000x01 |
| 6 | 1 | State | 升级的结果通知:
|
| 7 | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
MCU返回
| 序号 | 长度(字节) | 字段 | 说明 |
|---|---|---|---|
| 01 | 2 | 帧头 | 0x550xAA |
| 2 | 1 | 版本号 | 0x00 |
| 3 | 1 | 命令字(CMD) | 0xDF |
| 45 | 2 | 数据长度 | 0x000x01 |
| 6 | 1 | State | 返回的状态值:
|
| 7 | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈