更新时间:2024-11-04 03:20:20下载pdf
单点蓝牙通用模组具备配件激活能力,并为配件提供安全可靠的通信通路。单点蓝牙通用模组采用蓝牙低功耗(Bluetooth LE)技术,通过与非智能配件的 UART 接口连接,实现扩展通信功能。这样,非智能配件可以利用蓝牙模组与其他设备进行数据传输和互联,实现更广泛的通信能力。
典型应用方案
方案特点
该方案具有灵活性、稳定性和可靠性,并适用于多种应用场景。
以电池包为例,其构成包括主控 MCU 和蓝牙通用模组。MCU 和蓝牙模组之间通过 UART 接口进行通信,蓝牙模组提供与 App 连接以及云服务的功能。配件通过 UART 接口与电池包主控 MCU 进行通信,主控 MCU 接收到配件的串口数据后会完全透传给蓝牙模组进行处理。蓝牙模组会存储配件的设备信息,例如产品标识符(PID)、设备通用唯一识别码(UUID)和插拔状态。
当主控 MCU 通知蓝牙模组有配件插入时,若蓝牙模组与 App 处于连接状态,会将配件信息上报至 App 进行云端激活流程。激活成功后,蓝牙模组将为配件提供独立的蓝牙通信通路,使配件可以在 App 中访问独立面板进行控制和显示。
蓝牙单点通用模组
涂鸦模组调试助手
选择支持扩展 MCU 配件功能的蓝牙通用固件。
登录 涂鸦开发者平台。
单击 创建产品。
根据您已有的智能设备分类,选择产品类目,确定具体产品。例如 电工 > 电池包。
在 选择智能化方式 处,选择 产品开发。
在 自定义方案 处,选择电池包。
进入产品开发,在 03 硬件开发 中,选择 MCU SDK 对接方式,选择如下固件。
当前 Telink 系列模组对扩展 MCU 配件功能进行了适配,以下是当前支持该功能的交付物不完全列举。若您在 硬件开发 页面无法选择到对应的交付物,可 提交工单 联系涂鸦产品上架相应交付物。
明确约定连接方式为蓝牙模组通过 UART 与 MCU 连接,MCU 通过 UART 与配件连接。在下文中,简称蓝牙模组为 模组。鉴于配件通过 MCU 透传数据与蓝牙模组进行通信,为了方便调试,此处使用涂鸦模组调试助手充当 MCU 和配件的角色。以下是以电池包为例的测试步骤:
首先,蓝牙通用模组默认不支持配件挂载功能,您需要通过 MCU 信息-配件挂载支持配置(CMD-0x01) 来开启该功能。例如:
MCU -> 模组:55 AA 00 01 00 10 34 6B 78 36 68 6C 61 78 31 2E 30 2E 30 C2 01 01 BB(C2 配置项,格式为 C2 01 01,意味着启用配件挂载支持功能)
修改蓝牙模组的配件挂载支持能力后,需要重新进行蓝牙配网才能使更改生效。
通过涂鸦模组调试助手,向模组发送包含 PID、UUID 和固件信息的配件数据。例如:
配件 -> MCU -> 模组:55 AA 10 01 00 23 10 74 75 79 61 31 32 33 34 35 36 37 38 39 61 62 63 00 08 72 64 67 61 72 67 78 31 07 09 01 00 00 01 00 00 43
(UUID:tuya123456789abc
,配件 PID:rdgargx1
,配件固件信息:通道号 9,固件版本 1.0.0,硬件版本 1.0.0)
电池包 MCU 需要监测配件的插拔状态,并将此信息同步给蓝牙模组。一旦模组接收到配件插入的信号,将配件信息上报至 App,从而触发云端激活。随后,配件将在 App 主页中呈现,并获得独立的面板和通信通路。若未呈现,您可刷新主页。例如:
MCU -> 模组:55 AA 00 C2 00 02 00 01 C4
模组 -> MCU:55 AA 00 C2 00 01 00 C2
该部分协议为 MCU 扩展非智能配件联网控制的扩展协议。
为了便于理解,下文将以电池包-电动工具应用场景为例来描述协议,电池包为主设备,电动工具为非智能配件。
如果电动工具在 OTA 升级过程中,电池包上报电动工具被拔出,将导致电动工具 OTA 升级失败。
电池包 MCU 发送
序号 | 字节数 | 字段 | 说明 |
---|---|---|---|
0 1 |
2 | 帧头 | 0x55 0xAA |
2 | 1 | 版本号 | 0x00 |
3 | 1 | 命令字 CMD | 0xC2 |
4 5 |
2 | 数据长度 Len | 0x00 0x02 |
6 | 1 | SubCmd | 0x00 |
7 | 1 | status |
|
8 | 1 | CRC8 | 从帧头开始按字节求和得出的结果对 256 求余 |
蓝牙模组回复
序号 | 字节数 | 字段 | 说明 |
---|---|---|---|
0 1 |
2 | 帧头 | 0x55 0xAA |
2 | 1 | 版本号 | 0x00 |
3 | 1 | 命令字 CMD | 0xC2 |
4 5 |
2 | 数据长度 Len | 0x00 0x02 |
6 | 1 | SubCmd | 0x00 |
7 | 1 | Status |
|
8 | 1 | CRC8 | 从帧头开始按字节求和得出的结果对 256 求余 |
若电池包 MCU 需要获取蓝牙模组的 MAC 地址信息,可通过该接口查询。
电池包 MCU 发送
序号 | 字节数 | 字段 | 说明 |
---|---|---|---|
0 1 |
2 | 帧头 | 0x55 0xAA |
2 | 1 | 版本号 | 0x00 |
3 | 1 | 命令字 CMD | 0xBE |
4 5 |
2 | 数据长度 | 0x00 0x00 |
6 | 1 | CRC8 | 从帧头开始按字节求和得出的结果对 256 求余 |
蓝牙模组回复
序号 | 字节数 | 字段 | 说明 |
---|---|---|---|
0 1 |
2 | 帧头 | 0x55 0xAA |
2 | 1 | 版本号 | 0x00 |
3 | 1 | 命令字 CMD | 0xBE |
4 5 |
2 | 数据长度 | 0x00 0x06 |
6~11 | 6 | MAC | 见下表 |
12 | 1 | CRC8 | 从帧头开始按字节求和得出的结果对 256 求余 |
例如:模组的 MAC 地址为 DC:23:66:11:22:33
。
MCU 发送:55 AA 00 BE 00 00 BD
模组回复:55 AA 00 BE 00 06 DC 23 66 11 22 33 8E
每个配件必须严格遵循协议与主体设备进行交互。对于采用 MCU 通用对接方案的设备,MCU 应完全透传协议版本为 0x10
的串口帧,以供蓝牙低功耗模组处理配件消息。
序号 | 字节数 | 字段 | 说明 |
---|---|---|---|
0 1 |
2 | 帧头 | 0x55 0xAA |
2 | 1 | 版本号 | 0x10 |
3 | 1 | 命令字 CMD | 具体帧类型 |
4 5 |
2 | 数据长度 Len | Len 高 8 位 Len 低 8 位 |
6~6+Len-1 | Len | 数据 | / |
6+Len | 1 | CRC8 | 从帧头开始按字节求和得出的结果对 256 求余 |
所有大于 1 个字节的数据均采用大端模式传输。协议版本号固定为 0x10
,为配件专用,可通过 0x55AA10
来识别配件的命令帧。
字段 | 字节数 | 说明 |
---|---|---|
dp_id | 1 | DP 的指令码 |
dp_type | 1 | DP 的数据类型 |
dp_data_len | 2 | DP 的数据长度 |
dp_data_value | dp_data_len | DP 的数据 |
dp_type
的取值范围及含义(云端定义):
dp_type | 取值 | 字节数 | 说明 |
---|---|---|---|
raw | 0x00 | 1~255 | 原始类型,Hex 数组 |
bool | 0x01 | 1 | 布尔值 |
value | 0x02 | 4 | 值类型(Integer) |
string | 0x03 | 0~255 | 字符串,可能为空 |
enum | 0x04 | 1 | 枚举型 |
bitmap | 0x05 | 1/2/4 | 长度大于 1 字节时,大端表示 |
当配件接入主设备后,需进行握手。若 3 秒内未收到主设备的响应,需要重试,直至收到主设备的响应为止。
配件发送
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55 0xAA |
版本号 | 1 | 0x10 |
命令字 CMD | 1 | 0x00 |
数据长度 Len | 2 | 数据字段字节数之和 |
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
例如:
55 AA 10 00 00 00 0F
主设备返回
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55 0xAA |
版本号 | 1 | 0x10 |
命令字 CMD | 1 | 0x00 |
数据长度 Len | 2 | 数据字段字节数之和 |
数据 | 1 | op_code :
|
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
例如:
55 AA 10 00 00 01 00 10
若配件收到主设备的握手返回值为 0x00
,则配件需要发送该指令。
配件必须确保主设备成功接收信息。如果接收失败或者接收超时时间超过 3 秒,则需要进行重发,直到信息成功被主设备接收。
配件 OTA 升级开始后,直到配件 OTA 升级结束之前,禁止通过该命令上报设备信息,否则可能导致升级异常。配件端应增加相应逻辑,确保 OTA 升级过程中不会上报该命令。
配件发送
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55,0xAA |
版本号 | 1 | 0x10 |
命令字 CMD | 1 | 0x01 |
数据长度 Len | 2 | 数据字段字节数之和 |
数据 | 1 | UUID_LEN |
16 | UUID | |
1 | ID_TYPE:0-Product ID(8 字节) | |
1 | ID_LEN (8) | |
8 | ID | |
1 | FW_INFO_LEN:固件信息的长度 | |
FW_INFO_LEN | FW_INFO_LIST:格式见下表 | |
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
FW_INFO_LIST
:固件信息列表,支持多个固件,配件依实际情况填写。
7 字节 | …… | 7 字节 |
---|---|---|
FW_INFO1 | …… | FW_INFOn |
FW_INFO
:
1 字节 | 3 字节 | 3 字节 |
---|---|---|
channle | soft_version | hard_version |
channel
:0~19
,在平台创建时生产的固件通道号。soft_version
:例如 0x01 00 02
代表版本为 V1.0.2。hard_version
:例如 0x01 00 02
代表版本为 V1.0.2。例 1:配件含有 3 个固件,分别是配件 MCU 固件、扩展固件 1 和扩展固件 2。
55 AA 10 01 00 31 10 38 30 30 63 39 39 66 30 33 35 34 39 62 61 33 63 00 08 74 38 78 6A 61 77 76 73 15 09 00 00 01 00 01 00 0A 00 00 01 00 01 00 0B 00 00 01 00 01 00 12
例 2:配件只含一个配件 MCU 固件。
55 AA 10 01 00 23 10 38 30 30 63 39 39 66 30 33 35 34 39 62 61 33 63 00 08 74 38 78 6A 61 77 76 73 07 09 00 00 01 00 01 00 DD
主设备返回
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55 0xAA |
版本号 | 1 | 0x10 |
命令字 CMD | 1 | 0x01 |
数据长度 Len | 2 | 数据字段字节数之和 |
数据 | 1 | status :
|
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
例如:
55 AA 10 01 00 01 00 11
当配件的工作状态发生变化时,主设备将会通过该指令下发通知。
主设备发送
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55 0xAA |
版本号 | 1 | 0x10 |
命令字 CMD | 1 | 0x02 |
数据长度 Len | 2 | 数据字段字节数之和 |
数据 | 1 | state :
|
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
例如:
55 AA 10 02 00 01 01 13
配件返回
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55 0xAA |
版本号 | 1 | 0x10 |
命令字 CMD | 1 | 0x02 |
数据长度 Len | 2 | 数据字段字节数之和 |
数据 | 1 | status :
|
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
主设备发送
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55,0xAA |
版本号 | 1 | 0x10 |
命令字 CMD | 1 | 0x06 |
数据长度 Len | 2 | 数据字段字节数之和 |
数据 | 4 | SN |
1 | dp1_id | |
1 | dp1_type | |
2 | dp1_len | |
dp_len | dp1_data | |
…… | …… | |
1 | dpN_id | |
1 | dpN_type | |
2 | dpN_len | |
dpN_len | dpN_data | |
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
例如:
55 AA 10 06 00 09 00 00 00 02 01 01 00 01 01 24
配件返回
无
配件发送
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55 0xAA |
版本号 | 1 | 0x10 |
命令字 CMD | 1 | 0x07 |
数据长度 Len | 2 | 数据字段字节数之和 |
数据 | 4 | SN |
1 | FLAG | |
1 | time_type:
|
|
0 或者 M | 时间参数,当 time_type 为 1 时,存在。 | |
N | dp_point | |
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
SN
:序列号。
FLAG
:
0
:同时上报云端和面板。 1
:上报云端,不上报面板。 2
:上报面板,不上报云端。 3
:都不上报。例 1:同时上报云端和面板,不带时间参数上报。
55 AA 10 07 00 1B 00 00 00 FF 00 FF 01 01 00 01 00 03 02 00 04 00 00 01 F4 07 02 00 04 00 00 00 00 3D
主设备返回
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55 0xAA |
版本号 | 1 | 0x10 |
命令字 CMD | 1 | 0x07 |
数据长度 Len | 2 | 数据字段字节数之和 |
数据 | 4 | SN |
数据 | 1 | FLAG |
数据 | 1 | status :
|
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
例如:
55 AA 10 07 00 01 00 17
主设备发送
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55 0xAA |
版本号 | 1 | 0x10 |
命令字 CMD | 1 | 0x08 |
数据长度 Len | 2 | 数据字段字节数之和 |
数据 | 1 | Num :
|
数据 | 0 或 NUM | DP_LIST :要查询的 DP ID 列表。 |
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
例如:
55 AA 10 08 00 00 17
配件返回
无。
配件通过 DP 数据上报响应该事件。
如果配件 MCU 需要获取蓝牙模组的 MAC 地址信息,可以通过该接口进行查询操作。
配件发送
序号 | 字节数 | 字段 | 说明 |
---|---|---|---|
0 1 |
2 | 帧头 | 0x55 0xAA |
2 | 1 | 版本号 | 0x10 |
3 | 1 | 命令字 CMD | 0xBE |
4 5 |
2 | 数据长度 | 0x00 0x00 |
6 | 1 | CRC8 | 从帧头开始按字节求和得出的结果对 256 求余 |
主设备回复
序号 | 字节数 | 字段 | 说明 |
---|---|---|---|
0 1 |
2 | 帧头 | 0x55 0xAA |
2 | 1 | 版本号 | 0x10 |
3 | 1 | 命令字 CMD | 0xBE |
4 5 |
2 | 数据长度 | 0x00 0x06 |
6~11 | 6 | MAC | 见下表 |
12 | 1 | CRC8 | 从帧头开始按字节求和得出的结果对 256 求余 |
例如:模组的 MAC 地址为 DC:23:66:11:22:33
。
配件发送:55 AA 10 BE 00 00 CD
主设备回复:55 AA 10 BE 00 06 DC 23 66 11 22 33 9E
若配件存在通讯效率不匹配的问题,可以通过该接口调整串口间隔,模组会尽量保证帧间隔大于设置值。
配件发送
序号 | 字节数 | 字段 | 说明 |
---|---|---|---|
0 1 |
2 | 帧头 | 0x55 0xAA |
2 | 1 | 版本号 | 0x10 |
3 | 1 | 命令字 CMD | 0xBF |
4 5 |
2 | 数据长度 | 0x00 0x01 |
6 | 1 | INTERVAL | 帧间隔,单位 10 ms。例如,值 25 表示帧间隔为 250 ms |
7 | 1 | CRC8 | 从帧头开始按字节求和得出的结果对 256 求余 |
主设备回复
序号 | 字节数 | 字段 | 说明 |
---|---|---|---|
0 1 |
2 | 帧头 | 0x55 0xAA |
2 | 1 | 版本号 | 0x10 |
3 | 1 | 命令字 CMD | 0xBF |
4 5 |
2 | 数据长度 | 0x00 0x01 |
6 | 1 | status | status :
|
7 | 1 | CRC8 | 从帧头开始按字节求和得出的结果对 256 求余 |
升级开始时,主设备会向配件发送请求,以获取配件串口可传输的最大单包长度。
主设备发送
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55 0xAA |
版本号 | 1 | 0x10 |
命令字 CMD | 1 | 0xFA |
数据长度 Len | 2 | 数据字段字节数之和 |
数据 | 1 | TYPE |
数据 | 2 | Len1 |
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
TYPE
:
0
:蓝牙低功耗(LE)升级固件,配件一般不会有蓝牙 LE 固件1
:MCU 升级固件。通常是该类型,在开发者平台创建的固件通道号为 910
-19
:扩展固件通道号,在开发者平台创建Len1
:最大单包数据长度,设备允许的单包数据最大长度,单位字节。
配件回复
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55 0xAA |
版本号 | 1 | 0x10 |
命令字 CMD | 1 | 0xFA |
数据长度 Len | 2 | 数据字段字节数之和 |
数据 | 1 | TYPE |
数据 | 1 | Flag |
数据 | 6 | Type_data :Version (4 字节) + Len2 (2 字节) |
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
TYPE
:同下发。
Flag
:0x00
:允许升级,0x01
:拒绝升级。
Version
:当前固件版本号,例如 0x00 01 00 02
代表版本为 V1.0.2。
Len1
:主设备限定最大单包数据长度。
Len2
:配件可接受最大包长度。如果 Len1
< Len2
,升级以 Len1
为准,反之以 Len2
为准。
配件 OTA 升级文件信息描述了升级的相关信息,配件可以利用这些信息来比较是否需要进行升级。
主设备发送
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55,0xAA |
版本号 | 1 | 0x10 |
命令字 CMD | 1 | 0xFB |
数据长度 Len | 2 | 数据字段字节数之和 |
数据 | 1 | TYPE |
8 | PID | |
4 | 文件版本 | |
16 | 文件 MD5 | |
4 | 文件长度 | |
4 | CRC32 | |
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
TYPE
:
0
:蓝牙低功耗(LE)升级固件,配件一般不会有蓝牙 LE 固件1
:MCU 升级固件。通常是该类型,在开发者平台创建的固件通道号为 910
-19
:扩展固件通道号,在开发者平台创建PID
:配件 的 PID。
文件版本:例如,0x00 01 00 02
代表版本为 V1.0.2。
文件 MD5:升级固件的 MD5 值。
文件长度:升级固件的总长度,单位字节。
CRC32:升级固件的 CRC32。
配件回复
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55,0xAA |
版本号 | 1 | 0x10 |
命令字 CMD | 1 | 0xFB |
数据长度 Len | 2 | 数据字段字节数之和 |
数据 | 1 | TYPE |
1 | STATE | |
4 | 已存储文件长度 | |
4 | 已存储文件 CRC32 | |
16 | 已存储文件 MD5(目前不使用) | |
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
TYPE
:同下发。
STATE
:
0x00
:正常升级。
0x01
:产品 PID 不一致。
0x02
:文件版本低于或者等于当前版本。
0x03
:文件大小超过范围。
其他:保留。
0
,表示从头开始传输。主设备发送
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55 0xAA |
版本号 | 1 | 0x10 |
命令字 CMD | 1 | 0xFC |
数据长度 Len | 2 | 数据字段字节数之和 |
数据 | 1 | TYPE |
数据 | 4 | OFFSET |
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
TYPE
:
0
:蓝牙低功耗(LE)升级固件,配件一般不会有蓝牙 LE 固件1
:MCU 升级固件。通常是该类型,在开发者平台创建的固件通道号为 910
-19
:扩展固件通道号,在开发者平台创建OFFSET
:文件起始传输偏移量,四字节。
配件回复
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55 0xAA |
版本号 | 1 | 0x10 |
命令字 CMD | 1 | 0xFC |
数据长度 Len | 2 | 数据字段字节数之和 |
数据 | 1 | TYPE |
数据 | 4 | OFFSET |
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
TYPE
:同下发。
OFFSET
:配件要求的起始传输文件偏移量。
实际文件传输的偏移地址应该以配件端要求的为准,且配件端要求的地址会小于等于主设备端给出的偏移。
主设备发送
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55,0xAA |
版本号 | 1 | 0x10 |
命令字 CMD | 1 | 0xFD |
数据长度 Len | 2 | 数据字段字节数之和 |
数据 | 1 | TYPE |
2 | 包号 | |
2 | 当前包数据长度 n | |
2 | 当前包数据 CRC16 | |
n | 当前包数据 | |
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
TYPE
:
0
:蓝牙低功耗(LE)升级固件,配件一般不会有蓝牙 LE 固件1
:MCU 升级固件。通常是该类型,在开发者平台创建的固件通道号为 910
-19
:扩展固件通道号,在开发者平台创建包号从 0
开始,当前包数据长度不能大于 OTA 升级请求指令制定的最大包长度。
配件回复
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55 0xAA |
版本号 | 1 | 0x10 |
命令字 CMD | 1 | 0xFD |
数据长度 Len | 2 | 数据字段字节数之和 |
数据 | 1 | TYPE |
数据 | 1 | STATE |
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
TYPE
:同下发。
State
返回值说明:
0x00
:成功
0x01
:包号异常
0x02
:长度不一致
0x03
:CRC 校验失败
0x04
:其他
主设备发送
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55 0xAA |
版本号 | 1 | 0x10 |
命令字 CMD | 1 | 0xFE |
数据长度 Len | 2 | 数据字段字节数之和 |
数据 | 1 | TYPE |
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
TYPE
:
0
:蓝牙低功耗(LE)升级固件,配件一般不会有蓝牙 LE 固件1
:MCU 升级固件。通常是该类型,在开发者平台创建的固件通道号为 910
-19
:扩展固件通道号,在开发者平台创建配件回复
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55 0xAA |
版本号 | 1 | 0x10 |
命令字 CMD | 1 | 0xFE |
数据长度 Len | 2 | 数据字段字节数之和 |
数据 | 1 | TYPE |
数据 | 1 | STATE |
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
TYPE
:同下发。
State
返回值说明:
0x00
:成功
0x01
:数据总长度错误
0x02
:长度不一致
0x03
:其他
配件支持通过电池包与蓝牙 Dongle 进行空中授权,空中授权相关指令通过该命令进行透传。
配件/主设备发送
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55 0xAA |
版本号 | 1 | 0x10 |
命令字 CMD | 1 | 0xF0 |
数据长度 Len | 2 | 数据字段字节数之和 |
数据 | n | 见通用授权产测协议 |
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
主设备/配件返回
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55 0xAA |
版本号 | 1 | 0x10 |
命令字 CMD | 1 | 0xF0 |
数据长度 Len | 2 | 数据字段字节数之和 |
数据 | n | 见通用授权产测协议 |
CRC8 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
A:
蓝牙通用串口协议 是指用于规定 MCU 与蓝牙模组之间通过 UART 通信的协议。而 蓝牙配件通用串口协议 则是指用于规定配件与 MCU 之间通过 UART 通信的协议。这两个协议可以通过协议版本号进行区分。
通常情况下,配件通用串口协议的版本号为 0x10
,即帧头为 0x55AA10
。当 MCU 检测到协议版本号为 0x10
时,将完全透传串口帧给蓝牙模组进行处理。
A:
需要增加以下逻辑:
0x10
时,将完全透传串口帧给蓝牙模组进行处理。A:
一个电池包能够激活多个电动工具,然而面板仅显示最近激活的电动工具。电动工具的 UUID(唯一识别码)必须是独一无二且有效的,以确保电池包能正确地激活电动工具。
在更换电动工具后,电池包微控制器(MCU)需要更新配件信息,并将插拔状态同步传递给蓝牙模组,以便进行激活操作。
A:
配件可通过升级协议 CMD-0xFA
~0xFE
中的 TYPE
字段进行差异化,用于区分升级固件。此处 TYPE
为 1,表示 MCU 固件,10~19 表示扩展固件升级通道号。每个在平台上创建的升级固件都会分配一个通道号。
A:
以电池包和电动工具的应用场景为例。
当电动工具插入电池包时,电池包的 MCU 首先通过 CMD-0xC200
指令,上报电动工具的插拔状态给蓝牙模组。
蓝牙模组会记录电动工具的插拔状态,同时电动工具尝试与电池包的蓝牙模组进行握手(CMD-0x00
)。
握手成功后,电动工具上报其设备信息(CMD-0x01
)给电池包的蓝牙模组,蓝牙模组会缓存该设备信息。
若电动工具被激活上线成功,电池包蓝牙模组会通过 CMD-0x02
下发工作状态,同时进行状态查询(CMD-0x08
)。
A:
更多信息,请参考 蓝牙通用串口协议。
如果在开发过程遇到问题,您可以登录 TuyaOS 开发者论坛 TuyaOS-蓝牙设备开发 版块进行沟通咨询。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