+基于CC2530的WSN节点设计
本科毕业设计做的是这个,基于CC2530的WSN节点设计。
无线传感器网络(Wireless Sensor Network,简称WSN)就是由部署在监测区域内大量的廉价微型传感器节点组成,通过无线通信方式形成的一个多跳的自组织的网络系统,其目的是协作地感知、采集和处理网络覆盖区域中被感知对象的信息,并发送给观察者。无线传感器网络能够获取客观物理信息,具有十分广阔的应用前景,能应用于军事国防、工农业控制、城市管理、生物医疗、环境检测、抢险救灾、危险区域远程控制等领域。
本设计的无线传感器网络节点的MCU采用了TI公司的CC2530射频芯片。CC2530是用于ZigBee 应用的一个真正的片上系统(SoC)解决方案。它能够以非常低的总的材料成本建立强大的网络节点。
根据TI公司提供的参考设计方案,应用Altium Designer Winter 09专业绘图软件绘制了最小系统板、网关电源底板、、节点电源底板的原理图和PCB图,然后对板子进行了焊接和调试。然后在此基础上实现无线传感器网络节点的通信。
在软件部分采用了TI公司提供的Z-Stack协议栈。Z-Stack采用操作系统的思想来构建,采用事件轮循机制,当各层初始化之后,系统进入低功耗模式,当事件发生时,唤醒系统,开始进入中断处理事件,结束后继续进入低功耗模式。如果同时有几个事件发生,判断优先级,逐次处理事件。这种软件构架可以极大地降级系统的功耗。接下来还对Tiny OS操作系统进行了简单的了解与尝试移植。
目前传感器节点能力仍然受限,这些体现在传感器具有的能量、处理能力、存储能力和通信能力等都十分有限,因而在实现各种网络协议和应用系统时,传感器节点的能力要受到以下一些限制:1、电源能量受限。由于传感器节点的微型化,节点的电池能量有限,而且由于物理限制难以给节点更换电池,所以传感器节点的电池能量限制是整个无线传感器网络设计最关键的约束之一,它直接决定了网络的工作寿命。传感器节点消耗能量的模块包括传感器模块、处理器模块和无线通信模块,其中绝大部分的能量消耗在无线通信模块上,通常1比特信息传输100m距离所需的能量大约相当于执行3000条计算指令所消耗的能量[5];2、计算和存储能力有限。廉价微型的传感器节点带来了处理器能力弱、存储器容量小的特点,使得其不能进行复杂的计算,而传统的Internet网络上成熟的协议和算法对于无线传感器网络而言开销太大,难以使用,因此必须重新设计简单、有效的协议及算法。如何利用有限的计算和存储资源完成诸多协同任务成为对无线传感器网络设计的挑战; 3、通信能力有限。通常,无线通信的能耗E与通信距离d的关系为:E=kdn,其中2<n<4。参数n的取值与很多因素有关:由于传感器节点体积小,发送端和接收端都贴近地面,障碍物多,干扰大,n的取值要偏大;另外,天线质量对信号发射质量的影响也很大。综合考虑这些因素,通常取n为3,即通信能耗与通信距离的3次方成正比,随着通信距离的增加,能耗也会急剧增加。为节能起见,无线传感器网络应采用多条路由的通信传输机制,尽量减少单跳通信的距离。 由于无线信道自身的物理特性,通常使得它所能提供的网络带宽相对有限信道要小得多。此外,节点能量的变化,周围地势地貌以及自然环境的影响,使得网络的无线通信性能也会经常变化,甚至通信有可能时断时续。因此,如何设计可靠的通信机制以满足网络的通信需求是无线传感器网络所面临的一个重要挑战。
无线传感器网络可以分为三个部分:分布于监控区域内的传感器节点、中心汇聚节点、汇聚节点通过有线或无线网络连接到管理节点,其结构类似于图2-1。
在本设计中采用的是这种结构:有多于两个的传感器节点分布在随机的一块监控区域内,每个传感器的节点由射频发射模块、温湿度传感器模块、电源模块、MCU处理模块组成。每个节点可以采集温湿度值,每个节点之间可以互相自主通信,并且可以接收汇聚节点的命令进行发送、传递和处理功能。汇聚节点主要是接收和发送来自于最近的传感器节点的信息,而且还要求与PC机进行通信,所以就要求有串口转USB,这样就可以通过电脑的串口管理程序来对整个节点的网络进行管理,并且可以显示网络中发送过来的温湿度数值。
硬件开发平台:
CC2530最小系统板:具有上电自动复位电路、RF匹配网络电路、外部晶振电路以及电源接口,单片机引脚均由排针引出,方便拓展。
网关电源底板:具有串口转USB电路、JTAG电路、DHT11温湿度传感器电路、复位电路、电源管理电路以及与最小系统板相对应的接口和引脚的扩展口。
传感器节点电源底板:具有JTAG电路、DHT11温湿度传感器电路、复位电路、电源管理电路以及与最小系统板相对应的接口和引脚的扩展口。
CC-debuger:支持程序的下载调试,在线仿真。与最小系统的JTAG十针相连。
Z-Stack 协议栈
Zigbee[7]是基于IEEE802.15.4[8]标准的低功耗个域网协议。根据这个协议规定的技术是一种短距离、低功耗的无线通信技术。这一名称来源于蜜蜂的八字舞,由于蜜蜂(bee)是靠飞翔和“嗡嗡”(zig)地抖动翅膀的“舞蹈”来与同伴传递花粉所在方位信息,也就是说蜜蜂依靠这样的方式构成了群体中的通信网络。其特点是近距离、低复杂度、自组织、低功耗、低数据速率、低成本。主要适合用于自动控制和远程控制领域,可以嵌入各种设备。简而言之,ZigBee就是一种便宜的,低功耗的近距离无线组网通讯技术。图2-2给出了ZigBee协议的五层结构。
物理层(PHY)定义了物理无线信道和MAC子层之间的接口,提供物理层数据服务和物理层管理服务。物理层的内容是激活ZigBee;检测当前信道的能量;检测接收链路服务质量信息;定义ZigBee信道接入方式;选择信道频率;负责数据传输和接收。 介质接入控制子层(MAC)负责处理所有的物理无线信道访问,并产生网络信号、同步信号;支持PAN连接和分离,提供两个对等MAC实体之间可靠的链路。 MAC层功能为网络协调器产生信标;与信标同步;支持PAN(个域网)链路的建立和断开;为设备的安全性提供支持;信道接入方式采用免冲突载波检测多址接入(CSMA-CA)机制;处理和维护保护时隙(GTS)机制;在两个对等的MAC实体之间提供一个可靠的通信链路[9]。 网络层(NWK)是整个ZigBee协议栈的核心部分。网络层主要实现节点加入或离开网络、接收或抛弃其他节点、路由初始化、查找及传送数据、维护信息库等功能。 ZigBee应用层(APL)框架包括应用支持层(APS)、ZigBee设备对象(ZDO)和制造商所定义的应用对象。应用支持层的功能包括:维持绑定表、在绑定的设备之间传送消息。ZigBee设备对象的功能包括:定义设备在网络中的角色(如ZigBee协调器和终端设备),发起和响应绑定请求,在网络设备之间建立安全机制。ZigBee设备对象还负责发现网络中的设备,并且决定向他们提供何种应用服务。ZigBee应用层除了提供一些必要函数以及为网络层提供合适的服务接口外,一个重要的功能是应用者可在这层定义自己的应用对象。 应用程序框架(AF)运行在ZigBee协议栈上的应用程序实际上就是厂商自定义的应用对象,并且遵循规范(profile)运行在端点1 240上。在ZigBee应用中,提供2种标准服务类型:键值对(KVP)或报文(MSG)。 ZigBee设备对象(ZDO)的功能包括负责定义网络中设备的角色,如:协调器或者终端设备。还包括对绑定请求的初始化或者响应,在网络设备之间建立安全联系等。实现这些功能,ZDO使用APS层的APSDE-SAP和网络层的NLME-SAP。ZDO是特殊的应用对象,它在端点(entire)0上实现。远程设备通过ZDO请求描述符信息,接收到这些请求时,ZDO会调用配臵对象获取相应描述符值。 Z-Stack是在IEEE 802.15.4标准基础上建立的,是ZigBee的具体实现,定义了协议的MAC和PHY层。Z-Stack采用操作系统的思想来构建,采用事件轮循机制,当各层初始化之后,系统进入低功耗模式,当事件发生时,唤醒系统,开始进入中断处理事件,结束后继续进入低功耗模式。如果同时有几个事件发生,判断优先级,逐次处理事件。这种软件构架可以极大地降级系统的功耗。在ZigBee协议中,协议本身已经定义了大部分内容。在基于Z-Stack协议栈的应用开发中,用户只需要实现应用程序框架即可。从图2-2可以看出应用程序框架中包含了最多240个应用程序对象。如果我们把一个应用程序对象看做为一个任务的话,那么应用程序框架将包含一个支持多任务的资源分配机制。于是OSAL便有了存在的必要性,它正是Z-Stack为了实现这样一个机制而存在的。 OSAL就是以实现多任务为核心的系统资源管理机制。所以OSAL与标准的操作系统还是有很大的区别的。简单而言,OSAL实现了类似操作系统的某些功能,但并不能称之为真正意义上的操作系统。
整个Z-stack的主要工作流程如图2-3,大致分为系统启动,驱动初始化,OSAL初始化和启动,进入任务轮循几个阶段。
Tiny OS操作系统
由于无线传感器网络的特殊性,为解决Z-Stack定位程序代码量大[10]、结构复杂等问题,需要操作系统能够高效地使用传感器节点的有限内存、低功耗处理器、多样传感器、有限的电源,并且能够对各种特定应用提供最大的支持。基于此,UC Berkeley 研究人员专为嵌入式无线传感器网络开发出Tiny OS系统,目前已经成为无线传感器网络事实上的标准平台。
Tiny OS具有微型化、支持轻量级并发操作、灵活、低功耗等优点,已经被成千上万的研发人员采用,应用于范围广阔的无线传感器网络中。Tiny OS的设计特点主要体现在一下三个方面:(1)基于组件的编程模型(2)基于事件触发的并发执行模型(3)采用基于主动消息的通信模型[11]。
Tiny OS操作系统采用了组件的结构,它是一个基于事件的系统。系统本身提供了一系列的组件供用户调用,其中包括主组件、应用组件、执行组件、感知组件、通信组件和硬件抽象组件,其层次结构如图2-4所示。组件由下到上通常可以分为3类:硬件抽象组件、综合硬件组件和高层软件组件。硬件抽象组件将物理硬件映射到Tiny OS的组件模型;综合硬件组件模拟高级的硬件行为,如感知组件、通信组件等;高层软件组件实现控制、路由以及数据传输等应用层的功能。高层组件向底层组件发出命令,底层组件向高层组件报告事件。Tiny OS的层次结构就如同一个网络协议栈,底层的组件负责接收和发送最原始的数据位,而高层的组件对这些数据进行编码、解码,更高层的组件则负责数据打包、路由选择以及数据传输[12]。
MCU 选型
CC2530是用于ZigBee应用的一个真正的片上系统(SoC)解决方案。它能以非常低的总的材料成本建立强大的网络节点。CC2530结合了领先的RF收发器的优良性能,业界标准的增强型8051CPU,系统内可编程闪存,8-KB RAM。CC2530具有不同的运行模式使得尤其适应超低功耗要求的系统。CC2530F256具有256-KB内存,结合了德州仪器的ZigBee协议栈(Z-StackTM),提供了一个强大和完整的ZigBee解决方案。CC2530的内部结构图如图2-5所示。
如图2-5所示,模块大致可以分为三种类型:
1、CPU 和内存相关的模块:一个单周期的8051兼容内核、三种总线结构、内存仲裁器、8-KB RAM、32/64/128/256 KB闪存块;
2、外设、时钟和电源管理相关的模块:具有三种供电模式、IEEE 802.15.4 MAC定时器、通用定时器、AES协处理器、DMA、可配置分辨率的12位ADC。
3、无线电相关的模块:CC253x设备系列提供了一个IEEE 802.15.4兼容无线收发器。RF内核控制模拟无线模块。另外,它提供了MCU 和无线设备之间的一个接口,这使得可以发出命令、读取状态、自动操作和确定无线设备事件的顺序。无线设备还包括一个数据包过滤和地址识别模块,硬件支持CSMA/CA[14],支持精确的RSSI/LQI定位。
结合以上的数据,可以看出CC2530是无线传感器网络节点设计的不二选择。
巴伦天线电路
巴伦是平衡不平衡转换器的英文音译,原理是按天线理论,偶极天线属平衡型天线,而同轴电缆属不平衡传输现,若将其直接连接,则同轴电缆的外皮就有高频电流流过(按同轴电缆传输原理,高频电流应在电缆内部流动,外皮是屏蔽层,是没有电流的),这样一来,就会影响天线的辐射(可以想象成电缆的屏蔽层也参与了电波的辐射)。
因此,就要在天线和电缆之间加入平衡不平衡转换器,把流入电缆屏蔽层外部的电流扼制掉,也就是说把从振子流过电缆屏蔽层外皮的高频电流截断。有两种方法实现巴伦:
1、采用分立元件实现,LC巴伦设计的本质就是一个电桥,被称为“格子形式”巴伦,电路中包含两个电容和两个电感,分别产生+90。相移。在工作频率时,满足, , L=Zc/ω ,C=1/ω*Zc ..如图3-3所示。
采用Johnson technology 公司的的Bulan-LPF芯片2450BM15A0002。这款芯片是专为CC253x系列射频芯片所做射频低通滤波器,这简化了计算和选择匹配的电感电容的麻烦。如图3-4是该芯片的连接方式。
因为设计之前并没有找到这款芯片,所以在制版时我采用了第一种方案,这也是TI官网的方案。根据计算得出实际的L=2nH,C=1pF。如图3-5所示,天线使用的是2.4G单轴陶瓷天线。C11、C12、C15的作用是前后两端隔离低频信号的作用。
了解协议栈
当打开IAR的时候可以看到如图4-3所示的文件结构图。下面就依次分析每一个文件夹的作用。
APP:应用层目录,这是用户创建各种不同工程的区域,在这个目录中包含了应用层的内容和这个项目的主要内容,在协议栈里面一般是以操作系统的任务实现的。HAL:硬件层目录,包含有与硬件相关的配置和驱动及操作函数。MAC:MAC层目录,包含了MAC层的参数配置文件及其MAC的LIB库的函数接口文件。MT:实现通过串口可控各层,于各层进行直接交互。NWK:网络层目录,含网络层配置参数文件及网络层库的函数接口文件,APS层库的函数接口OSAL:协议栈的操作系统。Profile:AF层目录,包含AF层处理函数文件。Security:安全层目录,安全层处理函数,比如加密函数等。Services:地址处理函数目录,包括着地址模式的定义及地址处理函数。Tools:工程配置目录,包括空间划分及Z-Stack相关配置信息。ZDO:ZDO目录。ZMac: MAC层目录,包括MAC层参数配置及MAC层LIB库函数回调处理函数。ZMain:主函数目录,包括入口函数及硬件配置文件。Output:输出文件目录,这个EW8051 IDE自动生成的。 从上面的描述中可以看出,整个协议栈中,对于ZigBee的功能已经全部体现,在此基础上建立一个项目的方法主要是改动应用层 。
4.2.2 应用程序添加
整个协议栈是以一个OS贯穿的,要加入自己的应用,就要添加一个任务,在任务中执行,与协议栈实现无缝连接。
1、添加一个任务。在协议栈中的OSAL.c文件中,byteosal_init_system( void )函数的功能是初始化OS、添加任务到OS任务表中。在这个函数中通过调用osalAddTasks()函数来定制项目所需要应用的任务,该函数属于应用层和OS之间的接口函数,一般项目的建立需要根据系统的需要自己编写改函数,并将函数放到应用层。osalAddTasks()函数是通过osalTaskAdd()函数完成任务添加。
首先,将支持协议栈功能需要的任务加载到该函数中,
void osalAddTasks( void )
{
osalTaskAdd (Hal_Init, Hal_ProcessEvent,OSAL_TASK_PRIORITY_LOW);
#if defined( ZMAC_F8W )
osalTaskAdd( macTaskInit, macEventLoop,OSAL_TASK_PRIORITY_HIGH );
#endif
#if defined( MT_TASK )
osalTaskAdd( MT_TaskInit, MT_ProcessEvent,OSAL_TASK_PRIORITY_LOW );
#endif
osalTaskAdd( nwk_init, nwk_event_loop,OSAL_TASK_PRIORITY_MED );
osalTaskAdd( APS_Init, APS_event_loop,OSAL_TASK_PRIORITY_LOW );
osalTaskAdd( ZDApp_Init, ZDApp_event_loop,OSAL_TASK_PRIORITY_LOW );
}
这些任务是协议栈运行的先决条件,为了更好的使用协议栈,建议将这些任务都添加到任务列表中。这些函数的参数条件在协议栈中已经定义好,可以直接使用。
从上面加载的函数中可以发现,要建立一个单独的任务,必须先将osalTaskAdd()函数所需要的参数条件定义好,这些参数分别是初始化函数example_Init,任务处理函数example_event_loop和任务优先级。
2、任务初始化函数。任务初始化函数的功能是将该任务需要完成的功能的功能部件初始化,在每一个任务的初始化函数中,必须完成的功能是要得到设置任务的任务ID。
void SampleApp _Init ( uint8 task_id )
{
SampleApp _Init = task_id;
}
由于在这个任务中还有其他的功能,所以,对其他功能也需要做一定的初始化,包括对发送数据的设置,按键的设置等。实现的函数为:
void SampleApp_Init ( uint8 task_id )
{
SampleApp_TaskID = task_id; //任务ID
SampleApp_NwkState = DEV_INIT; //网络类型
SampleApp_TransID = 0; // 设置发送数据的方式和目的地址,
SampleApp_All_DstAddr.addrMode =(afAddrMode_t)AddrBroadcast;//广播到所有的设备
SampleApp_All_DstAddr.endPoint =SAMPLEAPP_ENDPOINT;
SampleApp_All_DstAddr.addr.shortAddr = 0xFFFF;
// 单播到一个设备
SampleApp_Single_DstAddr.addrMode =(afAddrMode_t)afAddrGroup;
SampleApp_Single_DstAddr.endPoint =SAMPLEAPP_ENDPOINT;
// 设置 endpoint description.
SampleApp_epDesc.endPoint = SAMPLEAPP_ENDPOINT;
SampleApp_epDesc.task_id =&SampleApp_TaskID;
SampleApp_epDesc.simpleDesc
= (SimpleDescriptionFormat_t*)&SampleApp_SimpleDesc;
SampleApp_epDesc.latencyReq = noLatencyReqs;
// 登记endpoint description 到 AF
afRegister( &SampleApp_epDesc );
// 登记所有的按键事件
RegisterForKeys( SampleApp_TaskID );
}
3、任务处理函数。任务处理函数是对任务发生后的事件进行处理,在这个项目中主要完成的功能是通过协调器上的按键发送一个数据,控制路由器的小灯。所以里面就应该设计到按键的事件处理,网络状态的判断(判断设备的类型,是协调器还是路由器或者是终端设备)和接收到信息后的处理。处理函数为:
uint16 SampleApp_ProcessEvent( uint8 task_id,uint16 events )
{
afIncomingMSGPacket_t *MSGpkt;
if ( events & SYS_EVENT_MSG ) //系统信息,
{ MSGpkt= (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID ); //OS发送过来的信息
while ( MSGpkt )
{
switch ( MSGpkt->hdr.event )
{ // 按键事件
case KEY_CHANGE: //按键处理函数
SampleApp_HandleKeys( ((keyChange_t*)MSGpkt)->keys );
break; // 接收数据事件
case AF_INCOMING_MSG_CMD: //接收数据的处理函数
SampleApp_MessageMSGCB( MSGpkt );
break; // 网络状态发生变化时间
case ZDO_STATE_CHANGE:
SampleApp_NwkState =(devStates_t)(MSGpkt->hdr.status); //获取网络状态
if ( (SampleApp_NwkState == DEV_ZB_COORD)//判断网络类型
|| (SampleApp_NwkState == DEV_ROUTER)
|| (SampleApp_NwkState == DEV_END_DEVICE) )
{
}
else
{ // 设备不属于这个网络
}
break;
default:
break;
} // 释放存储器
osal_msg_deallocate( (uint8 *)MSGpkt ); // Next- 如果有一个空闲的任务
MSGpkt = (afIncomingMSGPacket_t*)osal_msg_receive( SampleApp_TaskID );
} // 返回未处理的任务
return (events ^ SYS_EVENT_MSG);
}
return 0;
}
4、按键子函数。按键子函数的功能是处理所有的按键事件,按键的底层驱动函数在Hal_key.c中,在这里按键需要完成的任务是,当协调器按键1被按下后,以广播的方式发送数据去让路由器小灯闪烁。
void SampleApp_HandleKeys(uint8 keys )
{
if ( keys & HAL_KEY_SW_1 )
{
if(SampleApp_NwkState == DEV_ZB_COORD) //如果是协调器
SampleApp_SendFlashMessage(SAMPLEAPP_FLASH_DURATION ); //发送数据
else
{
}
}
}
5、接收处理函数。接收处理函数的功能有两部分,一是路由器的接收函数,二是协调器的接收处理函数。在这个项目里面,我们将这两种设备的处理函数都固化在了一个函数里面,用串ID来判断他们的设备类型。当路由器接收到数据后,先判断该信息的串ID,然后判断命令,如果命令正确,则小灯闪烁,然后单播发送确认信号给协调器,协调器收到信号后,同样先判断串ID,然后确认命令后小灯闪烁示意。
void SampleApp_MessageMSGCB(afIncomingMSGPacket_t *pkt )
{
unsigned char Rx_Buf[4];
switch ( pkt->clusterId )
{
case SAMPLEAPP_CLUSTERID1:
memcpy(Rx_Buf,pkt->cmd.Data,3);
if((Rx_Buf[0] == 'Y') && (Rx_Buf[1] =='E') && (Rx_Buf[2] == 'S'))
{
HalLedBlink( HAL_LED_4, 4, 50, 250); //小灯闪烁四次
}
break;
case SAMPLEAPP_CLUSTERID2:
memcpy(Rx_Buf,pkt->cmd.Data,4);
if((Rx_Buf[0] == 'O') && (Rx_Buf[1] =='P') && (Rx_Buf[2] == 'E') && (Rx_Buf[3] == 'N'))
{
HalLedBlink( HAL_LED_4, 4, 50, 250); //小灯闪烁四次
SendData("YES",pkt->srcAddr.addr.shortAddr,3);//以单播的方式回复信号
}
break;
}
}
6、发送函数:广播发送一段数据
void SampleApp_SendFlashMessage( uint8 *buffer )
{
if ( AF_DataRequest( &SampleApp_All_DstAddr, &SampleApp_epDesc,
SAMPLEAPP_CLUSTERID2,
4,
buffer,
&SampleApp_TransID,
AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
//********************************************************************
void SampleApp_SendData(uint8 *buf, uint16 addr, uint8 Leng)
{
SampleApp_Single_DstAddr.addr.shortAddr = addr;
if ( AF_DataRequest( &SampleApp_Single_DstAddr, //发送的地址和模式
&SampleApp_epDesc, //终端(比如操作系统中任务ID等)
SAMPLEAPP_CLUSTERID1,//发送串ID
Leng,
buf,
&SampleApp_TransID,
AF_DISCV_ROUTE,
// AF_ACK_REQUEST,
AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ) {
}
else
{
}
}
发送数据只是调用一个函数,在这里不多做解释。
在完成以上的步骤之后就可以完成任务的添加。用户就可以实现自己的程序功能,但是由于Z_Stack已经把通信协议写好(如图4-4),所以只需要调用函数就可以完成无线传感器网络,这样只能使用却不能了解关于具体底层的信息。所以对于无线传感器网络开发来说的话,Tiny OS则是完全开放源代码的专用于无线传感器网络的操作系统。
Tiny OS系统在Windows环境下移植与开发
首先,就先来安装cygwin: 从cygwin.com下载一个名为setup.exe的安装程序,打开,选一选安装路径,一路点下一步就会完成安装。装完后,桌面上多出一个cygwin图标,打开即可进行cygwin的命令行,所有操作都在这个命令行中完成[18]。 cygwin默认安装的工具比较少,连gcc4,perl,python,make,rpm都没有,所以去重新打开setup.exe,在select packages页中将gcc4,perl,python,make,rpm,libmpfr4标记为安装。
现在,cygwin环境已经比较完整,接着就该配置tinyos环境了。 TinyOS环境的配置在官方文档中有很详细的描述,但是只针对cc2530的话可以将配置过程简化很多:
下载nesc和tinyos-tools的cygwin安装包,
nesc-1.3.1-1.cygwin.i386.rpm,
tinyos-tools-1.4.0-3.cygwin.i386.rpm
放到某个目录下,比如c盘根目录下。然后,在cygwin中切换到该目录,安装这两个包:
cd /cygdrive/c
rpm -ivhnesc-1.3.1-1.cygwin.i386.rpm
rpm -ivhtinyos-tools-1.4.0-3.cygwin.i386.rpm
这样tinyos环境就配置好了。接着就去下载cc2530的tinyos移植的源代码tinyv6,开发者把cc2530的tinyos移植和一个ipv6协议栈一块发布了,所以甚至可以在cc2530上用tinyos跑ipv6。
解压下载的源码包:
tar xvf tinyv6-x.x.tar.bz2
接着执行一个脚本自动设置一些环境变量:
cd tinyv6-x.x
source tinyv6.sh
不错
不错,感谢分享。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
“由于传感器节点体积小,发送端和接收端都贴近地面,障碍物多,干扰大”。贴近地面,障碍物多,干扰大!这个是怎么得出来的?我上次在田径场与同学试验过。同样的距离,把发送端举在手上。数据丢包少。如果放在地上,丢包就很严重。甚至协调器完全接受不到数据!
楼主给力啊
亲爱的楼主请问您的2nH的电感选择需要考虑自谐振频率和直流阻值吗
这个设计是参考的TI的官方设计的,其实还有一个匹配低通芯片比较好用,可以简化巴伦天线设计。就是我在里面提到的2450BM15A0002。
刚看了这个的datasheet 确实省力了不少 而且效果也好一些 请问楼主有没有这个芯片的封装呀
我没有这个封装,当时就是用的匹配电容,所以效果不是很好的。