跳转至

Zigbee SDK


概述

Zigbee概述

设备类型

Zigbee 3.0包含以下几种设备类型:

  • 路由器(Router): 具有路由功能的设备

  • 协调器(Coordinator): 具有网络管理能力的Router

  • 终端节点(End Device): 可支持低功耗休眠模式的设备,不具有路由功能,必须通过其父节点与网络中其它节点进行信息交互。

  • GPD (Green Power Device): 低功耗无源设备。本文不作介绍。

网络类型

Zigbee3.0的网络属于Mesh网络,根据创建者的不同,可以分为集中式(Central)网络和分布式(Distribute)网络两种类型,这两种类型的网络在对网络中的link key以及nwk key的维护上有所区别。

  • Central网络: 通常是由Coordinator作为trust center(信任中心)来组建和管理的网络。

  • Distribute网络: 通过有Router功能的节点来组建网络。

Mesh网络

基本概念

1) PAN ID: 个人局域网(Personal Area Network)ID。

由PAN ID来标识所组建的网络。PAN ID由负责组建该网络的节点分配,可以直接指定,也可以随机生成,但需要通过active scan来避免PAN ID冲突。

2) Channel: 频点/信道。

Zigbee允许的工作频点(2.4G): 2405 + (N-11)*5 (mHz), (信道N = 11~26) 。

接入一个网络后采用单一频点的工作模式,不会主动跳频。

3) Node: 一个物理的设备。

具有唯一的MAC地址(64Bits),组建或者加入网络后具有该PAN中唯一的短地址(16 Bits的network address),从而可以在之后的数据交互中直接使用该短地址。

4) Endpoint: 端口,对应具体的应用(Apps)。

一个Node可以包含多个应用(多个端口)。用户层的应用都是基于不同端口的操作。

端口号范围:0~255,对于端口号的使用,Zigbee联盟有具体的规定。

  • 0: 用于ZDO (Zigbee Device Object),是每个Node必须具有的。

  • 1\~240: 用户级应用使用,也就是应用开发中可以任意使用的端口。

  • 241\~254: Zigbee联盟具体规定的一些应用,比如242仅用于Green Power。

  • 255: 广播端口,数据要广播给所有的应用端口。

5) Clusters:

一个具体的应用(端口)是由一组不同的簇组成,从而完成不同的行为。ZCL ( Zigbee Cluster Library) 定义了一系列cluster所遵循的行为规范。

6) Attributes: 属性

ZCL定义了各个cluster所支持的属性,还定义了这些属性值的操作权限。

7) BDB: 基本设备行为规范(Base Device Behavior)。

规范了节点启动、组网、入网、密钥管理以及复位(reset)的行为。

从本质意义上说,应用层的操作对象就是某一端口(Endpoint)上的某个簇(Cluster)的某个属性(attribute)。它们之间的关系如下图:

Endpoint, Cluster和Node关系示意图

泰凌Zigbee SDK概述

Telink Zigbee SDK是基于Zigbee PRO规范开发的一套已通过联盟平台Zigbee Pro R21认证、支持Pro R22并符合Zigbee3.0应用规范的Zigbee协议栈。

泰凌Zigbee SDK软件开发环境

1) 必备软件工具 (下载地址: http://wiki.telink-semi.cn/)

  • 集成开发环境:

    TLSR8 Chips: Telink IDE for TC32

    TLSR9 Chips: Telink RDS IDE for RISC-V

  • 下载调试工具: Telink Burning and Debugging Tools

  • OTA编码转换工具: tl_ota_tool

2) 抓包分析辅助工具 (自行下载或购买)

  • TI Packet Sniffer

  • Ubiqua

3) 软件开发包 (下载地址: http://wiki.telink-semi.cn/)

  • tl_zigbee_sdk_v3.x.x.zip

4) PC辅助控制软件 (ZGC)

  • Zigbee_gateway_controller.exe

泰凌Zigbee SDK支持的硬件平台

  • B85m (TC32平台)

    8269: 8269 EVK Board和8269 USB Dongle

    8258: 8258 EVK Board和8258 USB Dongle

    8278: 8278 EVK Board和8278 USB Dongle

  • B91m (RISC-V平台)

    B91: B91 EVK Board和B91 USB Dongle

泰凌Zigbee SDK

在安装SDK前,请根据1.2.1章节安装相应的集成开发环境Telink IDE for TC32或Telink RDS IDE for RISC-V。

TLSR8 TC32 SDK安装

项目导入

1) 打开IDE,依次进入界面File -> Import -> Existing Projects into Workspace。

2) 选择tl_zigbee_sdk/build目录下的tlsr_tc32 -> 点击“确定”。

选择导入工程文件

3) 点击“Finish”,完成工程导入。

完成工程导入

TLSR8工程目录结构

工程目录结构

  • /apps: 用户工程目录。

    • /common: 应用层公共代码目录,包含主函数(main.c)、模块测试函数(module_test.c)和版本及模式配置(comm_cfg.h)等。

    • /sampleGW: 网关(Coordinator)例程。

    • /sampleLight: 灯(Router)例程。

    • /sampleSwitch: 开关(End Device)例程。

    • /bootLoader: 引导程序。

  • /platform: 运行平台目录。

    • /boot: 启动和链接文件。

    • /chip_xx: 芯片驱动文件。

    • /services: 中断服务函数文件。

  • /proj: 工程代码目录。

    • /common: 通用代码目录。

    • /drivers: 抽象层驱动文件。

    • /os: 任务事件、buffer管理函数文件。

  • /zigbee: 协议栈相关目录。

  • /zbhci: hci命令处理相关目录。

  • div_mod.S: 除法和取余相关的汇编函数。(TLSR8不支持硬件除法器)

编译选项

点击下拉图标 ,可以看到当前所有的编译选项,选择需要编译的示例工程,如下图,等待编译完成。

选择编译

编译完成后,在“Project Explorer”窗口会出现编译出来的文件夹,其中包含了编译出来的固件,如下图。

输出文件

添加新项目

在提供的SDK中,仅仅给出了一些简单的用例。用户可以根据需求,自行添加应用工程以及编译选项。

具体步骤如下

1) 步骤1: Project Explorer -> tl_zigbee_sdk -> Properties -> Manage Configurations

添加新项目

2) 步骤2: 单击New,弹出如下界面

配置新项目

  • Name: 项目名称

  • Description: 项目简单描述

  • Copy settings from: 建议选用Existing configuration,可以减少一些配置过程。

选用Existing configuration的原则如下:

  • 使用8269平台,选择xxx_8269;使用8258平台,选择xxx_8258。

  • 项目用于Gateway的开发,选择sampleGw_xxxx;项目用于Router设备的开发,选择sampleLight_xxxx;项目用于End Device设备的开发,选择sampleSwitch_xxxx。

假设需要用8258开发一个具有路由功能的灯的项目,根据该原则,应选择项目"sampleLight_8258"的配置作为这个新项目的配置。

如果需要修改配置,可按下节(2.1.5项目配置说明),进行相应调整。

项目配置说明

依次进入: Project Explorer -> tl_zigbee_sdk -> Properties -> Settings (以项目sampleLight_8258为例说明)

符号定义

在Tool Settings下,可以看到当前项目的一些预定义配置:

1) 设备类型预定义

-DROUTER=1: 表示项目是个具有路由功能的设备

对于coordinator和end device的设备设置分别为:

-DEND_DEVICE=1: 表示项目是个end device功能的设备

-DCOORDINATOR=1: 表示项目是个Coordinator功能的设备

2) 平台选择

  • 8269平台: -DMCU_CORE_826x=1 和 -DCHIP_8269=1

    启动代码cstartup_826x.S 位于 \tl_zigbee_sdk\platform\boot\826x 目录下。

  • 8258平台: -DMCU_CORE_8258=1

    启动代码 cstartup_8258.S 位于 \tl_zigbee_sdk\platform\boot\8258 目录下。

  • 8278平台: -DMCU_CORE_8278=1

    启动代码 cstartup_8278.S 位于 \tl_zigbee_sdk\platform\boot\8278 目录下。

3) lib文件的链接

库文件和路径

当前SDK里包括2类库文件:zigbee stack库和平台驱动库。

  • Zigbee stack库: libzb_router.a, libzb_coordinator.a, libzb_ed.a

    位于 \tl_zigbee_sdk\zigbee\lib\tc32 目录下。

  • 平台驱动库: libdrivers_826x.a, libdrivers_8258.a, libdrivers_8278.a

    位于 \tl_zigbee_sdk\platform\lib 目录下。

4) 链接文件

用户可以依据实际应用需求,根据所选用的不同平台以及内存要求,调整合适的link文件。

当前SDK给出了826x、8258和8278平台的默认link文件boot_826x.link、boot_8258.link和boot_8278.link,分别在 \tl_zigbee_sdk\platform\boot对应的目录下。

如下图所示,通过预编译调用脚本tl_link_load.sh( \tl_zigbee_sdk\tools目录下)来选择使用的link文件。

link文件预编译设置

5) .image文件校验

为了保证下载文件的可靠性,通过脚本tl_check_fw.sh( \tl_zigbee_sdk\tools目录下)在生成的image文件中加入校验字段,OTA结束后通过检查校验字段是否匹配,来决定是否运行新的image。

image校验设置

TLSR9 RISC-V SDK安装

项目导入

1) 打开IDE,依次进入界面 File -> Import -> Existing Projects into Workspace。

2) 选择tl_zigbee_sdk/build目录下的tlsr_riscv -> 点击“确定”。

选择导入工程文件

3) 点击“Finish”,完成工程导入。

完成工程导入

TLSR9工程目录结构

工程目录结构

  • /apps: 用户工程目录。

    • /common: 应用层公共代码目录,包含主函数(main.c)、模块测试函数(module_test.c)和版本及模式配置(comm_cfg.h)等。

    • /sampleGW: 网关(Coordinator)例程。

    • /sampleLight: 灯(Router)例程。

    • /sampleSwitch: 开关(End Device)例程。

    • /bootLoader: 引导程序。

  • /platform: 运行平台目录。

    • /boot: 启动和链接文件。

    • /chip_xx: 芯片驱动文件。

    • /services: 中断服务函数文件。

  • /proj: 工程代码目录。

    • /common: 通用代码目录。

    • /drivers: 抽象层驱动文件。

    • /os: 任务事件、buffer管理函数文件。

  • /zigbee: 协议栈相关目录。

  • /zbhci: hci命令处理相关目录。

编译选项

点击下拉图标 "",可以看到当前所有的编译选项,选择需要编译的示例工程,如下图,等待编译完成。

选择编译

编译完成后,在“Project Explorer”窗口会出现编译出来的文件夹,其中包含了编译出来的固件,如下图。

输出文件

添加新项目

在提供的SDK中,仅仅给出了一些简单的用例。用户可以根据需求,自行添加应用工程以及编译选项。

具体步骤如下

1) 步骤1: Project Explorer -> tl_zigbee_sdk -> Properties -> Manage Configurations

添加新项目

2) 步骤2: 单击New,弹出如下界面

配置新项目

  • Name: 项目名称

  • Description: 项目简单描述

  • Copy settings from: 建议选用Existing configuration,可以减少一些配置过程。

选用Existing configuration的原则如下:

  • 使用B91芯片,选择xxx_B91。

  • 项目用于Gateway的开发,选择sampleGw_xxxx;项目用于Router设备的开发,选择sampleLight_xxxx;项目用于End Device设备的开发,选择sampleSwitch_xxxx。

假设需要用B91开发一个具有路由功能的灯的项目,根据该原则,应选择项目"sampleLight_B91"的配置作为这个新项目的配置。

如果需要修改配置,可按下节(2.2.5项目配置说明),进行相应调整。

项目配置说明

依次进入: Project Explorer -> tl_zigbee_sdk -> Properties -> Settings (以项目sampleLight_B91为例说明)

符号定义

在Tool Settings下,可以看到当前项目的一些预定义配置:

1) 设备类型预定义

-DROUTER=1: 表示项目是个具有路由功能的设备

对于coordinator和end device的设备设置分别为:

-DEND_DEVICE=1: 表示项目是个end device功能的设备

-DCOORDINATOR=1: 表示项目是个Coordinator功能的设备

2) 平台选择

  • b91平台: -DMCU_CORE_B91=1

    启动代码 cstartup_b91.S 位于 \tl_zigbee_sdk\platform\boot\b91 目录下。

3) lib文件的链接

库文件和路径

当前SDK里包括2类库文件:zigbee stack库和平台驱动库。

  • Zigbee stack库: libzb_router.a, libzb_coordinator.a, libzb_ed.a位于 \tl_zigbee_sdk\zigbee\lib\riscv 目录下。

  • 平台驱动库: libdrivers_b91.a位于 \tl_zigbee_sdk\platform\lib 目录下。

4) 链接文件

用户可以依据实际应用需求,根据所选用的不同平台以及内存要求,调整合适的link文件。

当前SDK给出了b91平台的默认link文件boot_b91.link,在 \tl_zigbee_sdk\platform\boot对应的目录下。

如下图所示,通过预编译调用脚本tl_link_load.sh( \tl_zigbee_sdk\tools目录下)来选择使用的link文件。

link文件预编译设置

5) .image文件校验

为了保证下载文件的可靠性,通过脚本tl_check_fw.sh( \tl_zigbee_sdk\tools目录下)在生成的image文件中加入校验字段,OTA结束后会通过检查校验字段是否匹配,来决定是否运行新的image。

image校验设置

App版本管理

从SDK V3.6.0开始,每个demo目录下都对应有一个version_cfg.h文件用来管理app的版本,对App进行版本管理是非常有必要的,尤其是在OTA时可以有效的防止错误升级而导致变砖的风险。

App版本是由三个关键字段组成的,分别是制造商代码(Manufacturer Code)、固件类型(Image Type)和文件版本(File Version),会以小端形式存放在固件的固定位置,如下图。(字段定义可以参考Zigbee Cluster Library Specification)。

二进制文件

制造商代码

MANUFACTURER_CODE:制造商代码是Zigbee联盟为每个成员公司分配的一个2字节长度的标识符,比如0x1141是Telink的制造商代码。用户可以将其修改成自己的制造商代码。

固件类型

IMAGE_TYPE:固件类型是一个2字节长度的常量,高字节代表Chip类型,低字节代表Image类型。Chip类型和Image类型定义在version_comm.h文件中,用户可以根据需求自行修改或添加。

文件版本

FILE_VERSION:文件版本是反应固件发行和编译的版本号,是一个4字节长度的常量。文件版本必须以递增形式进行管理,例如当前的文件版本号必须大于之前发行的版本号,因为当OTA时,只有检查到新的版本号大于之前的版本号时才会进行升级。

运行模式

Telink Zigbee SDK提供了两种运行模式:多地址启动模式(从0x0或0x40000地址启动)和BootLoader启动模式(从BootLoader启动后跳转到App)。

用户可以通过修改comm_cfg.h文件中的宏定义BOOT_LOADER_MODE来更改运行模式,SDK默认使用多地址启动模式。

#define BOOT_LOADER_MODE     0//1

需要注意的是,在不同的运行模式和不同Flash大小容量的情况下,SDK将会使用不同的Flash布局。

两种模式优缺点比较

多地址启动模式

优点:启动速度快;OTA结束后无需再次搬运image,校验正确后可以快速启动。

缺点:image只能位于地址0x0或0x40000,会造成flash空间分配的不连续性;另外image的大小(如果支持OTA的话)只能小于208KB。

Bootloader启动模式

优点:通常bootloader位于地址0x0,image文件可以灵活选择地址,便于用户自行定义地址空间。

缺点:启动速度较多地址启动模式慢;会额外增加flash消耗用以放置bootloader代码;另外在OTA时,需要增加搬运image的工作。

多地址启动模式Flash分布

512KB Flash空间分布图

1MB Flash空间分布图

Bootloader启动模式Flash分布

512KB Flash空间分布图

1MB Flash空间分布图

Flash分布说明

1) MAC_Addr

MAC地址信息存放在Flash的0x76000或0xFF000地址开始的8个bytes位置。系统启动后会检查MAC地址信息,如果发现是0xFFFFFFFFFFFFFFFF,将会随机产生一个MAC地址。芯片出厂时会预先写入MAC地址,请谨慎擦除。

