引言
基于IEEE 802.15.4标准的ZigBee短距离低速无线个域网(LRWPAN)协议将低速率、低功耗、低成本作为主要研究目标[1],是目前无线传感器网络的重要支撑协议之一。针对ZigBee无线短距离低功耗解决方案,虽然目前已经有好几家大半导体公司设计、生产了相应的无线芯片并提供了对应的支持协议栈,但是目前的ZigBee网络多是采用性能较低、存储容量较小的8/16位微控制器来实现的。然而,ZigBee无线网络的中心控制节点往往要分析、处理网络中通信的大量数据,在一些对实时及高效率有严格要求的应用场合,有必要采用高性能的微处理器作为节点的数据处理单元。TI公司Stellaris MCU内部拥有一个32位ARM CortexM3处理器核,ARM CortexM3核具有高速的处理速度且支持芯片厂商自己扩展丰富的外设,比如网口、USB口、LCD等。同时,Stellaris系列微控制器包含了100多种可以向全球供货的32位ARM核的MCU。本文选用基于32位ARM CortexM3核的微控制器LM3S9B96作为无线芯片CC2520的微控制器单元构成协调器节点,另将8051核的SoC CC2530芯片模块作为终端采集节点。通过配置节点设备环境,实现了ZigBee协议下的终端数据采集及星型、树型下的无线组网通信功能,验证了不同规格的ZigBee无线模块在同一协议栈环境下能够正常组网通信,厂商提供的不同ZigBee设备可进行互操作。
1 ZigBee应用体系结构
本平台采用ZigBee标准技术,其具体应用体系结构如图1所示。其中,硬件实体层主要由处理器模块、无线通信模块构成,区别于协调器或路由器的全功能设备,作为精简功能设备的终端节点一般还需再配上传感器硬件模块以实现数据采集;OSAL软件功能模块作为TI ZStack协议栈中的操作系统抽象层,统一管理协议栈的运行以及各种任务事件的响应;ZigBee协议栈运行于OSAL抽象系统之上,该协议栈是由层来量化表示其整个协议标准的,每一层负责完成所规定的任务,并且向上层提供相应的数据接口及服务;ZigBee技术体系结构主要由物理(PHY)层、媒体访问控制(MAC)层、ZigBee网络(NWK)层以及应用(APL)层构成,其中物理层与媒体访问控制层协议为IEEE 802.15.4协议标准,网络层由ZigBee技术联盟制定,而应用层的应用则根据用户自己的应用需求进行开发利用[2]。

图1 ZigBee节点应用体系结构
在应用系统设计过程中,考虑到LM3S9B96的优良特性以及作为协调器对硬件节点的高性能要求,用该开发板来控制CC2520无线传输模块,并把LM3S9B96+CC2520作为协调器节点,这也是TI公司提供的新的32位无线传感器网络节点方案。同时,将集成了一个8051核及射频电路的CC2530无线模块作为路由和终端节点,终端节点的传感器则采用E18D80NKDC5V反射式接近开关传感器,以此构成ZigBee无线组网的硬件平台。在ZigBee协议栈选择方面,CC2520及CC2530使用的是TI公司设计的符合ZigBee2007/PRO标准系统的ZigBee协议栈ZStack。ZStack是最新功能的协议栈产品,在互操作性、节点密度管理、数据负荷管理、频率捷变等方面有重大进步,且具有支持网状网络和低功耗等特点。在应用程序模块中,通过E18D80NKDC5V反射式接近开关传感器进行障碍物检测,利用CC2530终端节点与LM3S9B96协调器进行ZigBee星型网通信,构建了智能泊车引导系统。
2 ZigBee网络节点结构
2.1 硬件模块介绍
TI公司的CC2520、CC2530芯片是符合ZigBee技术的具有高集成度的无线射频收发器件,CC2520和CC2530芯片的PHY与MAC层协议符合IEEE 802.15.4标准,模块可工作在2 394~2 507 MHz的2.4 GHz ISM免费频段。该频段可提供16个物理通信信道,工作速率可达到250 kbps,码片速率为2 Mchip/s[3]。CC2520和CC2530无线芯片均是有着低功耗的特点,在接收数据帧时电流消耗仅为18.5 mA,其输出功率编程可控,最大输出功率可达5 dBm,此时电流消耗33.6 mA,支持IEEE 802.15.4标准与ZigBee协议[4]。芯片的RF电路部分还提供丰富的硬件功能支持,如封包处理、数据缓冲、爆发传输、数据加密、数据验证、空闲信道评估、链路质量指示和封包时间信息,可大幅减轻主机控制器的作业负荷。
TI公司LM3S9B96微控制器内含DMA、数字/模拟转换器(DAC)和模拟/数字转换器(ADC)等功能模块且提供以太网、CAN及USB口通信,又兼具高性能及超低功耗的特点,能为ZigBee应用提供良好的硬件支持[5]。无线传感网络节点的具体硬件结构如图2所示。

