CC2430学习模块协议分析实验指导

合集下载

基于CC2430的串口无线模块的设计

基于CC2430的串口无线模块的设计

3 hij 4& 56 (%2[ " kMNlmnopqr
? s t u v w x y !z { | } ~ " !t
&&&&( n ! g u 4 56 #4& 56 ( s
y !ntuvwx " !"56P. .0$%$ VN !+, ! . ,’-$%$ A .0$%$ 2[4 117 2[ "
90;").I #(’JK/J"’9 L> 9 DMAN1 V Ç #9 L> 9 $*)#*O. #O)* # È É Ê Ë " ..’/(0 ? Ì > ’:/ PQR Í Î ! w K Ï Ð S’:0 TU(:K TV Ñ Ò [ Ó Ô Ï % lm2 ’F @*! *lm2 ’; @* &# Õ
98*720:7’,1? 1ABX‘AB? A6X N5aC‘AB? X?N2=626=N 5a A ‘2B?M?NN $D _62C ZAN?X 56 ..’/(0 AB? 26CB5X_4?X: ,1? ZAN2N 41ABA4C?B2NC24N 5a ..’/(0 2N =2b?6! A6X C1? @?AN_B?N 5a B?NCBA2626= a5B ?M?4CB@A=6?C24 26C?B# a?B? X2N4_NN?X: ;)< 1.2=*’ ‘2B?M?NN $D _62Cc ..’/(0c I*$, ..’/(0 « ¬ ­ ® .123456 ¯ ° ! U = ± ² ³ ´ µ 788890’:";:/ ¶¦’·¨ <2=>?? ¸¹ " ..’/(0 w K .123456 ¯ ° º » 9 %@ABC$D 0( & 0 0:"9 !@ .)E% ? ¼ D ½ ! w K F @@ !F @@ G-H/9 ¾

基于CC2430的ZigBee无线数据传输模块的设计和实现

基于CC2430的ZigBee无线数据传输模块的设计和实现

基于CC2430的ZigBee无线数据传输模块的设计和实现现在,无线通信技术已经成为人们日益关注的问题之一。

采纳IEEE802.15.4标准,利用全球共用的2.4 GHz公共频率举行无线测量和系统监控,而且具有显然的低成本、低功耗、网络节点多、传输距离远等优势。

目前,ZigBee技术已被视为替代有线监视和控制网络领域最有前景的技术之一。

为此,本文论述了一种基于CC2430芯片的无线数据传输模块的设计办法。

1 ZigBee简介ZigBee是一种基于IEEE802.15.0标准的短距离、低速率无线网络技术,该无线衔接技术主要解决低成本、低功耗、低复杂度、低传输速率、近距离的设备联网应用,主要用于无线网络和测量控制方面。

国际上,IEEE802.15.4工作组及ZigBee联盟共同致力于该无线衔接技术的推广工作,其中,IEEE802.15.4工作组主要负责制定ZigBee物理层及MAC 层协议.其余协议主要参照和采纳现有标准,以便于今后不同厂商设备的互联互通;ZigBee联盟则负责高层应用及市场推广工作。

于2002年成立的ZigBee联盟如今已经吸引了上百家芯片公司、无线设备公司加入。

此外,、TI等国际巨头也都已推出了比较成熟的ZigBee开发平台。

ZigBee标准是基于802.15.4协议栈而建立的,它具备了强大的设备联网功能,并支持三种主要的自组织无线网络类型,即星型结构、网状结构(Mesh)和簇状结构(Cluster tree),其中网状结构具有很强的网络茁壮性和系统牢靠性。

ZigBee协议比、GSM、Wi-Fi越发容易有用,表1列出了ZigBee同其它无线网络的比较。

2 总体设计为了举行模块化的设计,本文采纳了基于通用异步收发模式(UART)接口的设计,以便便利的通过此接口将STIM(智能传感器接口模块)和该第1页共3页。

CC2430模块说明

CC2430模块说明

CC2430模块说明Rer 1.0一.关于本说明本说明包含 CC2430 无线芯片简要介绍和无线龙 CC2430 无线模块硬件接口。

关于CC2430 软件示例将在另外的文档中介绍。

CC2430 详细资料请参阅器件手册。

二.CC2430 芯片介绍2430芯片的主要特点CC2430芯片延用了以往CC2420芯片的架构,在单个芯片上整合了ZigBee 射频(RF)前端、内存和微控制器。

它使用1个8位MCU(8051),具有128 KB可编程闪存和8 KB 的RAM,还包含模拟数字转换器(ADC)、几个定时器(Timer)、AES128协同处理器、看门狗定时器(Watchdog timer)、32 kHz晶振的休眠模式定时器、上电复位电路(Power On Reset)、掉电检测电路(Brown out detection),以及21个可编程I/O引脚。

CC2430芯片采用0.18 μm CMOS工艺生产;在接收和发射模式下,电流损耗分别低于27 mA或25 mA。

CC2430的休眠模式和转换到主动模式的超短时间的特性,特别适合那些要求电池寿命非常长的应用。

CC2430芯片的主要特点如下:◆高性能和低功耗的8051微控制器核。

◆集成符合IEEE802.15.4标准的2.4 GHz的 RF无线电收发机。

◆优良的无线接收灵敏度和强大的抗干扰性。

◆在休眠模式时仅0.9 μA的流耗,外部的中断或RTC能唤醒系统;在待机模式时少于0.6 μA的流耗,外部的中断能唤醒系统。

◆硬件支持CSMA/CA功能。

◆较宽的电压范围(2.0~3.6 V)。

◆数字化的RSSI/LQI支持和强大的DMA功能。

◆具有电池监测和温度感测功能。

◆集成了14位模数转换的ADC。

◆集成AES安全协处理器。

◆带有2个强大的支持几组协议的USART,以及1个符合IEEE 802.15.4规范的MAC 计时器,1个常规的16位计时器和2个8位计时器。

CC2430模拟IIC的数据读取

CC2430模拟IIC的数据读取

[0o原创]CC2430模拟IIC的数据读取[注:本文源自--“飞比”Zigbee论坛,如需转载请保留此行]发布: 2010-7-29 10:57 | 作者: L.fish | 来源: “飞比”Zigbee论坛近来为了做一个加速度传感器的项目,其中用到了无线模块由于英明神武的老板决定用ZigBee来做传输结果就跑出了一些列的问题其中一个就是MXC6202加速度传感器传输的数据用到了IIC协议要用CC2430来做IIC的模拟因为摸过了一段时间的CC2430,知道其中还是51的内核以为是很简单的东西,应该和atmel的8051差不多的但是做的时候又碰到了一系列的问题最后绕了一圈才发现,哦,原来如此2430芯片和51其中一个很大的区别就是:必须人为的设置IO口的输入输出方向也就是要设置每个端口的pin脚的PXDIR是1还是0说还是太空泛了,那就上程序吧......和51的程序相比,其实大部分还是相同的,我在这里就主要讲解一下两者不同的地方只能算作一个平台的移植吧....源程序会附在后面SDA和SCL的读写其实IIC总线协议的实现就是控制这两根线,让数据在规定的时候进行传输其中就要最主要的就是对SCL的写操作和SDA的读写以下是i2c_1.c的源程序,讲解就穿插其中.....//i2c_1.c#include "ioCC2430.h"#include "i2c.h"#define TRUE 1#define FALSE 0/*我的管脚定义是SDA定义为P1.5SCL定义为P1.4 */#define SCL P1_4#define SDA P1_5/*一个nop就是一条机器指令周期= 1/32MHz那32个nop就是1us啦----这里是outman给我做出的讲解,在此再作感谢*/void Delay_1u(unsigned int microSecs) {while(microSecs--){/* 32 NOPs == 1 usecs */asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");asm("nop"); asm("nop");}}unsigned char error; /*错误提示,全局变量*//*当通过CC2430的IO端口往外面写数据的时候必须将对应的IO端口数据方向设置为输出CC2430中DIRPX_Y为1时IO口为输出功能DIRPX_Y为0时IO口为输入功能我的SDA是P1.5,则SDA为输出功能时P1口DIR应该是0010 0000即0x20,其他可以依次类推......啰嗦完毕,继续程序....*/void WriteSDA1(void)//SDA输出1,相当于51里面的SDA=1{ P1DIR |= 0x20;SDA = 1;}void WriteSDA0(void)//SDA输出0{P1DIR |= 0x20;SDA = 0;}void WriteSCL1(void)//SCL 输出1{P1DIR |= 0x10;SCL = 1;}void WriteSCL0(void)//SCL 输出1{P1DIR |= 0x10;SCL = 0;}void ReadSDA(void)//这里设置SDA对应IO口DIR可以接收数据{ P1DIR &= 0xDF;}/*启动I2C总线的函数,当SCL为高电平时使SDA产生一个负跳变*/ void I2C_Start_1(void){WriteSDA1();WriteSCL1();Delay_1u(50);WriteSDA0();Delay_1u(50);WriteSCL0();Delay_1u(50);}/*终止I2C总线,当SCL为高电平时使SDA产生一个正跳变*/void I2C_Stop_1(void){WriteSDA0();Delay_1u(50);WriteSCL1();Delay_1u(50);WriteSDA1();Delay_1u(50);WriteSCL0();Delay_1u(50);}/*发送0,在SCL为高电平时使SDA信号为低*/void SEND_0_1(void) /* SEND ACK */{WriteSDA0();WriteSCL1();Delay_1u(50);WriteSCL0();Delay_1u(50);}/*发送1,在SCL为高电平时使SDA信号为高*/ void SEND_1_1(void){WriteSDA1();WriteSCL1();Delay_1u(50);WriteSCL0();Delay_1u(50);}/*发送完一个字节后检验设备的应答信号*/char Check_Acknowledge_1(void){WriteSDA1();WriteSCL1();Delay_1u(50);F0=SDA;Delay_1u(50);WriteSCL0();Delay_1u(50);if(F0==1)return FALSE;return TRUE;}void Write_Acknowledge_1(void){WriteSDA0();Delay_1u(50);WriteSCL1();Delay_1u(50);WriteSCL0();Delay_1u(50);}/*向I2C总线写一个字节*/void WriteI2CByte_1(char b){char i;for(i=0;i<8;i++){if((b<<i)&0x80){SEND_1_1();}else{SEND_0_1();}}}/*从I2C总线读一个字节*/char ReadI2CByte_1(void){char b=0,i;WriteSDA1();for(i=0;i<8;i++){WriteSCL0();Delay_1u(50);WriteSCL1();Delay_1u(50);ReadSDA();F0=SDA;//寄存器中的一位,用于存储SDA中的一位数据if(F0==1){b=b<<1;b=b|0x01;}elseb=b<<1;}WriteSCL0();return b;}PS:这里没有重要讲解IIC的实现原理比如什么时候发送1,什么时候发送0这里主要是讲解了一下在移植过程中需要注意的问题如果有什么问题再问吧整理一下需要注意的:1.需要手动设置IO方向2.延时设定的方式和晶振是有关系的,需要多长时间可以参照前面的程序程序参考过robin's evolution的那篇用cc2430读取A T24CXX的驱动程序文章以及感谢群里的on the way给我耐心讲解51的IIC最后还是要感谢一下outman,谢谢你的提醒over。

基于TinyOS的CC2430 RSSI定位的设计与实现

基于TinyOS的CC2430 RSSI定位的设计与实现

基于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语言由于无线传感器网络的特殊性,需要操作系统能够高效地使用传感器节点的有限内存、低功耗处理器、多样传感器、有限的电源,并且能对各种特定应用提供最大的支持。

cc2430 zigbee模块的 SimpleApp 例子解读-2 程序分析

cc2430 zigbee模块的 SimpleApp 例子解读-2 程序分析

学习zigbee入门SimpleApp 例子解读-2 程序分析:灯开关灯实验:开关设备通过发送命令切换控制设备的状态,并通过指示灯的状态变化反应操作是否成功。

在SimpleApp,SimpleController.c(灯管理器设备)按键处理函数zb_HandleKeys中,当SW1被按下,它将使设备作为协调器使用;期间按下SW2,它将是该设备作为路由器启动。

1.网络形成:ZDO_StartDevice功能描述:在网络中启动设备,协调器、路由器、终端设备都可以用该函数启动,启动之后,设备根据自身的类型去建立或发现和加入网络。

看看ZDO_StartDevice函数完整形式:void ZDO_StartDevice( byte logicalType,devStartModes_t startMode,byte beaconOrder,byte superframeOrder ){ZStatus_t ret;ret = ZUnsupportedMode;#if defined(ZDO_COORDINATOR) //--条件编译语句,选择性的启动协调器if ( logicalType == NODETYPE_COORDINATOR ) //--逻辑类型,协调器{if ( startMode == MODE_HARD ) //--启动模式,硬件启动(软件启动无线龙注释暂不启动){devState = DEV_COORD_STARTING; //--协调器启动ret = NLME_NetworkFormationRequest( zgConfigPANID, zgDefaultChannelList, //--网路形成请求zgDefaultStartingScanDuration, beaconOrder,superframeOrder, false );}else if ( startMode == MODE_RESUME ) //--恢复{// Just start the coordinatordevState = DEV_COORD_STARTING;ret = NLME_StartRouterRequest( beaconOrder, beaconOrder, false ); //--路由启动请求}else{#if defined( LCD_SUPPORTED ) //--液晶显示支持(--条件编译)//HalLcdWriteScreen( "StartDevice ERR", "MODE unknown" );ClearScreen();Print8(HAL_LCD_LINE_1,10,"StartDevice ERR",1);Print8(HAL_LCD_LINE_2,10,"MODE unknown",1);#endif}}#endif // !ZDO_COORDINATOR#if !defined ( ZDO_COORDINATOR ) || defined( SOFT_START ) //--不是协调器,软件启动if ( logicalType == NODETYPE_ROUTER || logicalType == NODETYPE_DEVICE )//--逻辑类型,路由,终端设备{if ( (startMode == MODE_JOIN) || (startMode == MODE_REJOIN) ) //--启动模式,加入,再加入{devState = DEV_NWK_DISC;#if defined( MANAGED_SCAN ) //--管理扫描ZDOManagedScan_Next(); //--调用管理扫描ret = NLME_NetworkDiscoveryRequest( managedScanChannelMask,BEACON_ORDER_15_MSEC );//--网络发现请求#elseret = NLME_NetworkDiscoveryRequest( zgDefaultChannelList, zgDefaultStartingScanDuration ); #endif}else if ( startMode == MODE_RESUME ) //--恢复{if ( logicalType == NODETYPE_ROUTER ) //--路由{ZMacScanCnf_t scanCnf; //--扫描确认devState = DEV_NWK_ORPHAN; //--设备已经失去了其母节点的信息/* if router and nvram is available, fake successful orphan scan *///--如果路由器和NVRAM可用,假成功的孤儿扫描scanCnf.hdr.Status = ZSUCCESS;scanCnf.ScanType = ZMAC_ORPHAN_SCAN;scanCnf.UnscannedChannels = 0;scanCnf.ResultListSize = 0;nwk_ScanJoiningOrphan(&scanCnf);ret = ZSuccess;}else //--终端节点{devState = DEV_NWK_ORPHAN;ret = NLME_OrphanJoinRequest( zgDefaultChannelList, //--再加入请求zgDefaultStartingScanDuration );}}else{#if defined( LCD_SUPPORTED )// HalLcdWriteScreen( "StartDevice ERR", "MODE unknown" );Print8(HAL_LCD_LINE_1,10,"StartDevice ERR",1);Print8(HAL_LCD_LINE_2,10,"MODE unknown",1);#endif}}#endif //!ZDO COORDINATOR || SOFT_STARTif ( ret != ZSuccess )osal_start_timerEx(ZDAppTaskID, ZDO_NETWORK_INIT, NWK_RETRY_DELAY );}2、绑定:zb_BindDevice ----已知扩展地址的绑定(1.4.3-1.2.1把已知和未知的结合起来了,还结合了绑定移除)---未知设备扩展地址的绑定---移除绑定//--设备建立绑定和移除绑定信息相关void zb_BindDevice ( uint8 create, //--是否创建绑定,ture为创建,false则解除uint16 commandId, //--命令ID,基于某种命令的绑定uint8 *pDestination ) //--指向扩展地址的指针{zAddrType_t destination; //--目的设备的类型uint8 ret = ZB_ALREADY_IN_PROGRESS; //--if ( create ) //--是否创建绑定,ture为创建,false则解除{if (sapi_bindInProgress == 0xffff) //--绑定地址为0xffff{if ( pDestination ) //--已知扩展地址的绑定,即*pDestination为非NULL{destination.addrMode = Addr64Bit; //--目的地址模式,长地址osal_cpyExtAddr( destination.addr.extAddr, pDestination );//--把扩展地址复制到extAddr中//--通过APSME_BindRequest创建绑定请求ret = APSME_BindRequest( sapi_epDesc.endPoint, commandId,&destination, sapi_epDesc.endPoint );if ( ret == ZSuccess ){// Find nwk addr //--发现网络地址,得到被绑定设备的短地址ZDP_NwkAddrReq(pDestination, ZDP_ADDR_REQTYPE_SINGLE, 0, 0 );osal_start_timerEx( ZDAppTaskID, ZDO_NWK_UPDATE_NV, 250 );}}else{ret = ZB_INVALID_PARAMETER;destination.addrMode = Addr16Bit;destination.addr.shortAddr = NWK_BROADCAST_SHORTADDR;if ( ZDO_AnyClusterMatches( 1, &commandId, sapi_epDesc.simpleDesc->AppNumOutClusters,sapi_epDesc.simpleDesc->pAppOutClusterList ) ){// Try to match with a device in the allow bind mode --匹配一个允许绑定模式下的设备ret = ZDP_MatchDescReq( &destination, NWK_BROADCAST_SHORTADDR,sapi_epDesc.simpleDesc->AppProfId, 1, &commandId, 0, (cId_t *)NULL, 0 );}else if ( ZDO_AnyClusterMatches( 1, &commandId, sapi_epDesc.simpleDesc->AppNumInClusters,sapi_epDesc.simpleDesc->pAppInClusterList ) ) {ret = ZDP_MatchDescReq( &destination, NWK_BROADCAST_SHORTADDR, sapi_epDesc.simpleDesc->AppProfId, 0, (cId_t *)NULL, 1, &commandId, 0 );}if ( ret == ZB_SUCCESS ){// Set a timer to make sure bind completes --设置一个时间,确保绑定完成。

模块使用说明书

模块使用说明书

注意事项:1,使用时请轻拿轻放,切勿扔摔。

2,轻拨轻推电源开关。

3,电池电压最好不要低于2.7V,因为cc2430芯片分辨哪个按键被按下时,是通过模拟量来分辨的,如果电压低于2.7V时,容易造成按键分辨不准确。

虽说CC2430芯片手册上说可以在2.0V工作,但那是最低电压,最好不要在芯片的最低电压点来工作。

最好使用碱性干电池,如南孚牌的等等。

4,做按键闪灯实验时,请不要太快速连续按键,按键动作尽量到位可靠,连续按键的间隔时间最好不少于5秒。

5,当使用电池供电的时候,请不要用仿真器给模块供电。

6、最好也好多看看光盘内的资料,在改动跳线帽等相关硬件连接的时候,请先多看看原理图。

最好在你熟悉了模块之后再改动跳线帽。

7、一定要顺着本模块使用说明书pdf文档仔细往下看,请不要急于求成,一定要仔细的照着本文档仔细操作,切不可急躁!!!初步认识模块篇:一、初步测试模块:cc2430模块套件到你手上的时候,里面下载了个zstack-1.4.3-1.2.1协议栈的sampleapp的demo工程。

第一步:先给两个模块的电池盒上好干电池。

第二步:观察下两个模块,两个模块两边排针上的跳线帽的跳法有一些不同,请仔细观察。

1、如果你购买的两个模块都是不带屏的模块,那么请仔细看下模块上的P2(2x10双排针),其中有一个模块的P2上的P02、P03针(P2双排针的内侧)是被一个跳线帽短接起来的。

那么这个模块在下载了zstack-1.4.3-1.2.1协议栈的sampleapp的DemoEB工程后,这个模块就被协议栈认为是协调器设备了。

但是一定要注意:在zstack-1.4.3.-1.2.1协议栈的其他工程中,是不会认为cc2430芯片的P02和P03被短接起来就是协调器的。

只有在zstack-1.4.3-1.2.1的sanpleapp的DemoEB工程中,代码才认为cc2430芯片的P02和P03被短接起来后就是协调器。

如果是带屏的模块,则屏板上右侧的P7双排针的第10针和第12针是被一个跳线帽连接在一起的,这样的模块zstack-1.4.3-1.2.1协议栈中sanpleapp的DemoEB工程中是被程序认为是协调器,而在zstack-1.4.3.-1.2.1.其他工程中,是不会被认为是协调器模块的。

基于CC2430的ZigBee无线通信模块设计

基于CC2430的ZigBee无线通信模块设计
紧 密联 系在 一 起 , 层 为 其 上 一 层 提 供 特 定 的 服 务 。 每
通信 的高频 电路 , 以被看做 高性 能 的单片机 , 是 又 可 但
区别于 常规 的单片机 。其构 成特 色除 具备 一般单 片机
的性 能外 又加 入 了 自己本 身应 用 的特 别 电路 , 是一 个
中 图分 类 号 :T 2 N9 文 献 标 识 码 :B .
I ZiB e技 术 ge
应 用层 和安 全 服 务 提 供 层 。Zg e iB e堆 栈 框 架 如 图 1
所示 。
Zg e 技 术是一 种新 兴 的低 功 耗 、 距离 、 i e B 短 低功 率 无线 通信组 网技术 , 是一种介 于无 线标记 与蓝牙 技术 之 间而提 出的技 术 , 目的 是 为 了使 用 近距 离 无 线通 信 领 域 。每种通 信 都有 特 殊 的通 信 协议 , 同样 Zg e 技 术 i e B 也 有着 自己的无 线通 信标 准 。监 测 区域 内数 以千 计 的 微 小的传感器 通信 , 是通过彼 此间的相 互协调 作用来 实 现 的 。Zg e 的无线数据 传输 网络 平 台由 6 0 i e B 50 0个 无 线数 传模块 构 成 , 其监 测 空 间很 广 阔。在 现实环 境 中, 建立的此种 网络平 台类 似 于移动 通信 的 C) 网 M, 移 动通信 网站 中的一个基站 , 在整体 的网络范 围内, 彼此 之间的相互通 信可 以互 通 , 并且 Z B e的整体 网络本身 ie g
还可以与其他 的各种 网络进行连接L ] 1。 Zg e iB e协议栈 是 由层 次 划分 而成 的 , 与 层 之 间 层
当。Zg e 堆 栈 的 建 立 是 以 I E 0 . 5 4的标 准 iB e E E 82 1.

CC2430低功耗模式(转自小峰博客)

CC2430低功耗模式(转自小峰博客)

CC2430低功耗模式(转自小峰博客)使用的协议栈版本信息: ZigBee2006\ZStack-1.4.3-1.2.1The CC2430 has four major power modes, called PM0, PM1, PM2 and PM3. PM0 is the active mode while PM3 has the lowest power consumption. The power modes are shown in Table 23 together with voltage regulator and oscillator options.PM0 : The full functional mode. The voltage regulator to the digital core is on and either the HS-RCOSC or the 32 MHz XOSC or both are running. Either the 32.768 kHz RCOSC or the 32.768 kHz XOSC is running.(PM0 is the full functional mode of operation where the CPU, peripherals and RF transceiver are active. The voltage regulator is turned on. PM0 is used for normal operation.)PM1 : The voltage regulator to the digital part is on. Neither the 32 MHz XOSC nor the HS-RCOSC are running. Either the 32.768 kHz RCOSC or the 32.768 kHz XOSC is running. Thesystem will go to PM0 on reset or an external interrupt or when the sleep timer expires.(In PM1, the high-speed oscillators are powered down. The voltage regulator and the 32.768 kHz oscillators are on. When PM1 is entered, a power down sequence is run. When the device is taken out of PM1 to PM0, the high-speed oscillators are started. The device will run on the high speed RC oscillator until the high speed XOSC has settled.PM1 is used when the expected time until a wakeup event is relatively short since PM1 uses a fast power down/up sequence. ) PM2 : The voltage regulator to the digital core is turned off. Neither the 32 MHz XOSC nor the HS-RCOSC are running. Either the 32.768 kHz RCOSC or the 32.768 kHz XOSC is running. The system will go to PM0 on reset or an external interrupt or when the sleep timer expires.(PM2 has the second lowest power consumption. In stand-by mode the power-on reset, external interrupts, 32.768 kHz oscillator and sleep timer peripherals are active. All other internal circuits are powered down. The voltage regulator is also turned off. When PM2 is entered, a power down sequence is run. PM2 is used when the expected time until a wakeup event is relatively long since the power up/down sequence is relatively long. PM2 is typically entered when using the sleep timer. )PM3 : The voltage regulator to the digital core is turned off. None of the oscillators are running. The system will go to PM0 on reset or an external interrupt.(PM3 is used to achieve the operating mode with the lowest power consumption. In PM3 all internal circuits that are powered from the voltage regulator are turned off. The internal voltage regulator and all oscillators are also turned off. Power-on resetand external interrupts are the only functions that are operating in power-down mode, thus only a reset or external interrupt condition will wake the device up and place it into active mode. The contents of RAM and registers are preserved in power-down mode. PM3 uses the same power down/up sequence as PM2. PM3 is used to achieve ultra low power consumption when waiting for an external event.)协议栈对低功耗模式的配置:(具体参见hal_sleep.c)//---------------------------------------------------/* POWER CONSERVATION DEFINITIONS* Sleep mode H/W definitions (enabled with POWER_SAVING compile option)*/#define CC2430_PM0 0 /* PM0, Clock oscillators on, voltage regulator on */#define CC2430_PM1 1 /* PM1, 32.768 kHz oscillators on, voltage regulator on */#define CC2430_PM2 2 /* PM2, 32.768 kHz oscillators on, voltage regulator off */#define CC2430_PM3 3 /* PM3, All clock oscillators off, voltage regulator off *///---------------------------------------------------/* HAL power management mode is set according to thedifferent HW platform. Both* HAL_SLEEP_TIMER and HAL_SLEEP_DEEP selections will:* 1. turn off the system clock, and* 2. halt the MCU.* HAL_SLEEP_TIMER can be woken up by sleep timer interrupt, I/O interrupt and reset.!!* HAL_SLEEP_DEEP can be woken up by I/O interrupt and reset.!!*/#define HAL_SLEEP_OFF CC2430_PM0 //PM0#define HAL_SLEEP_TIMER CC2430_PM2 //PM2#define HAL_SLEEP_DEEP CC2430_PM3 //PM3//---------------------------------------------------最大最小睡眠时间/* MAX_SLEEP_TIME calculation:* Sleep timer maximum duration = 0xFFFF7F / 32768 Hz = 511.996 seconds* Round it to 510 seconds or 510000 ms (四舍五入)*/#define MAX_SLEEP_TIME 510000 /* maximum time to sleep allowed by ST *//* minimum time to sleep, this macro is to:* 1. avoid thrashing in-and-out of sleep with short OSAL timer (~2ms)* 2. define minimum safe sleep period for different CC2430 revisions* AN044 - MINIMUM SLEEP PERIODS WITH PULL-DOWN RESISTOR*/#if !defined (PM_MIN_SLEEP_TIME)#define PM_MIN_SLEEP_TIME 14 /* default to minimum safe sleep time for CC2430 Rev B */ #endif//---------------------------------------------------/* HAL power management mode is set according to the power management state.*/static uint8 halPwrMgtMode = HAL_SLEEP_OFF; //PM0/* stores the sleep timer count upon entering sleep */static uint32 halSleepTimerStart; //当进入睡眠时存储睡眠定时器计数值/* stores the accumulated sleep time */static uint32 halAccumulatedSleepTime; //存储睡眠定时器累积的计数值/* stores the deepest level the device is allowed to sleep* See AN044 - COMBINING POWER MODES*/static uint8 halSleepLevel = CC2430_PM2; //PM2 2#ifdef HAL_SLEEP_DEBUG_POWER_MODEstatic bool halSleepInt = FALSE;#endif//---------------------------------------------------OSAL_PwrMgr.h中:睡眠模式相关属性参数/* These attributes define sleep beheaver. The attributes can be changed* for each sleep cycle or when the device characteristic change.*/typedef struct{uint16 pwrmgr_task_state;uint16 pwrmgr_next_timeout;uint16 accumulated_sleep_time;uint8 pwrmgr_device;} pwrmgr_attribute_t;/* With PWRMGR_ALWAYS_ON selection, there is no power savings and the* device is most likely on mains power. The PWRMGR_BATTERY selection allows* the HAL sleep manager to enter SLEEP LITE state or SLEEP DEEP state.*/#define PWRMGR_ALWAYS_ON 0#define PWRMGR_BATTERY 1/* The PWRMGR_CONSERVE selection turns power savings on, all tasks have to* agree. The PWRMGR_HOLD selection turns power savings off.*/#define PWRMGR_CONSERVE 0#define PWRMGR_HOLD 1//---------------------------------------------------OSAL_pwrmgr.c中:With PWRMGR_ALWAYS_ON selection, there is no power savings andthe device is most likely on mains power.The PWRMGR_BATTERYselection allows the HAL sleep manager to enter sleep.void osal_pwrmgr_init( void ){// pwrmgr_attribute.pwrmgr_device = PWRMGR_BATTERY;pwrmgr_attribute.pwrmgr_device = PWRMGR_ALWAYS_ON; // Default to no power conservation.pwrmgr_attribute.pwrmgr_task_state = 0; //Cleared. All set to conserve}//********************************************************void halSleep( uint16 osal_timeout ){uint32 timeout;uint32 macTimeout;halAccumulatedSleepTime = 0; //睡眠定时器累积的计数值//-----------------------------------/* get next OSAL timer expiration converted to 320 usec units *///把osal_timeout转换成以320微秒为单位的时间值timeout = HAL_SLEEP_MS_TO_320US(osal_timeout);if (timeout == 0){timeout = MAC_PwrNextTimeout();}else{/* get next MAC timer expiration */macTimeout = MAC_PwrNextTimeout();/* get lesser of two timeouts */if ((macTimeout != 0) && (macTimeout < timeout)){timeout = macTimeout;}}//-----------------------------------/* HAL_SLEEP_PM2 is entered only if the timeout is zero and * the device is a stimulated(受激) device.*/ //timeout=0 且 device =stimulated device//timeout!=0则halPwrMgtMode=HAL_SLEEP_TIMER PM2 2 //timeout=0则halPwrMgtMode=HAL_SLEEP_DEEP PM3 3halPwrMgtMode = (timeout == 0) ? HAL_SLEEP_DEEP : HAL_SLEEP_TIMER;//-----------------------------------/* The sleep mode is also controlled by halSleepLevel which * defined the deepest level of sleep allowed. This is applied * to timer sleep only.*///halSleepLevel = CC2430_PM2 = 2if ( timeout > 0 && halPwrMgtMode > halSleepLevel ) //PM3 深度睡眠{halPwrMgtMode = halSleepLevel;}//-----------------------------------/* Allow PM1 only.* AN044 - RESTRICT USE TO PM1 ONLY*/#if defined (PM1_ONLY) && (PM1_ONLY == TRUE)if (timeout > 0){halPwrMgtMode = CC2430_PM1;}else{/* do not allow PM3 either */return;}#endif//-----------------------------------/* DEEP sleep can only be entered when zgPollRate == 0.* This is to eliminate any possibility of entering PM3 between * two network timers.*/#if !defined (RTR_NWK) && defined (NWK_AUTO_POLL)if ((timeout > HAL_SLEEP_MS_TO_320US(PM_MIN_SLEEP_TIME)) ||(timeout == 0 && zgPollRate == 0))#else//timeout=0或<最小睡眠时间if ((timeout > HAL_SLEEP_MS_TO_320US(PM_MIN_SLEEP_TIME)) ||(timeout == 0))#endif{halIntState_t intState, ien0, ien1, ien2;HAL_ENTER_CRITICAL_SECTION(intState);/* always use "deep sleep" to turn off radio VREG on CC2430 */if (MAC_PwrOffReq(MAC_PWR_SLEEP_DEEP) == MAC_SUCCESS){while( (HAL_SLEEP_MS_TO_320US(halAccumulatedSleepTime) < timeout) || (timeout == 0) ){/* get peripherals ready for sleep */HalKeyEnterSleep();#ifdef HAL_SLEEP_DEBUG_LEDHAL_TURN_OFF_LED3();#else/* use this to turn LEDs off during sleep */HalLedEnterSleep();#endif/* set main clock source to RC oscillator for Rev B and Rev D *///设置主时钟,准备进入睡眠. RC oscHAL_SLEEP_SET_MAIN_CLOCK_RC();//-------------------------------------/* enable sleep timer interrupt */if (timeout != 0){//睡眠时间大于最大允许睡眠时间if (timeout > HAL_SLEEP_MS_TO_320US( MAX_SLEEP_TIME )) {timeout -= HAL_SLEEP_MS_TO_320US( MAX_SLEEP_TIME );////设置sleeptimer定时时间halSleepSetTimer(HAL_SLEEP_MS_TO_320US( MAX_SLEEP_TI ME ));}else{/* set sleep timer *///设置sleeptimer定时时间halSleepSetTimer(timeout);}/* set up sleep timer interrupt */HAL_SLEEP_TIMER_CLEAR_INT(); //清除中断标志HAL_SLEEP_TIMER_ENABLE_INT(); //使能中断}//-------------------------------------#ifdef HAL_SLEEP_DEBUG_LEDif (halPwrMgtMode == CC2430_PM1){HAL_TURN_ON_LED1();}else{HAL_TURN_OFF_LED1();}#endif//-------------------------------------/* save interrupt enable registers and disable all interrupts */ //备份各中断使能寄存器的值,并屏蔽中断HAL_SLEEP_IE_BACKUP_AND_DISABLE(ien0, ien1, ien2);//-------------------------------------/* This is to check if the stack is exceeding the disappearing * RAM boundary of 0xF000. If the stack does exceed the boundary* (unlikely), do not enter sleep until the stack is back to normal.*///检测有没有超出RAM界限if ( ((uint16)(*( __idata uint16*)(CSTK_PTR)) >= 0xF000) ){HAL_EXIT_CRITICAL_SECTION(intState);/* AN044 - DELAYING EXTERNAL INTERRUPTS, do not relocate this line.* it has to stay as close to PCON.IDLE = 1 as possible.*///EXTERNAL_INTERRUPT_DELAY(); //屏蔽低功郝/* set CC2430 power mode *///进入低功耗模式,等待唤醒再往下执行!HAL_SLEEP_SET_POWER_MODE(halPwrMgtMode);//########/* wake up from sleep */HAL_ENTER_CRITICAL_SECTION(intState);}//-------------------------------------/* restore interrupt enable registers *///恢复备份的各中断寄存器值HAL_SLEEP_IE_RESTORE(ien0, ien1, ien2);/* disable sleep timer interrupt *///关掉睡眠定时器中断HAL_SLEEP_TIMER_DISABLE_INT();/* set main clock source to crystal for Rev B and Rev D only *///设置主时钟,退出睡眠. 32MHx XOSCHAL_SLEEP_SET_MAIN_CLOCK_CRYSTAL();/* Calculate timer elasped *///计算流逝时间halAccumulatedSleepTime += (HalTimerElapsed() / TICK_COUNT);/* deduct the sleep time for the next iteration *///扣除时间if ( osal_timeout > halAccumulatedSleepTime){osal_timeout -= halAccumulatedSleepTime;}//-------------------------------------/* if the remaining time is less than the PM_MIN_SLEEP_TIME * burn the remaining time in a delay loop* AN044 - MINIMUM SLEEP PERIODS WITH PULL-DOWN RESISTOR*///睡眠时间小于最小安全睡眠时间if ( osal_timeout < PM_MIN_SLEEP_TIME ){halSleepWait(osal_timeout*1000);halAccumulatedSleepTime += osal_timeout;osal_timeout = halAccumulatedSleepTime;}//-------------------------------------#ifdef HAL_SLEEP_DEBUG_LEDHAL_TURN_ON_LED3();#else/* use this to turn LEDs back on after sleep */HalLedExitSleep();#endif//-------------------------------------/* handle peripherals; exit loop if key presses */if ( HalKeyExitSleep() ){#if defined (PM2_HOLDOFF_TIME) && (PM2_HOLDOFF_TIME > 0)/* The deepest sleep alowwed is PM1 until after the timer expired* AN044 - COMBINING POWER MODES*/halSleepLevel = CC2430_PM1;osal_stop_timerEx (Hal_TaskID, HAL_SLEEP_TIMER_EVENT);osal_start_timerEx (Hal_TaskID, HAL_SLEEP_TIMER_EVENT, PM2_HOLDOFF_TIME);#endif /* (PM2_HOLDOFF_TIME > 0) */break;}/* exit loop if no timer active */if ( timeout == 0 ) break;}//-------------------------------------/* power on the MAC; blocks until completion *///开RF振荡器MAC_PwrOnReq();/* adjust OSAL timers *///调整系统时间osal_adjust_timers();}HAL_EXIT_CRITICAL_SECTION(intState);}}//********************************************************低功耗这块内容一直没有实验成功,不知是没设置好还是硬件模块有问题,以后有时间再琢磨琢磨……相关学习网址:。

CC2430学习模块协议分析实验指导

CC2430学习模块协议分析实验指导

学习模块协议分析实验指导第一步:打开光盘找到“仿真与协议分析软件”文件夹,把“数据分析仪.rar”解压缩。

第二步:安装协议分析软件双击解压生成的文件“数据分析仪.exe”,一直点击“NEXT”按钮直到完成安装;如果想退出安装直接点击“cancle”按钮,按照提示即可退出安装。

第三步:连接实验设备首先把仿真器和2430学习板连接好,再用USB线把仿真器和电脑连接起来第四步:烧写程序打开CC2430基础实验5,如图所示1、首先在workspace下拉列表选择TX,如图:2、直接点击按钮进入debug或者在菜单栏找到debug进行程序烧写和仿真。

3、把workspace下拉列表改成RX,如图:2的操作即可。

4、如果下拉列表没有TX/RX,可以自己设置,设置方法如下:选择菜单栏project/edit configurations…弹出如下对话框点击“NEW”按钮弹出对话框在Name下空白处输入TX或者RX点击OK即可如果workspace下拉列表选择的是TX,请在菜单栏project下找到Options,点击它会出现如下对话框,请在Defined symbols处输入TX,点击OK,然后进入debug即可,此设置一般设置一次,便会自动保存。

RX状态设置同TX。

第四步:程序烧写完毕,设备建立网络把编程器与RX设备相连(请牢记编程器必须和RX设备相连,同时IAR软件仿真状态要撤销)给设备上电,同时也要给TX模块供电。

让两个模块建立通信。

第五步:协议分析开始开始菜单/所有程序/chipcon/packet Sniffer/CC2430IEEE802.15.4软件未运行状态如下在软件运行前选择信道和数据缓冲的大小(一般为20MB)。

在下面这个选项选取要显示的层以及每层的内容,修改selected Field选项即可按钮运行,便会观察到如下图所示效果。

工具栏按钮说明:清空接收区运行停止软件运行前清空列表显示最后一条信息字体转换底部6个可选区介绍:Setup:选择所使用的开发板,数据包缓存的大小(默认是20MB)和信道号。

基于CC2430的Zigbee无线数传模块设计

基于CC2430的Zigbee无线数传模块设计

p c a e,t o i r e r t isc mmu i a in dit n e a d sa ii lw o rd s i to n e e i n wi ih s nstv n c to sa c n tb lt o p we ispain a d r c pt t h g e i — y, o h i i whih c n be u e d l ta l w o t t y, c a s d wi e y a o c s.
fa wo k o e m o u e ic u i h un to fe t a t n t ic i a d t e PC e t o fg r to r me r ft d l n l d ng t e f cin o a h p rs i he cr u t n h h t s/c n iu a in s h r . a y t sswe e d ne p a tc l n e fe h y tm s a wie e s s n o ewo k wi ih o wa e M n e t r o r c ia l a d v ri d t e s se i r ls e s r n t r t h【 y i h g
无线 标记 技术 和 蓝牙 技术 之 间 的技 术方 案 。主要用
随着传感 器 技术 、 S D P技 术 、 计算 机技 术 和 芯 片 技 术 的快 速 发展 , 线 传 感 器 网 络 和 短 距 离无 线 个 无
人 局域 网技术 得 到 了飞 速发 展 。世 界 各大 半导 体公 司 都相继 研 发 出了基 于 Zg e 术 的 S C芯 片 , iBe技 O 使 得 Zge i e技术 能 够 在 很 小 的 空 问 以很 高 的性 能 得 B 以实现 , 在 各 方 面 应 用 中越 来 越 体 现 出其 优 势 。 并

CC2430研究记录

CC2430研究记录

【CC2430内部硬件图】【CC2430-F128存储空间】CC2430-F128的物理空间分为4个部分,即SFR、radio register、8K SRAM、128K flash;这四个存储空间在CC2430集成模块里,通过Memory Arbitrator对SFR总线、Data总线实现统一管理;为了达到高效访问各存储空间,通过DMA(direct memory access直接存储访问)机制将物理空间映射到16-bit映射表里,然后统一编制访问;映射表分配见以下两张表:CC2430-F128 XDA TA memory spaceCC2430-F128 Unified mapping of CODE space可见,映射表的低55K用以访问FLASH只读空间,高8K用以访问SRAM,中间的地址范围用以访问SFR和Radio register;在地址地图上,可以看到SFR、DA TA、CODE、XDATA四种数据类型,这些数据类型是有区别的,但是很显然,它们也是相互重叠的,即在概念上可能是相互重叠的;SFR:7-bit(0x80~0xFF)可读写寄存器,可在单个CPU周期里直接操作;DA TA:8-bit可读写存储器,小于128bytes可直接读写,大于128bytes间接读写;CODE:16-bit只读程序存储区(flash);XDATA:16-bit可读写数据存储区,其访问周期比DA TA慢,因为它是与CODE共用总线的;【CC2430外围接口】XOSC_Q1和XOSC_Q2:外接主时钟,32M;P2_3和P2_4:如果需要用到慢时钟,此二端口接32K副时钟;RF_N、RF_P、TXRX_SWITCH:外接天线;P0_0……P1_7、P0_0……P1_7、P2_0……P2_7(P2_3和P2_4在无慢时钟情况下作为I/O口):I/O口;其余端口接电源或接地;【特殊功能寄存器SFR】这些寄存器在ioCC2430.h中对应定义的SFRs表;这些积存器的功能见《CC2430数据手册》.P42;CPU寄存器:PSW (0xD0) – Program Status Word程序运算状态字;ACC (0xE0) – Accumulator用于存放计算源或结果或发送数据或其他;B (0xF0) – B Register用于乘除运算;SP (0x81) – Stack Pointer堆栈指针;中断相关寄存器:IEN0 (0xA8) – Interrupt Enable 0IEN1 (0xB8) – Interrupt Enable 1IEN2 (0x9A) – Interrupt Enable 2TCON (0x88) – Interrupt FlagsT2CON (0xC8) – Interrupt ControlS0CON (0x98) – Interrupt Flags 2S1CON (0x9B) – Interrupt Flags 3IRCON (0xC0) – Interrupt Flags 4IRCON2 (0xE8) – Interrupt Flags 5IP1 (0xB9) – Interrupt Priority 1IP0 (0xA9) – Interrupt Priority 0【中断向量表】这张向量表上的数值0……17并没有实际意义,与优先级等无关;以上提到两个中断优先级控制表IP0和IP1,这两个寄存器的同等位组合应用,表示如下:表中的x是一个byte的位,即0~7,由于向量表总共只有18个向量,这里将它们分成6组,每组3个向量,每一组里的3个向量可以有0~3四中优先级,3最高、0最低,如果不同组出现相同的优先级,那么就按照6个组的排列先后扫描:【I/O口】P0_0~P2_7:共24个I/O口,每个口都对应着三类寄存器的相应位;P0/P1/P2:移位积存器,即端口当前要发送或接收的1或0保存在该寄存器的对应位;P0SEL/ P1SEL/ P2SEL:每个I/O口的功能寄存器,同一个I/O口,可能用作普通I/O或给外围设备用,也可能在两个特殊功能上选0或1辨别谁优先,即在两个功能二选一时用1和0区分;P0DIR/ P1DIR/P2DIR:I/O口的方向寄存器,即输入或输出二选一,0为输入;P0INP/ P1INP/ P2INP:I/O口的输入模式寄存器,可能位拉高/拉低二态表示或采用三态表示,0为拉高/拉低二态表示;P0IFG/ P1IFG/ P2IFG:如果I/O口用作中断,该寄存器的对应位为中断状态标志位,有中断请求发生的时候,该对应位置1;PICTL:P0和P2的中断控制寄存器,控制中断使能、边沿触发、输出驱动能力;P1IEN:P1的中断控制寄存器,8bit分别控制P1_0……P1_7的中断使能;【定时器】16-bit定时器Timer1:系统时钟频率是0.25Mhz到32Mhz,在Timer1的控制寄存器里可以设置1-128分频,也就是说,Timer的计数频率可以达到1953.125至32M;Timer1的计数模式有三种:Free-running模式,从0开始计数到0xFFFF置T1CTL.OVFIF 标志位同时对计数值清0;Modulo模式,从0开始计数到用户设定数置T1CTL.OVFIF标志位,同时计数值清0;Up/Down模式,在0和用户设定数之间振荡计数,即先加计数然后减计数如此循环;Timer1的用户设定计数值放在T1CC0H:T1CC0L里;Timer1定时器控制了3各channel(通道),三个通道的控制寄存器为T1CCTLn(n值为1-3),Channel模式:channel模式在其寄存器T1CCTLn中设置,分为输入获取模式和输出对比模式,其中输入获取模式又有外接普通I/O口和RF两种;输入获取就是当外部信号到来的时候获取Timer1的计数器值,输出对比模式就是当Timer1计数器值计数到设定值时产生输出;Timer1中断:Timer1中断产生自三类事件:计数值达到某设定值、输入获取事件、输出对比事件;Timer1的三个channel由以下四个标志位控制:T1CTL.OVFIF,T1CTL.CH0IF, T1CTL.CH1IF, T1CTL.CH2IF;Timer1的寄存器分列如下:T1CNTH – Timer 1 Count HighT1CNTL – Timer 1 Count LowT1CTL – Timer 1 Control and StatusT1CCTLx – Timer 1 Channel x Capture/Compare ControlT1CCxH – Timer 1 Channel x Capture/Compare Value HighT1CCxL – Timer 1 Channel x Capture/Compare Value Low16-bit MAC定时器Timer2:Timer2用于带冲突避免的载波监听多路访问技术算法和802.15.4的MAC层计时器;在睡眠定时器配合使用的情况下,即使在低功耗模式下,计时功能仍然继续;Timer2计时与32.768K晶振保持同步;Timer2的计数器是16-bit加计数,设定值存放在T2CAPHPH:T2CAPLPL里,计数值达到该值,中断请求标志位T2PEROF2.PERIM置1,然后看T2CNF.PERIF判断是否产生中断;Timer2有个对应的调整值计数器即delta timer,其寄存器为T2THD:T2TLD,该寄存器采用减计数,只要里面值非零即开始减计数,什么时候该调整Timer2了,就用该计数器来延时将快的时间调整过来;Timer2的对比数寄存器是8-bit的,所以其内部设定的值只能跟Timer2计数器的高byte或低byte进行比较,具体选择高byte还是低byte由T2CNF.CMSEL标志位决定,当计数超过了对比数寄存器的值后,使中断标志位T2CNF.CMP置1;Timer2的溢出次数会在20-bit溢出次数寄存器T2OF2:T2OF1:T2OF0里面记录;Timer2的中断原因有三个:定时器溢出、达到对比数寄存器的值、达到设定的溢出次数;24-bit睡眠定时器Sleep Timer:Sleep Timer的主要功能是计算系统进入和退出低功耗睡眠模式的周期,同时就是在进入低功耗睡眠模式后用来维持MAC定时器Timer2;Sleep Timer的计时源是32.768K晶振;对比计数值在24-bit寄存器ST2:ST1:ST0里设置,IEN0.STIE是中断使能位,IRCON.STIF 是中断标志位;8-bit普通定时器Timer3、Timer4:普通定时器Timer3和Timer4就是用来平常的计时和通过软件定时产生波形,每个定时器都有其各自通道;时钟源可以自由选择,分频数为1、2、4……128;计数模式有4类:自由计数(溢出为止)、减计数、模计数(有设定值)、up/down振荡计数;【看门狗WDT】看门狗定时器Watchdog Timer:看门狗定时器仅在用到看门狗这一功能的时候才有效,如果不用该功能,也可以通过配置将其使用成普通的定时器;其原理是,当看门狗定时器使能位使能后开始计数,如果在计数值达到设定的间隔时间值仍然没有阻止,那么就复位系统;看门狗定时器的五个特征:4个可选间隔时间、看门狗模式、定时器模式、定时器模式下可产生中断请求、其所用时钟与系统时钟独立;看门狗定时器受寄存器WDCTL控制,其计数器为15-bit,时钟源是32.768KHz晶振;WDCTL.MODE为0的时候,即为看门狗模式,WDCTL.EN位置1后定时器开始计数,计数过程中不能对该位进行操作改变,一旦计数值达到设定的间隔时间,系统复位,所以要在间隔时间到达之前,将WDCTL.CLR[3:0]的值在1/2看门时钟周期内先写0x5后写0xA即达到阻止看门狗定时器计数的效果,此时计数值自动清0;值得注意的是,看门狗定时器模式下没有中断;在时钟源32.768 kHz情况下,给出了1.9 ms, 15.625 ms, 0.25 s和1 s四种间隔时间,其对应的计数值分别为64, 512, 8192 和32768;【USART】串行口有两个:USART0和USART1;串行口有两种模式:异步UART模式和同步SPI模式;UART模式采用2线(RXD/TXD)或4线(RXD/TXD/RTS/CTS);SPI模式采用3线(MOSI/MISO/SCK)或4线(MOSI/MISO/SCK/SS_N);串口波特率计算公式:其中BAUD_M和BAUD_E都可以通过寄存器设置,F是晶振值即32M;串口中断由全局中断控制寄存器控制,分别是:中断使能:•USART0 RX : IEN0.URX0IE•USART1 RX : IEN0.URX1IE•USART0 TX : IEN2.UTX0IE•USART1 TX : IEN2.UTX1IE中断标志:•USART0 RX : TCON.URX0IF•USART1 RX : TCON.URX1IF•USART0 TX : IRCON2.UTX0IF•USART1 TX : IRCON2.UTX1IF串口相关寄存器介绍如下(其中x代表串口号0或1):•UxCSR USART x Control and Status•UxUCR USART x UART Control•UxGCR USART x Generic Control•UxBUF USART x Receive/Transmit data buffer•UxBAUD USART x Baud Rate Control(Jon. cc2430用了地址映射机制,而且集成了无线模块和cpu,可以对寄存器直接操作,而不用管cpu和无线模块是怎么通信的。

Zigbee之旅(二):第一个CC2430程序

Zigbee之旅(二):第一个CC2430程序

/hustlzp/archive/2011/02/13/1953130.html一、承上启下在上一篇文章《Zigbee之旅(一):开天辟地》中,我们简要的介绍了Zigbee,以及其开发环境的搭建。

OK,现在工具都齐全了,一个问题随之产生:如何利用这些软、硬件来编写一个能够跑起来的程序呢?本篇文章基本是来回答以上问题的:以“LED灯闪烁”这个小实验作为例子,介绍如何配置IAR以适合开发基于CC2430的程序,如何运用IAR编写并在线调试程序。

二、IAR的配置IAR是一个强大的嵌入式开发平台,支持非常多种类的芯片。

IAR中的每一个Project,都可以拥有自己的配置,具体包括Device类型、堆/栈、Linker、Debugger等。

(1)新建 Workspace 和 Project首先新建文件夹ledtest。

打开IAR,选择主菜单File -> New -> Workspace建立新的工作区域。

选择Project -> Create New Project -> Empty Project,点击OK,把此工程文件保存到文件夹ledtest 中,命名为:ledtest.ewp(如下图)。

(2)配置General OptionsTarget设置:Device:CC2430;Code Mode:Near;Data model:Large;Calling convention:XDATA stack reetrantData pointer设置:Number of DPTRs:1Stack/Heap设置:XDATA stack size:0x1FF(3)Linker设置Linker command file:选择lnk51ew_cc2430.xcl(4)Debugger设置:Driver:Texas Instruments (本实验为真机调试,所以选择TI;若其他程序要使用IAR 仿真器,可选Simulator)Device Description file:CC2430.ddf至此,针对本实验的IAR配置基本结束,下面来介绍其编码实现。

CC2430开发套件使用指南

CC2430开发套件使用指南

CC2430开发套件使用指南
1.功能简介
CC2430开发套件硬件包括CC2430模块,仿真器底板和WX1110 多模块功能扩展板
三个部分,三者构成专业的ZigBee/WSN开发环境。

软件可以支持TI的zStack, SimpliTI, TI-MAC和Sample Examples等多个软件包。

2.初识硬件
CC2430模块
正面
背面有两个状态指示LED,LED 对应IO管脚:
CC2430仿真器底板
WX1110 多模块功能扩展板
可以在WX1110 多模块功能扩展板上安装CC2430模块,实现路由或网关节点功能。

3.搭建测试环境
测试步骤
1)把模块放到仿真器板上2x14排针接口
2)连接USB线到仿真器标数字的那个USB接口(后面称为仿真器接口)。

3)安装IAR编译软件
4)连接仿真器到计算机USB接口, 并按下电源开关
5)按照系统提示安装仿真器驱动(驱动位于IAR 安装目录下面,smartrf04eb的)
6)用IAR编译程序,配置Option选项,修改Debugger-> Setup-> Driver, 选择
“Texas Instrument"
7)编译好之后执行Debug就可以把程序下载到模块上,不同程序实现的功能不一
样。