2) F_Cfg_Info

出厂配置参数信息。芯片在出厂时会预先写入一些校准参数信息,比如射频频偏校准、ADC校准等,请谨慎擦除。

3) U_Cfg_Info

用户配置参数信息。例如install code和factory reset标志会存储在该区域。

4) NV(NV_1, NV_2)

节点入网后会将网络信息保存在NV区。512KB Flash网络信息分两部分保存,分别保存在NV_1的48KB空间和NV_2的24KB空间。1MB Flash网络信息保存在NV的88kB空间。 所以,如果只是更新固件或断电重启的话,网络信息不会丢失。

5) Firmware和OTA_Image

TLSR8和TLSR9支持Flash多地址启动,即可以从0x0地址启动,也可以从0x40000地址启动。Telink Zigbee SDK使用该特性,使用乒乓模式,利用Firmware和OTA_Image相互切换来实现OTA功能。

6) BootLoader

引导程序,在BootLoader运行模式下使用。

固件烧录

1) 硬件连接

通过mini USB线将Telink烧录EVK与PC相连,EVK板指示灯会闪烁一次,表示EVK与PC连接正常;再使用三根杜邦线将EVK的VCC、GND和SWM分别与待烧录目标板的VCC、GND和SWS相连。

烧录连接

2) 硬件连接好之后,打开Telink BDT.exe烧录工具,准备烧录固件。

a) 选择“8258”芯片型号(本文档以8258为例);

b) 选择“File”->“Open”,选择要烧录的固件;

c) 点击“Erase”擦除512KB Flash;

d) 点击“Download”下载固件;

e) 若使用bootLoader模式,请选择“setting”修改“Download Addr”,将bootLoader和App固件分别烧写到对应地址(参考2.4.3)。

(烧录工具详细的使用方法请参考烧录工具使用文档。)

烧录工具

软件架构

Telink Zigbee SDK的目录结构已在2.1.2和2.2.2节中列出,本章节会对各个目录下的文件具体说明。

目录说明

硬件平台目录

当前SDK支持b85m(826x、8258、8278)和b91m(B91)多个平台( \tl_zigbee_sdk\platform),后续可以添加其他硬件平台。

硬件平台目录

  • \boot: 不同平台的.S启动代码和.link链接文件

  • \chip_826x: 826x平台硬件模块驱动头文件

  • \chip_8258: 8258平台硬件模块驱动头文件

  • \chip_8278: 8278平台硬件模块驱动头文件

  • \chip_b91: b91平台硬件模块驱动头文件

  • \lib: 不同平台的驱动库文件

  • \services: 不同平台中断处理文件

  • \riscv: 支持risc-v平台的相关文件

  • \tc32: 支持tc32平台的相关文件

通用函数目录

通用函数目录

  • \common: 一些通用的功能函数,如字符串、链表、打印等处理函数文件

  • \drivers: 抽象层驱动文件

  • \os: 任务事件、buffer管理函数文件

Zigbee协议栈目录

Zigbee协议栈目录

大多以.lib文件给出,其中PHY层以及与应用层密切相关的ZCL和zbhci以开源代码方式给出。

  • \af: 应用框架层(Application Framework)相关文件

  • \aps: 应用支持子层(Application Support Sub-Layer)相关文件

  • \bdb: 基本设备行为(Base Device Behavior)规范相关文件

  • \common: Zigbee协议栈配置相关文件

  • \gp: 绿色能源(Green Power)规范相关文件

  • \lib: Zigbee协议栈库文件

  • \mac: 媒介控制层(Media Access Control)相关文件

  • \nwk: 网络层(Network)相关文件

  • \ota: 空中升级(Over The Air)相关文件

  • \ss: 安全服务(Security Services)相关文件

  • \zbapi: Zigbee常用接口函数文件

  • \zcl: Zigbee簇(Zigbee Cluster Library)相关文件

  • \zdo: Zigbee设备对象(Zigbee Device Objects)相关文件

应用层目录

应用层目录

  • \common: 应用层通用文件目录

    factory_reset.c/h: 通过断电操作来进行设备复位

    firmwareEncryptChk.c/h: 软件加密防拷贝,利用UID的唯一性,防止固件被复制拷贝

    module_test.c: 模块测试文件,仅供开发过程中测试验证使用

    main.c: 主函数入口

    common_cfg.h: 版本及运行模式配置文件

  • \sampleGW: 网关应用例程

  • \sampleLight: 灯应用例程

  • \sampleSwitch : 开关应用例程

  • \sampleContactSensor: 门磁应用例程

工程编译目录

工程编译目录

  • \build\tlsr_riscv: risc-v平台导入和编译的工程目录,TLSR9系列芯片请选择使用该目录

  • \build\tlsr_tc32: tc32平台导入和编译的工程目录,TLSR8系列芯片请选择使用该目录

抽象层驱动

Telink Zigbee sdk兼容多款Telink芯片,为了便于驱动的接口统一,添加了驱动抽象层,位于/proj/drvier/下,各驱动具体使用方法可参考apps/module_test.c。

平台初始化

  • 初始化
drv_platform_init(void)

完成芯片平台、系统时钟、gpio、射频(RF)、timer等Zigbee应用开发中所需的一些模块的初始化

射频 (RF)

  • 初始化
ZB_RADIO_INIT()
  • 模式切换
ZB_RADIO_TRX_SWITCH(mode, chn)

mode:

RF_MODE_TX = 0, 发送模式

RF_MODE_RX = 1, 接收模式

RF_MODE_AUTO = 2, Zigbee未使用

RF_MODE_OFF, 关闭射频模块

Chn: 11-26 (对应802.15.4中2.4G的16个channel值)

  • 发射功率
ZB_RADIO_TX_POWER_SET(level)

设置RF模块发送功率,不同芯片对应的功率值稍有不同,具体指请参考RF_PowerIndexTypeDef的定义(platform/chip/rf_drv.h)

  • 数据发送
ZB_RADIO_TX_START(txBuf)

txBuf: 待发送数据的内存地址,数据格式 dma length(4Bytes:payload长度+1) + len(1Byte: payload长度+2) + payload

  • 设置射频接收buffer
ZB_RADIO_RX_BUF_SET(addr)

在设置射频为Rx模式时,必须确保将Rx buffer设置为有效安全的内存地址

  • RSSI获取
ZB_RADIO_RSSI_GET()

调用该函数时,请确保射频此时处于Rx模式

  • Rssi转化为Lqi
ZB_RADIO_RSSI_TO_LQI(mode, rssi, lqi)

mode: 仅对8269有效

typedef enum{
    RF_GAIN_MODE_AUTO,
    RF_GAIN_MODE_MANU_MAX,
}rf_rxGainMode_t;
  • 接收中断
rf_rx_irq_handler(void)
  • 发送中断
rf_tx_irq_handler(void)

注意:

  • 射频中断函数rf_rx_irq_handler/rf_tx_irq_handler仅供zigbee stack使用。如果用户自行调用ZB_RADIO_TX_START,所产生的中断需要用户自行处理(注册新的中断回调函数),以避免影响Zigbee stack的运行状态。

GPIO

  • 初始化以及配置
gpio_init()

此函数是通过将platform/chip_xxxx/gpio_default.h下的默认配置(应用层的board_xxxx.h可以修改该默认配置)写入gpio寄存器,实现gpio初始化。

  • IO功能设置
void drv_gpio_func_set(u32 pin)

设置IO具体功能

pin:参考GPIO_PinTypeDef的定义

  • GPIO读
void drv_gpio_read(u32 pin);

读取gpio的高低电平

  • GPIO写
void drv_gpio_write(u32 pin, bool value);

设置gpio的高低电平

  • 输出使能
void drv_gpio_output_en(u32 pin, bool enable);
  • 输入使能
void drv_gpio_input_en(u32 pin, bool enable)
  • GPIO中断操作

芯片最多可以同时支持3路外部GPIO中断,中断模式分别为:GPIO_IRQ_MODE、GPIO_IRQ_RISC0_MODE和GPIO_IRQ_RISC1_MODE。

1) 注册中断服务函数

int drv_gpio_irq_conf(drv_gpio_irq_mode_t mode, u32 pin,
                      drv_gpioPoll_e polarity,
                      irq_callback gpio_irq_callback);

2) 使能中断引脚

int drv_gpio_irq_en(u32 pin);
int drv_gpio_irq_risc0_en(u32 pin);
int drv_gpio_irq_risc1_en(u32 pin);

UART

  • 引脚设置
void drv_uart_pin_set(u32 txPin, u32 rxPin)

使用uart之前必须选择相应的IO作为uart的收发引脚

  • 初始化
void drv_uart_init(u32 baudrate, u8 *rxBuf, u16 rxBufLen, 
                   uart_irq_callback uart_recvCb)

baudrate: 波特率

rxBuf: 接收buffer

rxBufLen: 接收数据最大长度

uart_recvCb: 接收中断时供应用层的回调函数

  • 发送
u8 drv_uart_tx_start(u8 *data, u32 len)
  • 接收中断函数
void drv_uart_rx_irq_handler(void)
  • 发送中断函数
void drv_uart_tx_irq_handler(void)
  • 异常处理函数
void drv_uart_exceptionProcess(void)

注意:

  • 当使用uart时,为避免通讯异常,main_loop必须轮询该异常处理函数。

ADC

  • 初始化
bool drv_adc_init(void);
  • 配置
void drv_adc_mode_pin_set(drv_adc_mode_t mode, GPIO_PinTypeDef pin)

mode: 参考drv_adc_mode_t定义

pin: 所使用的引脚号,参考GPIO_PinTypeDe定义

  • 获取采样值
u16 drv_get_adc_data(void)

PWM

  • 初始化
void drv_pwm_init(void)
  • 配置
void drv_pwm_cfg(u8 pwmId, u16 cmp_tick, u16 cycle_tick)

pwmId: PWM通道

cmp_tick: PWM一个周期中处于高电平的tick数

cycle_tick: PWM一个周期包含的tick数

Timer

  • 初始化
void drv_hwTmr_init(u8 tmrIdx, u8 mode)

tmrIdx: TIMER_IDX_0, TIMER_IDX_1, TIMER_IDX_2, TIMER_IDX_3

mode: TIMER_MODE_SYSCLK,TIMER_MODE_GPIO_TRIGGER,TIMER_MODE_GPIO_WIDTH,TIMER_MODE_TICK

  • 设置
void drv_hwTmr_set(u8 tmrIdx, u32 t_us, timerCb_t func, void *arg)

tmrIdx: 需要使用的timer

t_us: 定时间隔,单位:us

func: 定时中断应用层回调函数

arg: 应用层回调函数所需参数

  • 注销
void drv_hwTmr_cancel(u8 tmrIdx)
  • 中断函数
void drv_timer_irq0_handler(void)
void drv_timer_irq1_handler(void)
void drv_timer_irq3_handler(void)

其中,

TIMER_IDX_2默认作为watchdog使用,建议用户不要使用;

TIMER_IDX_3用作MAC-CSMA,建议用户不要使用。

Watchdog

  • 初始化
void drv_wd_setInterval(u32 ms)

ms:超时时间

  • 启动
void drv_wd_start(void)
  • 喂狗
void drv_wd_clear(void)

System Tick

System Tick计数器,它是一个32bit长度、每一个时钟周期自动加一的可读计数器。

由于826x和其他系列IC的System Timer的时钟源不同,8269的System Timer是32M,8258、8278和B91的System Timer是16M,所以在最大计数时间上存在差别。

  • 8269最大定时时间:(1/32)us*(2^32)约等于134秒,每过134秒System Timer Tick转一圈。

  • 8258、8278、B91最大定时时间:(1/16)us*(2^32)约等于268秒,每过268秒System Timer Tick转一圈。

用户可以使用clock_time()接口获取当前tick。

电压检测

为了防止低压系统运行异常,SDK提供了基于ADC驱动实现的电压检测函数,需要注意的是:

1) 需要使用支持ADC功能的I/O口,且用于ADC检测的I/O口不可以用做其他功能

2) 使用DRV_ADC_VBAT_MODE模式时,I/O口需要悬空

3) 使用DRV_ADC_BASE_MODE模式时,I/O口需要连接电压测试点

4) B91只能使用DRV_ADC_BASE_MODE模式,且I/O口需要做外部分压处理

  • 初始化
void voltage_detect_init(void)
  • 电压检测
voltage_detect(void)

睡眠和唤醒

Telink Zigbee SDK提供了相关的低功耗管理函数。sampleSwitch_826x使用suspend模式;sampleSwitch_8258、sampleSwitch_8278和sampleSwitch_B91使用deep with retention模式,即休眠时RAM数据可以保持(8258和8278支持32k RAM保持,B91支持64k RAM保持,详细请查阅数据手册)。

  • 唤醒源类型

支持按键以及timer定时唤醒

  • 配置唤醒引脚

如果需要按键唤醒功能,首先需要配置对应的唤醒引脚以及唤醒电平。

/**
* @brief Definition for wakeup source and level for PM
*/
drv_pm_pinCfg_t g_switchPmCfg[] = 
{
    {BUTTON1, PM_WAKEUP_LEVEL},
    {BUTTON2, PM_WAKEUP_LEVEL},
};

drv_pm_wakeupPinConfig(g_switchPmCfg, 
                       sizeof(g_switchPmCfg)/sizeof(drv_pm_pinCfg_t));
  • 休眠函数
drv_pm_lowPowerEnter(void);

如果使能了按键唤醒,调用此函数时,若相应引脚当前的电平与唤醒电平一致,则系统不能有效进入低功耗状态。

  • 休眠条件检查

1)调用tl_stackBusy()和zb_isTaskDone()检查当前是否符合休眠条件;

2)遍历软件定时任务列表,检查是否存在定时任务,如果有执行3),如果没有执行4);

3)检索出临近任务的时间,以该时间作为休眠时间,进入Suspend或Deep Retention休眠模式,可以定时器唤醒和按键唤醒;

4)进入Deep休眠模式,可以按键唤醒。

存储管理

动态内存管理

Telink Zigbee SDK提供了动态内存分配和释放的接口,用户可以在开发中直接使用,接口如下。

1) 申请内存

u8 *ev_buf_allocate(u16 size);

2) 释放内存

buf_sts_t ev_buf_free(u8 *pBuf);

3) 资源配置

默认由4组不同个数、不同大小的内存池构成,用户可以根据产品需求以及当前内存使用情况自行修改其个数以及大小。

MEMPOOL_DECLARE(size_x_pool, size_x_mem, BUFFER_GROUP_x, BUFFER_NUM_IN_GROUPx);

NV管理

因为Zigbee需要保存各层的网络信息参数,在异常断电后能够恢复网络,所以SDK从flash中划分了一块区域专门用来存储此类信息,这块flash区域我们称它为NV区,即第2.5章节的NV(NV_1, NV_2)区。

由于芯片flash仅支持sector(1 sector = 4k)擦除,所以NV区的信息存储模块的最小单位为1个sector。

SDK中使用了以下几个信息模块,其中NV_MODULE_APP是供用户使用,如需添加新的信息模块,请在末尾添加,不能改变现有的模块序号。

typedef enum {
    NV_MODULE_ZB_INFO           = 0,
    NV_MODULE_ADDRESS_TABLE     = 1,
    NV_MODULE_APS               = 2,
    NV_MODULE_ZCL               = 3,
    NV_MODULE_NWK_FRAME_COUNT   = 4,
    NV_MODULE_OTA               = 5,
    NV_MODULE_APP               = 6,
    NV_MODULE_KEYPAIR           = 7,

    //NV_MODULE_ADD,

    NV_MAX_MODULS
}nv_module_t;

信息模块又由多个条目信息组成,例如NV_MODULE_ZCL由一系列的NV_ITEM_ZCL_xx组成。条目定义如下,如需添加新的条目信息,请在末尾添加,不能改变现有的条目序号。

