扩展支持非智能配件

更新时间:2023-11-13 10:02:23下载pdf

单点蓝牙通用模组具备配件激活能力,并为配件提供安全可靠的通信通路。单点蓝牙通用模组采用蓝牙低功耗(Bluetooth LE)技术,通过与非智能配件的 UART 接口连接,实现扩展通信功能。这样,非智能配件可以利用蓝牙模组与其他设备进行数据传输和互联,实现更广泛的通信能力。

典型应用方案

  • 电动工具-电池包

方案特点

该方案具有灵活性、稳定性和可靠性,并适用于多种应用场景。

  • 蓝牙模组能够支持非智能配件的激活,并为其提供安全可靠的通信通路。
  • 非智能配件具备独立的产品标识符(PID)、面板和数据点(DP)定义,以及用于固件更新的通道号。
  • 可以让配件通过蓝牙设备与 Dongle 进行空中产测。
  • 蓝牙模组能够为非智能配件提供数据上报、指令下发以及固件更新等功能。

技术简介

以电池包为例,其构成包括主控 MCU 和蓝牙通用模组。MCU 和蓝牙模组之间通过 UART 接口进行通信,蓝牙模组提供与 App 连接以及涂鸦 IoT 云服务的功能。配件通过 UART 接口与电池包主控 MCU 进行通信,主控 MCU 接收到配件的串口数据后会完全透传给蓝牙模组进行处理。蓝牙模组会存储配件的设备信息,例如产品标识符(PID)、设备通用唯一识别码(UUID)和插拔状态。
当主控 MCU 通知蓝牙模组有配件插入时,若蓝牙模组与 App 处于连接状态,会将配件信息上报至 App 进行云端激活流程。激活成功后,蓝牙模组将为配件提供独立的蓝牙通信通路,使配件可以在 App 中访问独立面板进行控制和显示。

扩展支持非智能配件

快速体验

软硬件准备

  • 蓝牙单点通用模组

  • 涂鸦模组调试助手

第一步:选择蓝牙通用固件

选择支持扩展 MCU 配件功能的蓝牙通用固件。

  1. 登录 涂鸦 IoT 开发平台

  2. 单击 创建产品

  3. 根据您已有的智能设备分类,选择产品类目,确定具体产品。例如 电工 > 电池包

  4. 选择智能化方式 处,选择 产品开发

  5. 自定义方案 处,选择电池包。

  6. 进入产品开发,在 03 硬件开发 中,选择 MCU SDK 对接方式,选择如下固件。

    当前 Telink 系列模组对扩展 MCU 配件功能进行了适配,以下是当前支持该功能的交付物不完全列举。若您在 硬件开发 页面无法选择到对应的交付物,可 提交工单 联系涂鸦产品上架相应交付物。

    扩展支持非智能配件

第二步:体验扩展配件功能

明确约定连接方式为蓝牙模组通过 UART 与 MCU 连接,MCU 通过 UART 与配件连接。在下文中,简称蓝牙模组为 模组。鉴于配件通过 MCU 透传数据与蓝牙模组进行通信,为了方便调试,此处使用涂鸦模组调试助手充当 MCU 和配件的角色。以下是以电池包为例的测试步骤:

  1. 首先,蓝牙通用模组默认不支持配件挂载功能,您需要通过 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,意味着启用配件挂载支持功能)

    修改蓝牙模组的配件挂载支持能力后,需要重新进行蓝牙配网才能使更改生效。

  2. 通过涂鸦模组调试助手,向模组发送包含 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)

  3. 电池包 MCU 需要监测配件的插拔状态,并将此信息同步给蓝牙模组。一旦模组接收到配件插入的信号,将配件信息上报至 App,从而触发云端激活。随后,配件将在 App 主页中呈现,并获得独立的面板和通信通路。若未呈现,您可刷新主页。例如:

    MCU -> 模组:55 AA 00 C2 00 02 00 01 C4

    模组 -> MCU:55 AA 00 C2 00 01 00 C2

    扩展支持非智能配件

MCU 协议(节选)

该部分协议为 MCU 扩展非智能配件联网控制的扩展协议。

配件插拔状态同步(CMD-0xC200)

  • 非智能配件的在线状态依赖设备蓝牙的在线状态,当蓝牙离线时,非智能配件也会离线。
  • MCU 需要监测配件的插拔状态,并通过该命令同步配件的插拔状态到蓝牙低功耗模组,蓝牙低功耗模组会同步更新非智能配件的在线状态。

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
  • 0x00:配件拔出
  • 0x01:配件插入
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
  • 0x00:成功
  • 0x01:失败
