ZigBee TI ZStack CC2530 4.17 绑定通信01-概念介紹

(配套源码软件开发板等资源,可移步博客同名QQ群/TB店铺:拿破仑940911


上一节中,我们详细介绍了ZigBee的第三种无线通信方式——组播;本节中,我们将介绍ZigBee的最后一种,也就是第四种无线通信方式——绑定。比起ZigBee的其他三种无线通信方式,绑定通信的原理和实现都要更复杂一些,所以关于绑定,我们分为两节来讲述——“概念介绍”和“实验验证”。


本节主要讲述ZigBee绑定通信的概念,学过ZigBee一段时间之后,不知道大家有没有同感:最好的参考资料,就是ZigBee协议栈安装目录下Document文件夹中的PDF文档!关于绑定通信的概念介绍,本节参考的文档如下:

《Z-Stack Developer's Guide.pdf》第4节(P7-P8)
《Z-Stack Sample Applications.pdf》第1.4节(P4-P5)
《Z-Stack Simple API.pdf》第3.3节(P5)

这几份文档中的这些章节,有关于绑定通信的基本概念讲解和实验例程说明,喜欢看英文原版文档的话,推荐!

一、绑定的应用场景

关于ZigBee的无线通信,我们都知道:目标设备的16位网络短地址尤为重要!我们必须要知道无线通信的对象到底是谁,才能够进行无线数据的交互。但是,在ZigBee多种多样的应用环境下,我们不可能任何情况下都明确知道目标设备的网络地址。

此外,又由于ZigBee机制的原因,每一个ZigBee设备在所处的ZigBee网络中的16位网络短地址是由其父节点为其随机分配的,并且每次上电或重启后,该地址可能都会不一样。

对于这样一些应用场景,一种称为“绑定”的通信方式使得这个问题得到了有效的解决!

二、总体概念介绍

绑定(Binding),从字面上看,我们大概就可以知道它的含义是什么。《Z-Stack Developer's Guide.pdf》中的解释为:绑定是对于从一个应用到一个或多个应用的信息流的控制机制,它允许应用不知道目标设备的地址就可实现数据的无线发送。

当应用调用Z-Stack协议栈中提供的绑定发送函数发送数据时,其实是由APS层根据一些指定参数去查询绑定表,继而得到目标设备的地址,从而实现数据的发送。如果查得绑定表中有多个匹配的目标设备的话,数据包将会拷贝发送给建立有绑定关系的所有目标设备。

具体到底有几种绑定的实现方式,一种?两种?三种?还是更多?看了很多家的ZigBee教程,也看了一些TI的官方文档,目前还没有找到一个明确的详细的说明。当然,在后面继续学习的过程中,如果得到确切的答案,我一定会及时将本节博客更新的。也欢迎大家多多指教~

三、握手绑定(Hand Binding)

接下来,我们将详细介绍最常用的一种绑定方式,我们称之为——握手绑定(Hand Binding)。当然,这个名字肯定不是我自己随便起的,在《Z-Stack Sample Applications.pdf》中第1.4节可以找到相应的描述,对应的是Texas Instruments\ZStack-CC2530-2.5.1a\Projects\zstack\Samples目录下的GenericApp官方例程。感兴趣的话,推荐去阅读一下~

1、基本描述

根据文档中描述,为了使得两个应用(设备)之间可以实现无线通信(即建立起绑定关系),必须保证协调器(Coordinator)存在于网络中,并且两个设备在一定的时间段内通过按键等方式均触发绑定请求。允许绑定的时间,默认值为16秒,在ZGlobals.h文件中有如下定义:

#if !defined ( APS_DEFAULT_MAXBINDING_TIME )
  #define APS_DEFAULT_MAXBINDING_TIME 16000
#endif

如果在f8wConfig.cfg文件中,或在预编译选项中定义了APS_DEFAULT_MAXBINDING_TIME,可以达到覆盖改变该值的效果。

此外,绑定信息保存在发起设备本地。

2、实现函数

握手绑定(Hand Binding),可以通过调用Z-Stack协议栈中的ZDP_EndDeviceBindReq()函数来实现,在ZDProfile.c文件中,我们可以找到如下一段代码:

/*********************************************************************
 * @fn          ZDP_EndDeviceBindReq
 *
 * @brief       This builds and sends a End_Device_Bind_req message.
 *              This function sends a unicast message.
 *
 * @param       dstAddr - destination address
 * @param       LocalCoordinator - short address of local coordinator
 * @param       epIntf - Endpoint/Interface of Simple Desc
 * @param       ProfileID - Profile ID
 *
 *   The Input cluster list is the opposite of what you would think.
 *   This is the output cluster list of this device
 * @param       NumInClusters - number of input clusters
 * @param       InClusterList - input cluster ID list
 *
 *   The Output cluster list is the opposite of what you would think.
 *   This is the input cluster list of this device
 * @param       NumOutClusters - number of output clusters
 * @param       OutClusterList - output cluster ID list
 *
 * @param       SecurityEnable - Security Options
 *
 * @return      afStatus_t
 */
afStatus_t ZDP_EndDeviceBindReq( zAddrType_t *dstAddr,
                                 uint16 LocalCoordinator,
                                 byte endPoint,
                                 uint16 ProfileID,
                                 byte NumInClusters, cId_t *InClusterList,
                                 byte NumOutClusters, cId_t *OutClusterList,
                                 byte SecurityEnable )


(配套源码软件开发板等资源,可移步博客同名QQ群/TB店铺:拿破仑940911

上一篇:数据库操作:添加、插入、更新语句


下一篇:2019 阿里巴巴编程之夏结果公示