通用 MCU 对接协议

更新时间:2023-04-27 09:31:26下载pdf

本文介绍了基于涂鸦 Zigbee SDK 开发的门锁通用接入方案。根据本文,您可快速熟悉涂鸦 Zigbee 门锁接入和开发流程,完成开发实践。

名词解释

名词 解释
弱电设备 是指使用电池供电的设备,在 Zigbee 协议中被称为 sleep end device 的设备
TYZS5 模组 一款尺寸较小,适合用于开发传感器设备的 Zigbee 模组

其他名词,请参考 名词解释

硬件连接

涂鸦 Zigbee 模组和 MCU 端主控均采用 DC 3.3V 电压供电。

涂鸦 Zigbee 模组与 MCU 之间 UART 通信波特率设置为 115200-8-N-1,并且无数据流控。UART 接口引脚采用标准逻辑,在空闲状态下,TXD 和 RXD 引脚均为高电平,以低电平作为起始位,以高电平作为停止位。即使设备进入休眠状态,引脚也维持高电平。

涂鸦 Zigbee 模组与 MCU 之间还预留 1 个 GPIO 口连接,作为模组唤醒 MCU 的使用,默认设置为内部上拉状态,拉低 10ms 有效。MCU 通过串口指令唤醒 Zigbee 模组。若设备为强电设备,MCU 只需要第一次上电时做一次握手连接即可。若设备为带休眠的弱电设备,则 MCU 除了上电握手连接之外,每次主动发起命令之前也需要做一次握手连接。

通用 MCU 对接协议

超时时间

  • UART 应答超时时间:500ms。

    当模组的串口接收到 MCU 的唤醒帧或唤醒帧的应答帧之后,会唤醒 500ms,此时 MCU 可以发送其他数据,如果两帧数据间隔 500ms,需要在中间增加唤醒帧。

  • 唤醒帧的应答超时时间: 20ms。

    当模组发送唤醒帧之后,MCU 需要在 20ms 内做出应答,否则模组会继续重发,每次重发 2 次。当 3 次发送之后依旧没有收到 MCU 的应答帧的话,将把需要发送的数据保存在发送队列中,等待下次被唤醒再次尝试发送。

帧格式

  • 波特率:115200
  • 数据位:8
  • 奇偶校验:无
  • 停止位:1
  • 数据流控:无
  • MCU:用户控制板控制芯片,与涂鸦模组通过串口对接,这里协议设计上,所有包的交互为全双工通信设计

帧格式说明

字段 长度(Byte)
说明
帧头 2 固定为 0x55aa
版本 1 升级扩展用
业务序列号 2 业务的序列号
命令字 1 具体帧类型
数据长度 2 大端 (长度N)
数据 N 传输的有效数据
校验和 1 从帧头开始按字节求和得出的结果对 256 求余

说明:

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

  • 协议中所有举例说明数据都是十六进制数据。

  • 一般情况下,采用命令字一发一收同步机制,即一方发出命令,另一方应答,若发送方超时未收到正确的响应包,则传输超时,如下图所示:

    通用 MCU 对接协议

  • 模组控制命令下发及 MCU 状态上报则采用异步模式,假设模组控制命令下发 “命令字” 为 x,MCU 状态上报 “命令字” 为 y,如下所示:

    通用 MCU 对接协议

    MCU 状态上报分为被动上报和主动上报两种情况。

    • 被动上报:由模组端发送数据命令给 MCU,MCU 执行之后将状态返回。

      通用 MCU 对接协议

    • 主动上报:MCU 端状态发生改变(物理操作或者断电重启等),主动将当前状态上报到模组。MCU 主动上报为异步操作,在超时时间内没有收到状态上报应答帧,或者收到的应答帧里状态不成功,MCU 端必须进行重传。

      通用 MCU 对接协议

DP数据单元格式

控制命令和状态数据全部用 DP数据单元格式来表示。

DP命令/状态数据单元如下所示:

数据段 长度(Byte)
说明
Dpid 1 DP序号
Type 1 对应开放平台上某 DP具体的数据类型,通过如下“表示值”标识
Len 2 长度对应 value 的字节数
Value 1/2/4/N hex 表示,大于1字节采用大端传输

