首页 > 范文大全 > 正文

基于TinyOS操作系统的I/O控制

开篇:润墨网以专业的文秘视角,为您筛选了一篇基于TinyOS操作系统的I/O控制范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘 要: 无线传感器网络中的Sink节点是数据汇聚的中心,它与数据采集终端通过一个串行接口连接。为了实现Sink节点与数据采集终端的通信,利用CC2430芯片的数据传输原理,用nesC语言编写了一个TinyOS系统下的I/O控制程序,并给出在CC2340芯片上实现的结果,可用来控制对Sink节点的输入和输出。对该程序进行一定的扩展和改进便可以实现对Sink节点与节点通信和数据传输的控制。

关键词: TinyOS; nesC语言; 无线传感器网; I/O接口

中图分类号: TN711?34; TP393 文献标识码: A 文章编号: 1004?373X(2013)09?0016?03

0 引 言

无线传感器网由大量传感器节点组成,传感器节点负责对某区域内的某些特定数据进行采集,并将监测数据通过某一路径传输给汇聚节点(Sink节点)。Sink节点再将数据经由互联网或卫星传输给用户。整个无线传感器网络结构中,Sink节点是数据汇聚的中心,它负责将监测数据传输给数据采集终端,数据采集终端可以是一个采集设备或一个采集软件。Sink节点与数据采集终端之间的I/O问题成为数据传输的关键所在。

本文介绍了一个TinyOS系统下的I/O控制程序,用来控制对Sink节点的输入和输出,并在CC2430芯片上实现了该程序。对该程序进行一定的扩展便可以实现对Sink节点与节点通信的控制。

1 测试平台的选择

1.1 TinyOS操作系统

TinyOS是美国加州大学伯克利分校专门针对无线传感器网络设计的开源操作系统,它是一个事件驱动的、基于组件的无线传感器网络操作系统。tinyos系统、库及应用程序都是用nesC语言写的,这是一种新的用于编写结构化的基于组件应用程序的语言。目前已经成为WSN研究领域实施上的标准平台。

TinyOS全构件化、事件驱动、无内核和用户空间区分的设计原则满足了WSN的特殊需要。应用程序根据需要原配、修改和创建构件,使系统开销最小化。构件与构件之间通过Command和Event相联系,Command向下调用,Event向上调用。TinyOS没有线程概念,不存在阻塞,也无需维护进程的上下文,只用维护返回栈。操作的调用与完成是分离的过程。Command的调用从不阻塞,返回时采用Event方式。因此,TinyOS被称为“事件驱动”的操作系统

1.2 nesC语言

nesC具有类似于C语言的语法,但支持TinyOS的并发模型,同时具有机构化机制、命名机制,能够与其他软组件链接在一起从而形成一个鲁棒的网络嵌入式系统。其主要目标是帮助应用程序设计者建立可易于组合成完整、并发式系统的组件,并能够在编译时执行广泛的检查。

nesC程序的基本单元是组件,在nesC语言的定义中,存在两种不同功能的组件:模块(Module)和配件(Configuration),一个组件包括定义和实现两部分。组件间的交互是通过组件的规范元素来实现的,包括接口实例、命令和时间等,可由组件提供(Provided),也可被组件使用(Used)。

接口是一系列声明的有名函数集合,同时接口是连接不同组件的纽带。nesC中的接口是双向的,这种接口实际上是提供者组件和使用者组件间的一个多功能交互通道。一方面接口的提供者实现了接口的一组功能函数,称为命令(Commands);另一方面接口的使用者实现了接口的一组功能函数,称为事件(Events)。

模块是具体描述实现逻辑功能的组件,主要包括命令、事件、任务等的具体实现。必须实现模块提供接口声明的全部命令和模块使用接口声明的所有事件。

配件是具体描述组件间连接关系的组件,不同组件接口之间的关系是专门通过配件描述其实现过程。

2 CC2430芯片I/O原理

CC2430两个串行通信接口USARTx(这里的x是USART的编号,其数值为0或者1)能够运行于异步UART模式或者是同步SPI模式。UART模式提供异步串行接口,全双工传送。当UxCSR.MODE设置为1时,就选择了UART模式,UART操作由USART控制寄存器UxUCR以及状态寄存器UxCSR来控制,UxBAUD用于设置速率。

2.1 UART发送

当收/发数据缓冲器UxBUF写入数据时,该字节数据会发送到输出引脚TXDx。字节传送过程中UxCSR.ACTIVE位保持为1。UxCSR.TX_BYTE位自动设为1表示数据传送结束。收/发数据缓冲寄存器准备接收新的发送数据时,就产生一个中断请求。该中断在传送开始之后立刻发生,使得字节正在发送时,新的字节能够装入数据缓冲器。

2.2 UART接收

设置UxCSR.RE位为1使能数据接收。在UTART从输入引脚RXDx寻找有效起始位的过程中UxCSR.ACTIVE保持为1,当检测出有效起始位时,收到字节传入接收寄存器,UxCSR.RX_BYTE位自动设置为1,然后产生接收中断。通过寄存器UxBUF读取收到数据字节的同时UxCSR.RX_BYTE位由硬件清0。

2.3 UART硬件流控制

UxUCR.FLOW设置为1使能硬件流控制,当接收寄存器为空且接收使能时,RTS输出为低,在CTS输入变低前不会发生字节传送。

2.4 UART特征格式

