一、 ZigBee 概述
1.1 ZigBee 网络节点
1.2 ZigBee 网络拓扑结构
ZigBee 协议主要设计于 Mash 网络。Mash网络没有隐式结构,它是由一个协调器和许多 Router 和 End Device 集合在一起的。
1.3 ZigBee 的典型应用
ZigBee 适用于许多不同的应用,覆盖商用和家用,其中包括:
1.4无线射频操作
ZigBee 构建时内部使用的是 IEEE 802.15.4 协议,提供同网络连接操作有 3 种可能的 RF(射频),868,915和2400Mhz, 这些射频波段的特征如下表所示。
868 和 915MHz 频段提供一定的优势,如用户较少,更少的吸收和反射,但2400Mhz 频带更广泛采用的原因是:
1.5 电池组件
ZigBee 和 IEEE 802.15.4 协议对电池供电的应用有特别的设计,从用户的角度看,电池供电有一定的优势:
由于这些设备通常比较小,它们使用小容量电池,因此电池使用必须优化,这是通过限制能量所需设备的时间来实现的。
1.6 简单的安装和配置
ZigBee 网络的优点之一是可以安装和配置。
网络的配置取决于安装系统如何发展,有三个系统可能性:预配置,自配置和自定义。
二、 ZigBee 协议栈架构
2.1 架构概述
本节介绍了一个运行在 ZigBee 协议栈的网络节点的基本软件构架,软件架构是建立在 IEEE 802.15.4(已认证的无线通信标准)上。
从更高的一个角度来说,任何 ZigBee 网络的软件架构包含四个基本的协议栈层:应用层、网络层、数据连接层和物理层。应用层最高,物理层最低,如下图:
2.2 网络层概念
2.2.1 ZigBee 节点
在 ZigBee 网络中有三种一般类型的节点:
Co-ordinator
所有的 ZigBee 网络中必须有且仅有一个 Co-ordinator。
在网络层,Co-ordinator 主要是在系统初始化时被使用——它是第一个启动的节点,执行下面的初始化任务:
Co-ordinator 可以另外提供其他服务,比如消息路由和安全管理。它也可以在应用层提供服务。如果这些附加服务任意一个被使用,Co-ordinator 必须随时随地提供它们。然而,如果没有附加功能被使用,网络将正常运作即使 Co-ordinator 衰退或关闭。
Router
ZigBee 协议栈网络通常至少有一个 Router。
Router 的主要任务有:
注意:路由器不能睡眠,因为它必须由于有效的路由。
End Device
End Device 在网络层主要的任务是发送和接受消息,End Device 只能和它的父节点直接通信,所以 End Device 所接收或发送的消息必须经过它的父节点。
End Device 可以用电池驱动,不发送或接收数据时可以睡眠。消息发往一个睡眠的 End Device ,在其睡醒之前由其父节点代为缓冲。
注意:End Device 不能传递消息,也不允许其他节点通过它加入网络,所以End Device 没有子节点。
2.2.2 网络拓扑结构
ZigBee 协议栈标准是为了具有网状拓扑的无线网络而设计的。
Mash 网络包含一个 Co-ordinator 、一些 Router和一些 End Device。Co-ordinator 将一组 Router 和 End Device(Co-ordinator 的子节点)联系在一起。Router 将更多的 Router 和 End Device(Router 的子节点)联系在一起。这样可以继续很多层。节点之间的关系必须遵循下面的规则:
Mash 网络的通信规则如下:
在 ZigBee 协议栈中,一个网络的最大深度(Co-ordinator 下面的层数)是15。消息从源节点到目标节点可跳传的节点的最大数量是30(最大深度的两倍)。
2.2.3 邻居表
路由节点(Co-ordinator 或 Router)持有周边节点的信息,这些信息存储在包含节点的子节点,父节点和在 Mash 网络中所有的直接无线电通信的 Router节点的邻居表中。
可以定义一个有最大数量条目的邻居表。如果这个参数设置为一个较低的值,将导致“细长网络”。
2.2.4 网络地址
在 ZigBee 网络中,每个节点必须有一个唯一标识,这是通过两个地址实现的:
IEEE(MAC)地址:这是一个由 IEEE 分配的64 位地址,是设备的唯一标识——世界上没有任何两个设备的 IEEE 地址是相同的,它通常被称为 MAC 地址,在 ZigBee 网络中,有时被称为“扩展”地址。
网络地址:这是个 16位地址,是本地网络中节点的网络标识(因此在不同的网络中两个节点可能有相同点网络地址)。它有时被称作“短地址”。
在 ZigBee 协议栈中,节点的网络地址是动态分配的,当节点第一次加入网络时由其父节点随机分配 16 位地址。由于地址是随机分配的,因此被称为随机寻址。虽然是随机分配的,它的父节点也可以确保选择的地址没有分配给其它子节点。地址已经存在于网络之外的最接近的邻居是不可能的,因为存在一种机制来自动检测和解决冲突。加入网络的节点可以保留分配的网络地址,即使它离开父节点获得一个新的父节点。
Co-ordinator 的网络地址总是 0x0000。
2.2.5 网络 ID
一个 ZigBee 网络必须是唯一可辨认的,这允许一个以上的 ZigBee 网络很靠近的运行——节点运行在同一个空间必须能识别它们所属的网络。
为此,ZigBee 使用了如下两个 ID :
PAN ID:16 位的值被称为 PAN ID(个人区域网络 ID),是用于节点之间的通信(在 IEEE 802.15.4 层的堆栈中执行)来识别相关的网络。PAN ID 的值是在网络开始时由 Co-ordinator 随机选择的。当其他节点加入网络,他们会获取到网络的 PAN ID并且在该网络随后的通信中使用它。有可能一个新的安装网络生成的 PAN ID 会与附近相同信道中已经运行的其他网络的 PAN ID 冲突。在这种情况下,ZigBee 协议栈会自动的解决这样的冲突,通过给新网络生成其他随机 PAN ID,直到不会与可检测到的任何一个网络的 PAN ID 发生冲突。
扩展 PAN ID:64 位的值被称为扩展 PAN ID(EPID),用于形成网络和随后改造网络。这个标识符可预设一个随机值在运行的 Co-ordinator 的用户应用程序上。另外,当网络开始时 Co-ordinator 将采用自己的 64 位 IEEE/MAC 地址作为扩展 PAN ID,标识符可以预设为 0——这是一个肯定的方式获得全球独一无二的值。
当一个 Router 或 End Device 第一次尝试发现网络去加入时,将通过下面两种方法之一去使用扩展 PAN ID。
※ 如果扩展 PAN ID 已经在 Router 或 End Device 的用户应用程序中进行了预设,节点将会加入拥有这个扩展 PAN ID 的网络(提供的这个网络被检测到)。
※ 如果 Router 或End Device 没有预设扩展 PAN ID,节点将会加入第一个检测到的网络,不考虑扩展 PAN ID。加入网络的节点将会获取该网络的扩展 PAN ID,如果因为某些原因节点离开网络,可以使用获取的扩展 PAN ID 重新加入该网络。
2.3 创建网络
2.3.1 启动一个网络(Co-ordinator)
Co-ordinator 负责启动一个网络。它必须是第一个启动的节点,一旦上电,将执行下面的网络初始化步骤:
设置扩展 PAN ID 和 Co-ordinator 地址
Co-ordinator 第一次设置网络的扩展 PAN ID 和设备自己的网络地址:
※ 在协调器应用程序中设置指定的 64 位扩展 PAN ID(如果这个值为 0,扩展 PAN ID 将被设置为 Co-ordinator 的 64 位 IEEE/MAC 地址)
※ 设置 Co-ordinator 的 16 位网络地址为 0x0000
选择信道
接下来 Co-ordinator 会在射频波段内选择网络中将要运行的信道,Co-ordinator 执行能量检测扫描,在射频波段内扫描去寻找一个安静的信道(扫描可以被规划去“听”特殊信道)。检测活动最少的信道会被选择。
设置网络的 PAN ID
信道一旦被选择好,Co-ordinator 将会给网络选择一个 16 位的 PAN ID。为了做到这一点,它监听其他网络信道并且识别那些网络的 PAN ID(如果有的话)。为了避免冲突,Co-ordinator 分配自己的网络一个其他网络没有使用的随机 PAN ID。
接收其他设备的加入请求
Co-ordinator 现在准备接收其他设备(Router 和 End Device)的请求,通过它无线连接到网络。
2.3.2 加入一个网络(Router 和 End Device)
Router 和 End Device 可以通过 Co-ordinator 加入一个已经创建的网络,Co-ordinator 和 Router 都具有允许其他节点通过它们加入网络的功能,加入过程如下:
2.4 应用层概念
2.4.1 多个应用程序和端点(Endpoints)
一个节点可能有多个应用程序在运行——例如,一个节点在环境监测网络中可能要监测温度和湿度,温度和湿度都是一个应用。通向应用实例的入口是 Endpoint 提供的,Endpoint 扮演着应用的通信端口。
在一个节点上为了指导一个消息到适当地应用实例,相关的 Endpoint 必须交流,Endpoint 的编号为 1 ~ 240。因此,在 ZigBee 网络中为了和一个远程应用实例通信,需要提供远程节点的地址以及该节点上 Endpoint 的数量。
Endpoint 255 是广播的 Endpoint 编号——通过发送消息给这个 Endpoint 编号,相同的数据可以发送给节点上所有的应用实例。
2.4.2 描述符
一个应用在运行时可能需要获取网络中节点的消息,为此,它使用保存在节点描述符中消息。
一个节点中保存了三个强制描述符和两个可选描述符,强制描述符包括节点描述符,节点电源描述符和简单描述符,可选描述符是复杂描述符和用户描述符。
对每一个节点来说,只有一个节点描述符和节点电源描述符,但是每一个 Endpoint 都有一个简单描述符,设备也可能有复杂描述符和用户描述符。
节点描述符
节点描述符包含节点功能的信息,包括:
节点电源描述符
节点电源描述符包含节点怎样供电的信息:
简单描述符
应用程序的简单描述符包括:
2.4.3 应用协议
应用协议确保不同制造商的 ZigBee 设备的互操作性。这个协议涉及特别的应用领域和市场,包含相关应用领域所需要的设备类型和接口的描述。
应用协议依据设备描述符来定义。ZigBee 联盟定义了公用的协议,例如 HA 协议。私人和公用的协议可由制造商定义,但是所有的共用协议必须使用 ZigBee 联盟分配的唯一标识符。
应用协议不仅定义了支持的设备类型,还指定了数据支持的类型,操作可以在这些数据上执行。Endpoint 的指定的简单描述符是根据 Endpoint 的“Clusters”来定义的。
2.4.4 属性和集群(Clusters)
一个 ZigBee Endpoint 处理的数据实体(如温度测量)被称为属性。应用程序可以通过一组属性来通信——例如,一个恒温器端点可能有温度的属性,最低温度的属性,最高温度的属性和公差属性。
ZigBee 应用程序使用“Cluster”的概念属性值进行沟通,一个 Cluster 包含一组相关的属性与一组命令相互作用的属性——例如,上面的温度测量属性和命令用于读取属性值。
一个 Cluster 有两方面,分别与接收和发送命令有关。一个 ZigBee 应用程序可能用到一方面或者两方面都用到。Cluster 的描述如下,如图5 所示。
为了一致性和互操作性,ZigBee 联盟针对不同的功能领域定义了许多标准 Cluster 。这些 Cluster 都聚集在 ZigBee Cluster Library(ZCL)中。因此,开发商可以在应用协议的 ZCL 中使用标准 Cluster。ZCL 在 ZigBee 联盟的 ZigBee Cluster Library Specification(075123)中有详细描述。
2.4.5 发现
ZigBee 规范为设备找出网络中其他节点的功能提供便利,比如它们的地址,运行的应用程序类型,供电电源及睡眠模式。这些信息保存在每个节点的描述符中,用于询问节点去适应它在网络中的行为要求。发现是当一个节点被引进一个用户配置网络时代表性使用,如国内安全或照明控制系统。为了整合设备到网络中,可能需要用户通过按下按键或其他类似方法启动一体化进程。第一个任务是找出是否有新节点可以通信的合适设备。
设备发现
设备发现返回一个网络节点地址相关的信息。重新获取的信息可以是给予网络地址的节点的 IEEE/MAC 地址或者给予 IEEE/MAC 地址的节点的网络地址。如果被询问的节点是 Router 或 Co-ordinator,它可以随意的提供与它相关的所有设备的地址和它自己的地址。这样,它通过向 Co-ordinator(网络地址 0x0000)发送这个信息的请求可能发现网络中所有的设备,然后使用与 Co-ordinator 子节点对应的一系列地址发送关于它们子节点的其它询问。
服务发现
服务发现允许节点向一个远程节点请求有关远程节点功能的信息。这些信息存储在远程节点的的一些描述符中,包括:
这些描述符请求是设备在发现过程中发送的设备配置和集成到一个 ZigBee 网络的代表部分。
2.4.6 ZigBee 设备对象
所有 ZigBee 设备共同的特殊应用程序,用来处理各种被描述的进程。这个应用是 ZigBee 设备对象或 ZDO。它存在于节点的应用层,通过 Endpoint0 使用 ZigBee 设备对象和相关的 Cluster 可以与远程节点通信。它具有以下规则:
ZDO 在堆栈内使用服务去落实这些规则,并且提供了一种手段来允许用户应用程序访问堆栈服务。