Type 的类型:

类型 表示值 长度(Byte)
说明
raw 0x00 N 对应于 raw 型 DP(模组透传)
bool 0x01 1 value范围:0x00/0x01
value 0x02 4 对应 int 类型,大端表示
string 0x03 N 对应于具体字符串
enum 0x04 1 枚举类型,范围 0-255
bitmap 0x05 1/2/4 长度大于1字节时,大端表示

DP命令/状态数据单元除 ”raw” 类型外,其他类型均属于 “obj” 型 DP。

  • “命令下发” 可包含多个 DP “命令数据单元”。
  • “命令下发” 为异步处理协议,对应于 MCU 的 DP “状态上报”。

协议详述

唤醒

Zigbee 唤醒 MCU 和 MCU 唤醒 Zigbee 均用此指令,此指令会重发 3 次,每次超时时间为 20ms,直到收到响应包,被唤醒后会开始接受数据,接受最多时间为 500ms,超过 500ms 秒会进入睡眠,在唤醒状态收到非唤醒指令,并不会顺延唤醒时间,此指令前面为7个 Byte 的导前码。

模组发送:

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x03
业务序列号(Seq) 2 55AA (固定序列号)
命令字 1 0x00
数据长度 2 0x0000
校验和 1 从帧头开始按字节求和得出的结果对256求余

MCU 返回:

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x03
业务序列号(Seq) 2 55AA(固定序列号)
命令字 1 0x00
数据长度 2 0
校验和 1 从帧头开始按字节求和得出的结果对256求余

备注:模组主动唤醒 MCU 时, 序列号固定为 55 AA, MCU 返回的 ACK 序号也为 55 AA。

MCU 主动唤醒模组时,序列号固定为 00 00, 模组返回 MCU 的 ACK 序列号也为 00 00。

举例:

  • 模组发送

    0x00 00 00 00 00 00 00 55 AA 03 55 AA 00 00 00 01

  • MCU 回复

    0x55 AA 03 55 AA 00 00 00 01

  • MCU 发送

    0x00 00 00 00 00 00 00 55 AA 03 00 00 00 00 00 02

  • 模组回复

    0x55 AA 03 00 00 00 00 00 02

查询产品信息

PID:对应涂鸦开发者平台 PID (产品标识),由涂鸦 IOT 平台生成,用于云端记录产品相关信息

产品信息由 PID、MCU 软件版本构成

MCU 软件版本号格式定义:采用点分十进制形式,”x.x.x”(0<=x<=99),x为十进制数

模组发送

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x03
业务序列号(Seq) 2 按顺序产生
命令字 1 0x01
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始按字节求和得出的结果对256求余

例:0x55 AA 03 33 77 01 00 00 AD

MCU 返回

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x03
业务序列号(Seq) 2 模组下发的seq
命令字 1 0x01
数据长度 2 N
数据 N {“p”:”AIp08kLI”, “v”:”1.0.0” }
数据 1 是否支持 OTA; 1支持,0不支持
校验和 1 从帧头开始按字节求和得出的结果对256求余

例:{“p”:”8s4uquyx”,“v”:”1.0.0”}

  • p 表示产品ID为 8s4uquyx, 这里参数为用户在涂鸦官网创建的产品 PID

  • v 表示 MCU 版本为 1.0.0

MCU 返回例子信息:

0x55 AA 03 33 77 01 00 1C 7B 22 70 22 3A 22 38 73 34 75 71 75 79 78 22 2C 22 76 22 3A 22 31 2E 30 2E 30 22 7D 01 7F

帧头 版本 Seq 命令字 数据长度 { " p " : " 8 s 4 u q u y x " , **" v " : " 1 . 0 . 0 " } ** 检验和

查询模组网络状态

下表为模组的连接网络状态表,其中 0x00 ~ 0x05 为模组的网络的状态, 0x10 ~ 0x80 为数据传输的结果,在下面的协议传输中使用。

设备状态ID 描述
0x00 设备为未连接网关状态
0x01 设备为已连接网关状态
0x02 设备为已入服务器
0x03 设备为已连接网关且已入服务器
0x04 设备未连接服务器
0x05 设备已连接网关但未入服务器
0x10 传输 report 成功
0x20 传输 report 失败
0x40 传输 report 超时
0x80 传输 report 忙