typedef enum {
    NV_ITEM_ID_INVALID          = 0,/* Item id 0 should not be used. */

    NV_ITEM_ZB_INFO             = 1,
    NV_ITEM_ADDRESS_FOR_NEIGHBOR,
    NV_ITEM_ADDRESS_FOR_BIND,
    NV_ITEM_APS_SSIB,
    NV_ITEM_APS_GROUP_TABLE,
    NV_ITEM_APS_BINDING_TABLE,
    NV_ITEM_NWK_FRAME_COUNT,
    NV_ITEM_SS_KEY_PAIR,
    NV_ITEM_OTA_HDR_SERVERINFO,
    NV_ITEM_OTA_CODE,
    NV_ITEM_ZCL_REPORT          = 0x20,
    NV_ITEM_ZCL_ON_OFF,
    NV_ITEM_ZCL_LEVEL,
    NV_ITEM_ZCL_COLOR_CTRL,
    NV_ITEM_ZCL_SCENE_TABLE,
    NV_ITEM_ZCL_GP_PROXY_TABLE,
    NV_ITEM_ZCL_GP_SINK_TABLE,
    NV_ITEM_APP_SIMPLE_DESC,
    NV_ITEM_APP_POWER_CNT,

    NV_ITEM_ID_MAX              = 0xFF,/* Item id 0xFF should not be used. */
}nv_item_t;
  • 每个module占用2个或(2*n)个sectors,格式:
     sector info + item 索引 + item 内容
    

其中sector info标识该块是否有效,长度为sizeof(nv_sect_info_t),之后紧跟待写入的item索引,item内容起始于该module首地址偏移512Byte或1024Byte的位置。

  • 为了避免频繁进行擦除操作,NV采用单module追加写入的方法,直到1个Sector写满后,将有效信息搬到另一个sector,再将之前的sector内容清除。

  • NV区读写操作接口如下

nv_sts_t nv_flashWriteNew(u8 single, u16 id, u8 itemId, u16 len, u8 *buf);
nv_sts_t nv_flashReadNew(u8 single, u8 id, u8 itemId, u16 len, u8 *buf);

注意:

  • 在写某个item时,如果只存在一个有效值的话,single应设为1,当写item结束时,会自动将之前有效的item清除;否则,需要根据内容检索相同的item,将其置为无效,再写入新的item。

任务管理

单次任务队列

  • 接口函数
TL_SCHEDULE_TASK(tl_zb_callback_t func, void *arg)

func: 任务回调函数

arg: 任务所需参数

任务说明

  • 只执行一次,没有优先级,顺序依次处理

  • 建议使用场合:

    1) 需要避免函数深度嵌套引起的堆栈溢出问题;

    2) 中断函数中,通过将数据、事件压入队列,避免在中断函数里消耗过多时间。

  • 大小: 32个(使用时应避免一次性压入过多任务)

常驻任务队列

  • 任务注册 (任务注册后默认启动)
ev_on_poll(ev_poll_e e, ev_poll_callback_t cb)
  • 任务暂停
ev_disable_poll(ev_poll_e e, ev_poll_callback_t cb)
  • 任务重启
ev_enable_poll(ev_poll_e e, ev_poll_callback_t cb)

此任务注册后,会在主循环中一直执行。

软件定时任务

为了方便用户实现对时间精度需求不高的定时任务,Telink Zigbee SDK提供了一个软件定时任务管理机制。

需要注意的是,从SDK V3.6.2版本开始,软件定时任务管理的时间单位从原来的ticker改为毫秒,这解决了长时间定时任务需求的问题。

(1) 接口函数

  • 任务注册
TL_ZB_TIMER_SCHEDULE(cb, arg, timeout)
  • 任务取消
TL_ZB_TIMER_CANCEL(evt)

(2) 注意事项

定时任务回调函数返回值的三种用法:

  • 返回值小于0,则该任务执行后被自动删除,任务不复存在。

  • 返回值等于0,则一直使用之前启动时的timeout来周期性定时触发回调函数。

  • 返回值大于0,则使用该返回值作为新的周期定时触发回调函数,单位ms。

注意:

  • 在中断函数里避免使用TL_ZB_TIMER_CANCEL()

(3) 使用实例

当VK_SW1按键按下后,启动或取消一个10秒的定时任务,时间到达后执行一次广播On/Off Toggle的命令,执行结束后退出,代码如下。

需要注意的是,在return -1前必须将brc_toggleEvt清零,否则,在回调函数执行后,虽然定时任务的内存被释放了,但brc_toggleEvt任然指向该内存。当VK_SW1按键再次按下后,会错误执行。

ev_timer_event_t *brc_toggleEvt = NULL;

s32 brc_toggleCb(void *arg)
{
    epInfo_t dstEpInfo;
    TL_SETSTRUCTCONTENT(dstEpInfo, 0);

    dstEpInfo.dstAddrMode = APS_SHORT_DSTADDR_WITHEP;
    dstEpInfo.dstEp = SAMPLE_GW_ENDPOINT;
    dstEpInfo.dstAddr.shortAddr = 0xffff;
    dstEpInfo.profileId = HA_PROFILE_ID;
    dstEpInfo.txOptions = 0;
    dstEpInfo.radius = 0;

    zcl_onOff_toggleCmd(SAMPLE_GW_ENDPOINT, &dstEpInfo, FALSE);

    brc_toggleEvt = NULL;//must clear
    return -1;
}

void buttonShortPressed(u8 btNum)
{
    if(btNum == VK_SW1){
        if(!brc_toggleEvt){
            brc_toggleEvt = TL_ZB_TIMER_SCHEDULE(brc_toggleCb, 
                                                 NULL, 
                                                 10 * 1000);
        }else{
            TL_ZB_TIMER_CANCEL(&brc_toggleEvt);
        }
    }
}

Zigbee SDK应用开发

运行模式选择

用户可以通过修改comm_cfg.h文件中的宏定义BOOT_LOADER_MODE来更改运行模式,2种模式区别详见2.4章节

#define BOOT_LOADER_MODE    0//1
  • SDK默认采用多地址启动模式(BOOT_LOADER_MODE 为0)
  • 如果采用bootloader方式,请将BOOT_LOADER_MODE 设置为1,

1) BOOT_LOADER_IMAGE_ADDR: bootloader image放置的位置,通常为0

2) APP_IMAGE_ADDR: 用户image放置的位置,可根据实际应用自行修改,默认使用0x8000

硬件选择

Telink Zigbee SDK demo可以运行在不同系列芯片、不同硬件板子上,用户需要针对不同的硬件条件,做相应的配置。

芯片型号确认

Telink Zigbee SDK在comm_cfg.h中列举了以下几种芯片类型,用户在编译工程实例前,请确认相应工程下version_cfg.h中选择的芯片类型是否与实际使用的芯片类型一致。

(1) comm_cfg.h芯片类型定义

/* Chip IDs */
#define TLSR_8267           0x00
#define TLSR_8269           0x01
#define TLSR_8258_512K      0x02
#define TLSR_8258_1M        0x03
#define TLSR_8278           0x04
#define TLSR_B91            0x05

(2) version_cfg.h芯片类型选择

#if defined(MCU_CORE_826x)
    #if (CHIP_8269)
        #define CHIP_TYPE       TLSR_8269
    #else
        #define CHIP_TYPE       TLSR_8267
    #endif
#elif defined(MCU_CORE_8258)
        #define CHIP_TYPE       TLSR_8258_512K//TLSR_8258_1M
#elif defined(MCU_CORE_8278)
        #define CHIP_TYPE       TLSR_8278
#elif defined(MCU_CORE_B91)
        #define CHIP_TYPE       TLSR_B91
#endif

目标板选择

Telink Zigbee SDK提供的Demo可以运行在EVK板或USB Dongle上的,用户可以在相应Demo下的app_cfg.h文件中选择更改目标板。

/* Board ID */
#define BOARD_826x_EVK                  0
#define BOARD_826x_DONGLE               1
#define BOARD_826x_DONGLE_PA            2
#define BOARD_8258_EVK                  3
#define BOARD_8258_EVK_V1P2             4//C1T139A30_V1.2
#define BOARD_8258_DONGLE               5
#define BOARD_8278_EVK                  6
#define BOARD_8278_DONGLE               7
#define BOARD_B91_EVK                   8
#define BOARD_B91_DONGLE                9

/* Board define */
#if defined(MCU_CORE_8258)
#if (CHIP_TYPE == TLSR_8258_1M)
    #define FLASH_CAP_SIZE_1M           1
#endif
    #define BOARD                       BOARD_8258_DONGLE
    #define CLOCK_SYS_CLOCK_HZ          48000000
#elif defined(MCU_CORE_8278)
    #define FLASH_CAP_SIZE_1M           1
    #define BOARD                       BOARD_8278_DONGLE
    #define CLOCK_SYS_CLOCK_HZ          48000000
#elif defined(MCU_CORE_B91)
    #define FLASH_CAP_SIZE_1M           1
    #define BOARD                       BOARD_B91_DONGLE
    #define CLOCK_SYS_CLOCK_HZ          48000000
#else
    #error "MCU is undefined!"
#endif

在预编译阶段会根据先前的芯片类型选择加载对应的板级配置,配置文件是各工程目录下的board_xx.h,同时需要注意一下目标板的flash容量是否与板级配置一致,以防加载数据出错。

#define FLASH_CAP_SIZE_1M   1

打印调试配置

UART打印

为避免硬件UART资源的浪费,我们通过GPIO模拟UART TX实现了UART打印功能(printf()函数),用户可以任意更改合适的GPIO。配置方法如下:

1) 打印使能配置:

#define UART_PRINTF_MODE    1

2) 打印口配置:

#define DEBUG_INFO_TX_PIN   GPIO_PC4//print

3) 波特率配置:

#define BAUDRATE        1000000//1M

注意:

  • 826x最大支持2M波特率,8258、8278和B91最大支持1M波特率;
  • 不要在中断处理函数中使用该打印,防止打印数据较多或函数嵌套过深导致中断栈溢出。

USB打印

可以配合Telink BDT工具使用USB打印。配置方法如下:

1) 打印使能配置:

#define USB_PRINTF_MODE     1

2) 使能USB端口:

#define HW_USB_CFG()        do{ \
                                usb_set_pin_en();\
                            }while(0)

注意:

  • 当使用ZBHCI_USB_CDC或ZBHCI_USB_HID功能时,USB打印功能失效。

Zigbee网络开发流程

应用层初始化(user_init)

应用层初始化主要由zigbee stack以及zigbee应用层初始化组成。

应用层初始化流程

1) stack_init()

完成基本的协议栈初始化工作以及协议栈给出的应用层回调函数注册。

  • zb_init(): 初始化zigbee协议栈,包括mac、nwk、aps、zdo等各层的初始化,对于not factory-new设备,会从NV中读取入网信息,恢复网络信息以及各层属性。

注意:

对于已经入网的设备,无法通过修改zb_config.c里的默认属性表配置达到改变属性的目的,如果想修改属性的话,必须通过g_zbMacPib/g_zbNIB/g_touchlinkAttr/g_bdbAttrs直接操作对应的attribute。

  • zb_zdoCbRegister(): 注册一些zigbee stack给出的回调函数,从而用以获取网络运行过程中的相关信息。比如:建网/入网结果、设备离网、设备加入网络、网络状态改变、父节点收到同步信息等。

2) user_app_init()

用户根据具体产品功能注册所要的端口以及clusters和attributes。

  • 端口注册:
af_endpoitRegister()

注册一个端口,用以明确该端口的具体功能(profileId、 deviceId、 端口号、以及支持的输入clusters(server)、输出clusters(client)

  • Cluster注册:
zcl_register()

注册某个端口支持的Clusters、Attributes以及命令回调处理函数。

  • Cluster初始化:
zcl_init()

用以注册ZCL层支持的基础命令处理回调函数,比如ZCL_CMD_WRITE/ZCL_CMD_WRITE_RSP/ZCL_CMD_READ/ZCL_CMD_READ_RSP等。

3) ev_on_poll()

注册用户轮询事件。

BDB流程

完成节点网络初始化、建网、入网的一系列操作。

(1) BDB初始化(bdb_init)

BDB初始化流程

bdb_init()的功能: 完成协议ZigBee Base Device Behavior Specification中的第7章节的相关功能,对于未入网设备,完成简单初始配置工作;对于已经入网的设备,重新接入到网络。

BDB初始化后,会调用应用层注册的回调函数bdbInitCb,再由用户调用相关函数决定接下来的BDB Commissioning行为。

(2) BDB Commissioning

完成协议ZigBee Base Device Behavior Specification中的第8章节的相关功能,BDB Commissioning包括以下几种行为:

  • Network steering: 搜索发现并加入到网络。
  • Network formation: 新设备创建网络。Router创建Distribute网络,Coordinator创建Central网络。
  • Finding & Binding: 加入网络后搜索匹配的功能并绑定数据发送的方式。
  • Touch Link: 通过touch link方式接入网络。

在执行完BDB Commissioning之后,系统会回调bdbCommissioningCb函数,将commissioning的结果返回给用户,由用户决定下一步的动作。

例如:一个End Device在执行完BDB Commissioning后返回了一个BDB_COMMISSION_STA_NO_NETWORK的状态,那么用户可以决定是进入休眠或者继续尝试搜索加入网络。

网络安全

当新设备首次入网时,会从信任中心(Trust Center,一般是指协调器网关)申请获取网络密钥,之后以该密钥加密空中数据进行消息传递。

如何保证网络密钥的安全性?通常使用的方法有:

a) 使用Default TCLK加密网络密钥,

b) 使用Install code衍生出来的Link key加密网络密钥,

c) 预设网络密钥。

(1) 入网流程

新设备既可以直接通过信任中心入网(图 4.3 直接入网),也可以通过其他路由节点入网(图 4.4 间接入网),在入网过程中,信任中心会将加密过的网络密钥使用APS Transport Key命令下发给新设备,当新设备解析成功后便会广播一个Device Announce命令,将自己的地址信息通知到周围的设备。如果新设备是一个zigbee 3.0之前协议的设备,这时候就表示入网成功了。反之,如果新设备是一个符合zigbee 3.0协议的设备,它还会向信任中心发起Node Descriptor Request命令,查询信任中心是否支持zigbee 3.0,如果支持,将会继续向信任中心申请新的Trust Center Link Key。

直接入网

间接入网

(2) Default TCLK

Default TCLK,是联盟规定的一组公开的Trust Center Link Key,它既保证了zigbee网络的安全性又保证了互联互通性。Telink Zigbee SDK默认使用Default TCLK来加密网络密钥,但因为这是个公开的link key, 对于私有网络会存在安全隐患。

const u8 tcLinkKeyCentralDefault[] = {
    0x5a, 0x69, 0x67, 0x42, 0x65, 0x65, 0x41, 0x6c, 
    0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x30, 0x39
};

(3) Install Code

Install Code是联盟定义的一种通过MMO哈希算法来衍生TCLK的加密方法(请参考zigbee base device behavior specification),只有当信任中心和待入网的设备持有相同的Install code,才能成功入网。

若使用install code,通常情况下,每个节点都有一个唯一的install code存放在Flash的固定位置(见2.5章节,生产环节时预写进去)。当设备需要接入网关时,将此设备的install code和IEEE地址导入网关。

网关导入目标设备install code的接口如下:

void zb_pre_install_code_store(addrExt_t ieeeAdrrr, u8 *pInstallCode)

待入网设备从Flash加载使用install code的接口如下:

void zb_pre_install_code_load(app_linkkey_info_t *appLinkKey)

(4) Pre-configured NWK Key

Pre-configured NWK Key是提前将网络密钥配置到网关和待入网设备,在入网过程中网关给入网设备下发空的无效的网络密钥,入网节点忽略transport ket命令中的nwk key字段。

接口如下,该函数需要在bdb_init()之后调用。

void zb_preConfigNwkKey(u8 *nwkKey, bool enTransKey)

数据交互

网络建立成功之后,同一网络的各个节点就可以相互收发数据了。

用户可以使用标准的ZCL来实现数据交互,也可以直接使用相关的API来自定义收发数据的处理。

(1) 使用ZCL层实现数据交互

Zigbee联盟规范了ZCL标准的Read/Write/Report/Configure Report等基础命令,同时针对不同应用规范了一系列的Cluster、Attribute和Command的处理。

Telink Zigbee SDK给出了ZCL的大部分实现方法,以源码方式提供给用户直接调用,也可以自行添加扩展。SDK提供的几个Demo是使用的ZCL方法进行数据交互,具体请参考ZigBee Cluster Library Specification

