童晓红,陈 玲
(合肥职业技术学院计算机应用技术系,安徽 合肥238000)
ZigBee 网络建立过程一般分为两部分:第一部分是协调器需要初始化一个自组建网络;第二部分是路由节点或终端节点通过ZigBee 协议加入网络.加入网络又有两种类型,一类是终端设备通过使用MAC 层的连接进程直接加入到自组建网络中,另一类是终端设备通过与一个先前指定的父设备或者路由节点连接后再加入到ZigBee 网络中.
给协调器加电,协调器按照事先IAR 编译下载的工程文件所设定的参数,选择相应的信道、网络号、默认地址名,建立ZigBee 自组网络,这部分是通过协议栈实现的.终端节点是加入到网络后按固定的周期发送数据.其工作过程与协调器流程图(如图1 所示)基本类似.
然后再分别给各终端节点加电,终端节点或路由节点首先进行硬件电路的初始化,再搜索周边通信范围内是否存在有自组建ZigBee 网络,如果有,并且符合编译时定义的网络号的许可,正常加入到该网络后才能把终端数据发送到协调器,正常通信及收发数据是通过红色、绿色LED 灯闪烁进行验证的.
在TI_Z-Stack 协议栈中定义的End Device与Coordinator 进行收发数据是利用AF_Dataquest函数实现的,该函数会调用ZigBee 协议栈与自组网相关的函数并将得到的数据串通过发射天线进行传输,包括打开发射机、调整发射机的发送功率、数据包的长度与地址等内容,这些部分协议栈已经定义了自动的实现过程,用户只需要掌握AF_DataRequest 函数的使用方法即可.
图1 协调器流程图
协调器与终端设备正常组网后便自动从节点接收数据,OSAL 操作系统的机制是每次将接收的数据封装成一个消息,然后放入消息队列中,如图2 所示.
图2 消息队列的定义
图3 消息队列的处理方法
图4 Texas Instruments Packet Sniffer
图5 Packet Sniffer 主程序窗口
每个消息都有自己的消息ID,标志接收到新数据的消息的ID 是AF_INCOMING_MSG_CMD,其中AF_INCOMING_MSG 的值是0x1A,用户不可更改,ZigBee 协议栈中AF_INCOMlNG_MSG_CMD 宏定义在全局系统消息内(通过OSAL 层的Zcomdef.h 文件进行定义的):
因此,在Z-Stack 协议栈协调器的coordinator.c 代码中有图3 的设定:
osal_msg_receive(SerialApp_TaskID)函数从消息队列中接收消息ID 对应的一条消息,用switch/case 语句对消息ID 进行判断,如果消息队列中得到的是AF_INCOMlNG_MSG_CMD 则进行数据的接收、发送等相关的处理.也就是说当协调器接收到数据后,用户只需要从消息队列中接收消息,然后从消息中取得所需要的数据即可,其他工作全部交给ZigBee 协议栈自动完成.
构建ZigBee 协议分析系统需要用到硬件和软件的共同支持,硬件:CC2530 开发板和ZigBee 协议分析仪.软件:Texas Instrument Packet Sniffer.具体步骤如下:
首先,使用USB 延长线将ZigBee 协议分析仪与CC2530 开发板连接起来并安装设备驱动.
打开Texas Instruments Packet Sniffer 软件,如图4 所示,在下列列表框中选择IEEE 802.15.4/ZigBee,最后单击Start 按钮.
此时,会弹出Texas Instruments Packet Sniffer主程序窗口,如图5 所示,在窗口底部Select capturing device 中已经发现了分析仪.然后在下拉列表框中选择ZigiBee2007/PRO,最后单击小三角按钮(开始抓包按钮)即可进行抓包.
依次打开执调器电源和终端节点电源,此时Texas Instruments Packet Sniffer 软件就可以显示所捕获的数据包.
按照上述过程连接好协调器与分析仪,打开协调器与HALL 终端传感器节点电源,单击Packet Sniffer 软件菜单上抓包按钮就可以抓到数据包,如图6 所示.
从Texas Instruments Packet Sniffer 软件抓到的数据包可以看到每个数据包有很多段组成,这与ZigBee 协议是对应的.
下面通过ZigBee 协议分析仪捕获的数据包分层图实例来分析网络的建立过程,并且了解到数据传输过程中,用户数据在数据包的哪个位置.
第1 行:终端节点发送信标(Beacon)请求,目标地址与PAN ID 都为0xFFFF 进行广播.
第2 行:协调器建立了ZigBee 无线网络.在ZigBee 无线网络中,第2 行所示数据包中的“Source Address”就是协调器的网络地址并设定为0x0000,PAN ID 为随机产生的0x100E.
第3 行:HALL 传感器(终端节点设备)发送Association Request 请求加入网络.虽然PANID 进行广播时为0xFFFF,但目标PANID 已经确定为0x100E,MAC 地址(64bit)最后四位地址为7702,Sequence Number 随机对应为0xBF.
第4 行:协调器对终端节点传感器的加入网络请求作出OK 应答(以相同的Sequence Number0xBF 为一一对应的依据).
第5 行:HALL 传感器(终端节点设备)收到协调器的应答后,发送数据请求(Data Request),请求协调器PAN ID 0x100E 为MAC 尾四位7702 分配网络短地址,Sequence Number 为其分配的地址为0xC0.
第6 行:协调器对终端节点的数据请求作出OK 应答,序列号也是相同的,其Sequence Number也对应为0xC0.
第7 行:协调器(PAN 0x100E、MAC 地址为00:12:4B:00:02:93:86:65)将分配的网络地址发送给终端节点(MAC 地址后四位为7702),新分配的网络短地址(16bit)是0xEEBC 已经成功分配.
在这里要说明的是:IEEE 的地址是64 位,而节点的网络地址是16 位.对于无线通信而言,数据长度越长,发送这些数据所需要的功率就越大,同时,由于每个数据包的最大长度是确定的,如果节点地址占据的位数太多,每个数据包所携带的有效数据必将减少,因此综合上述考虑,一般节点成功加入网络后,数据通信过程中使用节点的网络地址作为源地址.另外动态分配网络地址可以更好地节约资源.
第8 行:协调器对终端节点的数据请求作出OK 应答,其Sequence Number 序列号也是与对应的0xB1.
第9 行:终端节点就使用白己的网络地址0xEEBC 与协调器进行来回应答式通信及收发数据,请注意他们的来回序列号.
综上所述,本文通过ZigBee 无线网络中点对点通信的抓包案例来剖析ZigBee 网络的建立过程及数据收发的基本流程,直观清晰.同时给出了ZigBee协议分析系统的建立过程、协议分析仪的连接以及使用方法.关于深层次的ZigBee 网络建立过程也可以参阅TI 公司的协议栈源码作进一步的研究.
[1] 刘青,宋立军.ZigBee 无线传感器网络组网研究[J].电脑开发与应用,2008,21(6):44-46.
[2] 李战明,刘宝,骆东松.ZigBee 技术规范与协议栈分析[J].信息化纵横,2009,28(5):45-48.
[3] 丁雪莲.ZigBee 协议栈浅析[J].电脑与信息技术,2013,21(5):18-21.
[4] 李小龙,彭美平.ZigBee 传感器网络协议栈的研究与分析[J].电脑知识与技术,2013,8(18):4208-4211.
[5] 蒲泓全,贾军营,张小娇,等.ZigBee 网络技术研究综述[J].计算机系统应用,2013,22(9):6-11.