说明:

  • 设备未入网状态:设备第一次上电、或者入网失败、或者离网的情况下,设备状态为未入网状态。并将该状态下发至 MCU。
  • 设备为已入网状态:设备入网成功之后,设备状态为已入网状态。并将该状态下发至 MCU。
  • 当模组检测到 MCU 重启或 MCU 断线再上线的过程,则主动下发模组网络状态至 MCU。
  • 当模组的网络状态发生变化,则主动下发模组网络状态至 MCU。

MCU 发送

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x03
业务序列号(Seq) 2 MCU产生
命令字 1 0x02
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始按字节求和得出的结果对 256 求余

例:0x55 AA 03 00 00 02 00 00 04

模组返回:

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x03
业务序列号(Seq) 2 MCU 发送的seq
命令字 1 0x02
数据长度 2 0x0001
数据 1 指示模组工作状态: Zigbee 状态,参考上表( 0x00 ~0x05)
校验和 1 从帧头开始按字节求和得出的结果对 256 求余

例:0x55 AA 03 00 00 02 00 01 03 08

配置 Zigbee 模组

如果设备为弱电设备,MCU 需要先发送唤醒指令给模组,再发送配置指令给模组。强电设备直接发送配置命令给模组。

配置 Zigbee 模组命令分为三种,如下所示。

命令 说明
0x00 将模组重置为出厂设置(未入网)状态
0x01 将模组配置为开始配网状态
0x02 表示MCU恢复出厂设置通知

备注:当 MCU 被设置为恢复出厂后,需要发送 0x02 指令,给 Zigbee 模组,告诉 Zigbee 模组,其已经恢复出厂设置。

本地恢复出厂设置,通过 0x23 指令上报 25 DP点,上报给 Zigbee,Zigbee 透传给云端,收到云端的应答之后再发送这条指令,用于告诉 Zigbee 模组,让 Zigbee 模组清空本地的离线密码。

云端发送的恢复出厂指令,先回复对应的应答,同时发送这条恢复出厂设置的通知,告诉 Zigbee 模组,Zigbee 模组清空本地的离线密码。

MCU 发送

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x03
业务序列号(Seq) 2 MCU 产生
命令字 1 0x03
数据长度 2 0x0001
数据 1 0x00/0x01
校验和 1 从帧头开始按字节求和得出的结果对 256 求余

例:0x55 AA 03 00 00 03 00 01 01 07

模组返回:

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x03
业务序列号(Seq) 2 MCU发送的SEQ
命令字 1 0x03
数据长度 2 0x0001
数据 1 0x00:OK,0x01:error
校验和 1 从帧头开始按字节求和得出的结果对 256 求余

例:0x55 AA 03 00 00 03 00 01 00 06

数据命令下发

模组发送

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x03
业务序列号(Seq) 2 按顺序产生
命令字 1 0x04
数据长度 2 取决于 “命令数据单元” 类型以及个数
数据 N DP数据
校验和 1 从帧头开始按字节求和得出的结果对 256 求余

例:0x55 AA 03 00 1C 04 00 05 0E 04 00 01 00 3A

帧头 版本 Seq 命令字 数据长度 dpID dp 类型 数据长度 数据 校验和

MCU 返回

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x03
业务序列号(Seq) 2 模组下发的seq
命令字 1 0x04
数据长度 2 0x0001
数据 1 0x00:OK,0x01:error
校验和 1 从帧头开始按字节求和得出的结果对 256 求余

例:0x55 AA 03 00 1C 04 00 01 00 23

帧头 版本 Seq 命令字 数据长度 数据 校验和

实时状态上报

使用场景:对于类似报警器要求实时推送的设备,这里我们就可以通过本条命令上报相关状态数据。

说明:当 MCU 需要上报实时状态的数据时,可通过改条协议上报数据

状态数据会直接上报到云端,故设备联网状态必须为已连接到云端,否则数据上报失败

该条指令为同步指令,MCU 数据上报后需等待模组返回上报结果,等待超时时间5秒