图2 无线传感网络节点硬件结构
2.2 无线通信节点平台分析
通过了解IEEE 802.15.4标准、ZigBee规范,并在此理论基础上研究TI公司的标准ZigBee协议栈ZStack,对其底层驱动、协议栈的初始化以及事件机制进行了研究与分析。LM3S9B96+CC2520节点作为当前较新的ZigBee节点平台,基于任务调度机制,采用功能模块化设计。
2.2.1 协调器的功能模块配置
LM3S9B96微控制器提供了3个UART通信口,在zstack_collector工程中选择UART0作为串行通信端口。在系统时钟配置上,为使协调器节点运行在50 MHz的频率上,需使用PLL(Phase Locked Loop,锁相环)进行系统时钟4分频配置。另外,程序中使用定时器timer0A与time0B以支持协议栈任务的运行。CC2520与LM3S9B96之间采用SPI接口,其他引脚配置为:FIFOP作为接收数据包判断的重要引脚,对应开发板上的中断引脚PC6;数据缓存判断引脚FIFO则对应PC7。在接收模式下,当发生越界或帧接收完毕时,FIFOP引脚可以用来中断微处理器,FIFO引脚可以用来判断数据是否都处于接收FIFO中。CC2520与LM3S9B96微控制器的接口如图3所示。

图3 CC2520与LM3S9B96微控制器接口
CC2520利用SFD、FIFO、FIFOP和CCA 4个引脚查询数据收发状态,利用SPI接口(CSN、SO、SI、SCK)与LM3S9B96微控制器进行数据交换及命令传送。另外,利用RSTn引脚复位芯片并使用VREG_EN引脚使能CC2520的电压调整器,使其产生CC2520正常工作所需的电压,CC2520的电压规格范围为1.8~3.8 V。本平台的CC2520与CC2530使用单极天线进行通信。
2.2.2 协调器的软件环境配置
使用“#include "config/lm3s/f8wConfig.h"”与“#include "config/lm3s/f8wCoord.h"”将该工程配置为协调器工程项目。然后在ZigBee网络设置上,通过“#define DEFAULT_CHANLIST 0x00000800”宏定义将物理信道配置为11,通过“#define ZDAPP_CONFIG_PAN_ID 0xFFFF”宏定义使得协调器运行时可自行设置PAN ID,若ZDAPP_CONFIG_PAN_ID值不为0xFFFF时,PAN ID由其指定。ZigBee节点的2.4 GHz频段有着良好的抗干扰性能,不同信道下的通信互不干扰。在组网过程中务必保证网络节点拥有相同的PAN ID及物理信道,处在同一网络下,否则将无法正常组网通信。