以sampleLight为例,实现方法:

1) 注册AF层端口描述和ZCL接收处理回调函数zcl_rx_handler以及发送确认回调函数af_dataSentConfirm。

/* Register endPoint */
af_endpointRegister(SAMPLE_LIGHT_ENDPOINT, 
                    (af_simple_descriptor_t*)&sampleLight_simpleDesc, 
                    zcl_rx_handler, af_dataSentConfirm);

2) 注册ZCL基本命令处理回调函数zclProcessIncomingMsg。

/* Register Incoming ZCL Foundation command/response messages */
zcl_init(sampleLight_zclProcessIncomingMsg);

3) 注册用户需要支持的Cluster相应的命令处理回调函数表,即4.4.1节中提到的注册表。

/* Register ZCL specific cluster information */
zcl_register(SAMPLE_LIGHT_ENDPOINT, 
             SAMPLELIGHT_CB_CLUSTER_NUM,
             g_sampleLightClusterList);

(2) 使用AF层实现数据交互

除了直接使用ZCL规范的数据收发外,用户可以直接注册自定义的接收处理函数,也可以直接使用AF层提供的af_dataSend函数往其他设备发送数据。实际上ZCL规范就是对AF层数据处理的二次封装。

如果不使用SDK里的zcl,则不需要调用zcl_register()和zcl_init()

实现方法:

1) 注册数据接收处理回调函数user_rx_handler以及发送确认回调函数af_dataSentConfirm。

af_endpointRegister(SAMPLE_LIGHT_ENDPOINT, 
                    (af_simple_descriptor_t*)&sampleLight_simpleDesc, 
                    user_rx_handler, NULL);

2) 调用af_dataSend发送数据。

u8 af_dataSend(u8 srcEp, epInfo_t *pDstEpInfo, u16 clusterId, 
               u8 cmdPldLen, u8 *cmdPld, u8 *seqNo);

网络参数配置

用户可以根据需求在/zigbee/common/zb_config.c中修改网络参数配置。

  • TL_ZB_NWK_ADDR_MAP_NUM

节点支持的最大地址映射表的数量,关系到网络最大容量。按照SDK默认配置,512KB flash最大支持127,1MB flash最大支持300。

  • TL_ZB_NEIGHBOR_TABLE_NUM

节点支持的邻居表的个数。路由设备默认26个。

  • ROUTING_TABLE_NUM

节点支持的AODV路由表个数。

  • NWK_ROUTE_RECORD_TABLE_NUM

节点支持的MTO路由记录表个数。

  • APS_BINDING_TABLE_NUM

节点支持的绑定表个数。

  • APS_GROUP_TABLE_NUM

节点支持的分组个数。

  • nwkKeyDefalut

网络密钥缺省值。当缺省值为0时,协调器将随机生成网络密钥分配给入网的设备;当缺省值为非0时,协调器将使用nwkKeyDefault作为网络密钥。

  • macPibDefault

MAC层的基本参数信息。

  • nwkNibDefault

NWK层的基本参数信息。

系统异常处理

调用sys_exceptHandlerRegister()注册异常回调函数, 当stack发生buffer泄露、状态异常时会触发该函数,在此函数里用户可以添加相应异常处理。

建议:开发阶段,回调函数直接while(1),以便定位问题,通过变量T_evtExcept[1]可以定位到发生了何种异常;产品阶段,最好做复位处理。

例如:

Volatile u16 T_debug_except_code = 0;

static void sampleLightSysException(void){
    T_debug_except_code = T_evtExcept[1];
    while(1);//or SYSTEM_RESET()
}

/* Register except handler for test */
sys_exceptHandlerRegister(sampleLightSysException);

常用APIs

应用框架Application Framework (AF)

af_endpointRegister()

在应用框架层注册端点描述符和该端点的接收、发送结果回调处理函数。

原型

bool af_endpointRegister(u8 ep, af_simple_descriptor_t *simple_desc,
                         af_endpoint_cb_t rx_cb, af_dataCnf_cb_t cnfCb)

返回值

TRUE or FALSE.

Name Type Description
ep u8 Endpoint
simple_desc af_simple_descriptor_t Pointer to simple descriptor
rx_cb af_endpoint_cb_t Callback function to handle the APS data sent to this endpoint
cnfCb af_dataCnf_cb_t Confirm callback function for APS data transmission

af_dataSend()

使用AF层发送消息。

原型

u8 af_dataSend(u8 srcEp, epInfo_t *pDstEpInfo, u16 clusterId, 
               u16 cmdPldLen, u8 *cmdPld, u8 *apsCnt)

返回值

RET_OK or Others.

Name Type Description
srcEp u8 Source endpoint.
pDstEpInfo epInfo_t* Pointer to destination information.
clusterId u16 Cluster identifier.
cmdPldLen u16 Payload length.
cmdPld u8* Pointer to the payload.
apsCnt u8* Pointer to the APS Counter.

基础设备行为BDB (Base Device Behaviour)

bdb_init()

初始化BDB和注册回调处理函数。

原型

u8 bdb_init(af_simple_descriptor_t *simple_desc, 
            bdb_commissionSetting_t *setting, 
            bdb_appCb_t *cb, u8 repower)

返回值

TRUE

Name Type Description
simple_desc af_simple_descriptor_t* Pointer to the simple descriptor.
setting bdb_commissionSetting_t* Pointer to the BDB commissioning setting.
cb bdb_appCb_t* Callback function for BDB commissioning.
repower u8 This function is called after power-on or sleep wakeup.

bdb_networkFormationStart()

启动创建网络,协调器调用的话将会创建一个集中式网络,路由设备调用将会创建一个分布式网络。

原型

u8 bdb_networkFormationStart(void)

返回值

BDB_STATE

bdb_networkSteerStart()

启动搜索网络。

原型

u8 bdb_networkSteerStart(void)

返回值

BDB_STATE

bdb_networkTouchLinkStart()

启动Touch Link。

原型

u8 bdb_networkTouchLinkStart(u8 role)

返回值

BDB_STATE

Name Type Description
role u8 BDB_COMMISSIONING_ROLE_INITIATOR or BDB_COMMISSIONING_ROLE_TARGET

bdb_findAndBindStart()

启动发现和绑定。

原型

u8 bdb_findAndBindStart(u8 role)

返回值

BDB_STATE

Name Type Description
role u8 BDB_COMMISSIONING_ROLE_INITIATOR or BDB_COMMISSIONING_ROLE_TARGET

bdb_defaultReportingCfg()

配置默认上报消息,绑定后生效。

原型

status_t bdb_defaultReportingCfg(u8 endpoint, u16 profileID, 
                                 u16 clusterID, u16 attrID, 
                                 u16 minReportInt, u16 maxReportInt, 
                                 u8 *reportableChange)

返回值

ZCL_STA

Name Type Description
endpoint u8 Endpoint
profileID u16 Profile Identifier
clusterID u16 Cluster Identifier
attrID u16 Attribute Identifier
minReportInt u16 Minimum reporting interval, in seconds
maxReportInt u16 Maximum reporting interval, in seconds
reportableChange u8* Reportable change (only applicable to analog data type)

网络管理Network management

zb_init()

初始化zigbee协议栈各层。

原型

void zb_init(void)

返回值

None

zb_zdoCbRegister()

注册协议栈回调函数。

原型

void zb_zdoCbRegister(zdo_appIndCb_t *cb)

返回值

None

Name Type Description
cb zdo_appIndCb_t* Callback function.

zb_setPollRate()

设置data request的发送速率,单位:毫秒。仅入网后的终端设备有效。

原型

u8 zb_setPollRate(u32 newRate)

返回值

zdo_status_t

Name Type Description
newRate u32 New poll rate, in millisecond.

zb_rejoinReq()

回连请求,通常终端设备丢失父节点后调用。

原型

zdo_status_t zb_rejoinReq(u32 scanChannels, u8 scanDuration)

返回值

zdo_status_t

Name Type Description
scanChannels u32 Channel mask.
scanDuration u8 Scan duration.

zb_factoryReset()

恢复出厂设置。供路由设备和终端设备使用,恢复出厂前会广播离网通知。

原型

void zb_factoryReset(void)

返回值

None

zb_mgmtPermitJoinReq()

允许入网控制命令。协调器或路由设备可以使用该命令控制允许其他设备入网的时间。

原型

zdo_status_t zb_mgmtPermitJoinReq(u16 dstNwkAddr, u8 permitJoinDuration, 
                                  u8 tcSignificance, u8 *seqNo, 
                                  zdo_callback indCb)

返回值

zdo_status_t

Name Type Description
dstNwkAddr u16 Short address of the target device
permitJoinDuration u8 Time in seconds during which the device allows to join
tcSignificance u8 TC significance
seqNo u8* The sequence number used by this command
indCb zdo_callback NULL

zb_mgmtLeaveReq()

离网控制命令。

原型

zdo_status_t zb_mgmtLeaveReq(u16 dstNwkAddr, 
                             zdo_mgmt_leave_req_t *pReq, 
                             u8 *seqNo, zdo_callback indCb)

返回值

zdo_status_t

Name Type Description
dstNwkAddr u16 Short address of the target device
pReq zdo_mgmt_leave_req_t* Address information of the device that needs to be leaved
seqNo u8* The sequence number used by this command
indCb zdo_callback Callback function for Mgmt_Leave_rsp

zb_mgmtLqiReq()

获取目标设备的关联邻居信息。

原型

zdo_status_t zb_mgmtLqiReq(u16 dstNwkAddr, 
                           zdo_mgmt_lqi_req_t *pReq, 
                           u8 *seqNo, zdo_callback indCb)

返回值

zdo_status_t

Name Type Description
dstNwkAddr u16 Short address of the target device
pReq zdo_mgmt_lqi_req_t* Address information of the device that needs to be requested
seqNo u8* The sequence number used by this command
indCb zdo_callback Callback function for Mgmt_Lqi_rsp

zb_mgmtBindReq()

获取目标设备的的绑定表信息。

原型

zdo_status_t zb_mgmtBindReq(u16 dstNwkAddr, 
                            zdo_mgmt_bind_req_t *pReq, 
                            u8 *seqNo, zdo_callback indCb)

返回值

zdo_status_t

Name Type Description
dstNwkAddr u16 Short address of the target device
pReq zdo_mgmt_bind_req_t* Information of the device that needs to be requested
seqNo u8* The sequence number used by this command
indCb zdo_callback Callback function for Mgmt_Bind_rsp

zb_mgmtNwkUpdateReq()

更新网络参数或请求网络环境信息。

原型

zdo_status_t zb_mgmtNwkUpdateReq(u16 dstNwkAddr, 
                                 zdo_mgmt_nwk_update_req_t *pReq, 
                                 u8 *seqNo, zdo_callback indCb)

返回值

zdo_status_t

Name Type Description
dstNwkAddr u16 Short address of the target device
pReq zdo_mgmt_nwk_update_req_t* Information of the device that needs to be requested
seqNo u8* The sequence number used by this command
indCb zdo_callback Callback function for Mgmt_Nwk_Update_notify

zb_zdoBindUnbindReq()

发送绑定或解绑命令。

原型

zdo_status_t zb_zdoBindUnbindReq(bool isBinding, zdo_bind_req_t *pReq, 
                                 u8 *seqNo, zdo_callback indCb)

返回值

zdo_status_t

Name Type Description
isBinding bool TRUE - bind, FALSE - unbind
pReq zdo_bind_req_t * Information of the device that needs to be requested
seqNo u8* The sequence number used by this command
indCb zdo_callback Callback function for Bind_rsp/Unbind_rsp

zb_zdoNwkAddrReq()

请求目标短地址命令。

原型

zdo_status_t zb_zdoNwkAddrReq(u16 dstNwkAddr, zdo_nwk_addr_req_t *pReq, 
                              u8 *seqNo, zdo_callback indCb)

返回值

zdo_status_t

Name Type Description
dstNwkAddr u16 Short address of the target device
pReq zdo_nwk_addr_req_t * Information of the device that needs to be requested
seqNo u8* The sequence number used by this command
indCb zdo_callback Callback function for NWK_addr_rsp

zb_zdoIeeeAddrReq()

请求目标长地址命令。

原型

zdo_status_t zb_zdoIeeeAddrReq(u16 dstNwkAddr, zdo_ieee_addr_req_t *pReq, 
                               u8 *seqNo, zdo_callback indCb)

返回值

zdo_status_t

Name Type Description
dstNwkAddr u16 Short address of the target device
pReq zdo_ieee_addr_req_t * Information of the device that needs to be requested
seqNo u8* The sequence number used by this command
indCb zdo_callback Callback function for IEEE_addr_rsp

zb_zdoSimpleDescReq()

请求目标简单描述符信息。

原型

zdo_status_t zb_zdoSimpleDescReq(u16 dstNwkAddr, 
                                 zdo_simple_descriptor_req_t *pReq, 
                                 u8 *seqNo, zdo_callback indCb)

返回值

zdo_status_t

Name Type Description
dstNwkAddr u16 Short address of the target device
pReq zdo_simple_descriptor_req_t * Information of the device that needs to be requested
seqNo u8* The sequence number used by this command
indCb zdo_callback Callback function for Simple_Desc_rsp

zb_zdoNodeDescReq()

请求目标节点描述符信息。

原型

zdo_status_t zb_zdoNodeDescReq(u16 dstNwkAddr, 
                               zdo_node_descriptor_req_t *pReq, 
                               u8 *seqNo, zdo_callback indCb)

返回值

zdo_status_t

Name Type Description
dstNwkAddr u16 Short address of the target device
pReq zdo_node_descriptor_req_t * Information of the device that needs to be requested
seqNo u8* The sequence number used by this command
indCb zdo_callback Callback function for Node_Desc_rsp

zb_zdoPowerDescReq()

请求目标电源描述符信息。

原型

zdo_status_t zb_zdoPowerDescReq(u16 dstNwkAddr, 
                                zdo_power_descriptor_req_t *pReq, 
                                u8 *seqNo, zdo_callback indCb)

返回值

zdo_status_t

Name Type Description
dstNwkAddr u16 Short address of the target device
pReq zdo_power_descriptor_req_t * Information of the device that needs to be requested
seqNo u8* The sequence number used by this command
indCb zdo_callback Callback function for Power_Desc_rsp

zb_zdoActiveEpReq()

请求目标活跃的端点信息。

原型

zdo_status_t zb_zdoActiveEpReq(u16 dstNwkAddr, zdo_active_ep_req_t *pReq, 
                               u8 *seqNo, zdo_callback indCb)

返回值

zdo_status_t

Name Type Description
dstNwkAddr u16 Short address of the target device
pReq zdo_active_ep_req_t * Information of the device that needs to be requested
seqNo u8* The sequence number used by this command
indCb zdo_callback Callback function for Active_Ep_rsp

zb_zdoMatchDescReq()

请求目标匹配描述符信息。

原型

zdo_status_t zb_zdoMatchDescReq(u16 dstNwkAddr, 
                                zdo_match_descriptor_req_t *pReq, 
                                u8 *seqNo, zdo_callback indCb)

返回值

zdo_status_t

Name Type Description
dstNwkAddr u16 Short address of the target device
pReq zdo_match_descriptor_req_t * Information of the device that needs to be requested
seqNo u8* The sequence number used by this command
indCb zdo_callback Callback function for Match_Desc_rsp

zb_isDeviceFactoryNew()

检查节点是否是新设备。

原型

bool zb_isDeviceFactoryNew(void)

返回值

TRUE or FALSE

zb_isDeviceJoinedNwk()

检查节点是否已经入网。

原型

bool zb_isDeviceJoinedNwk(void)

返回值

TRUE or FALSE

zb_getMacAssocPermit()

获取本节点的入网允许状态。

原型

bool zb_getMacAssocPermit(void)

返回值

TRUE or FALSE

zb_apsExtPanidSet()

设置Extend PAN ID。

原型

void zb_apsExtPanidSet(extPANId_t panId)

返回值

None

Name Type Description
panId extPANId_t Extend PAN identifier.

ZCL

zcl_init()

初始化ZCL层,注册基础命令处理函数。

原型

void zcl_init(zcl_hookFn_t fn)

返回值

None

Name Type Description
fn zcl_hookFn_t Callback function.