如果寄存器UxUCR中的BIT9和奇偶校验位设置为1,那么奇偶校验产生而且检测使能。奇偶校验计算出来,作为第9位来传送。在接收期间,奇偶校验位计算出来而且与收到的第9位进行比较。如果奇偶校验出错,则UxCSR.ERR位设置为1。当UxCSR读取时,UxCSR.ERR位清零。要传送的停止位的数量设置为1或者2,这取决于寄存器位UxUCR.STOP。接收器总是要核对一个停止位。如果在接收期间收到的第一个停止位不是期望的停止位电平,就通过设置寄存器位UxCSR.FE为1,发出帧出错信号。当UxCSR读取时,UxCSR.FE位清零,当UxCSR.SPB设置为1,接收器将核对两个停止位。

2.5 硬件选择及解决方案

根据上述CC2430 I/O接口原理,在UART模式下,发送/接收数据、数据传送的停止与启动均由UxCSR和UxUCR控制。选用CC2430芯片板和编程采集板组合作为Sink节点,如图1所示。对Sink节点的I/O控制即转换成对CC2430芯片的I/O控制。

3 I/O控制程序

通过键盘输入指令对Sink节点的I/O进行控制。该程序的功能是通过键盘输入指令对Sink节点的I/O接口进行控制,键盘输入1时切换Sink节点板上的蓝色LED灯,输入2时切换黄色LED灯,并将两个LED灯的状态信息输出到计算机终端上。将该程序烧录到CC2430芯片上,接通Sink节点和计算机就可以实现该功能。

3.1 程序流程图

程序流程图如图2所示。

3.2 程序结构

3.2.1 实现I/O控制的配件文件

配件中定义了I/O控制的模块、TinyOS主模块并提供了接口,是I/O控制的顶层配件。

configuration SerialIo{

}

implementation{

components SerialIoM;

/* SerialIo模块程序,用于实现具体代码 */

components MainC;

/* TinyOS2主模块,用于关联系统启动 */

/** SerialIo模块程序的Boot接口与系统Boot接口关联这样系统启动时会调用SerialIoM的Boot接口**/

SerialIoM.Boot -> MainC.Boot;

/** PlatformSerialC**/

components PlatformSerialC;

SerialIoM.UartStdControl -> PlatformSerialC.UartStdControl;

SerialIoM.UartStream -> PlatformSerialC.UartStream;

}

图2 I/O控制程序流程图

3.2.2 模块文件

模块接口声明:

module SerialIoM{

uses interface Boot;

uses interface StdControl as UartStdControl;

uses interface UartStream;

}

块中的接口和函数见表1。

3.3 运行结果

CC2430核心板插到Sink节点板上,执行make antc3 install编译工程文件,并将程序烧录到CC2430中。进入计算机超级终端,打开超级终端设置,进行如下设置:选择COM1,波特率设为9 600,数据流控制选择“无”。

将网关板的串口通过串口线与计算机的串口连接起来,通过串口输入 1、2 切换控制LED灯亮、灯灭,其状态输出到计算机的超级终端上,如图3所示。

4 结 语

无线传感器网络(WSN)综合了传感器技术、嵌入式计算技术、现代网络、无线通信技术及分布式信息处理技术,是备受关注的新兴前沿研究热点,可以实现人与自然物以及物与物的通信和计算。本文所述的程序可对无线传感器网络Sink节点的I/O进行控制以及一定的扩展和改进便可以实现对Sink节点与节点通信和数据传输的控制。例如:加入点对点射频模块可以实现Sink节点与节点的通信,加入温湿度采集模块可以实现温湿度的采集和回传。这对组件无线传感器网具有一定的参考价值。

表1 模块文件中的接口

[模块接口\&成员函数\&说明\&UartStdControl\&Start\&启动串口,函数原型:

uart0StdControl.start()\&Stop\&关闭串口,函数原型:

uart0StdControl.start()\&UartStream\&Send\&发送多字节数据,函数原型:

uartStream.send(uint8_t *buf, uint16_t len)

buf:为发送数据缓冲区

len:发送数据长度\&Receive\&接收多字节数据,函数原型:

uartStream.receive(uint8_t *buf, uint16_t len)

buf:为发送数据缓冲区

len:发送数据长度

回调receiveDone处理接收数据\&receivedByte\&接收单字节数据,函数原型:

uartStream.receiveByte(uint8_t byte)

byte:接收的字节数据\&]

图3 LED灯状态

参考文献

[1] 孙利民,李建中,陈渝,等.无线传感器网络[M].北京:清华大学出版社,2005.

[2] 李晓维,徐勇军,任丰原.无线传感器网络技术[M].北京:北京理工大学出版社,2007.

[3] 赵得斌,陈远知,杨仕勇.无线传感器网络操作系统TinyOS[J].中国传媒大学学报:自然科学版,2008,15(4):71?75.

[4] BALLAL P M, TRIVEDI A C, GIORDANO V, et al. Deadlock?free dynamic resource assignment in multi?robot systems with multiple missions: application in wireless sensor networks [J]. Control Theory Application, 2010, 8(1): 12?19.

[5] LIU Xiao?lu, ZHOU Shu?min. Evaluation of several time synchronization protocols in WSN [C]// 2010 International Conference on Information Science and Management Engineering. [S.l.]: IEEE, 2010: 488?491.

[6] HILL J, SZEWCZYK R, WOO A, et al. System architecture directions for networked sensors [J]. ACM SIGPLAN Notices, 2000, 35(11): 93?104.

[7] 郑伟,王钢.基于CC2430的配电网无线监测网络节点设计[J].现代电力,2010,27(6):79?82.

[8] 王海,张能贵,高志刚.基于Ti nyOS的无线传感器网络节点[J].机电工程,2009,26(5):20?23.

[9] Texas Instruments. CC2430 data sheet (rev. 2.1) [M]. USA: Texas Instruments, 2010.

[10] UC Berkeley. TinyOS [EB/OL]. [2012?8?26]. http://.