TinyOS在CC2530上的移植

2013-09-07 02:51张金榜何秀春
电子技术应用 2013年7期
关键词:C语言串口数据包

林 语,张金榜,何秀春,刘 军

(1.武警工程大学 研究生管理大队,陕西 西安 710086;2.武警警官学院 信息工程系,四川 成都 610213;3.武警工程大学 信息工程系,陕西 西安 710086)

无线传感器网络WSN(Wireless Sensor Network)是集传感器、嵌入式、分布式信息处理等技术于一体的与应用相关的无结构网络。它由大量体积较小、能源受限且具有一定计算、存储和无线通信能力的传感器节点组成,已广泛应用于战场态势感知、远程医疗监护、环境监测等领域。由于传感器节点的硬件资源有限,因此,WSN节点硬件平台及操作系统的选择与实现是两个重要的研究课题[1]。

CC2530芯片是TI公司推出的用于IEEE 802.15.4的真正的片上系统解决方案。它集成了微处理器、存储器和射频模块,只需要极少的外部元件就可应用于其他电路设计。CC2530具有集成度高、功耗低、体积小、成本低、电路结构简单、接口丰富的特点,能够满足传感器节点在数据采集、处理与无线传输时对处理器的需求,CC2530已成为无线传感器网络节点硬件平台设计的首选。TinyOS(TinyMicro Threading Operation System)是一个开源微型嵌入式操作系统,是针对WSN节点硬件资源受限、并发性高等问题而量身定做的操作系统。TinyOS的代码量小且高效,具有极其低的资源消耗,已成为WSN主流的操作系统。

由于TinyOS还不支持CC2530,所以在该平台上开发基于TinyOS的应用程序前,需将TinyOS移植到CC2530上,使其支持该平台。因此,实现TinyOS在CC2530上的移植能为WSN提供更多的平台选择,具有重要的应用价值。

1 移植的可行性

对TinyOS层次性的架构模型研究发现,其移植性的实现直接与硬件抽象封装层相关,该层组件完成物理硬件到TinyOS组件模型的映射。TinyOS硬件抽象层可进一步分成如图1所示的层次结构[2]。硬件抽象层明确了每一层的功能,每层依赖于下层提供的接口,越往上层对硬件的依赖性越小[3]。通过对TinyOS的进一步抽象,使得各层的组件可实现对物理硬件的不同程度封装和屏蔽,有区别地实现硬件平台和上层组件的隔离,不同层上的组件只完成特定功能,增强了TinyOS的移植性。使得TinyOS移植时只需要修改、设计相应的组件即可。

图1 TinyOS硬件抽象层层次结构图

2 移植准备

2.1 修改编译工具链

TinyOS和基于TinyOS的应用程序均使用nesC语言编写,生成以“.nc”为后缀的源文件,它经过TinyOS自带的NCC编译器编译后生成app.c文件。它的部分语法与KEIL的语法不兼容,是不能被KEIL直接编译到8051平台上运行的,因此需要对不兼容的语法进行修改。而app.c代码较多,人工修改不仅费时费力,而且极易出错[4],所以本文采用perl语言编写语法编辑脚本Mangle script来实现app.c文件与KEIL的耦合,将app.c文件转换成app_Mangled.c文件,作为KEIL编译器的输入,最终生成app.hex文件。具体编译过程如图2所示。

图2 nesC源文件编译过程

2.2 搭建CC2530平台

搭建CC2530平台的目的是为TinyOS组件的移植和应用程序的编译提供编译参数和声明环境变量信息。搭建CC2530平台需要以下4个步骤:

(1)在/opt/tinyos-2.x/tos/platforms/CC2530目录下创建.platform文件、hardware.h文件、PlatformP.nc和PlatformC.nc文件[4]。

(2)在/opt/tinyos-2.x/support/make目录下创建.target文件。.target文件为CC2530平台配置编译环境,让TinyOS知道并支持所创建的平台。

(3)在/opt/tinyos-2.x/support/make/mcs51目录下创建mcs51.rules文件。mcs51.rules的作用是解析命令参数、设置编译路径、提取和指向目标平台。

(4)在/opt/tinyos-2.x/tos/chips/mcs51目录下创建mcs51hardware.h文件和McuSleepC.nc文件。

3 移植实现

组件移植是TinyOS移植的核心,包括CC2530寄存器声明和组件移植[5-6]。

3.1 创建ioCC2530.h文件

在/opt/tinyos-2.x/tos/chips/CC2530目录下创建ioCC2530.h文件。

3.2 组件移植

(1)Timer组件的移植。Timer组件是一个定时器组件,其Timer接口用来触发事件。在Timer组件移植时,先根据CC2530芯片内部定时器部分数据资料定义各层需要定制的接口和组件列表;然后用nesC语言编写上述各层列表中定义的接口、组件的代码和timer.h文件,并一起存放到/opt/tinyos-2.x/tos/chips/CC2530目录下的timer文件夹中。