zcl_register()

注册应用层端点支持的cluster、attributes和command。

原型

void zcl_register(u8 endpoint, u8 clusterNum, zcl_specClusterInfo_t *info)

返回值

None

Name Type Description
endpoint u8 Endpoint
clusterNum u8 The total number of clusters supported by the endpoint
info zcl_specClusterInfo_t* Information of the clusters

OTA

ota_init()

初始化OTA需要的端点信息和回调函数。

原型

void ota_init(ota_type_e type, 
              af_simple_descriptor_t *simpleDesc,
              ota_preamble_t *otaPreamble, 
              ota_callBack_t *cb)

返回值

None

Name Type Description
type ota_type_e Client or server
simpleDesc af_simple_descriptor_t* Simple descriptor
otaPreamble ota_preamble_t* Information of the OTA preamble
cb ota_callBack_t* Callback function for OTA message

ota_queryStart()

启动OTA查询功能,单位:秒。

原型

void ota_queryStart(u16 seconds)

返回值

None

Name Type Description
seconds u8 Query cycle, in second

OTA

TLSR8和TLSR9系列芯片支持Flash多地址启动:除了Flash地址0x00000,还支持从0x40000读取固件运行。Telink Zigbee SDK使用了该特性来实现OTA的功能。

2.5节可知,我们分配了两块固件区域Firmware和OTA-Image,固件大小应不大于208KB(512KB Flash)。

假设当前正在运行Firmware的固件,当设备执行OTA升级时,新的固件数据将被存储到OTA-Image,在OTA结束并且验证通过后,将重启并运行OTA-Image的固件。后续OTA,将交替执行。

OTA初始化

typedef enum{
    OTA_TYPE_CLIENT,
    OTA_TYPE_SERVER
}ota_type_e;

void ota_init(ota_type_e type, af_simple_descriptor_t *simpleDesc, 
              ota_preamble_t *otaPreamble, ota_callBack_t *cb);

OTA设备分为服务设备(Server)和终端设备(Client)。因此,在OTA初始化时需要注意OTA初始化的服务类型。

一般地,被升级设备为终端设备(Client),为被升级设备提供新固件的设备为服务设备(Server)。

OTA Server

OTA服务端需要将被升级设备所需要的新固件写入OTA-Image区域供OTA使用。

例如:服务端自己运行的固件在Firmware区,那么可以将目标设备的OTA image(包含OTA Header的新固件,参考Zigbee Cluster Library Specification)暂存到OTA-Image区域。

当OTA服务端在调用ota_init函数后,会自动装载OTA image的信息。

OTA Client

设置OTA终端设备的OTA查询周期,单位:秒。

void ota_queryStart(u16 seconds);

OTA终端设备在调用ota_init函数后,将会自动重载上一次的OTA进度信息,如果入网成功,将在设置的seconds秒后开始OTA请求。

OTA Image

OTA Image是一个包含OTA Header供OTA Client端实现空中升级的zigbee文件。用户可以使用Telink提供的zigbee_ota_tool工具,自动将Client端的固件转换成升级文件。SDK中要求待升级固件的文件版本(请查阅2.3.3章节)必须大于当前的文件版本,否则,当Client端发起OTA查询时,Server端将回复NO_IMAGE_AVAILABLE。

OTA Image文件生成,以sampleLight_8258为例:

(1)将sampleLight_8258.bin拷贝到“zigbee_ota_tool_v2.2.exe”所在文件夹;

(2)双击“zigbee_ota_tool_v2.2.exe”按提示操作;

(3)或使用命令行“./zigbee_ota_tool_v2.2.exe [arg1] [arg2]”。

[arg1]:文件名,需要转译的文件名,输入参数如:sampleLight_8258.bin。

[arg2]:如果不存在该参数,代表不加密。如果存在,代表使用AES-128加密,输入参数如:

00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF。

输出文件:

1141-0201-10013001-sampleLight_8258.zigbee

文件导入:

(1) 将输出文件的后缀名“.zigbee”改成“.bin”,使用Telink BDT.exe烧录工具将该文件直接下载到OTA服务端(网关)Flash的OTA-Image区域;

(2) 将输出文件的后缀名“.zigbee”改成“.ota”,使用ZGC工具,选择“HCI OTA”将文件导入到OTA服务端(网关)Flash的OTA-Image区域。该方法需要OTA服务端(网关)使能ZBHCI_EN。

文件导入

Bootloader

Telink Zigbee SDK同时也提供了bootloader工程,用户可以使用bootloader + app的模式实现产品功能。

其中,bootloader是一个简单的引导程序,它实现了应用程序升级(需要使能UART_ENABLE)、检查、搬运和跳转的功能;app是一个zigbee应用程序,它可以是sampleGW、sampleLight、sampleSwitch或是用户自己的应用程序。

在编译bootloader工程时,需要将BOOT_LOADER_MODE定义为1,否则编译将会报错;在编译app工程时,也需要将BOOT_LOADER_MODE定义为1,否则会因链接文件不匹配而无法正常运行。

在bootloader和app工程编译生成bin文件后,可以参考2.4.3节2.6节,直接使用BDT烧录工具将两个bin文件分别烧录到相应地址,也可以只烧录bootloader,然后利用bootloader的串口升级功能(需要使能UART_ENABLE),通过串口将app升级到固件区。

应用程序升级

1) 串口使能:

#define UART_ENABLE         1

2) 串口引脚配置:

#define UART_TX_PIN         UART_TX_PD7
#define UART_RX_PIN         UART_RX_PA0

引脚配置在不同芯片不同开发平台会有差异,具体的配置可以在\bootLoader\board_xx.h文件中查看。

3) 串口波特率:

默认115200。

升级方法,以sampleLight_8258为例:

(1)将开发板提前烧录好bootloader,连接串口;

(2)提前准备好sampleLight_8258.bin,与上一章节6节不同,不需要转换成OTA image升级文件;

(3)上电开发板,快速按下VK_SW1按键触发升级模式;

(4)打开ZGC工具,选择“HCI OTA”栏,选择“sampleLight_8258.bin”,点击“Start OTA”开始升级;

(5)等进度条满之后,bootloader会检查和搬运新的应用程序,并跳转运行app程序。

注意:

  • 在使能串口升级功能的情况下,升级功能只会在上电(LED_POWER灯亮起)2秒内被触发。触发条件是在这2秒内检测到VK_SW1按键被按下,或是收到MSG_CMD_OTA_START_REQUEST串口指令。如果错过了窗口期,需要重新上电。

串口升级

扩展功能HCI接口

Telink Zigbee SDK提供了HCI接口方便用户做扩展应用开发,具体实现请详见../zigbee/zbhci。

当前HCI接口实现提供了3种方式:UART、USB CDC和USB Print。相对应的宏如下:

UART         ->  #define ZBHCI_UART 1
USB CDC      ->  #define ZBHCI_USB_CDC 1
USB Print    ->  #define ZBHCI_USB_PRINT 1

如需使用某种方式,只需要将相应的宏设为1即可。

例如:sampleGW例程要使用UART方式的HCI功能,请将ZBHCI_UART设置为1。

控制流程图

控制流程图

命令帧格式

Header Message Type Message Length Checksum Payload Tail
1 Byte 2 Bytes 2 Bytes 1 Byte Variable 1 Byte
Field Description
Header Header flag, shall be 0x55
Message Type Message Type, big-endian
Message Length Payload length, big-endian
Checksum The checksum
Payload Payload
Tail Tail flag, shall be 0xAA

注意:

  • HCI命令的所有字段都是大端模式(big-endian)。

应答格式(Acknowledge format)

Message Type

Message Type Value
ZBHCI_CMD_ACKNOWLEDGE 0x8000

Payload

Message Type Status Reserved
2 Bytes 1 Byte 1 Byte
Name Description
Message Type HCI command message type
Status 0 = Success
1 = Wrong parameter
2 = Unsupported command
2 = Unsupported command
3 = Busy
4 = No memory
Reserved 0

示例:

命令帧格式

BDB命令

Message Type

Message Type Value
ZBHCI_CMD_BDB_COMMISSION_FORMATION 0x0001
ZBHCI_CMD_BDB_COMMISSION_STEER 0x0002
ZBHCI_CMD_BDB_COMMISSION_TOUCHLINK 0x0003
ZBHCI_CMD_BDB_COMMISSION_FINDBIND 0x0004
ZBHCI_CMD_BDB_FACTORY_RESET 0x0005
ZBHCI_CMD_BDB_PRE_INSTALL_CODE 0x0006
ZBHCI_CMD_BDB_CHANNEL_SET 0x0007

Payload

1) ZBHCI_CMD_BDB_COMMISSION_FORMATION

无payload.

示例: 55 00 01 00 00 00 AA

2) ZBHCI_CMD_BDB_COMMISSION_STEER

无payload.

示例: 55 00 02 00 00 00 AA

3) ZBHCI_CMD_BDB_COMMISSION_TOUCHLINK

Role
1 Byte
Name Description
Role 1 = Touch link initiator;
2 = Touch link target.

示例: 55 00 03 00 01 00 XX AA

4) ZBHCI_CMD_BDB_COMMISSION_FINDBIND

Role
1 Byte
Name Description
Role 1 = Find & Bind initiator;
2 = Find & Bind target.

示例: 55 00 04 00 01 00 XX AA

5) ZBHCI_CMD_BDB_FACTORY_RESET

无payload.

示例: 55 00 05 00 00 00 AA

6) ZBHCI_CMD_BDB_PRE_INSTALL_CODE

devAddr pre-install code
8 Bytes 16 Bytes
Name Description
devAddr The IEEE address of the pre-configured device
pre-install code The pre-install code to generate link key for the device

示例: 55 00 06 00 18 00 XX[8 Bytes] XX[16 Bytes] AA

7) ZBHCI_CMD_BDB_CHANNEL_SET

channelIdx
1 Byte
Name Description
channelIdx 11~26

示例: 55 00 07 00 01 00 XX AA

网络管理命令(Network management command)

Message Type (Host)

Message Type Value
ZBHCI_CMD_DISCOVERY_NWK_ADDR_REQ 0x0010
ZBHCI_CMD_DISCOVERY_IEEE_ADDR_REQ 0x0011
ZBHCI_CMD_DISCOVERY_NODE_DESC_REQ 0x0012
ZBHCI_CMD_DISCOVERY_SIMPLE_DESC_REQ 0x0013
ZBHCI_CMD_DISCOVERY_MATCH_DESC_REQ 0x0014
ZBHCI_CMD_DISCOVERY_ACTIVE_EP_REQ 0x0015
ZBHCI_CMD_BIND_REQ 0x0020
ZBHCI_CMD_UNBIND_REQ 0x0021
ZBHCI_CMD_MGMT_LQI_REQ 0x0030
ZBHCI_CMD_MGMT_BIND_REQ 0x0031
ZBHCI_CMD_MGMT_LEAVE_REQ 0x0032
ZBHCI_CMD_MGMT_DIRECT_JOIN_REQ 0x0033
ZBHCI_CMD_MGMT_PERMIT_JOIN_REQ 0x0034
ZBHCI_CMD_MGMT_NWK_UPDATE_REQ 0x0035
ZBHCI_CMD_NODES_JOINED_GET_REQ 0x0040
ZBHCI_CMD_NODES_TOGGLE_TEST_REQ 0x0041
ZBHCI_CMD_GET_LOCAL_NWK_INFO_REQ 0x0045

Payload (Host)

1) ZBHCI_CMD_DISCOVERY_NWK_ADDR_REQ

dstAddr ieeeAddr reqType startIdx
2 Bytes 8 Bytes 1 Byte 1 Byte
Name Description
dstAddr The destination address to which this command will be sent, shall be unicast or broadcast to all devices for which macRxOnWhenIdle = TRUE
ieeeAddr The IEEE address to be matched by the remote device
reqType Request type for this command
0x00 – Single device response
0x01 – Extended response
0x02 \~ 0xFF – Reserved
startIdx If the request type for this command is extended response, the startIdx provides the starting index for the requested elements of the associated device list

示例: 55 00 10 00 0C 00 XX[2 Bytes] XX[8 Bytes] XX XX AA

2) ZBHCI_CMD_DISCOVERY_IEEE_ADDR_REQ

dstAddr nwkAddrOfInterest reqType startIdx
2 Bytes 2 Bytes 1 Byte 1 Byte
Name Description
dstAddr The destination address to which this command will be sent, shall be unicast or broadcast to all devices for which macRxOnWhenIdle = TRUE
nwkAddrOfInterest The NWK address that is used for IEEE address mapping
reqType Request type for this command
0x00 – Single device response
0x01 – Extended response
0x02 \~ 0xFF – Reserved
startIdx If the request type for this command is extended response, the startIdx provides the starting index for the requested elements of the associated device list

示例: 55 00 11 00 06 00 XX[2 Bytes] XX[2 Bytes] XX XX AA

3) ZBHCI_CMD_DISCOVERY_NODE_DESC_REQ

dstAddr nwkAddrOfInterest
2 Bytes 2 Bytes
Name Description
dstAddr The destination address to which this command will be sent, shall be unicast either to the remote device itself or to an alternative device that contains the discovery information of the remote device
nwkAddrOfInterest NWK address of the target

示例: 55 00 12 00 04 00 XX[2 Bytes] XX[2 Bytes] AA

4) ZBHCI_CMD_DISCOVERY_SIMPLE_DESC_REQ

dstAddr nwkAddrOfInterest endpoint
2 Bytes 2 Bytes 1 Byte
Name Description
dstAddr The destination address to which this command will be sent, shall be unicast either to the remote device itself or to an alternative device that contains the discovery information of the remote device
nwkAddrOfInterest NWK address of the target
endpoint The endpoint on the destination

示例: 55 00 13 00 05 00 XX[2 Bytes] XX[2 Bytes] XX AA

5) ZBHCI_CMD_DISCOVERY_MATCH_DESC_REQ

dstAddr nwkAddrOfInterest profileID numInClusters numOutClusters clusterList
2 Bytes 2 Bytes 2 Bytes 1 Byte 1 Byte n Bytes
Name Description
dstAddr The destination address to which this command will be sent, shall be unicast either to the remote device itself or to an alternative device that contains the discovery information of the remote device
nwkAddrOfInterest NWK address of the target
profileID Profile ID to be matched at the destination
numInClusters The number of input clusters provided for matching within the inClusterList
numOutClusters The number of output clusters provided for matching within the outClusterList
clusterList inClusterList + outClusterList
List of input cluster IDs to be used for matching, the inClusterList is the desired list to be matched by the Remote Device (the elements of the inClusterList are the supported output clusters of the Local Device)
List of output cluster IDs to be used for matching, the outClusterList is the desired list to be matched by the Remote Device (the elements of the outClusterList are the supported input clusters of the Local Device)

示例: 55 00 14 msgLenH msgLenL 00 XX[2 Bytes] XX[2 Bytes] XX[2 Bytes] XX XX XX[n Bytes] AA

6) ZBHCI_CMD_DISCOVERY_ACTIVE_EP_REQ

dstAddr nwkAddrOfInterest
2 Bytes 2 Bytes
Name Description
dstAddr The destination address to which this command will be sent, shall be unicast either to the remote device itself or to an alternative device that contains the discovery information of the remote device.
nwkAddrOfInterest NWK address of the target.

示例: 55 00 15 00 04 00 XX[2 Bytes] XX[2 Bytes] AA

7) ZBHCI_CMD_BIND_REQ / ZBHCI_CMD_UNBIND_REQ

srcIEEEAddr srcEndpoint clusterID dstAddrMode dstAddr dstEndpoint
8 Bytes 1 Byte 2 Bytes 1 Byte 2 or 8 Bytes 0 or 1 Byte
Name Description
srcIEEEAddr The IEEE address for the source
srcEndpoint The source endpoint for the binding entry
clusterID The identifier of the cluster on the source device that is bound to the destination
dstAddrMode The addressing mode for the destination address used in this command
0x00 – Reserved
0x01 – 16-bit group address for dstAddr and dstEndpoint not present
0x02 – Reserved
0x03 – 64-bit extended address for dstAddr and dstEndpoint present
0x04 \~ 0xFF – Reserved
dstAddr The destination address for the binding entry
dstEndpoint Shall be present only if the dstAddrMode field has a value of 0x03 and, if present, shall be the destination endpoint for the binding entry