8 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

MCU 查询模组 MAC 地址(CMD-0xBE)

若 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 格式

字段 字节数 说明
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 字节时,大端表示

握手(CMD-0x00)

当配件接入主设备后,需进行握手。若 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
  • 0x00:握手,同时请求设备信息(配件需要发送 CMD 0x01)。
  • 0x01:仅握手
CRC8 1 从帧头开始按字节求和得出的结果对 256 求余

例如:

55 AA 10 00 00 01 00 10

上报设备信息(CMD-0x01)

  • 若配件收到主设备的握手返回值为 0x00,则配件需要发送该指令。

  • 配件必须确保主设备成功接收信息。如果接收失败或者接收超时时间超过 3 秒,则需要进行重发,直到信息成功被主设备接收。

配件发送

字段 字节数 说明
帧头 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
  • channel0~19,IoT 平台创建时生产的固件通道号。
  • 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
  • 0x00:成功
  • 0x01:失败
CRC8 1 从帧头开始按字节求和得出的结果对 256 求余

例如:

55 AA 10 01 00 01 00 11

下发工作状态(CMD-0x02)

当配件的工作状态发生变化时,将会通过该指令下发通知。

主设备发送

字段 字节数 说明
帧头 2 0x55
0xAA
版本号 1 0x10
命令字 CMD 1 0x02
数据长度 Len 2 数据字段字节数之和
数据 1 state
  • 0x00:未激活
  • 0x01:激活未连接
  • 0x02:激活已连接
CRC8 1 从帧头开始按字节求和得出的结果对 256 求余

例如:

55 AA 10 02 00 01 01 13

配件返回

字段 字节数 说明
帧头 2 0x55
0xAA
版本号 1 0x10
命令字 CMD 1 0x02
数据长度 Len 2 数据字段字节数之和
数据 1 status
  • 0x00:成功
  • 0x01:失败
CRC8 1 从帧头开始按字节求和得出的结果对 256 求余

状态下发(CMD-0x06)

  • Data point 参考概述中 DP 格式说明部分
  • 命令下发可含多个 data point 命令数据单元。
  • 命令下发为异步处理协议,对应于 MCU 的 data point 状态上报

主设备发送

字段 字节数 说明
帧头 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

配件返回

状态上报(CMD-0x07)

  • Data point 参考 DP 格式说明部分
  • 状态上报可含多个 data point 命令数据单元。
  • 状态上报为异步处理协议,触发机制有三类:
    • MCU 收到命令下发处理帧时,正确执行相应 data point 命令,再通过状态上报帧将变化后的 data point 状态发送至模组。
    • MCU 主动检测到 data point 有变化,将变化后的 data point 状态发送至模组。
    • MCU 收到 状态查询 帧时,将所有的 data point 状态发送至模组。

配件发送

字段 字节数 说明
帧头 2 0x55 0xAA
版本号 1 0x10
命令字 CMD 1 0x07
数据长度 Len 2 数据字段字节数之和
数据 4 SN
1 FLAG
1 time_type:
  • 0x00:表示主设备自动填充时间上报
  • 0x01:配件自带时间上报,格式保留
  • 0xff:表示不带时间参数上报
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
  • 0x00:成功
  • 0x01:失败
CRC8 1 从帧头开始按字节求和得出的结果对 256 求余

例如:

55 AA 10 07 00 01 00 17

状态查询(CMD-0x08)

  • 状态查询为异步处理协议,主要用于模组查询 MCU 所有的 obj 类型的 data point 状态。当 MCU 收到此帧时,通过 CMD 0x07 状态上报 上报 data point 状态。
  • 状态查询发送时机主要有两种:
    • 主设备绑定已连接状态下,检查到 MCU 发生重启,查询发送。
    • 主设备蓝牙离线再上线(由绑定未连接状态变化成绑定已连接状态)的情况,查询发送。

主设备发送

字段 字节数 说明
帧头 2 0x55
0xAA
版本号 1 0x10
命令字 CMD 1 0x08
数据长度 Len 2 数据字段字节数之和
数据 1 Num
  • 如果 NUM = 0,代表查询所有 DP 数据。
  • 如果 NUM > 0,代表查询 NUM 个 DP 的数据,这 NUM 个 DP 序号在 DP_LIST 数据区。
数据 0 或 NUM DP_LIST:要查询的 DP ID 列表。
CRC8 1 从帧头开始按字节求和得出的结果对 256 求余

例如:

55 AA 10 08 00 00 17

