理解 Zigbee 最有效的方法,不是先背命令,而是把“无线、组网、传输、设备管理、应用功能”分层。这样看日志或抓包时,才能知道一条成功信息究竟证明了哪一步。

协议栈分层

1
2
3
4
5
6
7
8
9
10
11
应用逻辑

ZCL:Cluster、Attribute、Command

ZDO / ZDP:设备与服务发现、网络管理

APS:应用数据传输、绑定、组寻址、应用层安全

NWK:组网、路由、网络地址、网络层安全

IEEE 802.15.4 MAC / PHY:信道、帧、确认、射频
  • IEEE 802.15.4 提供低速率无线链路;
  • NWK 负责 Zigbee Mesh 网络;
  • APS 把上层应用消息送到指定设备和 Endpoint;
  • ZDO/ZDP 提供节点、Endpoint 和服务发现;
  • ZCL 定义设备功能的通用数据模型。

因此,收到 MAC ACK 只说明链路层收到了帧,不代表 NWK 解密、APS 接受或 ZCL 命令处理成功。

三种逻辑设备角色

角色 主要职责 常见限制
Coordinator 建立网络,通常也是集中式网络的 Trust Center 一个 Zigbee 网络只有一个 Coordinator
Router 转发报文并允许子设备接入 通常需要保持接收能力
End Device 通过父节点通信,不为其他节点路由 可设计成休眠设备

Coordinator 是网络形成时的角色;网络形成后,Mesh 路由并不要求所有报文都经过它。Router 或 Coordinator 都可以成为 End Device 的父节点。

地址、Endpoint 与设备功能

一个 Zigbee 节点通常同时涉及:

  • EUI-64:设备的全局扩展地址;
  • 16 位 NWK 地址:加入网络后使用的短地址,可能变化;
  • PAN ID / Extended PAN ID:识别网络;
  • Endpoint:节点内部的应用端点;
  • Profile ID 与 Device ID:声明应用配置和设备类型;
  • Cluster:Endpoint 提供或使用的标准功能。

排障时不要把短地址当作永久身份。跨重启、离网重入或地址冲突处理后,应使用 EUI-64、时间线和设备公告重新确认节点。

Cluster、Attribute 与 Command

ZCL 把设备能力拆成 Cluster:

  • Server 保存状态、提供属性或接收命令;
  • Client 发起命令或消费 Server 产生的信息;
  • Attribute 表示状态或配置;
  • Command 表示一次操作或协议动作;
  • Reporting 让属性按配置主动上报。

同一个 Cluster ID 的 Server 和 Client 是两个方向,不能因为 Endpoint 列出了 Cluster 就认为双向能力都存在。

单播、广播、组播与绑定

  • 单播:发送给一个目标节点;
  • 广播:发送给一类或全部节点,成本较高;
  • 组播:发送给 Group ID 对应的一组 Endpoint;
  • Binding:在源 Endpoint 中保存逻辑目标,使应用不必每次指定完整目的地址。

广播不是“更可靠的单播”。它会增加全网负载,且不同广播范围、重试和确认语义并不相同。

一条应用消息经过什么

以属性上报为例:

1
2
3
4
5
6
传感器状态变化
-> ZCL 生成 Report Attributes
-> APS 选择目的 Endpoint、绑定或地址
-> NWK 选择下一跳并进行网络层保护
-> MAC 在当前信道发送
-> 目标逐层解密、分发并处理

每一层都有独立失败点。可靠分析应记录:

  1. 应用是否生成消息;
  2. APS 是否接受发送请求;
  3. NWK 是否找到路由;
  4. MAC 是否发出并收到确认;
  5. 对端是否通过安全校验;
  6. 对端 Endpoint 与 Cluster 是否接受;
  7. 应用状态是否真正改变。

规范边界

Zigbee 仍在演进。学习基础概念可以使用公开资料,但实现和认证必须冻结对应的 Zigbee Core、BDB、ZCL、Device Type Library、Errata、PICS 和测试规范,不能把不同 Revision 的要求拼在一起。

可从 Zigbee 官方概览Zigbee FAQCSA 规范下载入口继续阅读。