引言
基于IEEE 802.15.4的无线传感器网络(Wireless Sensor Network,WSN)是综合了传感器技术、信息处理技术和无线通信技术,采用大量的节点覆盖监测区域,形成一个自组织网络系统,目前已在自动控制、环境监测等领域得到广泛的应用。在对无线传感器网络MAC层深入研究的基础上,结合TI公司SoC芯片CC2530,实现了节点间的点对点通信功能,为研究上层协议打下了基础。
1CC2530芯片简介
CC2530是TI公司针对24 GHz ISM频带推出的第二代支持ZigBee/IEEE 802.15.4协议的片上集成芯片。其内部集成了高性能射频收发器、工业标准增强型8051 MCU内核、256 KB Flash ROM和8 KB RAM。其主要特性:具有2个USART、8位和16位定时器、看门狗定时器、8路输入可配置的12位ADC、21个GPIO、AES128协同处理器,硬件支持CSMACA、数字化的RSSI/LQI和强大的DMA功能,具备电池监测和温度感测功能;支持5种工作模式,且转换时间短,可以较好地满足超低功耗系统的要求;在接收和发送模式下,电流损耗分别为24 mA和29 mA。由于其硬件设计简单,封装小,功耗低,在无线传感器网络中得到了越来越广泛的应用。
2CSMACA机制
IEEE 802.15.4协议中采用CSMACA机制来避免数据冲突。根据是否采用信标,网络分为非信标网络和信标网络两种。非信标模式下,节点使用CSMACA机制竞争信道:节点随机退避一段时间,执行CCA(空闲信道评估),若信道IDLE则传送数据,若信道BUSY则重新等待一段随机时间后执行CCA。
在信标网络中,将超帧划分了16个时隙,因此执行的退避时间都是以时隙为单位,CCA在退避周期的边界处开始执行。图1是IEEE 802.15.4标准规定的CSMACA算法流程。
图1CSMACA算法流程
每个节点在每次尝试传输时都需要维护3个变量:后退次数NB、竞争窗口CW和后退指数BE。变量NB是尝试当前帧发送过程中CSMACA算法执行随机退避的次数,每个新的传输尝试之前NB应初始化为0。在IEEE 802.154中,定义NB的最大值为4,如果节点经过4次信道忙碌退避后仍然无法接入进行数据传送,则放弃数据传送,并向上层报告。变量CW是竞争窗口的长度,它表示允许发送前要求信道连续空闲的时间,只用于时隙CSMACA算法,可以给处理器处理不同时隙留有时间保护带,以免数据帧冲突。BE值的大小影响节点接入信道的能力,若设置得过小,起不到降低冲突的作用;设置得过大,延时作用不明显。IEEE 802.154推荐的默认值为3,最大值为5。当BE设为0时,则只进行一次碰撞检测。
3命令选通协处理器
CC2530片上集成的命令选通协处理器(CSP)提供了MCU和无线电之间的接口,有立即选通命令和程序执行两种模式,可以处理MCU发出的命令。同时还有一个24字节的程序存储器,配合MAC定时器自动执行CSMACA算法,充当MCU的协处理器。CSP复位后,指令写指针复位到位置0,在每次RFST写入期间指令写指针累加1,直到程序存储器的终点。另外,CSP还有4个寄存器:CSPT、CSPX、CSPY和CSPZ。MCU可以对它们读写,设置CSP运行所需的参数。程序执行模式下运行一个CSP的流程如图2所示。
图2CSP执行流程
4节点通信实现
4.1通信机制
CC2530是通过寄存器TXFIFO和RXFIFO来实现数据收发的。发送数据时,往TXFIFO中写入数据,无线电模块自动添加PHY层同步头和FCS,通过选通命令STXON或STXONCCA发送数据;数据接收完成时,产生RXPKTDONE中断,在中断服务程序中通过读取RXFIFO即可。
本文根据IEEE 802.15.4协议,定义了精简的MAC层帧格式,如图3所示。
图3精简的MAC层帧格式
帧控制域占一个字节。其中,帧类型占2位,00表示同步帧,01表示数据帧,10表示确认帧,11表示命令帧;确认请求占1位,1表示接收设备在接收到数据帧或命令帧时如果判断其为有效帧就要向发送设备反馈一个确认帧,0表示该接收设备不需要反馈确认帧。帧序号唯一标识各个帧,用于确认帧和数据帧或命令帧的匹配。目标地址和源地址分别用2个字节表示。由于IEEE 802.15.4规范中定义了物理服务数据单元(PSDU)的最大长度为127字节,而其中的8字节已经被使用,因此有效负载(payload)的字节长度为1~119字节。
数据发送有3种模式:非CSMACA、时隙CSMACA和非时隙CSMACA。待数据按上述格式写入TXFIFO后,执行“RFST=ISTXON”启动CSP程序。
以下为基于时隙CSMACA模式的CSP程序代码:
RFST=ISSTOP;//结束CSP
RFST=ISCLEAR;//清除CSP程序,指针归0
RFST=WAITX;//等待X个退避周期
RFST=SKIP(1, C_CCA_IS_VALID);
RFST=SSTOP;//执行CCA,若空闲则继续,否则结束CSP
RFST=WAITW(1);//对应CW=CW1
RFST=SKIP(1, C_CCA_IS_VALID);
RFST=SSTOP;//执行CCA,若空闲则继续,否则结束CSP
RFST=STXON;//开始传输
RFST=WHILE(C_SFD_IS_ACTIVE);
RFST=WHILE(C_SFD_IS_INACTIVE);//等待SFD信号变为高电平
RFST=INT;//触发中断
RFST=WHILE(C_SFD_IS_ACTIVE);//等待数据传输完毕
RFST=SSTOP;//结束CSP
4.2实验结果
本网络是由一个中心节点及10个终端节点组成的星状网。硬件采用由CC2530制作的传感器板,测试数据由片内自带的温度传感器提供。
如图4所示,中心节点采用轮询的方式采集终端数据,通过串口显示到上位机软件上。其中,a代表中心节点发送的命令帧;b为上传的数据帧;c为中心节点发送的确认帧。终端节点采用非时隙CSMACA的方式发送数据。
图4节点通信示意图
图5所示测试结果表明:在节点通信半径内,当轮询时间大于等于1536 ms时,节点间通信未丢失任何数据包,且没有误码现象。随着节点距离增大,节点丢包率逐渐上升。周期时间随着节点的增多而增大,延时积累明显。
图5星状网络测试结果
结语
本文设计了基于CC2530的无线传感器网络节点,并详细介绍了两个节点之间点对点通信的实现,同时对CSMACA算法进行了详细说明。实验结果表明节点能够正常通信。