图4 协调器设备组网程序流程
3 ZigBee无线组网研究
3.1 LM3S9B96+CC2520协调器的组网流程
CC2520协调器软件初始化的基本思路是:先对LM3S9B96与CC2520控制端口进行初始化;使能触摸屏ADC通道,使能UART通信端口,使能SPI口,并通过SPI口按照CC2520芯片的操作时序初始化CC2520;操作系统抽象层加载协议栈运行任务,并提供信息管理、任务同步、时间管理、中断管理、任务管理、内存管理、电源管理以及非易失存储管理等服务。开启无线收发机后,就可以运行任务程序等待数据的收发。协调器设备的组网程序流程如图4所示。
3.2LM3S9B96+CC2520与CC2530组网研究
ZigBee有着大规模的组网能力,每个网络理论上最大可支持65 535个节点,本设计利用多达十几个节点构成ZigBee平台,研究发现LM3S9B96与CC2530进行无线组网,必须具备以下几个条件。
(1) 采用相同的标准协议栈
因相同协议栈组网握手协议及流程一样,要保证网络中信息传输过程一致,协调器、路由器和终端设备之间只有采用相同的协议栈,才能实现互操作。在组网实验中,统一采用了ZigBee 2007/PRO协议栈。
(2) PAN ID号和信道的配置
协调器和路由器、终端设备的PAN ID号必须保持一致,所采用的信道也必须相同。网络设备的PAN ID号与ZDAPP_CONFIG_PAN_ID宏值的设置有关,若其值为0xFFFF,则协调器将产生一个随机的PAN ID,而路由器和终端设备将在自己的信道上随机选择一个网络加入,并以协调器的PAN ID作为自己的PAN ID;若其值介于0x3FFFF与0xFFFF之间,则协调器将根据自己的IEEE地址随机产生一个PAN ID,而路由器和终端设备将以ZDAPP_CONFIG_PAN_ID的值作为其PAN ID;若其值小于等于0x3FFFF,则协调器、路由器和终端设备均会以ZDAPP_CONFIG_PAN_ID的值作为其PAN ID。24 GHz的射频频段被分为0x0B~0x1A共16个独立的信道,在组网过程中,协调器、路由器和终端设备必须采用相同的信道。
(3) 相应的事件处理机制
CC2530芯片初始化完毕后,触发ZB_ENTRY_EVENT事件启动设备,该事件在用户自定义的事件处理函数zb_HandleOsalEvent()中被处理,调用zb_StartRequest()函数启动路由器或者终端设备并加入LM3S9B96协调器建立的网络。
① CC2530路由器与终端节点的主要代码。
void zb_HandleOsalEvent( uint16 event ){
if( event & ZB_ENTRY_EVENT ){
zb_StartRequest();//启动设备
}
if ( event & MY_REPORT_EVT ){
if ( appState == APP_REPORT ) {
sendReport();
osal_start_timerEx( sapi_TaskID, MY_REPORT_EVT, myReportPeriod );
}
}
if ( event & MY_FIND_COLLECTOR_EVT ){
if ( appState==APP_REPORT ) {//删除前一个绑定
zb_BindDevice( FALSE, SENSOR_REPORT_CMD_ID, (uint8 *)NULL );
}
appState=APP_BIND;
/*发现协调器设备并与其绑定*/
zb_BindDevice( TRUE, SENSOR_REPORT_CMD_ID, (uint8 *)NULL );
}
}
② LM3S9B96+CC2520协调器的主要代码。
void zb_HandleOsalEvent( uint16 event ){
unsigned char ucDeviceType;
if( usEvent & ZB_ENTRY_EVENT ){
/*输出消息指示设备正在启动/加入网络*/
DEBUG_PRINTF("Device starting\\n");
/*当前为协调器节点,所以将设备类型设为ZG_DEVICETYPE_COORDINATOR*/
ucDeviceType = ZG_DEVICETYPE_COORDINATOR;
zb_WriteConfiguration(ZCD_NV_LOGICAL_TYPE, sizeof(ucDeviceType), &ucDeviceType);zb_StartRequest();//启动设备函数
}
/*当网络失败时,处理该应用程序安排的启动事件,此函数是设备程序的必备入口*/
if ( usEvent & MY_START_EVT ){zb_StartRequest();}
}
该函数主要用来处理3个网络事件:
◆ ZB_ENTRY_EVENT,负责启动设备组建或加入ZigBee网络。
◆ MY_FIND_COLLECTOR_EVT,负责CC2530路由器、终端设备和LM3S9B96协调器之间的绑定。
◆ MY_REPORT_EVT,负责定时维护LM3S9B96协调器和CC2530路由器、终端设备之间的父子关系。
设备启动完毕后,作为路由器或终端节点的设备将自动调用回调函数zb_StartConfirm()确认设备是否启动成功,同时在函数内部触发设备绑定事件MY_FIND_COLLECTOR_EVT。其核心代码如下:
void zb_StartConfirm( uint8 status ){
if ( status == ZB_SUCCESS ) {
/*设置绑定协调器事件*/
osal_set_event( sapi_TaskID, MY_FIND_COLLECTOR_EVT );
}
}
CC2530路由器、终端设备和LM3S9B96+CC2520协调器完成设备绑定后,还必须定时触发MY_REPORT_EVT事件,该事件负责每隔myReportPeriod时间(默认为2 s)向LM3S9B96+CC2520协调器发送父子节点绑定关系的消息以维护父子关系,其发送消息的关键函数为zb_SendDataRequest()。
3.3 ZigBee平台上智能泊车引导系统设计
针对目前大中型停车场中普遍存在的停车难、收费麻烦等问题,在以LM3S9B96+CC2520为协调器、CC2530作为终端节点的ZigBee星状网络的基础上,构建了一个新型的停车场智能泊车引导系统。该系统采用N18D80NK反射式接近开关传感器采集每个车位当前是否被占用的状态信息,通过CC2530无线节点模块利用ZigBee传输到LM3S9B96协调器。LM3S9B96协调器对信息汇总后进行初步处理,以UDP通信的形式与OMAP3530嵌入式网关进行局域网通信,并在OMAP3530嵌入式网关的显示屏上对当前所有车位状态进行同步更新并显示,以便车主能够直观地选择空闲车位。同时,还在现有的基础上将OMAP3530的串口通信与短信查询模块集成在一起,实现了停车场空闲车位的短信查询功能。系统也可以用LM3S9B96协调器上的网络或USB口把采集的信息直接传送给微机进行统计和管理。
结语
LM3S9B96作为32位ARM CortexM3微处理器,在性能方面具有处理速度快、外围接口丰富等优势,它与CC2520一起组成的协调器在ZigBee无线组网方面有着广阔的发展前景。本文在了解CC2530、CC2520等无线芯片的原理与技术的基础上,实现了基于LM3S9B96+CC2520为协调器,CC2530为路由器或终端设备的无线组网方案。在ZigBee技术迅猛发展的今天,相信LM3S9B96+CC2520平台将会为解决ZigBee技术在实际应用中的问题带来更大的自由度和选择性。