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

时间:2013-06-14

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

  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控制的顶层配件.

  3.2.2 模块文件

  模块接口声明:

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

  3.3 运行结果

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

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

  4 结语

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

上一篇:基于FPGA的相位连续的2FSK信号的设计与实现
下一篇:电能计量芯片Sigma-Delta ADC降采样滤波器设计(一)

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料