cc2430仿真器使用说明

cc2430仿真器使用说明

在安装仿真器驱动之前,应先安装IAR开发环境,如果使用CC2430模块,建议安装IAR730,方便使用ZStack-CC2430-1.4.3-1.2.1.exe协议栈。

驱动安装步骤:1、将仿真器用USB数据线连接到电脑上,会弹出找到新硬件按钮:2、选择“从列表或指定位置安装”点击下一步:路径设为:C:\Program Files\IAR Systems\Embedded Workbench 4.0 Evaluation version\8051\drivers\Chipcon,点击下一步即可完成安装。

点击完成按钮。

3、建议先拔下USB数据线,然后连接用10芯仿真器线连接cc2430模块和仿真器,再用USB数据线连接仿真器与电脑,然后再打开“SmartRF flash programmer”。

打开之后就可看见cc2430模块了。

看见仿真器:到此仿真器驱动安装成功了。

在IAR环境下使用仿真器:打开IAR开发环境,出现一下界面。

点击Cancel,然后选择projiect->Create new project出现如下界面:选择8051和Empty project,点击OK输入相应文件名和存储路径后点击OK。

点击file->new->file在点击file->save填好相应文件名,点击“保存”。

进行如下画面操作:点击Add files后:这里我选择前面所建立的led_test.c,然后输入如下程序:保存好。