需要等待模组发送连接上服务器的网络状态包,再发送需要发送的统计数据包,这里的数据上传没有储存功能, 这强制等待 8s 还没收到连接上服务器的网络状态包,也强制给设备断电。

这里可以支持多个数据单元上报,和单个数据单元上报,用户根据自己的需要来选择发送组包的方式。具体数据包可以下面的例子。

MCU 发送:

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x00
业务序列号(Seq) 2 MCU 产生
命令字 1 0x05
数据长度 2 取决于“状态数据单元”类型以及个数
数据 N 一个或多个组合“ 4.9状态数据单元”组
校验和 1 从帧头开始按字节求和得出的结果对 256 求余

模组返回:

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x00
业务序列号(Seq) 2 MCU发送的SEQ
命令字 1 0x05
数据长度 2 0x0001
数据 1 参考模组网络状态表
校验和 1 从帧头开始按字节求和得出的结果对 256 求余

Zigbee 事物通知

Zigbee 的异步通知或者是网络状态变更的通知

模组发送:

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x03
业务序列号(Seq) 2 按顺序产生
命令字 1 0x06
数据长度 2 0x02
zigbee状态 1 Zigbee 状态
校验和 1 从帧头开始按字节求和得出的结果对256求余

例:“网络状态” 下发:0x55 AA 03 00 77 06 00 01 05 85

帧头 版本 Seq 命令字 数据长度 数据 校验和

MCU返回:

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x03
业务序列号(Seq) 2 模组下发的seq
命令字 1 0x06
数据长度 2 0x0001
数据 1 参考模组网络状态表
校验和 1 从帧头开始按字节求和得出的结果对256求余

例:“网络状态”响应:0x55 AA 03 00 77 06 00 01 10 90

帧头 版本 Seq 命令字 数据长度 数据 校验和

请求动态密码

协议中的时间数据用于运算当前的动态密码,这里的动态密码运算时间都为当前 的格林时间,设备需要给模组格林时间数据。

这里 App 端可以设置一个设备当前的是否要加入管理员密码用于参与动态密码 的混算结果,这里设备每次再请求校验动态密码的时候,都需要给模组当前门锁所有的 管理员密码。

发送包的数据长度至少为 15 字节,时间数据+密码+传输的管理员密码组数 (不包可选项含管理员密码)。

MCU发送:

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x03
业务序列号(Seq) 2 MCU 产生
命令字 1 0x07
数据长度 2 xx xx
数据 4 设备当前格林时间: data[0]-data[3]
8 用户输入的密码数据: Data[4]~Data[11] 数据内容范围为 ‘0’~’9’ 数据传输使用 ASCII 码
1 管理员密码组数(0~10)有多少组管理员密码后面 带上相应组数数据
1 第一组密码的长度(不超过8)
n 第一组管理员密码部分 (密码部分由数字组成) 数据内容范围为 ‘0’~’9’ 数据传输使用 ASCII 码
1 第二组密码的长度(不超过8)
n 第二组管理员密码部分 ( 密码部分由数字组成) 数据内容范围为 ‘0’~’9’ 数据传输使用 ASCII 码
校验和 1 从帧头开始按字节求和得出的结果对256求余

例:55 AA 03 00 00 07 00 1D 5B BC 3A 41 33 37 32 32 34 32 30 31 02 06 30 31 32 33 34 35 08 31 32 33 34 35 36 37 38 30

帧头 版本 Seq 命令字 数据长度 时间戳****动态密码 管理员密码组数 第一组密码长度 第一组管理员密码 第二组密码长度 第二组管理员密码 检验和

模组返回:

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x03
业务序列号(Seq) 2 MCU下发的SEQ
命令字 1 0x07
数据长度 2 0x0001
数据 1 0x00 (密码核对通过) 0x01 (密码核对失败) 0x02 (设备未拿到 seckey) 0x03 (数据长度错误)
校验和 1 从帧头开始按字节求和得出的结果对 256 求余

例:55 AA 03 00 00 07 00 01 00 0A

离线密码上报

当用户在 MCU 端输入离线密码时,MCU 需要将密码上报给 Zigbee,让 Zigbee 完成密码的校验,并将结果发送给 MCU,MCU 根据结果执行是否开门。

