天天看点

ZigBee 3.0 Z-Stack 3.01 终端设备入网过程全解析

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

这篇文章主要讲解一个处于“Factory New”状态(协议栈中的bdbNodeIsOnANetwork这个变量值为FALSE)下的“ZigBee终端设备”的入网过程。

一、概念补充

1、信道
(1)DEFAULT_CHANLIST

关于“DEFAULT_CHANLIST”的定义,位于“f8wConfig.cfg”文件中的。

之前的《ZigBee Z-Stack 4.02 基本网络参数设置》这篇文章中有提及过,感兴趣的朋友可以去看一下,此处就不再赘述。

(2)BDB_DEFAULT_PRIMARY_CHANNEL_SET
我们姑且将其称为“主信道集”,其在协议栈中的定义位于“bdb_interface.h”文件中,具体定义如下:
ZigBee 3.0 Z-Stack 3.01 终端设备入网过程全解析
(3)BDB_DEFAULT_SECONDARY_CHANNEL_SET
我们姑且将其称为“次信道集”,其在协议栈中的定义也位于“bdb_interface.h”文件中,具体定义如下:
ZigBee 3.0 Z-Stack 3.01 终端设备入网过程全解析
仔细看一下这个宏定义,就能看出来:“次信道集”和“主信道集”其实互为补集。

二、信道扫描(第一步)

1、获取“网络描述符清单”
首先,设备会扫描“主信道集”——BDB_DEFAULT_PRIMARY_CHANNEL_SET中定义的所有信道,搜寻这些信道中任何合适的网络。与此同时,该设备会在本地创建一个“清单”,用于记录扫描到的每一个网络的相关信息,最终保存到pBDBListNwk中,其定义位于“bdb.c”文件中:
ZigBee 3.0 Z-Stack 3.01 终端设备入网过程全解析
我们姑且将pBDBListNwk称为“网络描述符清单”。由其定义可见,pBDBListNwk是一个networkDesc_t类型的指针,而关于networkDesc_t的定义位于“NLMEDE.h”文件中:
ZigBee 3.0 Z-Stack 3.01 终端设备入网过程全解析
由此可见,“网络描述符清单”中的每一个条目都代表搜索到的一个网络的所有信息。而具体每个条目包含了哪些信息,如上图所示,有panId、logicalChannel、routerCapacity、deviceCapacity等等。
2、筛选/过滤/选择网络

协议栈中会通过bdb_RegisterForFilterNwkDescCB()来注册一个回调函数——pfnFilterNwkDesc(),用于对所有找到的网络进行筛选。“网络描述符清单”会作为一个参数,传递给该回调函数,进而实现网络的筛选。

当网络筛选完成后,对于那些被过滤掉(未被选择)的网络,协议栈中会调用bdb_nwkDescFree()将其相关的“网络描述符”给释放掉。

如果没有找到合适的网络,或者无法加入找到的网络(连接不成功或是无法获取“网络密钥”),设备将会扫描“次信道集”——BDB_DEFAULT_SECONDARY_CHANNEL_SET中定义的所有信道,并执行上述同样的步骤。

三、关联和认证(第二步)

四、入网完成(第三步)

五、其他

1、pBDBListNwk,该“网络描述符清单”其实就是一个“链表”。

2、在信道扫描过程中,只有非零的信道才会被扫描,进行“网络发现”。

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