设置配置选项:点击project->options按图配置,其中Derivative information选项中选择:C:\Program Files\IAR Systems\Embedded Workbench 4.0 Evaluation version\8051\config\derivatives\Chipcon下的CC2430.i51。

点击左边栏类的Linker:如图勾选Override default Config选项里选择如图:在点击左边栏内的Debugger:Driver内选择Chipcon,再点击OK。

基于CC2430的无线传感器网络的实现.

基于CC2430的无线传感器网络的实现.

基于 CC2430的无线传感器网络的实现无线传感器网络 (Wireless Sensor Network, WSN 是由部署在监测区域内的大量廉价微型传感器节点组成,通过无线通信方式形成的一种多跳自组织网络系统,他是当前在国际上备受关注、涉及多学科、高度交叉、知识高度集成的前沿研究领域,综合传感器技术、嵌入式计算技术、现代网络及无线通信技术、分布式信息处理技术等,其目的是协作地感知、采集和处理网络覆盖区域中感知对象的信息 (如光强、温度、湿度、噪音、震动和有害气体浓度等物理现象 ,并以无线的方式发送出去,通过无线网络最终发送给观察者。

传感器、感知对象和观察者构成了传感器网络的 3个要素。

如果说 Internet 构成了逻辑上的信息世界,改变了人与人之间的沟通方式,那么无线传感器网络就是将逻辑上的信息世界与客观上的物理世界融合在一起,改变人类与自然界的交互方式。

人们可以通过传感器网络直接感知客观世界,从而极大地扩展现有网络的功能和人类认识世界的能力。

无线传感器网络作为一项新兴的技术,越来越受到国内外学术界和工程界的关注,其在军事侦察、环境监测、医疗护理、空间探索、智能家居、工业控制和其他商业应用领域展现出了广阔的应用前景, 被认为是将对 21世纪产生巨大影响的技术之一。

1 无线传感器网络的特点无线自组网络 (mobile Ad-Hoc network是一种由几十到上百个节点组成的,采用无线通信方式、动态组网的多跳移动性对等网络。

其目的是通过动态路由和移动管理技术,传输具有服务质量要求的多媒体信息流。

通常节点具有持续的能量供给。

无线传感器网络虽然与无线自组网络有着相似之处,但同时也存在很大的差别。

传感器网络是集成了监测、控制以及无线通信的网络系统,节点数目更为庞大,一个网络有上千甚至上万个节点 ; 节点分布更为密集 ; 由于环境影响和能量耗尽,节点更容易出现故障 ; 环境干扰和节点故障易造成网络拓扑结构的变化 ; 在通常情况下,大多数网络节点是固定不动的。

基于CC2430的穿戴式呼吸检测模块的研制[1]

基于CC2430的穿戴式呼吸检测模块的研制[1]

技术创新《微计算机信息》(嵌入式与SOC)2009年第25卷第5-2期电子设计陈延慧:硕士研究生基金项目:基金申请人:吴效明;项目名称:基于无线穿戴式检测技术的社区数字医疗健康服务系统;基金颁发部门:广东省科学技术厅(2007B031302003)基于CC2430的穿戴式呼吸检测模块的研制Research of a wearable respiratory monitoring module based on CC2430(华南理工大学)陈延慧吴效明赵麒岑人经CHEN Yan-hui WU Xiao-ming Zhao Qi CEN Ren-jing摘要:本文介绍了一种新型的基于CC2430的穿戴式呼吸检测模块。

模块通过CC2430触发了加载到两个检测电极上的高频激励脉冲。

检测到的两个电极间的阻抗变化信号,通过滤波放大,送至CC2430进行模数转换,再利用ZigBee无线通讯单元把信号发送至上位机,实现了医护人员对病人的实时监护。

该模块由单片机实现整体控制,采用ZigBee无线传输技术实现穿戴式检测,具有结构简单、成本低、功耗低、易使用等优点,还可以实现与心电检测共用检测电极,适用于家庭便携式监测仪器的开发。

关键词:呼吸监护;穿戴式;ZigBee中图分类号:R318.6文献标识号:BAbstract:This paper introduces a novel wearable wireless respiration detection module based on CC2430.In this module,CC2430 triggers the high-frequency stimulated pulse to load on electrodes.The signal,which is collected by the two electrodes and processed by preamp and filter,is sent to CC2430for analog-digital conversion.Then,it is transmitted to central server by using ZigBee wire-less communication module.It makes true that patients will be monitored in real-time by medical staffs.The module,which was controlled by MCU and integrated with wireless communication technology,has the characteristics of simple structure,easy to use, low-cost and low-power consumption.It also can share the electrode with the detection of ECG.The module introduced in this pa-per is fit to the design of home-based portable monitoring devices.Key words:Respiratory monitor;wearable;ZigBee文章编号:1008-0570(2009)05-2-0272-02引言人体在生命活动中需要的能量来自于摄入体内的营养物质的代谢。

基于CC2430的数传模块性能测试

基于CC2430的数传模块性能测试

基于CC2430的数传模块性能测试
范玲俐
【期刊名称】《电工技术:理论与实践》
【年(卷),期】2016(000)007
【摘要】随着DSP技术和无线电技术的发展,无线数据传输已广泛运用在日常生活的各个领域。

数据传输可靠性、覆盖范围、抗干扰性能以及费用等成为无线数传模块选型的必要参考因素。

基于此,介绍了一款基于CC2340的无线数传模块,通过实验测试其相关性能,测试结果可用于短距离无线数传系统设计参考。

【总页数】2页(P67-68)
【作者】范玲俐
【作者单位】成都工业学院四川成都610031
【正文语种】中文
【中图分类】TP212.9
【相关文献】
1.基于CC2430的ZigBee无线数传模块的设计和实现 [J], 尹应鹏;李平舟;郭志华
2.基于蓝牙和数传模块的小型四旋翼无人机通信系统设计 [J], 施洪平;李志宇;徐义华
3.基于数传模块的无线寻址接收器的设计 [J], 郭大川
4.基于CC2430的Zigbee无线数传模块设计 [J], 郭涛;严家明
5.一种基于LoRa技术的无人机数传模块设计 [J], 史振;崔恒荣;赵丹阳;刘涛;王煜伟;杨威;焦劲华;荆玉香
因版权原因,仅展示原文概要,查看原文内容请购买。

基才TinyOS的CC2430RSSI定位的设计与实现

基才TinyOS的CC2430RSSI定位的设计与实现

基才TinyOS的CC2430RSSI定位的设计与实现刘明;陶正苏【期刊名称】《电子设计工程》【年(卷),期】2012(020)004【摘要】为解决现Z-Stack定位程序代码量大,结构复杂等问题,提出一种基于TinyOS的CC2430定位方案。

在分析TinyOS组件架构基础上.设计实现盲节点、锚节点与汇聚节点间的无线通信以及汇聚节点与PC机的串口通信。

在此基础上实现PC对各锚节点RSSI(ReceivedSignalStrengthIndicator)寄存器值的正确读取.确定实验室环境下对数一常态无线传播模型的具体参数。

并采用质心算法来提高定位精度。

实验显示,在由四个锚节点组成的4.8x3.6m0矩形定位区域中,通过RSSI质心定位算法求得的盲节点坐标为(2.4831,1.0185),实际坐标为(2.40,1.20),误差为0.1996in,表明较好地实现对盲节点的定位。

%A positioning solution based on TinyOS is proposed to overcome shortcomings in existing Z-Stack programs, such as huge size code, complex structure. Wireless communications among blind node, anchor nodes and sink node, as well as UART communication between sink and PC, can be set up based on the framework analyses of TinyOS. PC can derive accurate RSSI values from anchor nodes based on these analyses. Parameters of Log-normal propagation model are determined through experiments. In addition, a RSSI-based centroid algorithm is introduced to improve the accuracy. The experiment result shows that in the 4.8~3.6 m2 rectangular area formed by four anchor nodes, an error of 0.199 6 m exitsbetween theoretical position of blind node (2.483 1,1.018 5) and the actual (2.40,1.20), which indicates that the proposed positioning solution works well.【总页数】4页(P155-158)【作者】刘明;陶正苏【作者单位】上海交通大学电子信息与电气工程学院,上海200240;上海交通大学电子信息与电气工程学院,上海200240【正文语种】中文【中图分类】TN925【相关文献】1.基于TinyOS平台的RSSI定位系统设计与实现 [J], 乔钢柱;李雪莲;曾建潮2.基于TinyOS平台的RSSI改进定位系统设计与实现 [J], 李雪莲;乔钢柱;曾建潮3.基才多表的动态查询模块设计与实现 [J], 李竹林4.基才51单片机多功能太阳能路灯的设计与实现 [J], 梅卫龙;肖伟;代森;廖先奎5.基才PDA的装备信息化管理系统设计与实现 [J], 张巽;鲁冬林;周磊;张宣和因版权原因,仅展示原文概要,查看原文内容请购买。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

天运科技()
CC2430学习模块协议分析实验指导
第一步:打开光盘找到“仿真与协议分析软件”文件夹,把“数据分析仪.rar”解压缩。

第二步:安装协议分析软件
双击解压生成的文件“数据分析仪.exe”,一直点击“NEXT”按钮直到完成安装;如果想退出安装直接点击“cancle”按钮,按照提示即可退出安装。

第三步:连接实验设备
首先把仿真器和2430学习板连接好,再用USB线把仿真器和电脑连接起来,然后用串口线把2430学习板和电脑串口相连接(如果您使用的是笔记本不带DB9串口,亦可以用USB转串口线代替)。

第四步:烧写程序
打开CC2430基础实验5,如图所示
1、首先在workspace下拉列表选择TX,如图:
2、直接点击
3、把workspace下拉列表改成RX,如图:
重复2的操作即可。

4、如果下拉列表没有TX/RX,可以自己设置,设置方法如下:选择菜单栏project/edit configurations…
弹出如下对话框
点击“NEW”按钮弹出对话框
在Name下空白处输入TX或者RX点击OK即可
到此并不是万事大吉啦,还要继续设置
如果workspace下拉列表选择的是TX,请在菜单栏project下找到Options,点击它会出现如下对话框,请在Defined symbols处输入TX,点击OK,然后进入debug 即可,此设置一般设置一次,便会自动保存。

RX状态设置同TX。

第四步:程序烧写完毕,设备建立网络
把编程器与RX设备相连(请牢记编程器必须和RX设备相连,同时IAR软件仿真状态要撤销),串口线连接TX设备和电脑DB9接口(或者USB转串口),给设备上电。

第五步:协议分析开始
打开协议分析软件,方法如下:
开始菜单/所有程序/chipcon/packet Sniffer/CC2430 IEEE 802.15.4
软件未运行状态如下
此选项可以选择数据分析格式,修改selected Field选项即可
点击
按钮说明
清空接收区
停止
显示最后一条信息。

相关文档
最新文档