离线密码长度为 10Byte,当用户输入的密码为 10Byte 时,则认为输入的是离线密码。

Zigbee 模组收到离线密码后,进行校验,并把校验结果反馈给 MCU,MCU 执行后,上报

离线密码开锁的 DP,并上报门开的 DP。

MCU 发送:

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x03
业务序列号(Seq) 2 MCU 产生
命令字 1 0x08
数据长度 2 0x000b~0x00e
数据 4 数据长度为 4 字节: 设备当前格林时间: data[0]-data[3]
密码数据 7-10 用户输入的离线密码密文数据: Data[4]~Data[8]/Data[11] 数据内容范围为 ‘0’~’9’ 数据传输使用 ASCII 码
校验和 1 从帧头开始按字节求和得出的结果对 256求余

例:55aa 03 0023 08 000b 601d0fc7 37323038373639 02

模组返回:

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x03
业务序列号(Seq) 2 MCU 下发的seq
命令字 1 0x08
数据长度 2 0x000b
数据 1 0x00 (离线密码核对通过) 0x01 (密码核对失败) 0x02 (设备未拿到seckey) 0x03 (数据长度错误) 0x04 (离线清空所有码核对通过) 0x06 (离线清空单次码核对通过)
密码数据 16 加密后的密码
校验和 1 从帧头开始按字节求和得出的结果对 256 求余

例:55aa 03 0023 08 0011 00 b26eba319b2c38b5320ac670bbdb6e86 f9

Zigbee 模组功能性测试

说明:模组的RF测试方式为 DUT(待测设备)和 GU(黄金单元)之间通过回环测试的方式进行,即 DUT 端进行发包,GU 端收到之后再转发给 DUT,DUT 端收到之后进行统计并将结果通过串口上报给 MCU。来回时间间隔 3S。

上电 300ms 内发送产测指令。

MCU 发送:

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x03
业务序列号(Seq) 2 MCU 产生
命令字 1 0x09
数据长度 2 0x0001
数据 Data 信道值(11-26)
校验和 1 从帧头开始按字节求和得出的结果对 256 求余

例:0x00 00 00 00 00 00 00 55 AA 03 00 00 09 00 01 19 25

前导码 帧头 版本 Seq 命令字 数据长度 数据 校验和

模组返回:

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x03
业务序列号(Seq) 2 MCU 下发的seq
命令字 1 0x09
数据长度 2 0x0001
数据 2 RF接受 0-100%(建议成功率 80%)
校验和 1 从帧头开始按字节求和得出的结果对 256 求余

例:0x55 AA 03 00 00 09 00 02 01 3C 4A

帧头 版本 Seq 命令字 数据长度 数据 校验和

MCU 版本查询

若支持 MCU 升级必须实现此命令,也可 MCU 侧主动上报。

查询场景:1.配网时 2. MCU 升级过程异常时。

主动上报场景:1. 配网成功后(必须添加)2. 升级结束。

模组发送:

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x03
业务序列号(Seq) 2 模组产生
命令字 1 0x0A
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始按字节求和得出的结果对 256 求余

例:0x55 AA 03 00 f0 0A 00 00 26

帧头 版本 Seq 命令字 数据长度 校验和

MCU 响应或模组发送:

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x03
业务序列号(Seq) 2 模组下发的seq
命令字 1 0x0A
数据长度 2 0x0001
数据 1 版本号(当前版本) 01.00.0001 – 1.0.1
校验和 1 从帧头开始按字节求和得出的结果对 256 求余

OTA 升级通知

模组发送:

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x03
业务序列号(Seq) 2 模组产生
命令字 1 0x0B
数据长度 2 0x0011
数据 8 Data[0]~ Data[7] PID
数据 1 版本号(升级版本) 0x41=01 00 0001B – 1.0.1
数据 4 固件大小 最大 64K=0x10000
数据 4 固件校验和:从固件第一个字节按字节求和得出的结果对 2^32 求余
校验和 1 从帧头开始按字节求和得出的结果对 256 求余

例:0x55AA 03 0465 0B 0011 7072386F31747565 41 00006658 00266583 9C

帧头 版本 Seq 命令字 数据长度 PID V