示例:

ZBHCI_CMD_BIND_REQ:

55 00 20 msgLenH msgLenL 00 XX[8 Bytes] XX XX[2 Bytes] XX XX[2 or 8 Bytes] XX[0 or 1 Byte] AA

ZBHCI_CMD_UNBIND_REQ:

55 00 21 msgLenH msgLenL 00 XX[8 Bytes] XX XX[2 Bytes] XX XX[2 or 8 Bytes] XX[0 or 1 Byte] AA

8) ZBHCI_CMD_MGMT_LQI_REQ

dstAddr startIdx
2 Bytes 1 Byte
Name Description
dstAddr The destination address to which this command will be sent, shall be unicast
startIdx Starting index for the requested elements of the neighbor table

示例: 55 00 30 00 03 00 XX[2 Bytes] XX AA

9) ZBHCI_CMD_MGMT_BIND_REQ

dstAddr startIdx
2 Bytes 1 Byte
Name Description
dstAddr The destination address to which this command will be sent, shall be unicast
startIdx Starting index for the requested elements of the binding table

示例: 55 00 31 00 03 00 XX[2 Bytes] XX AA

10) ZBHCI_CMD_MGMT_LEAVE_REQ

dstAddr devAddr rejoin removeChildren
2 Bytes 8 Bytes 1 Byte 1 Byte
Name Description
dstAddr The destination address to which this command will be sent, shall be unicast
devAddr The IEEE address of the device to be removed or NULL if the device removes itself
rejoin TRUE if the device is being asked to leave from the current parent and requested to rejoin the network. Otherwise, the parameter has a value of FALSE
removeChildren TRUE if the device being asked to leave the network is also being asked to remove its child device, if any. Otherwise, it has a value of FALSE

示例: 55 00 32 00 0C 00 XX[2 Bytes] XX[8 Bytes] XX XX AA

11) ZBHCI_CMD_MGMT_PERMIT_JOIN_REQ

dstAddr permitDuration TC_significance
2 Bytes 1 Byte 1 Byte
Name Description
dstAddr The destination address to which this command will be sent
permitDuration The length of time in seconds during which the coordinator or router will allow associations. The value 0x00 and 0xff indicate that permission is disabled or enabled, respectively, without a specified limit
TC_significance This field shall always have a value of 1, indicating a request to change the Trust Center policy. If a frame is received with a value of 0, it shall be treated as having a value of 1

示例: 55 00 34 00 04 00 XX[2 Bytes] XX XX AA

12) ZBHCI_CMD_MGMT_NWK_UPDATE_REQ

dstAddr nwkManagerAddr scanChannels scanDuration scanCount/ nwkUpdateId
2 Bytes 2 Bytes 4 Bytes 1 Byte 1 Byte
Name Description
dstAddr The destination address to which this command will be sent
nwkManagerAddr This field shall be present only if the scanDuration is set to 0xff, and, when present, it indicates the NWK address for the device with the Network Manager bit set in its Node Descriptor
scanChannels Channel bit mask, 32-bit field structure
scanDuration A value used to calculate the length of time to spend on scanning each channel. 0x00 \~ 0x05 or 0xfe or 0xff
scanCount This field represents the number of energy scans to be conducted and reported. This field shall be present only if the scanDuration is within the range of 0x00 to 0x05
nwkUpdateId The value of the nwkUpdateId contained in this request. This value is set by the Network Channel Manager prior to sending the message. This field shall only be present if the scanDuration is 0xfe or 0xff. If the scanDuration is 0xff, then the value in the nwkUpdateId shall be ignored

示例: 55 00 35 00 0A 00 XX[2 Bytes] XX[2 Bytes] XX[4 Bytes] XX XX AA

13) ZBHCI_CMD_NODES_JOINED_GET_REQ

startIdx
2 Bytes
Name Description
startIdx Starting index for the requested elements of the joined node list

示例:55 00 40 00 02 00 XX[2 Bytes] AA

14) ZBHCI_CMD_NODES_TOGGLE_TEST_REQ

unicast/broadcast timerInterval
1 Byte 1 Byte
Name Description
unicast/broadcast 0x00 – broadcast mode; 0x01 – unicast mode, send toggle command to each node in turn;
timerInterval The timer interval of the data transmission. Unit: 10millisecond

示例: 55 00 41 00 02 00 XX XX AA

15) ZBHCI_CMD_GET_LOCAL_NWK_INFO_REQ

无payload。

示例:55 00 45 00 00 00 AA

Message Type (Slave)

Message Type Value
ZBHCI_CMD_DISCOVERY_NWK_ADDR_RSP 0x8010
ZBHCI_CMD_DISCOVERY_IEEE_ADDR_RSP 0x8011
ZBHCI_CMD_DISCOVERY_NODE_DESC_RSP 0x8012
ZBHCI_CMD_DISCOVERY_SIMPLE_DESC_RSP 0x8013
ZBHCI_CMD_DISCOVERY_MATCH_DESC_RSP 0x8014
ZBHCI_CMD_DISCOVERY_ACTIVE_EP_RSP 0x8015
ZBHCI_CMD_BIND_RSP 0x8020
ZBHCI_CMD_UNBIND_RSP 0x8021
ZBHCI_CMD_MGMT_LQI_RSP 0x8030
ZBHCI_CMD_MGMT_BIND_RSP 0x8031
ZBHCI_CMD_MGMT_LEAVE_RSP 0x8032
ZBHCI_CMD_MGMT_DIRECT_JOIN_RSP 0x8033
ZBHCI_CMD_MGMT_PERMIT_JOIN_RSP 0x8034
ZBHCI_CMD_MGMT_NWK_UPDATE_RSP 0x8035
ZBHCI_CMD_NODES_JOINED_GET_RSP 0x8040
ZBHCI_CMD_NODES_TOGGLE_TEST_RSP 0x8041
ZBHCI_CMD_NODES_DEV_ANNCE_IND 0x8043
ZBHCI_CMD_GET_LOCAL_NWK_INFO_RSP 0x8045
ZBHCI_CMD_DATA_CONFIRM 0x8200
ZBHCI_CMD_NODE_LEAVE_IND 0x8202

Payload (Slave)

1) ZBHCI_CMD_DISCOVERY_NWK_ADDR_RSP

srcAddr seqNum status ieeeAddr nwkAddr numAssocDev startIdx assocDevList
2 Bytes 1 Byte 1 Byte 8 Bytes 2 Bytes 0 or 1 Byte 0 or 1 Byte 0 or n Bytes
Name Description
srcAddr The source address of this command has been received
seqNum ZDP transaction sequence number
status The status of the request command
ieeeAddr 64-bit address for the Remote Device
nwkAddr 16-bit address for the Remote Device
numAssocDev Count of the number of 16-bit short address to follow
startIdx Starting index into the list of associated devices for this report
assocDevList The list of associated devices

示例: 55 80 10 msgLenH msgLenL 00 XX[2 Bytes] XX XX XX[8 Bytes] XX[2 Bytes] {XX XX XX[n Bytes]} AA

2) ZBHCI_CMD_DISCOVERY_IEEE_ADDR_RSP

srcAddr seqNum status ieeeAddr nwkAddr numAssocDev startIdx assocDevList
2 Bytes 1 Byte 1 Byte 8 Bytes 2 Bytes 0 or 1 Byte 0 or 1 Byte 0 or n Bytes
Name Description
srcAddr The source address of this command has been received
seqNum ZDP transaction sequence number
status The status of the request command
ieeeAddr 64-bit address for the Remote Device
nwkAddr 16-bit address for the Remote Device
numAssocDev Count of the number of 16-bit short address to follow
startIdx Starting index into the list of associated devices for this report
assocDevList The list of associated devices

示例: 55 80 11 msgLenH msgLenL 00 XX[2 Bytes] XX XX XX[8 Bytes] XX[2 Bytes] {XX XX XX[n Bytes]} AA

3) ZBHCI_CMD_DISCOVERY_NODE_DESC_RSP

srcAddr seqNum status nwkAddrOfInterest nodeDesc
2 Bytes 1 Byte 1 Byte 2 Bytes 0 or n Bytes
Name Description
srcAddr The source address of this command has been received
seqNum ZDP transaction sequence number
status The status of the request command
nwkAddrOfInterest NWK address for the request
nodeDesc This field shall only be included in the frame if the status field is SUCCESS

示例: 55 80 12 msgLenH msgLenL 00 XX[2 Bytes] XX XX XX[2 Bytes] {XX[n Bytes]} AA

4) ZBHCI_CMD_DISCOVERY_SIMPLE_DESC_RSP

srcAddr seqNum status nwkAddrOfInterest length simpleDesc
2 Bytes 1 Byte 1 Byte 2 Bytes 1 Byte n Bytes
Name Description
srcAddr The source address of this command has been received
seqNum ZDP transaction sequence number
status The status of the request command
nwkAddrOfInterest NWK address for the request
length The length of simple description
simpleDesc This field shall only be included in the frame if the status field is SUCCESS

示例: 55 80 13 msgLenH msgLenL 00 XX[2 Bytes] XX XX XX[2 Bytes] XX {XX[n Bytes]} AA

5) ZBHCI_CMD_DISCOVERY_MATCH_DESC_RSP

srcAddr seqNum status nwkAddrOfInterest matchLen matchList
2 Bytes 1 Byte 1 Byte 2 Bytes 1 Byte n Bytes
Name Description
srcAddr The source address of this command has been received
seqNum ZDP transaction sequence number
status The status of the request command
nwkAddrOfInterest NWK address for the request
matchLen The count of endpoints on the Remote Device that match the request criteria
matchList List of bytes each of which represents an 8-bit endpoint

示例: 55 80 14 msgLenH msgLenL 00 XX[2 Bytes] XX XX XX[2 Bytes] XX {XX[n Bytes]} AA

6) ZBHCI_CMD_DISCOVERY_ACTIVE_EP_RSP

srcAddr seqNum status nwkAddrOfInterest activeEpCount epList
2 Bytes 1 Byte 1 Byte 2 Bytes 1 Byte n Bytes
Name Description
srcAddr The source address of this command has been received
seqNum ZDP transaction sequence number
status The status of the request command
nwkAddrOfInterest NWK address for the request
activeEpCount The count of active endpoints
epList List of active endpoints

示例: 55 80 15 msgLenH msgLenL 00 XX[2 Bytes] XX XX XX[2 Bytes] XX {XX[n Bytes]} AA

7) ZBHCI_CMD_BIND_RSP / ZBHCI_CMD_UNBIND_RSP

srcAddr seqNum status
2 Bytes 1 Byte 1 Byte
Name Description
srcAddr The source address of this command has been received.
seqNum ZDP transaction sequence number.
status The status of the request command.

示例: ZBHCI_CMD_BIND_RSP:

55 80 20 00 04 00 XX[2 Bytes] XX XX AA

ZBHCI_CMD_UNBIND_RSP:

55 80 21 00 04 00 XX[2 Bytes] XX XX AA

8) ZBHCI_CMD_MGMT_LQI_RSP

srcAddr seqNum status neighborTab Entries startIdx neighborTabList Count neighborTabList
2 Bytes 1 Byte 1 Byte 1 Byte 1 Byte 1 Byte n Bytes
Name Description
srcAddr The source address of this command has been received
seqNum ZDP transaction sequence number
status The status of the request command
neighborTabEntries Total number of Neighbor Table entries within the Remote Device
startIdx Starting index within the Neighbor Table to begin reporting for the neighborTabList
neighborTabListCount Number of Neighbor Table entries included within neighborTabList
neighborTabList A list of descriptors, beginning with the startIdx element and continuing for neighborTabListCount

示例: 55 80 30 msgLenH msgLenL 00 XX[2 Bytes] XX XX XX XX XX {XX[n Bytes]} AA

9) ZBHCI_CMD_MGMT_BIND_RSP

srcAddr seqNum status bindingTabEntries startIdx bindingTabListCount bindingTabList
2 Bytes 1 Byte 1 Byte 1 Byte 1 Byte 1 Byte n Bytes
Name Description
srcAddr The source address of this command has been received
seqNum ZDP transaction sequence number
status The status of the request command
bindingTabEntries Total number of Binding Table entries within the Remote Device
startIdx Starting index within the Binding Table to begin reporting for the bindingTabList
bindingTabListCount Number of Binding Table entries included within bindingTabList
bindingTabList A list of descriptors, beginning with the startIdx element and continuing for bindingTabListCount

示例: 55 80 31 msgLenH msgLenL 00 XX[2 Bytes] XX XX XX XX XX {XX[n Bytes]} AA

10) ZBHCI_CMD_MGMT_LEAVE_RSP

srcAddr seqNum status ieeeAddr rejoin
2 Bytes 1 Byte 1 Byte 8 Bytes 1 Byte
Name Description
srcAddr The source address of this command has been received.
seqNum ZDP transaction sequence number.
status The status of the request command.
ieeeAddr 64-bit address for the leave device.
rejoin Whether the leave device to rejoin.

示例: 55 80 32 00 0D 00 XX[2 Bytes] XX XX XX[8 Bytes] XX AA

11) ZBHCI_CMD_MGMT_PERMIT_JOIN_RSP

srcAddr seqNum status
2 Bytes 1 Byte 1 Byte
Name Description
srcAddr The source address of this command has been received.
seqNum ZDP transaction sequence number.
status The status of the request command.

示例: 55 80 34 00 02 00 XX[2 Bytes] XX XX AA

12) ZBHCI_CMD_NODES_JOINED_GET_RSP

totalCnt startIdx listCount status addrList
2 Bytes 2 Byte 1 Byte 1 Byte n Bytes

addrList:

IEEEAddr nwkAddr
8 Bytes 2 Bytes
Name Description
totalCnt The total count of the joined nodes.
startIdx Starting index within the mac address list.
listCount The count of the MAC address list in the current packet.
status The status of the request command.
addrList The address list in the current packet.

示例: 55 80 40 msgLenH msgLenL 00 XX[2 Bytes] XX[2 Bytes] XX XX {XX[n Bytes]} AA

13) ZBHCI_CMD_NODES_TOGGLE_TEST_RSP

无payload.

示例: 55 80 41 00 00 00 AA

14) ZBHCI_CMD_NODES_DEV_ANNCE_IND

nwkAddr ieeeAddr capability
2 Bytes 8 Bytes 1 Byte
Name Description
nwkAddr NWK address of the joined device.
ieeeAddr IEEE address of the joined device.
capability Capability of the joined device.

示例: 55 80 43 00 0B 00 XX[2 Bytes] XX[8 Bytes] XX AA

15) ZBHCI_CMD_GET_LOCAL_NWK_INFO_RSP

devType capability onANetwork panID extPanID nwkAddr ieeeAddr
1 Byte 1 Byte 1 Byte 2 Bytes 8 Bytes 2 Bytes 8 Bytes
Name Description
devType 0x00 – coordinator; 0x01 – router; 0x02 – endDevice;
capability Capability of the local device.
onANetwork Whether the device on a network.
panID The 16-bit PAN identifier of the network.
extPanID The 64-bit PAN identifier of the network.
nwkAddr The network address of the local device.
ieeeAddr IEEE address of the local device.

示例: 55 80 45 00 17 00 XX XX XX XX[2 Bytes] XX[8 Bytes] XX[2 Bytes] XX[8 Bytes] AA

16) ZBHCI_CMD_DATA_CONFIRM

| dstAddrMode | dstAddr | srcEP | dstEP | clusterID | status | apsCnt | |:-----------:|:-----------:|:------------:|:--------------:|:-----------:|:------------:| | 1 Byte | 0/2/8 Bytes | 1 Byte | 0/1 Byte | 2 Bytes | 1 Byte | 1 Byte |

Name Description
dstAddrMode The destination address mode to which this command will be sent.
devAddr The destination address to which this command will be sent.
srcEP The source endpoint for this command.
dstEP The destination endpoint for this command.
clusterID The identifier of the cluster for this command.
status The status of sending this command.
apsCnt The aps level counter corresponding to this command.

示例: 55 82 00 msgLenH msgLenL 00 XX XX[0/2/8 Bytes] XX XX[0/1 Byte] XX[2 Bytes] XX XX AA