(2)Adc组件的移植。Adc组件是一个具有模/数转换功能的组件,它的AdcControl接口用来控制Adc组件的开始和关闭;Read接口提供读取模数转换结果的功能。用nesC语言编写各层接口、组件代码和Adc.h文件,并存放到/opt/tinyos-2.x/tos/chips/CC2530目录下的adc文件夹中。

(3)Radio组件的移植。Radio组件是TinyOS的射频组件,提供Packet、Receive、AMSend和SpiltControl接口。Packet用来实现数据包的管理,Receive具有数据包的接收功能,AMSend具有发送数据包的功能,SpiltControl用来控制天线的状态,负责天线的开启和关闭。用nesC语言编写各层接口和组件的代码和Radio.h文件,并一起存放到/opt/tinyos-2.x/tos/chips/CC2530目录下的radio文件夹中。

(4)Uart组件的移植。Uart组件提供模块组件Hal-CC2530SimpleUartP和配置组件HalCC2530SimpleUartC,通过Init接口实现Uart组件的初始化;通过SerialByteComm接口实现该异步串行接收和转发的功能。用nesC语言实现各层接口和组件文件,并存放到/opt/tinyos-2.x/tos/chips/CC2530目录下的uart文件夹中。

(5)I/O组件的移植。I/O组件具有GeneralIO口的配置功能,可将端口配置成输入或输出,允许置位和清零,该功能由HplCC2530GeneralIOC组件实现,它包含了io8051.h文件和ioCC2530.h文件。用nesC语言实现各层接口和组件文件,并存放到/opt/tinyos-2.x/tos/chips/CC2530目录下的pins文件夹中。

(6)Flash组件的移植。Flash组件通过SimpleFlash接口实现对Flash的读、写和删除操作。用nesC语言实现各层接口和组件文件,并存放到/opt/tinyos-2.x/tos/chips/CC2530目录下的flash文件夹中。

4 移植测试

CC2530平台TinyOS的测试是对所移植组件的相应功能进行测试。串口传输设置:波特率57 600 b/s,校验位为无,数据位为8 bit,停止位为1 bit。

本文以Radio组件测试为例介绍对Timer组件、Adc组件、Radio组件、I/O组件和Flash组件的测试环境、测试程序、测试过程,并分析了测试结果。

(1)测试环境。测试过程使用基于CC2530的节点2个,一个节点独立放置,另外一个节点通过串口与PC连接,两个节点相距15 m。

(2)测试程序。独立放置节点的测试程序是Radio-SendTestApp,它在Radio组件、Timer组件初始化完成后,启动Radio组件,定时发送数据包;与PC相连节点的测试程序是RadioReceiveTestApp,它将接收数据包并将数据包通过串口传送至PC;PC上运行串口调试助手,观察是否有数据上传。

(3)测试过程。程序编译、下载至节点后,按复位开关,配置好串口调试工具,观察串口调试工具的输出。

(4)测试结果及分析。Radio组件的测试结果如图3所示。串口调试显示能正常接收到数据包,表明Radio组件的移植是正确的。

图3 Radio组件测试结果

按照Radio的测试过程,对Timer、Adc、Uart、I/O和Flash组件进行了测试。结果表明,这些组件均能正常工作,实现了TinyOS对CC2530平台的支持。

本文针对TinyOS不支持CC2530平台的问题,在分析TinyOS层次结构模型的基础上,确定了移植的可行性;通过修改编译工具链、搭建CC2530平台、编写硬件抽象层各层的组件和接口文件,完成了TinyOS在CC2530上的移植。验证结果表明,Timer组件、Adc组件、Radioz组件、Uart组件、I/O组件和Flash组件均可正常工作。TinyOS在CC2530平台上的移植,为其他硬件平台的移植提供了参考,为WSN和TinyOS的研究与应用提供了更多的平台选择。

[1]钱开国,桑楠.基于TinyOS的无线传感器网络操作系统移植性研究与实现[C].第二届全国通信理论与新技术学术大会会议论文集,2008:131.

[2]HANDZISKI V,POLASTRE J,HAUER J H,et al.Flexible hardware abstraction for wireless sensor networks[C].In:Proceeding of the 2nd European Workshop on Wireless Sensor Networks(EWSN2005),Turkey,2005.

[3]钱开国.无线传感器网络嵌入式操作系统的研究和应用[D].成都:电子科技大学,2010.

[4]庄雄,杨永明,丁唯.基于CC2431的无线传感器网络节点设计[J].电子技术应用,2008,34(6):98-101.

[5]李响.无线传感器网络节点嵌入式操作系统TinyOS的研究与移植[D].成都:电子科技大学,2008.

[6]钱开国.无线传感器网络嵌入式操作系统的研究和应用[D].成都:电子科技大学,2010.

猜你喜欢
C语言串口数据包
二维隐蔽时间信道构建的研究*
浅谈AB PLC串口跟RFID传感器的通讯应用
民用飞机飞行模拟机数据包试飞任务优化结合方法研究
基于Visual Studio Code的C语言程序设计实践教学探索
51单片机C语言入门方法
SmartSniff
基于C语言的计算机软件编程
高职高专院校C语言程序设计教学改革探索
数字电源内部数据传输的串口通信方法实现
USB接口的多串口数据并行接收方法探索