基础功能

更新时间:2024-04-08 08:18:04下载pdf

本文介绍涂鸦蓝牙透传方案中的串口协议,适用于如下架构的通讯方案:

基础功能

串口通讯约定

  • 波特率(bps):9600 / 115200

  • 数据位:8

  • 奇偶校验:无

  • 停止位:1

  • 数据流控:无

    蓝牙模组每次上电或重启时,会启动波特率轮询。优先以上一次的串口配置开始发送心跳包,每个心跳周期切换一次波特率。若收到回复,则判断为通讯波特率,停止轮询并写配置到 Flash。该功能部分固件旧版本上不支持。

名称解释

名词 说明
DP 即设备功能(Data Point),代表一条或一对指令码。更多详情,请参考 产品功能
PID 即产品 ID(Product ID),描述一类产品功能(DP)的集合。在 涂鸦 IoT 开发平台 创建的每一个产品都会产生一个唯一的产品编号,关联了产品具体的设备功能、App 控制面板、出货信息等所有跟这个产品相关的信息。
蓝牙绑定 指蓝牙设备通过 涂鸦蓝牙通讯协议 与 App 账号建立起的一种绑定关系,以及表示设备在云端的绑定状态。
蓝牙解绑 指设备解除与 App 账号的绑定关系,进入未绑定未连接状态。
蓝牙重置 指在 App 上操作解绑并清除数据,与 蓝牙解绑 的区别在于用户数据是否清除。
蓝牙连接 仅表示蓝牙设备链路层的状态为连接状态。
蓝牙广播 仅表示蓝牙设备链路层的状态为广播状态。
蓝牙配网状态 该名词中的 配网 不同于 Wi-Fi 设备配路由器的过程,指的是未绑定未连接的蓝牙设备处于广播状态的一种状态,此时 App 可通过广播发现设备。
蓝牙绑定已连接 通常也叫设备 上线,蓝牙绑定已连接是指蓝牙设备通过 涂鸦蓝牙通讯协议 与 App 建立的安全通讯状态。
蓝牙绑定未连接 通常也叫设备 离线,表示设备与 App 账号建立了绑定关系,但链路层未连接,不处于安全通讯状态。
蓝牙网关在线 判断网关的在线状态,依赖于网关的离线和在线逻辑:
  • 网关监听到设备在广播,或已经处于 绑定已连接,表示网关在线。
  • 设备处于 绑定未连接,且超过一定时长未广播,表示网关离线。
具体以网关逻辑为准。

帧数据包结构

序号 字节数 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 协议升级扩展用
3 1 命令字 CMD 具体帧类型
4
5
2 数据长度 Len Len 高 8 位
Len 低 8 位
6~6+Len-1 Len 数据 -
6+Len 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

所有大于 1 个字节的数据均采用大端模式传输。

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)

  • 模组上电后,以 3s 的间隔定期发送心跳包。收到 MCU 的心跳包回应后,模组会认为 MCU 正常工作。在 MCU 首次(上电或重启)回复心跳包后,模组会向 MCU 查询产品信息。

  • MCU 侧也可依据此心跳定期检测模组是否正常工作。若模组无心跳下发,则 MCU 可通过模组提供的硬件复位引脚复位模组。

  • 模组在获取 MCU 信息之后,在低功耗模式下无心跳,正常功耗模式下以 10s 的间隔定期发送心跳。

    Telink 模组在低功耗下无心跳,非低功耗下在获得 MCU 信息(PID)后也不再发送心跳包,因此也无法检测 MCU 是否发生重启。

模组发送

序号 字节数 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0x00
4
5
2 数据长度 0x00
0x00
6 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

MCU 返回

序号 字节数 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0x00
4
5
2 数据长度 0x00
0x01
6 1 State 返回的状态值
7 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

State 返回值说明:

  • 0x00:仅 MCU 上电后第一次收到模组心跳包后的返回值,模组端也可依据这一点判断工作过程中 MCU 是否重启。
  • 0x01:除 MCU 重启后第一次返回 0x00 外,其余均返回此值。

获取 MCU 信息(CMD-0x01)

  • Product key:固定为 8 字节,由涂鸦 IoT 开发平台生成,用于云端记录产品相关信息。
  • 产品信息主要是 PID 信息。
  • 通用串口协议 2.0.0 以上版本支持根据可选 TLD 信息配置模组固件功能,具体支持情况需咨询您的技术支持工程师确定。

