zigbee绑定机制的代码体现————SimpleApp为例

本文详细介绍了Zigbee协议栈中的绑定过程,通过打开SimpleApp的代码分析,解释了A节点和B节点分别在按键操作下执行的功能,以及如何实现自动绑定任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在研究zigbee的绑定机制,但是看了很多资料始终不明白绑定机制的具体体现,即zigbee协议栈什么时候开始执行了绑定?这里以SimpleApp为例介绍下zigbee的绑定过程;个人购买的传感器节点,其下载安装了zstack协议栈之后,执行SimpleApp的demo,根据卖家提供的说明文档,下载协调器程序的节点(这里称为A节点)需要按键两次,而下载了sensor程序的节点(这里称为B节点)需要按键一次,该SimpleApp程序才能正常运行了!这里为什么需要按键呢?按键的作用又何在呢??打开A节点的程序代码,找到SimpleCollector.c文件,找到该文件的void zb_HandleKeys( uint8 shift, uint8 keys )函数,该函数的内部有下列代码:


对于A节点而言,第一次按键是组网(具体分析见之前的博客),即A节点第一次按键执行上述代码。而A节点有两次按键,第二次按键则执行了如下的代码,该代码根据函数名的意思就可以知道是允许绑定;


同理的,对于B节点而言,打开文件SimpleSensor.c文件,找到下列语句:可知对于B节点而言,按键一次,该节点是作为终端设备启动的;



当B节点作为EndDevice成功启动后,协议栈会自动调用下述函数:


从这里,我们可以看出,B节点启动了定时绑定A节点(也就是协调器,这里是Collector)的任务。






BINDING KuangJunBin:本文是作者根据TI Z-Stack开发文档,ZigBee Specification-2007,《Zigbee Wireless Networking》等英文资料整合和翻译而成,采用中英双语对照方便读者理解,文中翻译不当之处,望广大同行不吝赐教。推广ZigBee技术,提高国内电子行业的国际影响力,是我们无线通讯工程师的愿景。本文欢迎转载,请保留作者信息和出处,作为支持我继续努力前行的动力,谢谢! E-mail:kuangjunbin@gmail.com In the Zigbee 2006 release,the binding mechanism is implemented in all devices and is called source binding. Binding allows an application to send a packet without knowing the destination address,the APS layer determines the destination address from its binding table,and then forwards the message on to the destination application(or multiple applications)or group. ZigBee2006版本中规定,在全部节点中实现绑定机制,并将其称为源绑定绑定机制允许一个应用服务在不知道目标地址的情况下向对方(的应用服务)发送数据包。发送时使用的目标地址将由应用支持子层(APS)从绑定表中自动获得,从而能使消息顺利被目标节点的一个或多个应用服务,乃至分组接收。 Binding Table 1.Defined in RAM,but can be saved in Flash if the NV_RESTORE compiler option is used 2.Stored on source node(REFLECTOR compiler option required) 3.Entries map messages to their intended destination 4.Each entry in the binding table contains the following: typedef struct { uint16 srcIdx;//Source index uint8 srcEP;//Source endpoint uint8 dstGroupMode;//Specifies normal or group addressing uint16 dstIdx;//Destination index or group address uint8 dstEP;//Destination endpoint uint8 numClusterIds;//Number of cluster IDs in the clusterIdList below uint16 clusterIdList[MAX_BINDING_CLUSTER_IDS]; }BindingEntry_t; 绑定表 1. 绑定表存放的位置是内存中预先定义的RAM块,如果编译选项NV_RESTORE被激活,也能保存在Flash里。 2. 绑定表放置在源节点(需要激活编译选项REFLECTOR)。 3. 绑定表的条目把需要发送的消息映射到它们的目标地址上。 4. 绑定表中每个条目(entry)包括以下内容: 绑定表条目结构体的定义
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值