绑定(Binding)是一种控制两个或者多个设备应用层之间信息流传递的机制。绑定允许应用程序发送一个数据包而无需知道目标地址的16位短地址(此时目标设备短地址设置为无效地址0xFFFE),应用支持子层APS从绑定表中自动获得目标设备的短地址,从而将数据顺利发送到目标节点的一个或者多个应用服务乃至分组。
说明:绑定是基于设备应用层端点的绑定,只能在互为补充的设备间被创建。即被绑定的两个设备必须在其简单描述符结构中登记为相同的命令ID,且其中一个设备作为输入,另一个设备作为输出。
- 概述
1.1. 概念
绑定指的是在两个节点的应用层上建立起来一条逻辑链路。在同一个节点可以建立多个绑定服务,分别对应不同种类的数据包,此外,绑定也允许有多个目标节点,即一对多绑定。
1.2. 作用
一旦在源节点上建立绑定,其应用服务即可向目标节点发送数据而无需知道目标地址。协议栈会根据数据包的命令标识符通过自身的绑定表查找所对应的目标设备地址,完成数据包的发送和接收。若打开编译选项NV_RESTORE,那么协议栈在编译目标文件时会把绑定表中的绑定条目保存在非易失性存储器中,如遇意外重启、节点电池耗尽需要更换等突发状况时,节点能够自动恢复到掉电前的工作状态,无需用户重新设定绑定服务。 - Zigbee绑定的四种方式及其特点
2.1. 两个设备节点分别通过按键机制调用ZDP_EndDeviceBindReq()
函数
即在一定时间内,两个节点都通过按键或者其他方式触发调用ZDP_EndDeviceBindReq()
函数。
特点:该绑定方式需要协调器的参与,绑定成功后不再需要协调器;该方式不局限于EndDevice的绑定,也可适用于Router的绑定。
2.2. Match方式
即一个节点通过调用afSetMatch()
函数允许或者禁止本节点被Match(协议栈中默认允许节点被Match),然后另一个节点在一定时间内发起ZDP_MatchDescReq请求,允许被Match的节点会响应这个Req请求,发起Req的节点在接收到RSP的时候就会自动处理绑定。
特点:无需第三方节点,处于网络中的两个可Match的节点(即一方的outcluster至少有一个是另一方节点的incluster)皆可实现绑定。
2.3. ZDP_BindReq和ZDP_UnbindReq方式
即通过调用上述两个函数(ZDP_BindReq()
和ZDP_UnbindReq()
)来实现绑定和解绑。
特点:该绑定方式需要第三方节点发送bind或者unbind命令给控制节点,控制节点收到Req后直接处理绑定而不用告知被控制的节点,绑定表存储在控制节点中。该方式可实现一个节点绑定到一个Group上。此外,该绑定方式需要知道控制节点以及被控制节点的64位长地址。
2.4 手工管理绑定表
通过应用程序调用bindAddEntry()
等函数来实现手工管理绑定表。
特点:改绑定方式具有很大的自由度,无需其他节点的参与,但应用程序所做的工作较多,同时需要实现知道被绑定节点的短地址、端点号、incluster和outcluster等信息。 - 建立绑定表的两种机制
3.1 目标设备扩展地址(即64位MAC地址)已知,在源设备端只需通过调用函数zb_BindDevice()
进行绑定,该函数中的地址就是目标设备的扩展地址。
3.2. 目标设备扩展地址未知,设定目标设备为允许绑定状态,源设备通过调用函数zb_BindDevice()
进行绑定,其中扩展地址参数为NULL。