ZigBee的msstatePAN协议栈移植
扫描二维码
随时随地手机看文章
1 ZigBee技术的体系结构
在ZigBee技术中,其体系结构通常由层来量化它的各个简化标准。每一层负责完成所规定的任务,并且向上层提供服务。各层之间的接口通过所定义的逻辑链路来提供服务。ZigBee技术的体系结构主要由物理(PHY)层、媒体接入控制(MAC)层、网络/安全层以及应用框架层构成,其各层的分布如图1所示。
2 ZigBee技术的网络拓扑结构
ZigBee技术网络有2种拓扑结构:星型拓扑结构和对等拓扑结构,如图2所示。其中定义了两种设备:全功能设备(Full Funetion Device,FFD)和精简功能设备(Re—dueed Function Device,RFD)。与RFD相比,FFD在硬件功能上比较完备。在通信能力方面,FFD可以与所有其他的FFD或RFD通信,而RFD只能和与其关联的FFD进行通信。与RFD相关联的FFD设备称为该RFD的“协调器(Coordinator)”。在整个网络中,有一个FFD充当网络协调器(PAN Coordinator)。除直接参与应用外,网络协调器还需要完成成员身份管理、链路状态信息管理以及分组转发等任务。
本文移植的协议栈拓扑结构是对等拓扑网络中的一种——树簇网络。在树簇网络中大部分没备为FFD,RFD只能作为树枝末尾处的叶节点,这主要是由于RFD一次只能连接一个FFD。任何一个FFD都可以作为主协调器,并为其他从设备或主设备提供同步服务。在整个PAN中,只要该设备相对于PAN巾其他设备具有更多资源,这样的设备都可以成为该PAN的主协调器。
在建立一个PAN时,首先,PAN主协调器将其自身设置为一个簇标识符(CID)为O的簇头(CLH)。然后,选择一个没有使用的PAN标识符,并向邻近的其他设备以广播的方式发送信标帧,从而形成第一簇网络。接收到信标帧的候选设备可以在簇头中请求加入该网络,如果PAN主协调器允许该设备加入,该设备就将主协调器作为它的父节点加到它的邻近表中,成为该网络的一个从设备;同样,其他设备都按照同样的方式,请求加入到网络中。如果候选设备不能加入到该网络中,那么它将寻找其他的父节点。在树簇网络中,最简单的网络结构是只有一个簇的网络,但是多数网络结构由多个相邻的网络构成。一旦第一簇网络满足预定的应用或网络需求,PAN主协调器将会指定一个从设备为另一个簇的簇头,使得该从设备成为一个主协调器。随后其他的从设备将逐个加入,形成一个多簇网络,如图3所示。
3 无线传感器网络的节点结构
本文移植的目标板是自行设计的无线传感器网络节点模块。其中,处理器模块采用Atreel公司的AT—megal28L,无线通信模块采用TI公司的CC2420,电源模块使用NCPl402芯片将2节电池进行DC—DC变换后得到,传感器模块采用DSl8820。
CC2420利用SFD、FIFO、FIFOP和CCA四个引脚表示收发数据的状态。ATmegal28L通过CC2420的SPI接口(CSn、SO、SI、SCK)与CC2420交换数据、发送命令,利用RSTn引脚复位芯片;并且利用VREG_EN引脚使能CC2420的电压调整器,使其产生CC2420所需要的1.8 V电压,从而使CC2420进入正常工作的状态。CC2420通过单极天线或PCB天线进行通信。节点总体框图如图4所示。
4 zigBee协议栈的移植
4.1 msstatePAN协议栈的移植
msstatePAN协议栈是由密西西比大学的R.Reese教授为广大无线技术爱好者开发的精简版ZigBee协议栈,基于标准C语言编写,基本具备了ZigBee协议标准所规定的功能,最新版本为V0.2.6,该版本支持多种开发平台,包括PICDEM Z、CC2430评估板、MSP430+CC2420(Tmote)以及WIN32虚拟平台。由于该协议栈的上述特点以及源代码的开放性,本文选择它作为学习和移植的
对象。
移植是将msstatePAN协议栈在PICDEM Z平台下的代码移植到上面设计的目标板中,采用winavr20070525作为编译器,并通过JTAG接口将程序下载到目标板中。下面介绍一下移植过程。
(1)编写makefile文件
winavr 20070525采用GCC编译器,要编写makefile文件以完成程序的编译。指定MCU为ATmegal28,定义CPU工作频率F_CPU为8 000 000 Hz;定义编译后生成的文件类型FORMAT为ihex;将TARGET改为项目主文件的文件名,由于后面测试用ing_pong.c这个文件,此处将TARGET定义为ping_pong;最后定义SRC,在SRC中应包含整个项目中的所有文件,并且各个文件名之间要用空格格开。协议栈为规定当前编译器编译的是协调器代码、IEEE 64位长地址等,要用到LRWPAN_COORDINATOR等宏定义,因此要在makefile文件中加入相应的宏定义代码。
(2)替换与编译器相关的定义
本移植用的是GCC编译器,所以要将与PIC编译器相关的代码进行替换,为此修改compiler.h头文件及特定编译器的数据定义。例如对ROM数据类型进行替换,或者直接删除该数据类型。
(3)移植与硬件平台相关的部分
该部分代码涉及的都是最底层的东西,通过对协议栈的透彻理解,总结出要修改的文件有halStack.c、hal.h、halHeepSpace.h、cc2420.c/.h、evboard.c/.h、evbRadio.h、evbConfig.h等。其中halStack.c和evboard.c两个文件改动很大。这两个文件中包括硬件接口定义、串口定义、LED灯定义、硬件系统初始化定义,以及中断处理函数和协议栈时钟函数的实现。首先移植中断处理函数,注意采用下降沿触发中断。其次,移植协议栈时钟,目标板用ATmegal28L的定时器1作为协议栈的运行时钟。由于单片机采用8 MHz晶振,当定时器使用64分频时(At—megal28L定时器1没有128分频),此时定时器计数一次所需要的时间为8μs,而在协议栈中每传输一个符号(symbo1)所需要的时间为16μs,故将定时器计数2次定义为一个symbol时间。所以在设计中,要修改hal—MacTicksToUs函数及SYMBOLS_TO_MACTICKS(x)和MSECS_TO_MACTICKS(x)宏定义。
(4)对协议栈内部各层进行适当修改
这部分的移植工作与第3步相比简单些,一些与硬件联系紧密的MAC层和PHY层相关的函数都放在ev—board.c和halStack.c文件中。具体分析如下:
①根据自己的需求修改协议栈需要的堆栈,协议中默认为l 024字节,可以根据实际情况做些调整。
②debug.c函数中的一些定义在运行时需要大量RAM,如果选择编译的是协调器,则整个协议栈需要RAM存储单元大于6KB,而ATmagal28L内部只有4 KB RAM,为此屏蔽了一些调试显示信息,以达到系统要求。
③修改staticbind.h函数,由于该协议栈是静态分配地址,而该函数的作用就是定义其地址,所以该函数在整个协议栈运行中至关重要。首先要考虑其地址是不是和makefile中定义的相吻合,如果不吻合应进行相应修改,否则CC2420地址译码就通不过,以至于无法建立网络。其次,应该确定数据存储是按大端模式还是小端模式,如果弄反了,地址就会不一样。ATmegal28L是小端模式,这和PIC单片机是一致的,因此不需要修改,但要修改函数中的宏定义,让编译器选择相应的程序进行编译,生成正确的地址。
(5)编译下载
通过上面的移植,程序应该能正确进行编译以及链接,生成HEX文件;再用AVRStudio4.12软件将程序下载到相应节点中,进行协议栈测试。
4.2 测试方法
为了测试协议栈移植是否成功,采用2个节点进行实验。其中,一个作为协调器,另一个作为RFD设备节点。在makefile中设定协调器的IEEE地址为Ox001248000001216F,RFD设备的IEEE地址为0x0012480000012170,并使用ping_pong.c文件提供的功能进行测试。
首先完成网络的建立,协调器调用aplFormNetwork()函数建立一个网络;然后等待RFD设备的加入,RFD设备调用aplJoinNetwork()函数申请加入网络。在网络建立成功后执行ping_pong过程,该过程就像打乒乓球一样,先是协调器发送数据给RFD设备,RFD设备接收到信息后回发给协调器。如此往返.这也是文件名为ping_pong的原因,具体程序流程如图5所示。
编译、链接ping_pong.c文件时务必注意:如果是协调器,—定要加入宏LRWPAN_COORDINATOR,否则编译的程序为RFD设备的程序。编译完成后,将生成的文件分别下载至各节点,并将节点连接到串口调试助手,按程序要求设置串口调试助手的参数,如波特率、数据位长度等。完成这些设置后,分别打开各节点,首先启动协调器节点,然后再启动RFD设备节点。图6是协凋器连接的串口调试助手的显示信息。
从图6中可以知道,节点Ox0012480000012170加入到网络,其IEEE的长地址为Ox0012480000012170;协调器分配给该节点的短地址为Oxl699,协调器有一个邻居节点,2个节点之间已经开始数据的传送。由此可见,移植成功。
结 语
无线传感器网络是一门新兴的技术,目前传感器网络硬件节点价格比较昂贵,软件支持也有不足。如果能移植一个相对成熟的协议栈,将最大限度地降低节点成本。本文就是从这个角度出发,设计出了相应的硬件平台,并成功移植了msstatePAN协议栈,从学习和科研角度考虑具有借鉴意义。