TinyOS在CC2530下的移植及AODV路由协议的实现
扫描二维码
随时随地手机看文章
摘要:首先介绍了以TI的无线传感器网络芯片CC2530为核心部件的节点硬件实现,接着介绍TinyOS操作系统的运行机制及其在CC2530平台下的移植过程;并在此基础上以nesC语言实现了AODV路由协议,最后对系统进行组网测试,测试结果表明平台各功能正常运行并且实现AODV协议的基本功能。
关键词:无线传感器网络;TinyOS;CC2530;AODV
0 引言
无线传感器网络(Wireless Sensor Network)是由具有感知、计算和通信能力的大量微型传感器节点组成,被广泛地应用于国防军事、环境监测等领域。加州大学Berkeley分校设计的基于事件驱动、组件模块化的无线传感器网络操作系统TinyOS具有核心程序小、对硬件要求低等优势,但它不支持功能强大的无线传感网络芯片CC2530,为此需要将TinyOS移植至CC2530平台,以使其得到更好的应用。同时为了节省传输能量,需要采用相应的路由协议,以多跳中继的方式将数据经由多个节点组成的路由传回汇聚节点或基站。
本文选用TI的CC2530作为传感器节点的核心部件,采用Tiny OS操作系统作为软件平台,成功将Tiny OS移植至CC2530平台,并添加了Tim er、UART、RF等组件;在移植的平台上,以nesC语言实现了AODV路由协议,并且实现了传感器节点的组网,数据包的多跳转发;为TinyOS和AODV的研究和应用奠定基础。
1 无线传感器网络系统结构
1.1 传感器节点硬件结构
传感器节点一般由供电单元、数据采集单元、数据处理单元(由微控制器和存储器组成)、无线通信单元组成。其中,数据处理单元中的微控制器负责对其他三个单元的控制。
本文的系统采用无线传感器网络节点芯片CC2530作为微控制器。CC2530使用了增强型8051CPU,运行时钟频率为32 MHz,具有8 KB RAM;包括一个普通16位定时器和两个8位定时器,21个可编程程I/O引脚,两个支持多种串行通信协议的USART,一个符合IEEE 802.15.4标准的2.4 GHz无线收发器和MAC定时器。CC2530是用于IEEE.802.1 5.4,ZigBee和RF4CE应用的一个真正的片上系统(SoC)解决方案。本文节点核心部分的硬件设计如图1所示。
1.2 传感器节点软件结构
TinyOS是加州大学Berkeley分校专门为无线传感器网络开发的微型操作系统。该系统采用轻量级线程(Lightweight Thread)、主动消息(Active Message)通信模块、事件驱动(Event Driven)模式和组件化编程(Component-Based Programming)等技术,有助于提高传感器网络的性能,发挥硬件的特点,降低其功耗,并且简化了传感器网络应用的开发。
TinyOS采用基于事件驱动、两层调度的并发模型。内核支持两种执行线程,即中断处理和任务,主控构件维护两个数据结构支持内核的两层调度:中断向量表和任务队列。TinyOS系统采用组件化思想,其应用程序都是由若干个模块组件和配置组件构成的,其组件有四个相互关联的部分:一组命令处理程序句柄,一组事件处理程序句柄,一个经过封装的私有数据帧,一组简单任务。每一个组件声明自己使用的接口及其需要用信号的通知的事件。一个应用程序的组件结构图如图2所示,高层次的组件通过命令调用低层次组件,低层次组件发送信号事件给高层次组件,最低层次组件直接与硬件相互作用。
1.3 TinyOS操作系统移植
1.3.1 修改编译工具链
TinyOS开发环境为Unix,若要为TinyOS开发应用程序,首先要使用nesC进行编程,产生以“.nc”为扩展名的源文件;然后再调用Unix的NCC(nesC Compiler)编译器将源文件编译成硬件可以执行的二进制/十六进制机器码,如图3(a)所示。
但nesC的编译器NCC调用的是Unix的GCC(GNU Compiler Collection)编译器,而GCC编译器并不支持CC2530所使用的8051处理器。为此,需要在编译过程使用Perl语言,转换C语言编译器不能识别的nesC关键字,将nesC语言编写的“.nc”文件编译为常规的C语言源文件,然后绕过Unix的GCC编译器,改由支持8051的Keil进行编译,其过程如图3(b)所示。具体的实现为编写脚本文件mangleAppC.pl,在编译规则文“.rules”中添加该Perl脚本的引用,以生成中间文件App.preMangle.c,并通过建立批处理文件CC2530F256.bat,调用Keil程序编译生成目标文件App.hex。
1.3.2 TinyOS平台搭建
TinyOS应用程序的编译是以平台为对象的,但TinyOS并不支持CC2530平台,因此必须先建立能被TinyOS承认的平台。根据TinyOS最小平台的定义,需要创建的目录及编写的文件为:
(1)/tos/platforms/cc2530目录,及其下的“.platform”文件、platform.h、PlatformC.nc和PlatformP.nc文件,这些文件包含平台初始化的实现代码和平台的环境变量;
(2)/tos/support/make下的CC2530em.target文件,包含移植代码的目标平台的识别信息;
(3)/tos/support/make/mcs51下的“.rules”文件,包含生成目标平台二进制/十六进制可执行代码时的编译说明;
(4)/tos/chips/mcs51下的hardware.h和McuSleepC.nc文件,包含平台硬件体系必备的宏定义和低功耗机制实现代码。
1.3.3 基于CC2530的组件编写
TinyOS应用程序是由一系列组件链接而成,其中包括用于实现应用程序功能的组件、系统提供的用于实现常用功能的组件和针对不同芯片的硬件表达和抽象组件。由于TinyOS本身并不含有针对CC2530平台的硬件表达和抽象组件,因此需要编写直接与硬件相互作用的组件来完成移植。编写以下几个重要的组件:
(1)IO口组件,通过建立HplCC2530GeneralIOC组件来提供两类系统接口GeneralIO和Init。
(2)Timer组件,主要由TimerMilli组件、HilTimerMilliC配置组件、HplCC2530TimerlAlarmCounterP组件等组成,用于产生以毫秒为单位的计时器。
(3)Uart组件,由StdOut组件、PlatformSerialC配置组件、HalCC2530SimpleUartP组件等组成,用于实现串口收发功能。
(4)RF组件,主要由ActiveMessageC配置组件、CC2530ActiveMessageP模块组件、CC2530TransmitP模块组件、HalCC2530Radio模块组件和HplCC2530InterruptsC模块组件构成,用于实现基本无线数据传输功能。
2 TinyOS下的AODV路由实现
AODV是一种适用于无线传感器网络的按需路由协议,采用最短路由选路,注重网络吞吐量和网络服务质量,实现简单。本文以TinyOS作为系统的软件平台,根据TinyOS操作系统的应用程序结构,以nesC语言实现了AODV路由协议。
2.1 AODV路由协议的基本思想
AODV(Ad hoc On-demand Distance Vector)借用了DSR中路由发现和路由维护的基础程序,以及DS-DV的逐跳(Hop-by-Hop)路由、顺序编号和路由维护阶段的周期更新机制。
当源节点需要和目的节点通信时,如果在路由表中已经存在了对应的路由时,AODV就不会进行任何操作,而是直接进行通信。当原路由失效或者需要和新的目的节点通信时,它就会发起路由发现过程,广播RREQ信息。当RREQ到达目的节点本身,或者是一个拥有“足够新”的到目的节点路由的中间节点时,目的节点或者中间节点通过RREQ的反向路径向源节点返回一个RREP消息。所谓“足够新”就是通过目的序列号来判断的,每个节点进行节点序列号的管理,维护自身的序列号和保存目的节点序列号。AODV使用了分布式的、基于路由表的路由方式,建立路由表项以后,在路由中的每个节点都要执行路由维持、管理路由表的任务。节点会监视一个活动路由(Active Route)中下一跳节点的状况。当发现有链路断开的情况时,就向该路由的前驱节点发出RERR消息通知。在RRER消息中,指明了由于链路断开而导致无法到达的目的节点。每个节点都保留了一个“前驱列表”(Precursor List)来帮助完成错误报告的功能。
2.2 AODV路由实现的软件结构
AODV路由协议的实现主要包括两个组件:MulitHopEngineM和MulihopAodv,如图4所示。其中MultiHopEngineM组件负责转发分组,Multi HopAodv是AODV路由功能的实现组件,通过配置组件MultiHopAodvRouter将两个组件写通(write)起来。
MultiHopAodv使用TimerMilliC提供的Timer接口作为路由协议所需的定时器,实现了AODV的路由发现、路由维护、Hello消息等机制,为MulitHopEngineM提供路由的下一跳地址。MultiHopEngineM通过两个接口(RotlteControl,RolneSelect)和MultiHopAodv交互,它的实现独立于任何路由协议实现,这非常有利于基于TinyOS平台的第三方路由协议的开发。AodvQueueTransmitP为MultiHopEngineM和MultiHopAodv提供了AMSend和Receive接口,同时提供了FIFO机制。
3 系统测试
采用6个节点进行组网测试,使用16位的短地址作为节点地址,如表1所示。系统测试时,PC端使用串口与节点连接,然后通过串口查看节点的路由信息和数据的转发情况。
3.1 路由发现机制
源节点发起寻找目的节点的路由发现过程,中间节点收到RREQ后,检查自身是否有到达目的节点的有效路由,如果有,则回复RREP;如果没有,则继续广播RREQ,如图5所示。
如图6和图7所示,节点2在收到节点4发来的RREQ后,更新到源节点(节点4)的路由,同时在路由表查找到目的节点的有效路由,然后向节点4回复RREP。节点4收到节点2返回的RREP,添加相应路由,将节点2作为到目的节点(节点1)的下一跳节点。该测试表明本系统实现了AODV路由协议的RREQ转发机制和中间路由回复机制,节点4获得到达目的节点的路由。
3.2 数据包的发送和转发
将6个节点隔开一定距离布置,节点1作为sink节点,其余5个节点建立到达节点1的路由,向sink节点发送数据,中间节点同时负责转发其他的节点的数据,图8是组网完成后的拓扑图。
源节点(节点3)发起查找目的节点(节点1)路由发现过程,在建立路由之后(3→4→2→1),向下一跳节点(节点4)发送数据包,如图9所示,中继节点(节点2,节点4)转发数据包如图10~图12所示。在图12中,目的节点收到节点2转发的来自节点3的数据。从该测试结果看出系统具备AODV协议的路由发现、路由表查找、数据包的转发等基本功能。
4 结语
本文介绍了无线传感器网络硬件节点和TinyOS操作系统的结构,根据系统所采用的硬件将TinyOS操作系统移植至8051平台,同时添加系统所需的IO,Timer,UART,RF等组件。这些组件提供了AODV路由协议所需要的IO控制、定时器、射频收发等功能。通过测试AODV协议的路由发现和多跳转发等机制验证了所移植组件和路由协议实现的正确性。