17) ZBHCI_CMD_NODE_LEAVE_IND

totalCnt extAddr
2 Bytes 8 Bytes
Name Description
totalCnt The total count of leave indication which the device has received.
extAddr The extention address of the leave node.

示例: 55 82 02 00 0a 00 XX[2 Bytes] XX[8 Bytes] AA

ZCL Cluster命令

ZCL命令header格式

ZCLCmdHdr:

dstAddrMode dstAddr srcEp dstEp
1 Byte 0/2/8 Bytes 1 Byte 1 Byte
Name Description
dstAddrMode Destination address mode
0 – without destination address and endpoint, for binding
1 – with group address
2 – with destination short address and endpoint
3 – with destination IEEE address and endpoint
dstAddr Destination address for this command
srcEp Source endpoint
dstEp Destination endpoint if dstAddrMode is 2 or 3

ZCLCmdRspHdr:

srcAddr srcEp dstEp seqNum
2 Bytes 1 Byte 1 Byte 1 Byte
Name Description
srcAddr Source address for this command
srcEp Source endpoint
dstEp Destination endpoint
seqNum The sequence number in the zcl header

General cluster command

(1) Message Type (Host)

Message Type Value
ZBHCI_CMD_ZCL_ATTR_READ 0x0100
ZBHCI_CMD_ZCL_ATTR_WRITE 0x0101
ZBHCI_CMD_ZCL_CONFIG_REPORT 0x0102
ZBHCI_CMD_ZCL_READ_REPORT_CFG 0x0103

(2) Payload (Host)

1) ZBHCI_CMD_ZCL_ATTR_READ

ZCLCmdHdr profileID direction clusterID attrNum attrList
n Bytes 2 Bytes 1 Byte 2 Bytes 1 Byte n Bytes

attrList:

attrID[0] attrID[1] attrID[n]
2 Bytes 2 Bytes 2 Bytes
Name Description
ZCLCmdHdr ZCL command header.
profileID Profile identifier.
direction 0 – Client to server; 1 – Server to client.
clusterID Cluster identifier.
attrNum The number of attributes to be read.
attrList The list of the attribute IDs to be read.

示例: 55 01 00 msgLenH msgLenL 00 XX[n Bytes] XX[2 Bytes] XX XX[2 Bytes] XX {XX[n Bytes]} AA

2) ZBHCI_CMD_ZCL_ATTR_WRITE

ZCLCmdHdr profileID direction clusterID attrNum attrList[0] attrList[n]
n Bytes 2 Bytes 1 Byte 2 Bytes 1 Byte n Bytes n Bytes

attrList:

attrID dataType attrData
2 Bytes 1 Byte n Bytes
Name Description
ZCLCmdHdr ZCL command header.
profileID Profile identifier.
direction 0 – Client to server; 1 – Server to client.
clusterID Cluster identifier.
attrNum The number of attributes to be written.
attrList The list of the attributes to be written.

示例: 55 01 01 msgLenH msgLenL 00 XX[n Bytes] XX[2 Bytes] XX XX[2 Bytes] XX {XX[n Bytes] ...} AA

3) ZBHCI_CMD_ZCL_CONFIG_REPORT

ZCLCmdHdr profileID direction clusterID attrNum attrList[0] attrList[n]
n Bytes 2 Bytes 1 Byte 2 Bytes 1 Byte n Bytes n Bytes

attrList:

Report Direction attrID dataType minRep Interval maxRep Interval reportable Change timeout Period
1 Byte 2 Bytes 1 Byte 2 Bytes 2 Bytes n Bytes 2 Bytes
Name Description
ZCLCmdHdr ZCL command header.
profileID Profile identifier.
direction 0 – Client to server; 1 – Server to client.
clusterID Cluster identifier.
attrNum The number of attributes to be configured.
attrList The list of the attributes to be configured.

示例: 55 01 02 msgLenH msgLenL 00 XX[n Bytes] XX[2 Bytes] XX XX[2 Bytes] XX {XX[n Bytes] ...} AA

4) ZBHCI_CMD_ZCL_READ_REPORT_CFG

ZCLCmdHdr profileID direction clusterID attrNum attrList[0] attrList[n]
n Bytes 2 Bytes 1 Byte 2 Bytes 1 Byte n Bytes n Bytes

attrList:

reportDirection attrID
1 Byte 2 Bytes
Name Description
ZCLCmdHdr ZCL command header.
profileID Profile identifier.
direction 0 – Client to server; 1 – Server to client.
clusterID Cluster identifier.
attrNum The number of attributes’ configuration to be read.
attrList The list of the attributes to be read.

示例: 55 01 03 msgLenH msgLenL 00 XX[n Bytes] XX[2 Bytes] XX XX[2 Bytes] XX {XX[n Bytes] ...} AA

(3) Message Type (Slave)

Message Type Value
ZBHCI_CMD_ZCL_ATTR_READ_RSP 0x8100
ZBHCI_CMD_ZCL_ATTR_WRITE_RSP 0x8101
ZBHCI_CMD_ZCL_CONFIG_REPORT_RSP 0x8102
ZBHCI_CMD_ZCL_READ_REPORT_CFG_RSP 0x8103
ZBHCI_CMD_ZCL_REPORT_MSG_RCV 0x8104
ZBHCI_CMD_ZCL_DEFAULT_RSP 0x8105

(4) Payload (Slave)

1) ZBHCI_CMD_ZCL_ATTR_READ_RSP

ZCLCmdRspHdr clusterID attrNum attrList[0] attrList[n]
5 Bytes 2 Bytes 1 Byte n Bytes n Bytes

attrList:

attrID status dataType data
2 Bytes 1 Byte 1 Byte n Bytes
Name Description
ZCLCmdRspHdr The zcl header of response command.
custerID Cluster identifier.
attrNum The number of attributes to be read.
attrList The list of the attributes to be read.

示例: 55 81 00 msgLenH msgLenL 00 XX[5 Bytes] XX[2 Bytes] XX {XX[n Bytes] ...} AA

2) ZBHCI_CMD_ZCL_ATTR_WRITE_RSP

ZCLCmdRspHdr clusterID attrNum attrList[0] attrList[n]
5 Bytes 2 Bytes 1 Byte n Bytes n Bytes

attrList:

status attrID
1 Byte 2 Bytes
Name Description
ZCLCmdRspHdr The zcl header of response command.
custerID Cluster identifier.
attrNum The number of attributes to be written.
attrList The list of the attributes to be written.

示例: 55 81 01 msgLenH msgLenL 00 XX[5 Bytes] XX[2 Bytes] XX {XX[n Bytes] ...} AA

3) ZBHCI_CMD_ZCL_CONFIG_REPORT_RSP

ZCLCmdRspHdr clusterID attrNum attrList[0] attrList[n]
5 Bytes 2 Bytes 1 Byte n Bytes n Bytes

attrList:

status reportDirection attrID
1 Byte 1 Byte 2 Bytes
Name Description
ZCLCmdRspHdr The zcl header of response command.
custerID Cluster identifier.
attrNum The number of attributes’ reporting to be configured.
attrList The list of the attributes to be configured.

示例: 55 81 02 msgLenH msgLenL 00 XX[5 Bytes] XX[2 Bytes] XX {XX[n Bytes] ...} AA

4) ZBHCI_CMD_ZCL_READ_REPORT_CFG_RSP

ZCLCmdRspHdr clusterID attrNum attrList[0] attrList[n]
5 Bytes 2 Bytes 1 Byte n Bytes n Bytes

attrList:

status Report Direction attrID dataType minRep Interval maxRep Interval Reportable Change timeout Period
1 Byte 1 Byte 2 Bytes 1 Byte 2 Bytes 2 Bytes n Bytes 2 Bytes
Name Description
ZCLCmdRspHdr The zcl header of response command.
custerID Cluster identifier.
attrNum The number of attributes’ reporting to be read.
attrList The list of the attributes to be read.

示例: 55 81 03 msgLenH msgLenL 00 XX[5 Bytes] XX[2 Bytes] XX {XX[n Bytes] ...} AA

5) ZBHCI_CMD_ZCL_REPORT_MSG_RCV

| ZCLCmdRspHdr | clusterID |attrNum|attrList[0]||attrList[n]| |:----------------:|:-------------:|---------|-------|---------|-------------|---|-------------| | 5 Bytes | 2 Bytes | 1 Byte | n Bytes | … | n Bytes |

attrList:

attrID dataType data
2 Bytes 1 Byte n Bytes
Name Description
ZCLCmdRspHdr The zcl header of response command.
custerID Cluster identifier.
attrNum The number of attributes’ reporting message to be received.
attrList The list of the attributes’ reporting message to be received.

示例: 55 81 04 msgLenH msgLenL 00 XX[5 Bytes] XX[2 Bytes] XX {XX[n Bytes] ...} AA

6) ZBHCI_CMD_ZCL_DEFAULT_RSP

ZCLCmdRspHdr clusterID commandID status
5 Bytes 2 Bytes 1 Byte 1 Byte
Name Description
ZCLCmdRspHdr The zcl header of response command.
custerID Cluster identifier.
commandID The commandID of the send message.
status The status of the message.

示例: 55 81 05 00 09 00 XX[5 Bytes] XX[2 Bytes] XX XX AA

Basic cluster command

(1) Message Type (Host)

Message Type Value
ZBHCI_CMD_ZCL_BASIC_RESET 0x0110

(2) Payload (Host)

ZCLCmdHdr
n Bytes

示例: 55 01 10 msgLenH msgLenL 00 XX[n Bytes] AA

Group cluster command

(1) Message Type (Host)

Message Type Value
ZBHCI_CMD_ZCL_GROUP_ADD 0x0120
ZBHCI_CMD_ZCL_GROUP_VIEW 0x0121
ZBHCI_CMD_ZCL_GROUP_GET_MEMBERSHIP 0x0122
ZBHCI_CMD_ZCL_GROUP_REMOVE 0x0123
ZBHCI_CMD_ZCL_GROUP_REMOVE_ALL 0x0124
ZBHCI_CMD_ZCL_GROUP_ADD_IF_IDENTIFYING 0x0125

(2) Payload (Host)

1) ZBHCI_CMD_ZCL_GROUP_ADD

ZCLCmdHdr groupId groupName
n Bytes 2 Bytes n Bytes
Name Description
ZCLCmdHdr ZCL command header.
groupId Group identifier.
groupName Group name, character string.

示例: 55 01 20 msgLenH msgLenL 00 XX[n Bytes] XX[2 Bytes] XX[n Bytes] AA

2) ZBHCI_CMD_ZCL_GROUP_VIEW

ZCLCmdHdr groupId
n Bytes 2 Bytes
Name Description
ZCLCmdHdr ZCL command header.
groupId Group identifier.

示例: 55 01 21 msgLenH msgLenL 00 XX[n Bytes] XX[2 Bytes] AA

3) ZBHCI_CMD_ZCL_GROUP_GET_MEMBERSHIP

ZCLCmdHdr groupCount groupList
n Bytes 1 Byte n Bytes
Name Description
ZCLCmdHdr ZCL command header.
groupCount Group count.
groupList Group list.

示例: 55 01 22 msgLenH msgLenL 00 XX[n Bytes] XX XX[n Bytes] AA

4) ZBHCI_CMD_ZCL_GROUP_REMOVE

ZCLCmdHdr groupId
n Bytes 2 Bytes
Name Description
ZCLCmdHdr ZCL command header.
groupId Group identifier.

示例: 55 01 23 msgLenH msgLenL 00 XX[n Bytes] XX[2 Bytes] AA

5) ZBHCI_CMD_ZCL_GROUP_REMOVE_ALL

ZCLCmdHdr
n Bytes

示例: 55 01 24 msgLenH msgLenL 00 XX[n Bytes] AA

6) ZBHCI_CMD_ZCL_GROUP_ADD_IF_IDENTIFYING

ZCLCmdHdr groupId groupName
n Bytes 2 Bytes n Bytes
Name Description
ZCLCmdHdr ZCL command header.
groupId Group identifier.
groupName Group name, character string.

示例: 55 01 25 msgLenH msgLenL 00 XX[n Bytes] XX[2 Bytes] XX[n Bytes] AA

(3) Message Type (Slave)

Message Type Value
ZBHCI_CMD_ZCL_GROUP_ADD_RSP 0x8120
ZBHCI_CMD_ZCL_GROUP_VIEW_RSP 0x8121
ZBHCI_CMD_ZCL_GROUP_GET_MEMBERSHIP_RSP 0x8122
ZBHCI_CMD_ZCL_GROUP_REMOVE_RSP 0x8123

(4) Payload (Slave)

1) ZBHCI_CMD_ZCL_GROUP_ADD_RSP

ZCLCmdRspHdr status groupId
5 Bytes 1 Byte 2 Bytes
Name Description
ZCLCmdRspHdr The zcl header of response command.
status The status field is set to SUCCESS, DUPLICATE_EXISTS, or INSUFFICIENT_SPACE as appropriate.
groupId Group identifier.

示例: 55 81 20 00 08 00 XX[5 Bytes] XX XX[2 Bytes] AA

2) ZBHCI_CMD_ZCL_GROUP_VIEW_RSP

ZCLCmdRspHdr status groupId groupName
5 Bytes 1 Byte 2 Bytes n Bytes
Name Description
ZCLCmdRspHdr The zcl header of response command.
status The status field is set to SUCCESS, or NOT_FOUND as appropriate.
groupId Group identifier.
groupName Group name, character string.

示例: 55 81 21 msgLenH msgLenL 00 XX[5 Bytes] XX XX[2 Bytes] XX[n Bytes] AA

3) ZBHCI_CMD_ZCL_GROUP_GET_MEMBERSHIP_RSP

ZCLCmdRspHdr capability groupCount groupList
5 Bytes 1 Byte 1 Byte n Bytes
Name Description
ZCLCmdRspHdr The zcl header of response command.
capability The remaining capability of the group table of the device.
groupCount The number of groups contained in the group list field.
groupName The list of groupId in the group list field.

示例: 55 81 22 msgLenH msgLenL 00 XX[5 Bytes] XX XX XX[n Bytes] AA

4) ZBHCI_CMD_ZCL_GROUP_REMOVE_RSP

ZCLCmdRspHdr status groupId
5 Bytes 1 Byte 2 Bytes
Name Description
ZCLCmdRspHdr The zcl header of response command.
status The status field is set to SUCCESS, DUPLICATE_EXISTS, or INSUFFICIENT_SPACE as appropriate.
groupId Group identifier.

示例: 55 81 23 00 08 00 XX[5 Bytes] XX XX[2 Bytes] AA

Identify cluster command

(1) Message Type (Host)

Message Type Value
ZBHCI_CMD_ZCL_IDENTIFY 0x0130
ZBHCI_CMD_ZCL_IDENTIFY_QUERY 0x0131

(2) Payload (Host)

1) ZBHCI_CMD_ZCL_IDENTIFY

ZCLCmdHdr identifyTime
n Bytes 2 Bytes
Name Description
ZCLCmdHdr ZCL command header.
identifyTime Unsigned 16-bit integer.

示例: 55 01 30 msgLenH msgLenL 00 XX[n Bytes] XX[2 Bytes] AA

2) ZBHCI_CMD_ZCL_IDENTIFY_QUERY

ZCLCmdHdr
n Bytes

示例: 55 01 31 msgLenH msgLenL 00 XX[n Bytes] AA

(3) Message Type (Slave)

Message Type Value
ZBHCI_CMD_ZCL_IDENTIFY_QUERY_RSP 0x8131

(4) Payload (Slave)

1) ZBHCI_CMD_ZCL_IDENTIFY_QUERY_RSP

ZCLCmdRspHdr timeout
5 Bytes 2 Bytes
Name Description
ZCLCmdRspHdr The zcl header of response command.
timeout The remaining time.

示例: 55 81 31 00 07 00 XX[5 Bytes] XX[2 Bytes] AA

On/Off cluster command

(1) Message Type (Host)

Message Type Value
ZBHCI_CMD_ZCL_ONOFF_ON 0x0140
ZBHCI_CMD_ZCL_ONOFF_OFF 0x0141
ZBHCI_CMD_ZCL_ONOFF_TOGGLE 0x0142