配件返回

无。

配件通过 DP 数据上报响应该事件。

查询蓝牙 MAC 地址(CMD-0xBE)

如果 MCU 需要获取蓝牙模组的 MAC 地址信息,可以通过该接口进行查询操作。

MCU 发送

序号 字节数 字段 说明
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

MCU 发送:55 AA 10 BE 00 00 CD

模组回复:55 AA 10 BE 00 06 DC 23 66 11 22 33 9E

升级流程

开始
模块发送 OTA 请求
配件是否允许 OTA?
模块发送升级文件信息
结束
配件是否正常升级?
模块发送升级文件偏移量
MCU 返回接收的升级文件偏移量
模块发送升级文件数据
升级数据传输完成?
模块发送升级完成指令
MCU 返回升级结果成功?
升级成功
升级失败

配件升级请求(CMD-0xFA)

升级开始时,主设备会向配件发送请求,以获取配件串口可传输的最大单包长度。

主设备发送

字段 字节数 说明
帧头 2 0x55
0xAA
版本号 1 0x10
命令字 CMD 1 0xFA
数据长度 Len 2 数据字段字节数之和
数据 1 TYPE
数据 2 Len1
CRC8 1 从帧头开始按字节求和得出的结果对 256 求余
  • TYPE:固件通道号,在创建固件时由 IoT 前台生成的。通常,配件 MCU 的固件通道号为 9,而扩展固件通常为 10 到 19 之间。

  • Len1:最大单包数据长度,设备允许的单包数据最大长度,单位字节。

配件回复

字段 字节数 说明
帧头 2 0x55
0xAA
版本号 1 0x10
命令字 CMD 1 0xFA
数据长度 Len 2 数据字段字节数之和
数据 1 TYPE
数据 1 Flag
数据 6 Type_dataVersion(4 字节) + Len2(2 字节)
CRC8 1 从帧头开始按字节求和得出的结果对 256 求余
  • TYPE:同下发。

  • Flag0x00:允许升级,0x01:拒绝升级。

  • Version:当前固件版本号,例如 0x00 01 00 02 代表版本为 V1.0.2。

  • Len1:主设备限定最大单包数据长度。

  • Len2:配件可接受最大包长度。如果 Len1 < Len2,升级以 Len1 为准,反之以 Len2 为准。

配件升级文件信息(CMD-0xFB)

配件 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:固件通道号,IoT 前台创建固件时生成,配件 MCU 一般为 9,扩展固件一般为 10~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:固件通道号,IoT 前台创建固件时生成,配件 MCU 一般为 9,扩展固件一般为 10~19。

STATE

  • 0x00:正常升级。

  • 0x01:产品 PID 不一致。

  • 0x02:文件版本低于或者等于当前版本。

  • 0x03:文件大小超过范围。

  • 其他:保留。

  • 为了支持断点续传,会返回设备端已经储存的文件信息。
    • 主设备收到信息后,根据设备返回的已储存文件长度,计算新文件对应长度的 CRC32,然后和设备返回的 CRC32 对比。
    • 如果两者都吻合,那么在下面的文件起始传输请求中,将起始传输偏移量改为该长度值。否则,文件起始传输偏移量改为 0,表示从头开始传输。
  • 每次断点续传都会完全按照配件 OTA 流程的顺序,从 OTA 升级请求开始。因此,配件如果有维护升级状态的话,需要在收到工作状态为非激活已连接的其他状态时重置升级状态,以确保可以开始下一个升级流程。

配件升级文件偏移请求(CMD-0xFC)

主设备发送

字段 字节数 说明
帧头 2 0x55
0xAA
版本号 1 0x10
命令字 CMD 1 0xFC
数据长度 Len 2 数据字段字节数之和
数据 1 TYPE
数据 4 OFFSET
CRC8 1 从帧头开始按字节求和得出的结果对 256 求余
  • TYPE:固件通道号,IoT 前台创建固件时生成,配件 MCU 一般为 9,扩展固件一般为 10~19。

  • OFFSET:文件起始传输偏移量,四字节。

配件回复

字段 字节数 说明
帧头 2 0x55
0xAA
版本号 1 0x10
命令字 CMD 1 0xFC
数据长度 Len 2 数据字段字节数之和
数据 1 TYPE
数据 4 OFFSET
CRC8 1 从帧头开始按字节求和得出的结果对 256 求余
  • TYPE:同下发。

  • OFFSET:配件 要求的起始传输文件偏移量。

实际文件传输的偏移地址应该以配件端要求的为准,且配件端要求的地址会小于等于主设备端给出的偏移。

