基于CC2430的TinyOS移植
- 格式:pdf
- 大小:224.22 KB
- 文档页数:5
1.简述无线网络介质访问控制方法CSMA/CA的工作原理CSMA/CA机制:当某个站点(源站点)有数据帧要发送时,检测信道。
若信道空闲,且在DIFS时间内一直空闲,则发送这个数据帧。
发送结束后,源站点等待接收ACK确认帧。
如果目的站点接收到正确的数据帧,还需要等待SIFS时间,然后向源站点发送ACK确认帧。
若源站点在规定的时间内接收到ACK确认帧,则说明没有发生冲突,这一帧发送成功。
否则执行退避算法。
2.802.11无线LAN提供的服务有哪些?•802.11规定每个遵从该标准的无线局域网必须提供9种服务,这些服务分为两类,5种分布式服务和4种站服务。
分布式服务涉及到对单元(cell)的成员关系的管理,并且会与其它单元中的站点进行交互。
由AP提供的5种服务将移动节点与AP关联起来,或者将它们与AP解除关联。
•⑴建立关联:当移动站点进入一个新的单元后,立即通告它的身份与能力。
能力包括支持的数据速率、需要PCF服务和功率管理需求等。
AP可以接受或拒绝移动站点的加入。
如果移动站点被接受,它必须证明它自己的身份。
•⑵解除关联。
无论是AP还是站点都可以主动解除关联,从而中止它们之间的关系•⑶重建关联。
站点可以使用该服务来改变它的首选AP 。
•⑷分发。
该服务决定如何将发送到AP的帧发送出去。
如果目的站在同一个AP下,帧可以被直接发送出去,否则必须通过有线网络转发。
•⑸集成。
如果一个帧需要通过一个非802.11网络(具有不同的编址方案或帧格式)传输,该服务可将802.11格式转换成目的网络要求的格式站服务4种站服务用于管理单元内的活动。
•⑴身份认证。
当移动站点与AP建立了关联后, AP会向移动站点发送一个质询帧,看它是否知道以前分配给它的密钥;移动站点用自己所知道的密钥加密质询帧,然后发回给AP ,就可以证明它是知道密钥的;如果AP检验正确,则该移动站点就会被正式加入到单元中。
•⑵解除认证。
一个以前经过认证的站想要离开网络时,需要解除认证。
OSAL你想知道的都在这里近日,21ic论坛TI无线连接论坛板块分享了一张OSAL调度机制的图,图片如下OSAL调度机制是何方神圣?OSAL为Operating System Abstraction Layer,即操作系统抽象层,支持多任务运行,它并不是一个传统意义上的操作系统,但是实现了部分类似操作系统的功能。
OSAL概念是由TI公司在ZIGBEE协议栈引入,他的意思是”模拟操作系统”,此OS,并非一个真正的OS,而是模拟OS的一些方法为广大编程者提供一种写MCU程序的方法.当有一个事件发生的时候,OSAL负责将此事件分配给能够处理此事件的任务,然后此任务判断事件的类型,调用相应的事件处理程序进行处理。
现有的嵌入式操作系统可以分为两类,即通用的多任务操作系统(General—purpose Multi-tasking OS)和事件驱动的操作系统(Event-driven OS)。
前者能够很好地支持多任务或者多线程,但是会随着内部任务切换频率的增加而产生很大的开销,这类操作系统有:uC /OS-II、嵌入式Linux、WinCE等。
后者支持数据流的高效并发,并且考虑了系统的低功耗要求,在功耗、运行开销等方面具有优势。
典型的代表如TinyOSl291。
目前TinyOS操作系统支持的平台有ATMEL公司的A VR系列、TI公司的MSP430系列。
由于TinyOS操作系统还没有对Chipcon公司(才知道TI把它收购了)提供CC2430开发平台提供支持,因此,要在CC2430开发平台上使用TinyOS系统来开发Zigbee协议栈软件,就必须首先对TinyOS进行移植。
因此Chipcon公司为自己设计的ZStack协议栈中提供了一个名为操作系统抽象层OSAL 的协议栈调度程序。
Osal主要提供如下功能:任务注册、任务间同步互斥、中断处理存储器分配和管理、提供定时器功能。
将Tinyos2.x移植到cc2530编译环境的搭建流程:在windows下建立cygwin平台,并搭建Tinyos的编译环境,然后将基于Tinyos的应用程序编译成hex文件,通过仿真器下载到cc2530片子上运行。
原材料:硬件(cc2530节点,仿真器等)、软件(Cygwin,Keil,TinyOS 2.x,编译环境配置软件包,SmartRF04 Flash Programer等)。
注意:硬件是原来在IAR下能正常使用的CC2530开发硬件就OK声明:一.里面很多东西我借鉴了网上的资料,并写在后面的参考文献中。
并对一些内容进行了修改和强调,以及我遇到的一些问题的解决方法。
= = = = = = = = = = = = = = = = = = = = = =1.安装Keil (Keil uVersion4)这些资源网上很多,百度和谷歌都可以搜到(注:一定要下载keil uVersion4,不可以下载4以下的版本,因为要运行的是cc2530,4以下的版本会找不到相关的编译平台环境)2.安装java 1.5 JDK我开始用1.6了的,反正一直没成功,不知道是不是这个原因。
最好就用1.5这个版本吧。
安装完了在命令行中:java –verson ,出现“java version “1.5.0”表示是1.5版本了。
3.安装Cygwin(1)下载Cygwin,我是在这里下载的:/index.php/Installing_TinyOS_2.0.2#Manual_installation_on_your_host_OS_with_RPMs,在Setp 2: Install Cygwin中第一步有个cygwin-files.zip,点击即可下载。
这个地址好像也可以下载:rmatik.uni-freiburg.de/people/aslam/cygwin-files.zip(2)安装时先解压下载的cygwin,点击setup.exe即可,默认安装在c盘下。
基于TinyOS的CC2430 RSSI定位的设计与实现来源:物联网世界网摘要:为解决现Z-Stack定位程序代码量大,结构复杂等问题,提出一种基于TinyOS的CC2430定位方案。
在分析TinyOS组件架构基础上,设计实现盲节点、锚节点与汇聚节点间的无线通信以及汇聚节点与PC机的串口通信。
在此基础上实现PC对各锚节点RSSI(Received Signal Strength Indicator)寄存器值的正确读取,确定实验室环境下对教-常态无线传播模型的具体参数,并采用质心算法来提高定位精度。
实验显示,在由四个锚节点组成的 4.8x3.6m2矩形定位区域中,通过RSSI质心定位算法求得的盲节点坐标为(2.483 1,1.018 5),实际坐标为(2.40,1.20),误差为0.199 6 m,表明较好地实现对盲节点的定位。
无线传感器网络是由分布在给定区域内大量传感器节点以无线自组织多跳的通信方式构成的网络系统,目前在环境监测保护、楼宇监控、家庭安防、医疗护理、目标跟踪、军事等领域已获得了广泛的应用。
1 CC2430芯片介绍CC2430芯片是TI/Chipcon公司生产的真正意义上的片上系统(SOC)级解决方案,它集增强型工业标准8051核心、优秀的射频芯片CC24 20、强大的外围资源于一体。
集成的外设资源主要有DMA、定时/计数器、看门狗定时器、AES-128协处理器、8通道8~14位ADC、USART、休眠模式定时器、复位电路及21个可编程I/O,支持IEEE802.15.4和ZigBee协议。
CC2430芯片具有性能高、功耗低、接收灵敏度高、抗干扰性强、硬件CSMA/CA支持、数字化RSSI/LQI 支持、DMA支持等特点,支持无线数据传输率高达250 kbps.2 TinyOS系统与nesC语言由于无线传感器网络的特殊性,需要操作系统能够高效地使用传感器节点的有限内存、低功耗处理器、多样传感器、有限的电源,并且能对各种特定应用提供最大的支持。
ATOS物联网教学平台简介ATOS教学实验平台是一款融合了无线传感器技术、嵌入式技术、短距离通讯技术、工业控制技术等一系列新技术的产品。
它提供了功能齐全的 2.4G无线射频硬件开发平台,ARM 嵌入式网关平台支持基于3G的M2M协议。
提供自主研发的基于 IEEE 802.15.4 协议规范的协议栈,以及针对WSN 网络的可视化套件平台。
该平台的无线模块和传感器模块可以相互组成一个无线传感器网络,所有节点之间可以建立包括所有无线网络协议(ZigBee、WSN基础协议)在内的多种无线网络协议。
网关节点可将传感器采集的数据直接通过串口、USB口发送给主机,或将数据通过WIFI、以太网,GPRS、3G等方式发送到远程服务器。
用户可通过登陆远程服务器观察传感网络采集的信息,也可通过3G网络或PDU短信等方式对传感器网络进行反向控制。
用户可以根据实际应用需求选择传输方式。
完备的硬件设备及可二次开发的软件和良好的技术支持使得用户可以将该套件广泛的应用于科研和教学等领域。
整个系统采用了国际通用的标准接口,可以按照不同的应用需求进行实训扩展,如IO控制扩展、电机控制扩展、M2M控制扩展、RFID扩展、GPS、GPRS、摄像头扩展等。
整套系统涵盖了物联网中的所有必要环节。
特性●完全支持IEEE802.15.4国际标准,2.4G频段规范。
●体现传感网从数据采集到网络传输及数据汇总等各个知识点。
●3G模块支持标准AT指令集、M2M协议,同时3G模块开放串口调试接口。
●嵌入式网关作为衔接无线传感器网络及3G网络的桥梁,可将无线传感器网络采集的数据通过WIFI、GPRS、3G、以太网等方式发送至指定服务器,同时在嵌入式网关已成功移植LINUX2.6,QT4.6.2,具备自己的文件系统。
●基于3G模块的M2M与传统的GPRS相比,带宽更高,传输速率更快,通信更稳定。
●实验课程由浅入深,即包括了与单片机使用有关的基础实验,还包含了深入了解无线射频的创新实验,同时实验课程中详细讲解了LINUX平台和WINCE平台、无线传感器网络开发平台(WSN)、M2M平台(3G)的搭建和扩展应用。
0引言无线传感器网络(wireless sensor network, WSN)由部署在监测区域内大量廉价微型传感器节点组成,通过无线通信方式形成的一个网络系统,其目的是协作的感知、采集和处理网络覆盖区域中感知对象的信息,并发送给观察者,被誉为21世纪最具影响技术之一。
传感器节点通常是一个微型的资源受限的嵌入式系统,因此要求一个小型高效的操作系统管理组织硬件并完成软件功能。
TinyOS 是美国加州大学伯克利分校针对无线传感器网络开发的嵌入式操作系统,核心程序很小,对硬件要求很低,它的事件驱动机制,主动消息机制,组件化结构等特点使它在研究中得到广泛应用。
目前TinyOS支持的平台主要集中在Atmel公司的AVR 系列和TI公司的MSP430系列单片机。
本文首先简要介绍了NesC和TinyOS的特点,详细分析TinyOS的编译原理,最后给出了TinyOS2.0基于以8051为核处理器的CC2430芯片的移植,便于以后更加深入的开发和应用无线传感器网络。
1NesC和TinyOS简介TinyOS由NesC语言编程和实现,NesC是一种类C语言。
TinyOS的组件化分层架构方式实现了应用的可裁减性,针对某个应用只需要编译用到的组件。
一个具体的应用程序通常有一个顶层配置文件(configuration),完成组件(component)之间接口的连接,将组件装配成一个具体的应用程序。
组件(component)分为配件(configuration)和模件(module)。
配件的实现具体描述了不同组件之间接口,命令或事件的连接。
顶层配置文件是配件的一种。
模件的实现具体描述了命令和事件函数。
接口(interface)是组件间的一个双向通道,表明接口具有的功能和事件通知能力,由一组命令和事件函数的声明组成。
接口的提供者(provider)必须实现接口的命令,接口的调用者(user)必须实现接口的事件。
一个接口可以被多个组件调用和提供。
配件、模件及接口之间的关系如图1所示。
图1配件、模件及接口之间的关系基于CC2430的TinyOS移植The Port of TinyOS Based CC2430鲁玺梦华北电力大学控制科学与工程学院北京102206【摘要】本文首先介绍了NesC和TinyOS的特点,特别说明了TinyOS的三层硬件抽象结构。
然后给出了TinyOS的运行机制。
最后以Chipcon公司的CC2430为平台,详细介绍了TinyOS的移植。
【关键词】TinyOS CC2430mcs51移植【中图分类号】TP311.54【文献标志码】A收稿日期:2009-10-12作者简介:鲁玺梦(1985-),女,硕士研究生,研究方向为无线传感器网络。
Journal of Shandong Electric Power Coll e ge 第13卷第1期TinyOS应用程序建立在树型结构的硬件抽象平台(HAA)上。
硬件抽象功能由三层组件实现。
每层组件都有明确的功能并为上层组件提供接口。
这种树型结构使TinyOS源代码具有良好的可用性和移植性。
硬件抽象结构如图2所示。
图2TinyOS硬件抽象结构图硬件表示层(HPL,Hardware Presentation Layer)通过寄存器或I/O寻址直接访问硬件资源,同样硬件可以触发中断申请服务。
通过内部通信机制,HPL隐藏了硬件复杂的细节,为系统提供更具可读性的接口。
例如,网络节点MCU (microcontroller)通常有两个USART进行串口通信。
它们具有相同的功能,但必须通过不同的寄存器访问,产生不同的中断向量。
HPL组件可以通过一个相容的接口隐藏这些不同。
HPL组件的状态由具体硬件状态决定,每个HPL组件都应该包括下列功能:1)为有效的进行能量管理,需有初始化,开启和停止硬件的命令;2)对于控制硬件操作的寄存器的读取(get)设置(set)命令;3)用标志位区分各命令;4)开启和关断中断的命令;5)硬件中断的服务程序,HPL组件的中断服务程序只进行临界操作。
硬件适应层(HAL,Hardware Adaptation Layer)是硬件抽象结构的核心,它使用HPL组件提供的原始接口将硬件资源的复杂性进一步隐藏。
与HPL 不同,HAL组件具有状态性,可以进行仲裁和资源控制。
出于传感器网络高效性的考虑,HAL对具体的设备类别和平台进行抽象,给出了硬件具有的特定功能。
HAL组件通常以Alarm,ADC channel,EEPROM命名,上层组件可以通过丰富,定制化的接口访问,同时也使编译时的接口检测更加高效。
硬件接口层(HIL,Hardware Interface Layer)将HAL提供的针对具体平台的抽象转化为独立于平台的接口。
这些接口隐藏了硬件平台的不同,提供典型的硬件服务,使应用开发更加简化。
TinyOS的三层硬件抽象结构有很大的灵活性。
具体的应用程序可以将HAL和HIL组件结合使用,提高代码执行效率,称为硬件抽象结构的垂直分解。
为了提高硬件资源抽象在不同平台上的重用率,还可以将硬件抽象结构水平分解。
例如,TinyOS中的chip文件夹下,定义了许多独立的硬件芯片抽象:microcontroller,radio-chip,flash-chip 等。
每个芯片抽象都提供独立的HIL组件接口,可以将各个不同的芯片结合起来组成具体平台。
但各个平台与芯片抽象间的通用接口会增加代码量,不利于代码的高效执行。
2TinyOS的编译原理TinyOS的编译系统采用GNU Make,首先将TinyOS应用程序预编译,形成一个“*.C”文件,然后将这个文件传递给合适的编译器或工具。
TinyOS 的编译系统放于support/make文件夹中,包含各个平台的配置文件“*.target”和在这个平台上建立应用程序的“*.rules”文件。
TinyOS的编译系统可以分为两个部分:使用nesC编译的公用部分和针对具体平台部分。
nesC预编译器由ncc和nescc两个工具组成,均由PERL语言编写,具有强大的文法分析能力。
解释执行时,nesC预编译器将应用程序源代码生成C文件。
该文件可以被针对具体硬件平台的编译器接受。
编译过程如图3所示。
图3TinyOS编译过程TinyOS核心代码经nesC预编译后形成的C 文件可以被GCC理解编译。
GCC适用的平台包括telos系列,mica系列和intelmote2系列。
但是一些平台如Motorola HCS08,Intel MCS51则不适用于GCC编译。
具体进行编译操作时,编译文件根据“TOSMAKE_PATH”变量中所列的路径搜索“*. target”文件。
“*.target”文件通常设置一些平台相关变量和提供编译平台的名称,并通过调用“TOSMake_include_platform”指向具体的“*.rules”文件。
“*.rules”文件由平台所配备的微处理器决定,因此通常几个平台共用一个“*.rules”文件。
如47果以命令行的形式给定一个虚拟的平台,编译系统会自动寻找“*.extra”文件。
3基于CC2430芯片的TinyOS实现由上文所述,将TinyOS移植到8051核处理器的CC2430上的关键问题是硬件抽象层组件的定制和编译器工具链解耦。
基于TinyOS开源代码的约定,除核心程序外的其余项目开发放在contrib 文件中。
因此将代码放于cygwin/opt/tinyos-2.x-contrib/ncepu。
3.1CC2430芯片特点CC2430在单个芯片上整合了一个增强型工业标准8位MCU(8051),运行时钟32MHz,具有32/ 64/128KB可编程闪存和8KBRAM,还包括8路输入8—14位模拟数字转换器(ADC),一个普通16位定时器和两个8位定时器,32KHz晶振休眠定时器,21个可编程I/O引脚,两个支持多种串行通信协议的USART,符合IEEE802.15.4标准的2.4GHz RF无线收发机和一个符合IEEE802.15.4规范的MAC计时器。
Chipcon公司推出的CC2430芯片成本非常低廉,在无线传感器领域具有很强的市场竞争力。
3.2修改芯片文件每个芯片都通过多个接口或组件提供它所实现的功能,也就是说这些接口或组件组成芯片的驱动。
将芯片的结构抽象文件放于ncepu/tos/chips。
如果芯片有子系统(如MCU芯片组功能),则建立子目录,如chips/mcs51/timer。
需要改写的TinyOS模块如图4所示。
图4TinyOS需要改写的模块示意图3.2.1mcs51核处理器为了同其他外围设备的驱动区分开,需要在MCU相关的文件中增加两个定义:1)原子操作的开始和结束,在头文件hardware.h中定义;2)低功耗工作模式,由组件MCUSleepC定义。
参考atm128hardware文件定义mcs51hardware. h,其中增加nesC编译需要的宏定义:_nesc_enable_ interrupt/_nesc_disable_interrupt/_nesc_atomic_start/ _nesc_atomic_end。
代码如下://设置端口位及端口输入输出方向,并检查端口是否已被设置;#define SET_BIT(port,bit)((port)|=_BV(bit))#define CLR_BIT(port,bit)((port)&=~_BV(bit)) #define READ_BIT(port,bit)(((port)&_BV(bit))!=0) #define FLIP_BIT(port,bit)((port)^=_BV(bit))#define MAKE_IO_PIN_OUTPUT(dir_reg,pin) dir_reg|=_BV(pin)#define MAKE_IO_PIN_INPUT(dir_reg,pin)dir_reg &=~_BV(pin)#define IS_IO_PIN_OUTPUT(dir_reg,pin)dir_reg| _BV(pin)#define IS_IO_PIN_INPUT(dir_reg,pin)!(dir_reg &_BV(pin))//定义msc51中断;#define MCS51_INTERRUPT(signame)\void signame()__attribute((interrupt,spontaneous,C)) //支持原子操作,原子操作开始时关中断,原子操作结束后开中断;typedef uint8_t__nesc_atomic_t;inline void__nesc_disable_interrupt(){EA=0;} inline void__nesc_enable_interrupt(){EA=1;} inline__nesc_atomic_t__nesc_atomic_start(void) __attribute((spontaneous)){__nesc_atomic_t tmp=EA;EA=0;return tmp;}inline void__nesc_atomic_end(__nesc_atomic_t oldSreg)__attribute__((spontaneous)){EA=oldSreg;}TinyOS通过一些接口管理MCU的状态,决定MCU何时进入低功耗状态。