引言
无线传感器网络(Wireless Sensor Network,WSN)是指由大量成本相对低廉的,具有感知能力、计算能力、实时通信能力的传感器节点组成的嵌入式无线网络,是当前众多领域的研究和应用热点。建立在IEEE 802.15.4(LR_WPAN,低速率无线个人区域网)上的Zigbee协议是应用于无线监测与控制的全球性无线通信标准,是无线传感器网络组网的首选技术之一。
随着Zigbee无线传感器网络技术的广泛应用,如何通过现有网络基础设施(如Internet、GPRS等)对其进行远程管理、控制感测环境中的各种传感装置,逐渐成为该领域的重要研究课题。图1给出了基于Zigbee的无线传感器网络体系结构,如图示Zigbee网关在整个无线传感器网络体系中起着重要的枢纽作用,同时也是WSN整体系统的“瓶颈”之一。当图1中的服务器或用户部分为其它Zigbee网络时,通过Zigbee网关和Internet或GPRS做媒介,就使得世界范围内的不同监测区域都可以信息共享,这大大缩小了物理世界的时空距离。
本文主要研究的是Internet环境下基于Zigbee传感器网络的网关设计及其实现。
1 系统概述
网关是建立在传输层以上的协议转换器,通常它连接两个或多个相互独立的网络,每接收一种协议的数据包后,在转发之前将它转换为另一种协议的格式。考虑到Zigbee节点的通信能力有限(数据速率仅为250 Kbps),为了减少网关协议转换自身的工作量,本网关选择了一款集成Ethernet接口的ARM9 芯片来完成硬件系统的搭建。
本网关采用模块化设计方案,如图2所示由硬件层、软件层和应用层三大部分组成。其中硬件层描述了网关的硬件实现,在后文将详细介绍;软件层移植μC/OS-II实时操作系统内核、Zigbee和嵌入式TCP/IP协议栈LwIP,实现了Zigbee和TCP/IP协议的双向透明转换,同时封装一些关键API函数供应用层程序调用;应用层运行的是用户编写的应用程序,用户可以根据实际需要使用下层定义的API自行扩充相关应用。
2 硬件设计
网关硬件结构如图3所示,由内部集成以太网MAC的ARM9处理器STR912FW44X、Zigbee射频收发模块CC2420、大容量DataFlash存储卡片AT45DCB008、以太网收发芯片(PHY) RTL8201和带触摸功能的LCD显示模块LQ084V1DG21等模块组成。
其中STR912FW44X作为硬件系统的主控芯片,它是意法半导体(ST Microelectronics)推出的基于ARM966E-S内核,片内集成Flash、USB、CAN、以太网MAC、AC马达控制、ADC、RTC、DMA等接口的高性能ARM9 SOC,最高主频可达96Mhz;
Zigbee射频收发芯片CC2420是挪威Chipcon(现为TI)推出的符合2.4 GHz IEEE 802.15.4和Zigbee 标准的射频收发器。CC2420采用O-QPSK调制方式,工作频带范围为2.400~2. 4835 GHz,接收灵敏度为-94 dBm,抗邻频道干扰能力为39 dB。利用此芯片开发的无线通信设备支持数据传输率高达250 Kbps,能够实现点对多点的快速组网;
AT45DCB008是Atmel公司推出的新型DataFlash存储芯片,在该网关中用来保存网络故障状态下的数据信息。AT45DCB008中的数据按页存放,主存共8192页,每页1024字节,总容量约为8M字节,每页的擦写次数保证在100,000次以上;
以太网PHY层芯片采用的是Realtek公司的RTL8201BL,它是一个单端口的物理层收发器,实现了全部的10/100M以太网物理层功能;
显示部分采用的LQ084V1DG21是SHARP公司的带触摸屏8.4英寸TFT数字液晶显示屏,分辨率为640×480。
3 嵌入式网关软件设计
3.1μC/OS-II下的LwIP的移植
μC/OS-II是一个抢占式的实时多任务内核操作系统,具有开放源码、可固化、可剪裁、高稳定性和可靠性等特点。目前国内外对μC/OS-II的相关研究已有很多,其在STR912处理器上的移植在此不再赘述。LwIP是瑞士计算机科学院开发的轻量级(Light Weight)开放源码TCP/IP协议栈,目前最新版本为1.2.0
LwIP协议栈把所有与硬件相关、OS、编译器相关的部分独立出来,放在/src/arch目录下,可以是说其在设计时就考虑了移植问题。LwIP在μC/OS-II上的移植就是修改这个目录下的文件,其它的文件一般不做修改。需要修改和自己编程实现的是以下几部分:
●与STR912及IAR编译器相关的include文件;
●μC/OS-II模拟层相关代码编写;
●与μC/OS-II相关的一些结构和函数;
●lib_arch中库函数的实现;
●STR912网络驱动程序编写。
完成以上代码移植的工作后,LwIP就可以顺利运行在μC/OS-II下,主要通过以下程序完成LwIP的初始化及运行:
main(){
OSInit();//μC/OS-II初始化
OSTaskCreate(lwip_init_task,&LineNo11,&lwip_init_stk[TASK_STK_SIZE-1], 0); //创建LwIP初始化任务
OSTaskCreate(usr_task,&LineNo12,&usr_stk[TASK_STK_SIZE-1],1);//创建用户任务
OSStart();//启动LwIP }
在main函数中创建了lwip_init_task来初始化LwIP任务(优先级为0)和usr_task用户任务(优先级为1)。需要指出的是,在lwip_init_task任务中除了完成初始化硬件时钟和LwIP本身等工作之外,还创建了tcpip_thread(优先级为5)和tcpecho_thread(优先级为6),其中tcpip_thread才是LwIP的主线程,也是应该先创建的。
3.2μC/OS-II下的Zigbee协议栈的实现
我们在该网关平台上运行自主编写Zigbee协议栈的子集ez_PAN。ez_PAN目前还很不完善,只实现了Zigbee的部分关键功能,仅支持星型和簇状网络(Cluster),支持网络的动态组网配置和动态绑定等。ez_PAN协议栈结构如图4所示:
下面给出ez_PAN 协议栈上的协调器(Coordinator)、路由器(Router)和精简节点(RFD)实现的关键代码。Coordinator通过aplFormNetwork()函数建立网络,等待其它节点(Router和RFD)的加入,主要程序如下:
Main()
{
halInit(); //初始化 HAL 层
hawInit();//硬件初始化
aplInit(); //初始化APL
ENABLE_GLOBAL_INTERRUPT(); //开中断
aplFormNetwork(); //建立网络
while(apsBusy)()) {apsFSM();} //等待建立完成
while(1) {apsFSM();} //循环执行协议栈
}
其中调用apsBusy()来判断当前协议栈是否忙于其它程序调用,apsFSM()是在APS层上实现的FSM(有限状态机),被apsBusy周期调用来维持ez_PAN的运行。在Coordinator建立网络完成后,允许Router或RFD节点动态加入,关键代码实现如下:
do {
aplJoinNetwork();//Router或RFD加入网络
while(apsBusy ()) { apsFSM();} //等待加入完成
} while (aplGetStatus ()! =LRWPAN_SUCCESS);
3.3协议转换软件设计
在TCP/IP协议簇中,以太网的数据传输使用硬件地址(MAC)来进行识别,其中ARP(地址解析协议)完成IP地址和数据链路层使用的硬件地址之间的转换,因此为了保证Zigbee网关在以太网中的通信,首先要实现ARP协议的功能。Zigbee网络中的节点数理论上最多可达65536个,每个节点同样有自己唯一的MAC地址(64位长地址或16位短地址)。参考TCP/IP下的实现机制,我们实现了Zigbee协议中的适配层和ARP,实现IP地址到Zigbee节点地址的映射。协议转换的工作原理如图5所示,下面简单描述一下数据包在网关中从Ethernet向Zigbee单方向转换过程:Ethernet端从某网络接口接收一个正常发往本机的IP数据包,简单判断后向上发给对应的UDP或TCP处理函数进行相应处理,然后再向上发给网关应用程序处理;网关应用程序经过简单分析后,确定要转发给Zigbee网络中的哪个节点,通过Zigbee端的ARP解析出该节点在Zigbee网络中的MAC地址,然后将相应数据包成功交至该节点,这样就完成此次从Ethernet向Zigbee端的协议转换。Zigbee向Ethernet端转换类似,不再赘述。
4 结论
本文设计的网关已在我们的“基于Zigbee无线传感器网络的煤矿井下定位跟踪系统”项目中得以实用,取得了较好的效果。经测试该网关具有效率高、响应实时、可靠性高、功耗低,抗干扰能力强等特点,同时具有很好的通用性。由于当前Zigbee技术还在不断的更新和完善中,如何跟踪最新的Zigbee技术来提高网关的性能以及如何提高ez_PAN的多平台可移植性,将是我们以后研究的重点。
本文作者创新点:采用集成Ethernet (MAC)接口的ARM9芯片STR912作为核心扩展设计了一个Zigbee网关,它很好地克服了传统网关架构下Zigbee传输速率的瓶颈,大大降低了协议转换过程中的资源和处理时间消耗。该网关设计思路、技术实现新颖,具有较强的实用性。