(2) Payload (Host)

ZCLCmdHdr
n Bytes

示例: ZBHCI_CMD_ZCL_ONOFF_ON:

55 01 40 msgLenH msgLenL 00 XX[n Bytes] AA

ZBHCI_CMD_ZCL_ONOFF_OFF:

55 01 41 msgLenH msgLenL 00 XX[n Bytes] AA

ZBHCI_CMD_ZCL_ONOFF_TOGGLE:

55 01 42 msgLenH msgLenL 00 XX[n Bytes] AA

Level cluster command

(1) Message Type (Host)

Message Type Value
ZBHCI_CMD_ZCL_LEVEL_MOVE2LEVEL 0x0150
ZBHCI_CMD_ZCL_LEVEL_MOVE 0x0151
ZBHCI_CMD_ZCL_LEVEL_STEP 0x0152
ZBHCI_CMD_ZCL_LEVEL_STOP 0x0153
ZBHCI_CMD_ZCL_LEVEL_MOVE2LEVEL_WITHONOFF 0x0154
ZBHCI_CMD_ZCL_LEVEL_MOVE_WITHONOFF 0x0155
ZBHCI_CMD_ZCL_LEVEL_STEP_WITHONOFF 0x0156
ZBHCI_CMD_ZCL_LEVEL_STOP_WITHONOFF 0x0157

(2) Payload (Host)

1) ZBHCI_CMD_ZCL_LEVEL_MOVE2LEVEL

ZCLCmdHdr level transTime
n Bytes 1 Byte 2 Bytes
Name Description
ZCLCmdHdr ZCL command header.
level Level.
transTime Transition time, 1/10ths of a second.

示例: 55 01 50 msgLenH msgLenL 00 XX[n Bytes] XX XX[2 Bytes] AA

2) ZBHCI_CMD_ZCL_LEVEL_MOVE

ZCLCmdHdr mode rate
n Bytes 1 Byte 1 Byte
Name Description
ZCLCmdHdr ZCL command header.
mode Move mode. 0x00 – Up; 0x01 – Down.
rate The rate field specifies the rate of movement in units per second.

示例: 55 01 51 msgLenH msgLenL 00 XX[n Bytes] XX XX AA

3) ZBHCI_CMD_ZCL_LEVEL_STEP

ZCLCmdHdr mode stepSize transTime
n Bytes 1 Byte 1 Byte 2 Bytes
Name Description
ZCLCmdHdr ZCL command header
mode Step mode. 0x00 – Up; 0x01 – Down
stepSize A step is a change in the current level of ‘step size’ units
transTime The transition time field specifies the time that shall be taken to perform the step, in 1/10ths of a second

示例: 55 01 52 msgLenH msgLenL 00 XX[n Bytes] XX XX XX[2 Bytes] AA

4) ZBHCI_CMD_ZCL_LEVEL_STOP

ZCLCmdHdr
n Bytes

示例: 55 01 53 msgLenH msgLenL 00 XX[n Bytes] AA

5) ZBHCI_CMD_ZCL_LEVEL_MOVE2LEVEL_WITHONOFF

ZCLCmdHdr level transTime
n Bytes 1 Byte 2 Bytes
Name Description
ZCLCmdHdr ZCL command header.
level Level.
transTime Transition time, 1/10ths of a second.

示例: 55 01 54 msgLenH msgLenL 00 XX[n Bytes] XX XX[2 Bytes] AA

6) ZBHCI_CMD_ZCL_LEVEL_MOVE_WITHONOFF

ZCLCmdHdr mode rate
n Bytes 1 Byte 1 Byte
Name Description
ZCLCmdHdr ZCL command header.
mode Move mode. 0x00 – Up; 0x01 – Down.
rate The rate field specifies the rate of movement in units per second.

示例: 55 01 55 msgLenH msgLenL 00 XX[n Bytes] XX XX AA

7) ZBHCI_CMD_ZCL_LEVEL_STEP_WITHONOFF

ZCLCmdHdr mode stepSize transTime
n Bytes 1 Byte 1 Byte 2 Bytes
Name Description
ZCLCmdHdr ZCL command header
mode Step mode. 0x00 – Up; 0x01 – Down
stepSize A step is a change in the current level of ‘step size’ units
transTime The transition time field specifies the time that shall be taken to perform the step, in 1/10ths of a second

示例: 55 01 56 msgLenH msgLenL 00 XX[n Bytes] XX XX XX[2 Bytes] AA

8) ZBHCI_CMD_ZCL_LEVEL_STOP_WITHONOFF

ZCLCmdHdr
n Bytes

示例: 55 01 57 msgLenH msgLenL 00 XX[n Bytes] AA

Scene cluster command

(1) Message Type (Host)

Message Type Value
ZBHCI_CMD_ZCL_SCENE_ADD 0x0160
ZBHCI_CMD_ZCL_SCENE_VIEW 0x0161
ZBHCI_CMD_ZCL_SCENE_REMOVE 0x0162
ZBHCI_CMD_ZCL_SCENE_REMOVE_ALL 0x0163
ZBHCI_CMD_ZCL_SCENE_STORE 0x0164
ZBHCI_CMD_ZCL_SCENE_RECALL 0x0165
ZBHCI_CMD_ZCL_SCENE_GET_MENBERSHIP 0x0166

(2) Payload (Host)

1) ZBHCI_CMD_ZCL_SCENE_ADD

ZCLCmdHdr groupId sceneId transTime scene NameLen scene Name extField Len extField Sets
n Bytes 2 Bytes 1 Byte 2 Byte 1 Byte n Bytes 1 Byte n Bytes
Name Description
ZCLCmdHdr ZCL command header.
groupId The group ID for which this scene applies.
sceneId The identifier, unique within this group, which is used to identify this scene.
transTime The amount of time, in seconds, it will take for the device to change from its current state to the requested scene.
sceneNameLen Length of scene name.
sceneName Scene name, char string.
extFieldLen Length of extFieldSets field.
extFieldSets The sum of all such defines a scene.

示例: 55 01 60 msgLenH msgLenL 00 XX[n Bytes] XX[2 Bytes] XX XX[2 Bytes] XX {XX[n Bytes]} XX {XX[n Bytes]} AA

2) ZBHCI_CMD_ZCL_SCENE_VIEW

ZCLCmdHdr groupId sceneId
n Bytes 2 Bytes 1 Byte
Name Description
ZCLCmdHdr ZCL command header
groupId The group ID for which this scene applies
sceneId The identifier, unique within this group, which is used to identify this scene

示例: 55 01 61 msgLenH msgLenL 00 XX[n Bytes] XX[2 Bytes] XX AA

3) ZBHCI_CMD_ZCL_SCENE_REMOVE

ZCLCmdHdr groupId sceneId
n Bytes 2 Bytes 1 Byte
Name Description
ZCLCmdHdr ZCL command header
groupId The group ID for which this scene applies
sceneId The identifier, unique within this group, which is used to identify this scene

示例: 55 01 62 msgLenH msgLenL 00 XX[n Bytes] XX[2 Bytes] XX AA

4) ZBHCI_CMD_ZCL_SCENE_REMOVE_ALL

ZCLCmdHdr groupId
n Bytes 2 Bytes
Name Description
ZCLCmdHdr ZCL command header.
groupId The group ID for which this scene applies.

示例: 55 01 63 msgLenH msgLenL 00 XX[n Bytes] XX[2 Bytes] AA

5) ZBHCI_CMD_ZCL_SCENE_STORE

ZCLCmdHdr groupId sceneId
n Bytes 2 Bytes 1 Byte
Name Description
ZCLCmdHdr ZCL command header
groupId The group ID for which this scene applies
sceneId The identifier, unique within this group, which is used to identify this scene

示例: 55 01 64 msgLenH msgLenL 00 XX[n Bytes] XX[2 Bytes] XX AA

6) ZBHCI_CMD_ZCL_SCENE_RECALL

ZCLCmdHdr groupId sceneId
n Bytes 2 Bytes 1 Byte
Name Description
ZCLCmdHdr ZCL command header.
groupId The group ID for which this scene applies.
sceneId The identifier, unique within this group, which is used to identify this scene.

示例: 55 01 65 msgLenH msgLenL 00 XX[n Bytes] XX[2 Bytes] XX AA

7) ZBHCI_CMD_ZCL_SCENE_GET_MENBERSHIP

ZCLCmdHdr groupId
n Bytes 2 Bytes
Name Description
ZCLCmdHdr ZCL command header.
groupId The group ID for which this scene applies.

示例: 55 01 66 msgLenH msgLenL 00 XX[n Bytes] XX[2 Bytes] AA

(3) Message Type (Slave)

Message Type Value
ZBHCI_CMD_ZCL_SCENE_ADD_RSP 0x8160
ZBHCI_CMD_ZCL_SCENE_VIEW_RSP 0x8161
ZBHCI_CMD_ZCL_SCENE_REMOVE_RSP 0x8162
ZBHCI_CMD_ZCL_SCENE_REMOVE_ALL_RSP 0x8163
ZBHCI_CMD_ZCL_SCENE_STORE_RSP 0x8164
ZBHCI_CMD_ZCL_SCENE_GET_MENBERSHIP_RSP 0x8166

(4) Payload (Slave)

1) ZBHCI_CMD_ZCL_SCENE_ADD_RSP

ZCLCmdRspHdr status groupId sceneId
5 Bytes 1 Byte 2 Bytes 1 Byte
Name Description
ZCLCmdRspHdr The zcl header of response command.
status SUCCESS, INSUFFICIENT_SPACE or INVALID_FIELD (the group is not present in the group table).
groupId The group ID for which this scene applies.
sceneId The identifier, unique within this group, which is used to identify this scene.

示例: 55 81 60 00 09 00 XX[5 Bytes] XX XX[2 Bytes] XX AA

2) ZBHCI_CMD_ZCL_SCENE_VIEW_RSP

ZCLCmdRspHdr status groupId sceneId transTime sceneName extFieldSets
5 Bytes 1 Byte 2 Bytes 1 Byte 2 Bytes n Bytes n Bytes
Name Description
ZCLCmdRspHdr The zcl header of response command.
status SUCCESS, NOT_FOUND (the scene is not present in the scene table) or INVALID_FIELD (the group is not present in the group table).
groupId The group ID for which this scene applies.
sceneId The identifier, unique within this group, which is used to identify this scene.
transTime Transition time copied from scene table entry.
sceneName Scene name copied from scene table entry. First byte is the length of the scene name.
extFieldSets Extension field sets copied from scene table entry. First byte is the length of the extension field sets.

示例: 55 81 61 msgLenH msgLenL 00 XX[5 Bytes] XX XX[2 Bytes] XX XX[2 Bytes] XX[n Bytes]

3) ZBHCI_CMD_ZCL_SCENE_REMOVE_RSP

ZCLCmdRspHdr status groupId sceneId
5 Bytes 1 Byte 2 Bytes 1 Byte
Name Description
ZCLCmdRspHdr The zcl header of response command.
status SUCCESS, NOT_FOUND (the scene is not present in the scene table) or INVALID_FIELD (the group is not present in the group table).
groupId The group ID for which this scene applies.
sceneId The identifier, unique within this group, which is used to identify this scene.

示例: 55 81 62 00 09 00 XX[5 Bytes] XX XX[2 Bytes] XX AA

4) ZBHCI_CMD_ZCL_SCENE_REMOVE_ALL_RSP

ZCLCmdRspHdr status groupId
5 Bytes 1 Byte 2 Bytes
Name Description
ZCLCmdRspHdr The zcl header of response command.
status SUCCESS or INVALID_FIELD (the group is not present in the group table).
groupId The group ID for which this scene applies.

示例: 55 81 63 00 08 00 XX[5 Bytes] XX XX[2 Bytes] AA

5) ZBHCI_CMD_ZCL_SCENE_STORE_RSP

ZCLCmdRspHdr status groupId sceneId
5 Bytes 1 Byte 2 Bytes 1 Byte
Name Description
ZCLCmdRspHdr The zcl header of response command.
status SUCCESS, INSUFFICIENT_SPACE or INVALID_FIELD (the group is not present in the group table).
groupId The group ID for which this scene applies.
sceneId The identifier, unique within this group, which is used to identify this scene.

示例: 55 81 64 00 09 00 XX[5 Bytes] XX XX[2 Bytes] XX AA

6) ZBHCI_CMD_ZCL_SCENE_GET_MENBERSHIP_RSP

ZCLCmdRspHdr status capability groupId sceneCnt sceneList
5 Bytes 1 Byte 1 Byte 2 Bytes 1 Byte n Bytes
Name Description
ZCLCmdRspHdr The zcl header of response command.
status SUCCESS or INVALID_FIELD (the group is not present in the group table).
capability Contain the remaining capacity of the scene table of the device.
groupId The group ID for which this scene applies.
sceneCnt The number of scenes contained in the scene list field.
sceneList Contain the identifiers of all the scenes in the scene table with the corresponding Group ID.

示例: 55 81 66 msgLenH msgLenL 00 XX[5 Bytes] XX XX XX[2 Bytes] XX XX[n Bytes] AA

OTA cluster command

(1) Message Type (Host)

Message Type Value
ZBHCI_CMD_ZCL_OTA_IMAGE_NOTIFY 0x0190

(2) Payload (Host)

1) ZBHCI_CMD_ZCL_OTA_IMAGE_NOTIFY

ZCLCmdHdr payloadType queryJitter
n Bytes 1 Byte 1 Byte
Name Description
ZCLCmdHdr ZCL command header.
payloadType 0x00 – Query jitter;
0x01 – Query jitter and manufacturer code;
0x02 – Query jitter, manufacturer code, and image type;
0x03 - Query jitter, manufacturer code, image type, and new file version.
queryJitter By using the parameter, it prevents a single notification of a new OTA upgrade image from flooding the upgrade server with requests from clients.

示例: 55 01 90 msgLenH msgLenL 00 XX[n Bytes] XX XX AA

HCI串口升级命令

Message Type (Host)

Message Type Value
ZBHCI_CMD_OTA_START_REQUEST 0x0210
ZBHCI_CMD_OTA_BLOCK_RESPONSE 0x0211

Payload (Host)

1) ZBHCI_CMD_OTA_START_REQUEST

binFileType OTAFileSize
1 Byte 4 Bytes
Name Description
binFileType 0--OTA file for remote device; 1--local bin file
OTAFileSize The total size of the OTA file.

示例: 55 02 10 00 04 00 XX[4 Bytes] AA

2) ZBHCI_CMD_OTA_BLOCK_RESPONSE

status offset blockLen blockContent
1 Byte 4 Bytes 1 Byte n Bytes
Name Description
status The status of the request which the slave send.
offset The offset of the block.
blockLen The length of the block.
blockContent The content of the block.

示例: 55 02 11 msgLenH msgLenL 00 XX XX[4 Bytes] XX XX[n Bytes] AA

Message Type (Slave)

Message Type Value
ZBHCI_CMD_OTA_START_RESPONSE 0x8210
ZBHCI_CMD_OTA_BLOCK_REQUEST 0x8211
ZBHCI_CMD_OTA_END_STATUS 0x8212

Payload (Slave)

1) ZBHCI_CMD_OTA_START_RESPONSE

flashAddrStart totalSize offset status
4 Bytes 4 Bytes 4 Bytes 1 Byte
Name Description
flashAddrStart The start address of the flash which to save the OTA file.
totalSize The total size of the upgrade file.
offset The offset of the block.
status The status of the request.

示例: 55 82 10 00 0d 00 XX[4 Bytes] XX[4 Bytes] XX[4 Bytes] XX AA

2) ZBHCI_CMD_OTA_BLOCK_REQUEST

offset blockLen
4 Bytes 1 Bytes
Name Description
offset The offset of the block.
blockLen The length of the block.

示例: 55 82 11 00 05 00 XX[4 Bytes] XX AA

3) ZBHCI_CMD_OTA_END_STATUS

totalSize offset status
4 Bytes 4 Bytes 1 Byte
Name Description
totalSize The total size of the upgrade file.
offset The offset of the block.
status The status of the request.

示例: 55 82 12 00 00 09 00 XX[4 Bytes] XX[4 Bytes] XX AA

附录:Zigbee联盟Pro R21认证证书

Zigbee联盟证书