MCU相应:

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x03
业务序列号(Seq) 2 模组下发的seq
命令字 1 0x0B
数据长度 2 0x0001
数据 1 0x00:OK,0x01:error
校验和 1 从帧头开始按字节求和得出的结果对 256 求余

例:0x55 AA 03 00 1C 0B 00 01 00 23

帧头 版本 Seq 命令字 数据长度 数据 校验和

OTA固件内容请求

MCU发送:

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x03
业务序列号(Seq) 2 0x0000
命令字 1 0x0C
数据长度 2 0x0006
数据 8 PID
数据 1 版本号(升级版本) 01.00.0001 – 1.0.1
数据 4 数据包的偏移量(固件的位置)
数据 1 数据包的大小
校验和 1 从帧头开始按字节求和得出的结果对256求余

例:0x55 AA 03 00 f0 0C 00 06 26

帧头 版本 Seq 命令字 数据长度 校验和

模组返回:

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x03
业务序列号(Seq) 2 0x0000
命令字 1 0x0C
数据长度 6+N 0x0006+N
数据 1 Status 0 成功 1:失败
数据 8 PID
数据 1 版本号(升级版本) 01.00.0001 à1.0.1
数据 4 数据包的偏移量(固件的位置)
数据 N 数据
校验和 1 从帧头开始按字节求和得出的结果对256求余

例:55 AA 03 00 39 24 00 08 00 00 0D 2B 00 00 7D AB C7

帧头 版本 Seq 命令字 数据长度 标准时间 本地时间 校验和

OTA固件升级结果上报

说明:MCU 升级完成后上报此结果。不管 MCU 升级成功还是失败,只要是启动了升级的动作,就必须要通过结果上报命令终止升级流程。

MCU 发送:

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x03
业务序列号(Seq) 2 MCU 下发的seq
命令字 1 0x0D
数据长度 2 0x0004
数据 1 Status 0 成功 1:失败
数据 8 PID
数据 1 版本号(升级后的当前版本) 01.00.0001 – 1.0.1
校验和 1 从帧头开始按字节求和得出的结果对256求余

例:0x55 AA 03 00 f0 0C 00 06 26

帧头 版本 Seq 命令字 数据长度 校验和

模组返回:

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x03
业务序列号(Seq) 2 MCU下发的seq
命令字 1 0x0D
数据长度 2 0x0001
数据 1 0x00 : OK,0x01 : error
校验和 1 从帧头开始按字节求和得出的结果对 256 求余

例:0x55 AA 03 00 1C 0D 00 01 00 23

帧头 版本 Seq 命令字 数据长度 数据 校验和

记录型状态上报的数据格式(包含时间戳)

MCU 端有状态发生变化之后,需要主动上报自己的状态,例如本地修改了密码,门锁被开启,告警状态等。

MCU 上报状态时,先要判断当前 Zigbee 的状态,之后当 Zigbee 处于设备已连网且已加入服务器时,才可以上报状态,否则需要自动存储到本地,等待 Zigbee 恢复到上述状态,再将本地保存的信息上传。

MCU 自己负责检查传输帧的超时,MCU 发生数据后等待模组应答成功,模组需在8秒内应答,否则超时。超时之后,如果是网关断网导致,模组会将当前网络状态(未连接服务器)下发给 MCU,MCU 将保存需要上传的记录,等待模组将已连接服务器的状态发送给 MCU,MCU 再次发送数据。当网络状态为未连接服务器状态,此时MCU 有数据上传,模组将直接回复传输失败的应答。

MCU 发送:

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x03
业务序列号(Seq) 2 MCU 产生
命令字 1 0x23
数据长度 2 取决于 “状态数据单元” 类型以及个数
数据 5 Data[0]: 是否使用 MCU 时间 0:使用网关时间 1:使用 MCU 上报的时间Data[1]~ Data[4] 时间戳
DP数据 N DP数据
校验和 1 从帧头开始按字节求和得出的结果对256 求余

例:0x55 AA 03 00 00 23 00 0D 01 5B F6 67 B1 01 02 00 04 00 00 00 0B AE

帧头 版本 Seq 命令字 数据长度 MCU 时间 时间戳 dpID dp 类型 数据长度 数据 校验和

