更新时间:2024-07-12 03:11:25下载pdf
本文介绍扩展固件 OTA 升级服务。
OTA(Over-the-Air)即空中下载技术,通过网络远程为设备更新和升级软件程序。
蓝牙 LE 标准协议接入支持 MCU 扩展固件 OTA 功能。通过 涂鸦开发者平台,首先将需要更新的固件文件上传至涂鸦服务器。接着,蓝牙模组通过涂鸦协议对文件进行分包传输,最终 MCU 接收升级包并写入扩展模块本地闪存,实现固件的升级。详细的平台操作,参考 固件升级 和 选择和管理固件版本。
该部分协议为 MCU 扩展固件的升级协议。
MCU 发送
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55,0xAA |
版本号 | 1 | 0x00 |
命令字 CMD | 1 | 0xF9 |
数据长度 | 7n+1 | 数据字段字节数之和 |
数据 | 1 | channel_number |
7 | channel_data:channel(1 字节)+ Soft_ver(3 字节)+ Hard_ver(3 字节) | |
…… | 多个扩展固件需要有 channel_number 个 channel_data | |
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
channel_number
:用于扩展固件的扩展通道数量,同时也表示有多少组 channel_data
。channel
:固件通道号(10~19),涂鸦开发者平台创建固件时生成。Soft_Ver
:MCU 当前固件版本号,例如 0x01 00 02
代表版本为 V1.0.2。Hard_ver
:MCU 当前硬件版本号,PCBA 版本号。模组返回
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55 0xAA |
版本号 | 1 | 0x00 |
命令字 CMD | 1 | 0xF9 |
数据长度 | 2 | 0x00 0x01 |
State | 1 | 返回的状态值 |
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
State
返回值说明:
0x00
:成功升级开始时,蓝牙模组会向 MCU 发送扩展固件请求,以便获取扩展固件升级时可传输的最大单包长度。
模组发送
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55,0xAA |
版本号 | 1 | 0x00 |
命令字 CMD | 1 | 0xFA |
数据长度 Len | 2 | 数据字段字节数之和 |
数据 | 1 | channel |
2 | Len1 | |
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
channel
:固件通道号(10~19),涂鸦开发者平台创建固件时生成。
Len1
:最大单包数据长度,设备允许的单包数据最大长度,单位字节。
MCU 返回
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55,0xAA |
版本号 | 1 | 0x00 |
命令字 CMD | 1 | 0xFA |
数据长度 Len | 2 | 数据字段字节数之和 |
数据 | 1 | channel |
1 | Flag | |
5 | Type_data:Version(3 字节) + Len2(2 字节) | |
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
channel
:同下发。
Flag
:0x00
:允许升级,0x01
:拒绝升级。
Version
:当前固件版本号,例如 0x01 00 02
代表版本为 V1.0.2。
Len1
:模组限定最大单包数据长度。
Len2
:MCU 扩展固件升级时可接受最大包长度。如果 Len1
< Len2
,升级以 Len1
为准,反之以 Len2
为准。
扩展固件升级文件信息描述了升级的相关信息,MCU 可以利用这些信息来比较是否需要进行升级。
模组发送
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55,0xAA |
版本号 | 1 | 0x10 |
命令字 CMD | 1 | 0xFB |
数据长度 Len | 2 | 数据字段字节数之和 |
数据 | 1 | channel |
8 | PID | |
3 | 文件版本 | |
16 | 文件 MD5 | |
4 | 文件长度 | |
4 | CRC32 | |
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
channel
:固件通道号(10~19),涂鸦开发者平台创建固件时生成。
PID
:扩展固件所属 的 PID。
文件版本:例如 0x01 00 02
代表版本为 V1.0.2。
文件 MD5:升级固件的 MD5 值。
文件长度:升级固件的总长度,单位字节。
CRC32:升级固件的 CRC32。
MCU 返回
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55,0xAA |
版本号 | 1 | 0x10 |
命令字 CMD | 1 | 0xFB |
数据长度 Len | 2 | 数据字段字节数之和 |
数据 | 1 | channel |
1 | STATE | |
4 | 已存储文件长度 | |
4 | 已存储文件 CRC32 | |
16 | 已存储文件 MD5(目前不使用) | |
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
STATE
:
0x00
:正常升级。
0x01
:产品 PID 不一致。
0x02
:文件版本低于或者等于当前版本。
0x03
:文件大小超过范围。
其他:保留。
0
,表示从头开始传输。模组发送
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55,0xAA |
版本号 | 1 | 0x00 |
命令字 CMD | 1 | 0xFC |
数据长度 Len | 2 | 数据字段字节数之和 |
数据 | 1 | channel |
4 | OFFSET | |
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
channel
:固件通道号(10~19),涂鸦开发者平台创建固件时生成。
OFFSET
:文件起始传输偏移量,四字节。
MCU 返回
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55,0xAA |
版本号 | 1 | 0x00 |
命令字 CMD | 1 | 0xFC |
数据长度 Len | 2 | 数据字段字节数之和 |
数据 | 1 | channel |
4 | OFFSET | |
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
channel
:同下发。
OFFSET
:MCU 要求的起始传输文件偏移量。
实际文件传输的偏移地址应该以 MCU 端要求的为准,且 MCU 端要求的地址会小于等于模组端给出的偏移。
模组发送
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55,0xAA |
版本号 | 1 | 0x10 |
命令字 CMD | 1 | 0xFD |
数据长度 Len | 2 | 数据字段字节数之和 |
数据 | 1 | channel |
2 | 包号 | |
2 | 当前包数据长度 n | |
2 | 当前包数据 CRC16 | |
n | 当前包数据 | |
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
包号从 0
开始,当前包数据长度不能大于 OTA 升级请求指令指定的最大包长度。
MCU 返回
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55,0xAA |
版本号 | 1 | 0x00 |
命令字 CMD | 1 | 0xFD |
数据长度 Len | 2 | 数据字段字节数之和 |
数据 | 1 | channel |
1 | STATE | |
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
State
返回值说明:
0x00
:成功
0x01
:包号异常
0x02
:长度不一致
0x03
:CRC 校验失败
0x04
:其他
模组发送
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55 0xAA |
版本号 | 1 | 0x00 |
命令字 CMD | 1 | 0xFE |
数据长度 Len | 2 | 数据字段字节数之和 |
数据 | 1 | channel |
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
channel
:固件通道号(10~19),涂鸦开发者平台创建固件时生成。
MCU 返回
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55,0xAA |
版本号 | 1 | 0x00 |
命令字 CMD | 1 | 0xFE |
数据长度 Len | 2 | 数据字段字节数之和 |
数据 | 1 | channel |
1 | STATE | |
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
State
返回值说明:
0x00
:成功
0x01
:数据总长度错误
0x02
:长度不一致
0x03
:其他
A:该协议规定了扩展固件的升级协议,其协议格式在某种程度上与 MCU OTA 协议相似。主要区别在于命令字不同,此外,每个协议数据字段的最前面多了一个 channel
通道号字段,表示该命令是对应哪个固件的。在 MCU 端代码设计上,可以在 MCU OTA 组件上增加通道号的处理,并通过命令字进行区分。
示例:
0xEA
~0xEF
,则默认通道号为 9(MCU 固件)。0xFA
~0xFE
,则将数据字段的最前面一个字节解析为通道号,其余的部分偏移一个字节后与之前一样进行解析。A:是的,有以下前提要求:
首先,在涂鸦开发者平台,您需要在该产品下创建扩展固件,并记录扩展固件的通道号。
MCU 在同步 MCU 信息(CMD-0x01
)之后,需要使用 扩展固件信息上报(CMD-0xF9) 命令上报扩展固件的信息。
A:MCU 可通过升级协议 CMD-0xFA
~0xFE
中的 channel
字段进行差异化,用于区分升级固件。此处 channel
指的是升级通道号,每个在平台上创建的升级固件都会分配一个通道号。
A:对于蓝牙 LE+X 架构的产品,在扩展固件升级流程的最后,只能使用 扩展固件升级文件信息(CMD-0xFB) 命令中的 MD5 值来进行升级文件的校验。CRC32 仅在蓝牙链路真实有效,在蜂窝链路下 CRC32 由于协议上的兼容性问题不支持。
A:目前,仅交付物名称是 FR8016HA 通用对接或 BF6H 蓝牙单点通用固件支持扩展固件升级服务(固件 key:keywt49k
,版本:1.3.0 以上)。后续,其他通用模组会陆续上线该功能。
如果在开发过程遇到问题,您可以登录 TuyaOS 开发者论坛 TuyaOS-蓝牙设备开发 版块进行沟通咨询。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