配件升级数据(CMD-0xFD)

主设备发送

字段 字节数 说明
帧头 2 0x55,0xAA
版本号 1 0x10
命令字 CMD 1 0xFD
数据长度 Len 2 数据字段字节数之和
数据 1 TYPE
2 包号
2 当前包数据长度 n
2 当前包数据 CRC16
n 当前包数据
CRC8 1 从帧头开始按字节求和得出的结果对 256 求余

TYPE:固件通道号,IoT 前台创建固件时生成,配件 MCU 一般为 9,扩展固件一般为 10~19。

包号从 0 开始,当前包数据长度不能大于 OTA 升级请求指令制定的最大包长度。

配件回复

字段 字节数 说明
帧头 2 0x55
0xAA
版本号 1 0x10
命令字 CMD 1 0xFD
数据长度 Len 2 数据字段字节数之和
数据 1 TYPE
数据 1 STATE
CRC8 1 从帧头开始按字节求和得出的结果对 256 求余

TYPE:固件通道号,IoT 前台创建固件时生成,配件 MCU 一般为 9,扩展固件一般为 10~19。

State 返回值说明:

  • 0x00:成功

  • 0x01:包号异常

  • 0x02:长度不一致

  • 0x03:CRC 校验失败

  • 0x04:其他

配件升级结束(CMD-0xFE)

主设备发送

字段 字节数 说明
帧头 2 0x55
0xAA
版本号 1 0x10
命令字 CMD 1 0xFE
数据长度 Len 2 数据字段字节数之和
数据 1 TYPE
CRC8 1 从帧头开始按字节求和得出的结果对 256 求余

TYPE:固件通道号,IoT 前台创建固件时生成,配件 MCU 一般为 9,扩展固件一般为 10~19。

配件回复

字段 字节数 说明
帧头 2 0x55
0xAA
版本号 1 0x10
命令字 CMD 1 0xFE
数据长度 Len 2 数据字段字节数之和
数据 1 TYPE
数据 1 STATE
CRC8 1 从帧头开始按字节求和得出的结果对 256 求余

TYPE:固件通道号,IoT 前台创建固件时生成,配件 MCU 一般为 9,扩展固件一般为 10~19。

State 返回值说明:

  • 0x00:成功

  • 0x01:数据总长度错误

  • 0x02:长度不一致

  • 0x03:其他

产测透传(CMD-0xF0)

配件支持通过电池包与蓝牙 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 求余

常见问题

Q:如何区分 MCU 通用对接协议和配件通用对接协议?

A

蓝牙通用串口协议 是指用于规定 MCU 与蓝牙模组之间通过 UART 通信的协议。而 蓝牙配件通用串口协议 则是指用于规定配件与 MCU 之间通过 UART 通信的协议。这两个协议可以通过协议版本号进行区分。

通常情况下,配件通用串口协议的版本号为 0x10,即帧头为 0x55AA10。当 MCU 检测到协议版本号为 0x10 时,将完全透传串口帧给蓝牙模组进行处理。

Q:对于电池包-电动工具应用场景,电池包 MCU 需要增加哪些代码逻辑?

A

需要增加以下逻辑:

Q:对于电池包-电动工具应用场景,一个电池包是否可以搭配多个电动工具使用?

A

一个电池包能够激活多个电动工具,然而面板仅显示最近激活的电动工具。电动工具的 UUID(唯一识别码)必须是独一无二且有效的,以确保电池包能正确地激活电动工具。

在更换电动工具后,电池包微控制器(MCU)需要更新配件信息,并将插拔状态同步传递给蓝牙模组,以便进行激活操作。

Q:配件升级含多个部分的固件要如何升级?

A

配件可通过升级协议 CMD-0xFA~0xFE 中的 TYPE 字段进行差异化,用于区分升级固件。此处 TYPE 指的是升级通道号,每个在 IoT 平台上创建的升级固件都会分配一个通道号。

Q:有哪些常见注意事项?

A

  • 当配件将设备信息上报给蓝牙模组后,模组并不会立即为配件进行激活,而是需要等待 MCU 同步配件插拔状态后才会进行激活。
  • 每个配件都必须存储涂鸦授权的 UUID。

参考文档

更多信息,请参考 蓝牙通用串口协议

如果在开发过程遇到问题,您可以登录 TuyaOS 开发者论坛 TuyaOS-蓝牙设备开发 版块进行沟通咨询。

咨询前,建议首先查阅 官方资料 或参考已有帖子,并认真阅读 发帖规范