模组返回:

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x03
业务序列号(Seq) 2 MCU 下发的 seq
命令字 1 0x23
数据长度 2 0x0001
数据 1 参考模组网络状态表
校验和 1 从帧头开始按字节求和得出的结果对256求余

例:0x55 AA 03 00 00 23 00 01 10 36

帧头 版本 Seq 命令字 数据长度 数据 校验和

记录型状态上报的数据格式,包含记录编号和记录发生的时间戳。

timestamp 时间戳:记录发生的时间戳,使用标准的时间戳,即格林威治时间1970年01月01日00时00分00秒(北京时间 1970 年 01 月 01 日 08 时 00 分 00 秒)起至现在的总秒数

时间同步的数据格式

MCU 发送:

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x03
业务序列号(Seq) 2 MCU 产生
命令字 1 0x24
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始按字节求和得出的结果对 256 求余

例:0x55 AA 03 00 00 24 00 00 26

帧头 版本 Seq 命令字 数据长度 校验和

模组响应或模组发送

字段 长度(Byte)
说明
帧头 2 0x55aa
版本 1 0x03
业务序列号(Seq) 2 模组下发的 seq
命令字 1 0x24
数据长度 2 0x0008
数据 8 Data[0]~ Data[3] 为标准时间戳 Data[4]~ Data[7] 为本地时间戳
校验和 1 从帧头开始按字节求和得出的结果对 256 求余

例:55 AA 03 00 39 24 00 08 00 00 0D 2B 00 00 7D AB C7

帧头 版本 Seq 命令字 数据长度 标准时间 本地时间 校验和

MCU 请求时间同步,帧头中数据长度为0,MCU 可自主发起同步请求(MCU 重新上电时或定时同步时间)

网关同步时间到 MCU,数据中需包含正确的标准时间戳和本地时间戳。

网关获取到正确的时间后,以及子设备入网后,网关会向 MCU 同步时间

标准时间戳为格林威治时间 1970 年 01 月 01 日 00 时 00 分 00 秒起至现在的总秒数

本地时间戳 = 标准时间戳 + 标准时间和本地时间相差的秒数(包含时区和夏令时)

DP 参考

具体 DP 点数据格式和协议请参考以下文档:

协议版本

版本 主要变更 修订日期 说明
1.0.0 初版协议 20180623 初稿
1.0.1 修改协议 20180628 1. 修改超时时间
2. 修改被动上报方式
3. 修改模组配置方式
1.0.2 修改协议 20180702 1. 添加被动上报以及超时重传机制
2. 增加硬件握手IO
3. 添加场景开关协议
1.0.3 修改协议 20180813 添加通信同步异步机制
1.0.4 修改协议 20180906 添加加密通信通道
1.0.5 修改协议 20180918 整合版本2兼容版本1
1.0.6 修改协议 20180929 添加同步响应
1.0.7 修改协议 20180930 添加加密认证请求响应
1.0.8 修改协议 20181016 修改BUG
1.0.9 修改协议 20181026 新协议版本
1.0.10 修改协议 20181027 整合DP数据
1.0.15 修改协议 20181124 1. 增加协议示例参考
2. 修改部分文本错误
1.0.16 修改协议 20181204 1. 修正动态密码请求和被动上报命令字
2. 修正部分文档错误文本
3. 记录型上报增加MCU/网关时间标志
4. 修改模组产品性能测试方式
5. 修改各dpid值
1.0.17 修改协议 20181204 模组功能测试指令示例中添加前导码
1.0.18 修改协议 20190213 1. 修改唤醒方式说明
2. 记录型上报增加组合上报示例
3. 修正部分文本问题
1.0.19 修改协议 20190228 1. 修改文本,增加DP39(清除门锁临时密码)主动上报说明
2. 修正部分文本问题
1.0.20 修改协议 20190327 1. 增加OTA 功能
1.0.21 修改协议 20190412 1.是否支持OTA 标识
1.0.23 修改协议 20200116 1. 对协议进行删减
2.强调业务序列号
3.硬件连接框图修改
1.0.24 修改协议 20200915 1. 新增3.16小节,恢复出厂设置通知
1.0.25 修改协议 20210224 1. 修改请求离线密码