模组发送

序号 字节数 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0x01
4
5
2 数据长度 0x00
0x00
6 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

MCU 返回

序号 字节数 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0x01
4
5
2 数据长度 0x00
0x0d
6~18+n 13+n Data 见下表
19+n 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

Data 格式

1~8 9~13 14~14+n
PID 保留字段 可选信息 TLD [TLD] [TLD]…

示例:55 AA 00 01 00 0D 66 74 62 38 78 32 78  30 31 2E 30 2E 30 C0(pid=ftb8x2x0,mcu ver=1.0.0)

  • PID:为 8 位字符串,如 ftb8x2x0

  • 保留字段:此字段原填充的是 MCU 软件版本号,但模组目前不对该字段做解析,字段保留,起占位作用。MCU 版本号通过 CMD E8/E9 上报。

  • TLD:用于配置通用固件的一些功能和能力。TLD 是一种自定义数据格式:

    • T 表示要配置的功能 ID,即 Type。
    • L 表示该配置后面跟的数据长度。
    • D 为具体的配置数据。

    TLD 可以有 1 个或多个,当不使用默认配置的时候需要填,使用默认配置可以不填。

    TL 的值是固定的,模组端会根据 TL 的值解析 D 的数据,不同 TLD 之间没有顺序要求。

    以下是具体的 TLD 数据格式,序号仅表示 TLD 的字节序号。

    • 当 T=0x07,L=0x01 时,D 表示 状态上报——beacon 能力 配置。(可选 TLD,未选且没配置过则默认不支持 beacon)

      1 2 3
      T(0x07) L(0x01) beacon_enable

      beacon_enable:状态上报(CMD-0x07)接口,beacon 能力标志。开启后,可使设备在绑定未连接时支持状态广播的方式将状态上报到网关或 App,主要用于网关配合工作。详情见 CMD-0x07

      • 0x00:关闭

      • 0x01:开启

      • 其他:保留

        示例:55 AA 00 01 00 10 6D 6E 75 78 64 38 30 75  31 2E 30 2E 30  07 01 01   0F

    • 当 T=0x03,L=0x01 时,D 表示 设备在线逻辑标志 配置。 (可选 TLD,未选且没配置过则默认 0x00

      1 2 3
      T(0x03) L(0x01) online_flag

      online_flag:设备在线逻辑标志,目前只与蓝牙网关端在线逻辑有关,与手机没有关系。

      • 0x00:采用标准功耗设备在线策略
      • 0x01:采用低功耗设备在线策略
      • 其他:保留

      示例:55 AA 00 01 00 13 6D 6E 75 78 64 38 30 75   31 2E 30 2E 30   07 01 01   03 01 01  17

    • 当 T=0xBA,L=0x01 时,D 表示 SMP 使能 配置。(可选 TLD,未选且没配置过则默认 0x00

      1 2 3
      T(0xBA) L(0x01) SMP_ENABLE

      SMP_ENABLE:蓝牙 SMP 相关功能模组使能状态。

      • 0x00:不使用 SMP 配对相关功能
      • 0x01:使用 SMP 配对相关功能
      • 其他:保留

      示例:55 AA 00 01 00 10 34 6B 78 36 68 6C 61 78   31 2E 30 2E 30   BA 01 01  B3

    • 当 T=0x01,L=0x01 时,D 表示 安全连接类型 配置。(可选 TLD,未选且没配置过则默认 0x00

      1 2 3
      T(0x01) L(0x01) Secure_connect_type

      Secure_connect_type:蓝牙安全连接类型。

      • 0x00:使用默认配置,默认不限制,即二维码和搜索方式都能添加设备。
      • 0x01:限制仅通过扫描二维码方式添加设备。
      • 其他:保留

      示例:55 AA 00 01 00 10 34 6B 78 36 68 6C 61 78   31 2E 30 2E 30   01 01 01  FA

    • 当 T=0x02,L=0x01 时,D 表 连接策略 配置。(可选 TLD,未选且没配置过则默认 0x00

      1 2 3
      T(0x02) L(0x01) connection_strategy

      connection_strategy:蓝牙连接策略。(配置更改后需重新配网)

      • bit0:Gateway Connect Mode。0:短连接(按需连接)。1:长连接。此配置 bit 仅针对网关。
      • bit1-bit2:Connectivity。0:同时支持手机和网关。1:只支持网关。2:只支持手机。
      • 其他 bit:保留。

      示例:支持网关长连接:55 AA 00 01 00 10 34 6B 78 36 68 6C 61 78   31 2E 30 2E 30   02 01 01  FB

    • 当 T=0xC2,L=0x01 时,D 表示 配件挂载支持 配置。(可选 TLD,未选且没配置过则默认 0x00

      1 2 3
      T(0xC2) L(0x01) Accessory_Support

      Accessory_Support:非智能配件挂载支持情况。配置更改后需重新配网。

      • 0x00:使用默认配置,默认不支持。
      • 0x01:支持挂载非智能配件,提供配件激活、配件 DP 传输通道及配件 OTA 通道,见配件通用串口协议。
      • 其他:保留。

      示例:55 AA 00 01 00 10 34 6B 78 36 68 6C 61 78   31 2E 30 2E 30   C2 01 01  BB

      可选信息为非必填项,MCU 信息及配置信息会存 Flash。未填的情况下,模组会根据之前的配置进行处理,若没配置过则使用默认,否则使用之前的配置。

请求模组工作模式(CMD-0x02)

  • 模组工作模式主要针对如何指示模组的工作状态以及如何重置模组而言,主要分两种情况:

    • MCU 与模组配合处理,即模组通过串口通知 MCU 模组当前的工作状态,然后 MCU 提供显示支持。MCU 检测出模组的重置需求,通过串口通知模组重置模组。
    • 模组自处理:不支持。
  • 目前仅支持 MCU 与模组配合处理模式。

模组发送

序号 字节数 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0x02
4
5
2 数据长度 0x00
0x00
6 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

示例55 aa 00 02 00 00 01

MCU 返回

序号 字节数 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0x02
4
5
2 数据长度 0x00
0x00
6 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

示例55 AA 00 02 00 00 01

发送模组工作状态(CMD-0x03)

  • 模组工作状态:
    • 0x00:未绑定
    • 0x01:绑定未连接
    • 0x02:绑定已连接
  • 当模组收到 MCU 请求模组工作模式回复 CMD 0x02 后,则会向 MCU 下发模组工作状态。
  • 当模组检测到模组状态发生变化,则主动下发模组状态至 MCU。

模组发送

序号 字节数 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0x03
4
5
2 数据长度 0x00
0x01
6 1 State 返回的状态值
7 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余
State 工作状态说明 共享类通用固件注意
0x00 未绑定 共享类产品对绑定这个概念进行了模糊处理,未绑定和绑定未连接在共享类都认为是可配网状态
0x01 绑定未连接 同上
0x02 绑定已连接 绑定已连接在共享类认为是已配网已连接状态

重置模组(CMD-0x04)

  • 断开模组蓝牙连接,解除蓝牙绑定关系,清除模组离线缓存信息,清除虚拟 ID,重启。
  • 由于之前 Telink 平台的模组大量使用该接口作为解绑接口,为了不影响这部分场景的功能,Telink 平台重置后不会清除虚拟 ID。

MCU 发送

序号 字节数 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0x04
4
5
2 数据长度 0x00
0x00
6 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

示例55 aa 00 04 00 00 03

模组返回

序号 字节数 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0x04
4
5
2 数据长度 0x00
0x00
6 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

示例55 AA 00 04 00 00 03

新重置模组(CMD-0x05)

  • 断开模组蓝牙连接,解除蓝牙绑定关系,清除模组离线缓存信息,清除虚拟 ID,重启。
  • 该接口和 CMD-0x04 接口的作用完全一致,主要用于解决 Telink 平台不清除虚拟 ID 的问题和平衡前后版本的兼容性。

MCU 发送

序号 字节数 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0x05
4
5
2 数据长度 0x00
0x00
6 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

示例55 aa 00 05 00 00 04

模组返回

序号 字节数 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0x05
4
5
2 数据长度 0x00
0x00
6 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

示例55 AA 00 05 00 00 04

命令下发(CMD-0x06)

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

模组发送

序号 字节数 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0x06
4
5
2 数据长度 Len Len 高 8 位
Len 低 8 位
6~6+Len-1 Len datapoint 见下表
6+Len 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

datapoint 格式:

1 2 3~4 5~ …… n n+1 n+1~n+2 n+3~
dp1_id dp1_type dp1_len dp1_data …… dpN_id dpN_type dpN_len dpN_data

示例55 aa 00 06 00 05 03 01 00 01 01 10

MCU 返回

状态上报(CMD-0x07)

  • Data point 参考 DP 格式说明部分
  • 状态上报可含多个 data point 命令数据单元。
  • 状态上报为异步处理协议,触发机制有三类:
    • MCU 收到命令下发处理帧时,正确执行相应 data point 命令,再通过状态上报帧将变化后的 data point 状态发送至模组。
    • MCU 主动检测到 data point 有变化,将变化后的 data point 状态发送至模组。
    • MCU 收到 状态查询 帧时,将所有的 data point 状态发送至模组。
  • 若开启 beacon 功能,模组绑定未连接状态支持状态广播,每个 data point 中的 dp_len 最大支持 4 字节。开启 beaocn 能力的方法见 获取 MCU 信息 CMD-0x01
  • 在不同芯片平台的固件上,最大可发送 DP 数据长度表现不一致。目前,Telink 平台、BK3431Q 和 BK3432 平台支持的最大长度为 220 字节,而 PHY6222 和 FR8016 则支持最大 512 字节。

MCU 发送

序号 字节数 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0x07
4
5
2 数据长度 Len Len 高 8 位
Len 低 8 位
6~6+Len-1 Len datapoint 见下表
6+Len 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

Data point 格式

1 2 3~4 5~ …… n n+1 n+1~n+2 n+3~
dp1_id dp1_type dp1_len dp1_data …… dpN_id dpN_type dpN_len dpN_data

示例55 aa 00 07 00 05 03 01 00 01 01 11

模组返回

序号 字节数 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0x07
4
5
2 数据长度 0x00
0x01
6 1 State 返回的状态值
7 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

State 返回值说明:

  • 0x00:成功
  • 其他:失败

状态查询(CMD-0x08)

  • 状态查询为异步处理协议,主要用于模组查询 MCU 所有的 obj 类型的 data point 状态。当 MCU 收到此帧时,通过 CMD 0x07 状态上报帧 上报 data point 状态。
  • 状态查询发送时机主要有两种:
    • 模组绑定已连接状态下,检查到 MCU 发生重启(通过 心跳 回复判断),查询发送。

      Telink 通用固件不支持检测 MCU 重启。

    • 模组蓝牙离线再上线(由绑定未连接状态变化成绑定已连接状态)的情况,查询发送。

模组发送

序号 字节数 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0x08
4
5
2 数据长度 0x00
0x00
6 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

示例55 aa 00 08 00 00 07

MCU 返回

模组解绑(CMD-0x09)

仅解除和手机的绑定关系,并且断开蓝牙连接,不会清除数据和虚拟 ID。

共享类通用固件 绑定 概念被模糊处理了,故不支持模组解绑接口。

MCU 发送

序号 字节数 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0x09
4
5
2 数据长度 0x00
0x00
6 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

模组返回

序号 字节数 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0x09
4
5
2 数据长度 0x00
0x01
6 1 State 返回的状态值
7 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

State 返回值说明:

  • 0x00:成功
  • 其他:失败

查询模组连接状态(CMD-0x0A)

  • 用于 MCU 主动查询模组的连接状态。模组收到查询后,将通过 CMD 0x03 发送模组工作状态。
  • 模组工作状态:
    • 0x00:未绑定
    • 0x01:绑定未连接
    • 0x02:绑定已连接

MCU 发送

序号 字节数 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0x0A
4
5
2 数据长度 0x00
0x00
6 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

记录型数据上报(CMD-0xE0)

  • 该接口主要用于重要数据的上报,如果上报时模组处于离线状态,模组会将数据存储在模组 Flash 中,待模组上线再上报至 App。如果模组在线时,会在最后一条数据上报成功(连续上报的最后一条)后,释放缓存数据至 App。

  • 模组可存储最多存储 N 条 DP 数据,记录将循环覆盖存储。

    • NRF52832/BK3431q 存储条数为 63 条稳定存储条数和 16 条缓冲条数,每条数据最长 200 字节。
    • Telink 最多可存储 63 条,每条数据最长 160 字节。
    • BK3432 存储条数为 23 条稳定存储条数和 8 条缓冲条数,每条数据最长 32 字节。
  • 蓝牙模组内部时钟精度有限,24 小时误差小于 1 分钟,但每次重连会重新校准时钟。如果您对精度要求高,建议使用 MCU 自带时间上报。

    无论设备是在线还是离线状态,记录型数据强烈建议使用该接口上报。

MCU 发送

序号 字节数 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xE0
4
5
2 数据长度 Len Len 高 8 位
Len 低 8 位
6~6+Len-1 Len Data 见下表
6+Len 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

Data 格式

1 2~x x x+1 x+2~x+3 x+4~ …… n n+1 n+1~n+2 n+3~
TYPE Time_Str dp1_id dp1_type dp1_len dp1_data …… dpN_id dpN_type dpN_len dpN_data
  • Time_Str:13 位 UNIX 时间字符串

    TYPE_bit3_bit0 时间填充方式说明
    0x01 格式 1:蓝牙模组自带时间上报
    0x03 格式 3:MCU 自带时间上报
    TYPE_bit5_bit4 上报方式说明
    0x00 同时上报云端和面板
    0x01 上报云端,不上报面板
    0x02 上报面板,不上报云端

    TYPE_bit7_bit6:保留

    TYPE 字段使用枚举:

    • 0x01:模组自带时间同时上报云端和面板
    • 0x03:MCU 上报时间同时上报云端和面板
    • 0x11:模组自带时间只上报云端
    • 0x13:MCU 上报时间只上报云端
    • 0x21:模组自带时间只上报面板
    • 0x23:MCU 上报时间只上报面板
  • unix_time_string:仅 TYPE_bit3-bit0 等于 0x03 时需要填,其他格式不用填。

示例

  • 格式 1:蓝牙模组自带时间上报:

    55 AA 00 E0 00 17 01 66 02 00 04 00 00 00 01 67 03 00 05 72 77 72 77 77 68 04 00 01 00 89

  • 格式 3:MCU 自带时间上报:

    55 AA 00 E0 00 28 03 31 35 38 39 31 36 38 33 32 37 30 30 30 66 02 00 04 00 00 00 01 67 03 00 09 72 77 72 77 77 61 66 61 66 68 04 00 01 00 D0

模组返回

序号 字节数 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xE0
4
5
2 数据长度 0x00
0x01
6 1 State 返回的状态值
7 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

State 返回值说明

  • 0x00:存储成功
  • 其他:存储失败

获取实时时间(CMD-0xE1)

  • 年月日格式时间请求建议使用格式 0x02
  • 设备上线后,会主动同步一次云端时间给 MCU。

MCU 发送

序号 字节数 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xE1
4
5
2 数据长度 0x00
0x01
6 1 Time_Type 见下表
7 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

Time_type 说明

Time_Type_bit3-bit0 时间类型
0x00 格式 0:获取 7 字节时间类型+2 字节时区信息(本地时间)
0x01 格式 1:获取 13 字节 ms 级 unix 时间+2 字节时区信息(格林时间)
0x02 格式 2:获取 7 字节时间类型+2 字节时区信息(本地时间)
Time_Type_bit5_bit4 时间源
0x00 通过 App 请求云端时间
0x01 请求模组内部软件时钟时间

Time_Type_bit7_bit6:保留

Time_Type 字段使用枚举:

  • 0x00:请求 App 格式 0 时间

  • 0x01:请求 App 格式 1 时间

  • 0x02:请求 App 格式 2 时间

  • 0x10:请求模组内部格式 0 时间

  • 0x11:请求模组内部格式 1 时间

  • 0x12:请求模组内部格式 2 时间

    格式 0 获取自定义时间存在不同平台兼容性问题,后面版本会废除,年月日时间格式建议使用 0x02 格式。

    • Telink 通用固件已经不再支持格式 0,请求格式 0 时间则会返回格式 2 时间。
    • 时区为实际时区的 100 倍,例如北京东 8 区为 800,西 7.5 区为 -750。

模组返回

序号 字节数 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xE1
4
5
2 数据长度 Len Len 高 8 位
Len 低 8 位
6~6+Len-1 Len Time_Data 见下表
6+Len 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余
  • Time_Data 格式 0:

    结果码 时间格式 星期 时区
    1 2 3 4 5 6 7 8 9 10~11
    Result Time_Type 2018+year mon day hour min sec week time_zone
  • Time_Data 格式 1:

    结果码 时间格式 ms 级 unix 时间 时区
    1 2 3~15 16~17
    Result Time_Type unix_time_string time_zone
  • Time_Data 格式 2:

    结果码 时间格式 星期 时区
    1 2 3 4 5 6 7 8 9 10~11
    Result Time_Type 2000+year mon day hour min sec week time_zone

    Result0x00 表示成功,其他表示失败。

示例

  • Time_Data 格式 0:
    • MCU:55 AA 00 E1 00 01 00 E1
    • 模组:55 AA 00 E1 00 0B 00 00 01 0C 1E 0F 34 1F 01 03 20 9C,表示 2019 年 12 月 30 日 15 点 52 分 31 秒 星期一 东八区
  • Time_Data 格式 1:
    • MCU:55 AA 00 E1 00 01 01 E2
    • 模组:55 AA 00 E1 00 11 00 01 31 35 37 37 36 39 32 33 39 35 30 30 30 03 20 BB,表示时间戳 1577692395000 东八区
  • Time_Data 格式 2:
    • MCU:55 AA 00 E1 00 01 02 E3
    • 模组:55 AA 00 E1 00 0B 00 02 13 0C 1E 10 09 29 01 03 20 90,表示 2019 年 12 月 30 日 16 点 09 分 35 秒 星期一 东八区

恢复出厂设置通知(CMD-0xA1)

当 App 向模组发送恢复出厂设置命令时,模组会向 MCU 发出恢复出厂设置通知,MCU 可以根据该指令做恢复出厂设置功能。

模组发送

序号 字节数 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xA1
4
5
2 数据长度 0x00
0x00
6 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

MCU 返回

MCU 查询模组版本号(CMD-0xA0)

MCU 如果需要获得模组的版本信息,可通过该接口查询。如果 MCU 不需要模组的版本信息,可以不实现该协议。

MCU 发送

序号 字节数 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xA0
4
5
2 数据长度 0x00
0x00
6 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

模组返回

序号 字节数 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xA0
4
5
2 数据长度 0x00
0x06
6~11 6 DATA 见下表
12 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

DATA 格式

1~3 4~6
Soft_Ver Hard_ver
  • Soft_Ver:模组当前固件版本号,例如 0x01 00 02 代表版本为 V1.0.2。
  • Hard_ver:模组当前硬件版本号,PCBA 版本号。

查询 MCU 版本号(CMD-0xE8)

模组需要在每次发送获取 MCU 信息时,同时发送查询 MCU 版本号指令。

模组发送

序号 字节数 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xE8
4
5
2 数据长度 0x00
0x00
6 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

MCU 返回

序号 字节数 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xE8
4
5
2 数据长度 0x00
0x06
6~11 6 DATA 见下表
12 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

DATA 格式

1~3 4~6
Soft_Ver Hard_ver
  • Soft_Ver:MCU 当前固件版本号,例如 0x01 00 02 代表版本为 V1.0.2。

  • Hard_ver:MCU 当前硬件版本号,PCBA 版本号。

MCU 主动发送当前版本号(CMD-0xE9)

为了确保模组及时获取到 MCU 版本信息,MCU 在每次启动时(一般在串口初始化后)需要主动发送一次当前版本号到模组,如果没有收到模组的响应,需要再次发送。

MCU 发送

序号 字节数 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xE9
4
5
2 数据长度 0x00
0x06
6~11 6 DATA 见下表
12 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

DATA 格式

1~3 4~6
Soft_Ver Hard_ver
  • Soft_Ver:MCU 当前固件版本号,例如 0x01 00 02 代表版本为 V1.0.2。
  • Hard_ver:MCU 当前硬件版本号,PCBA 版本号。

模组返回

序号 字节数 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xE9
4
5
2 数据长度 0x00
0x01
6 1 State 返回的状态值
7 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

State 返回值说明:

  • 0x00:成功
  • 其他:失败