基于ZigBee技术的射频芯片CC2430

合集下载

zigbeeCC243031模块使用说明书

zigbeeCC243031模块使用说明书

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

2,轻拨轻推电源开关。

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

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

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

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

5,当使用电池供电的时候(也就是模块上的那个蓝色的开关按下的时候),请不要用仿真器给模块供电。

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

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

7、一定要顺着本模块使用说明书pdf文档仔细往下看,请不要急于求成,一定要仔细的照着本文档仔细操作,切不可急躁!!!安装软件篇:一、安装开发环境:在光盘cc2430模块资料\软件工具\IAR730目录下有730b注册机,具体用法看其里面的说明文本文件。

下面就安装过程做一简要介绍:在光盘cc2430模块资料\软件工具\IAR730目录下,双击EW8051-EV-730B.exe进入画面:点击next点击Accept:此时需要输入License,那么先解压730b注册机文件(在软件工具目录下),双击其里面的iarid.exe,可得到本机的ID,将此ID号保留好,等下有用。

然后在右击key.cmd文件,在弹出的下拉菜单中选择编辑,然后选择文本编辑器。

将上面得到的本机ID号替换掉key.cmd文件中的相应部分,也就是介于@IARKG.exe 和>key.txt之间的部分。

保存文件退出。

再双击key.cmd。

然后再打开key.txt文本。

其中的第二个Installserial就是需要的License。

将其填入即可Next将key.txt文本第二个key:之后的一段复制粘贴到License Key内然后一路Next即可完成安装。

ZigBee芯片CC2430CC2530对比一览表

ZigBee芯片CC2430CC2530对比一览表
项目cc2430cc2530备注引脚4840封装qlp48qfn40电压20v36v20v36v大小7x7mm6mm6mm微控制器增强型c8051增强型c8051flash3264128kb3264128256kbramkbsramkbdata8kb24g24g支持标准zigbee0406simplicitizigbee07prorf4cesimpliciti软件平台iariar射频rfcc2420cc2520接收灵敏度90dbm97dbm典型值802154要求为85dbm输出功率0最小为3dbm45最小8最大10dbm典型值自带传感器温度温度功耗rx
段频
2.4G
2.4G
支持标准
ZigBee04/06/ SimpliciTI
ZigBee07/PRO/RF4CE/SimpliciTI
软件平台
IAR
IAR
射频RF
CC2420
CC2520
接收灵敏度
-90dBm
-97dBm
典型值,802.15.4要求为-85dBm
输出功率
0(最小为-3)dBm
4.5(最小-8,最大10)dBm
项目
CC2430
CC2530
备注
引脚
48
40
封装
QLP48
QFN40
电压
2.0V – 3.6Vห้องสมุดไป่ตู้
2.0V – 3.6V
大小
7x7mm
6mm × 6mm
微控制器
增强型C8051
增强型C8051
Flash
32/64/128KB
32/64/128/256KB
RAM
8 KB SRAM, 4 KB Data
8KB

ZigBee CC2430或CC2530仿真器之驱动安装

ZigBee CC2430或CC2530仿真器之驱动安装

ZigBee CC2430/CC2530仿真器之驱动安装
本文对ZigBee CC2430/CC2530仿真器的安装进行说明:
首先请已安装IAR Embedded Workbench for 8051,因为本仿真器的驱动就在这个软件里面。

然后插上仿真器,电脑会自动检测到硬件Chipcon SRF04EB,会出现如下界面(硬件向导)
按上图的步骤完成后,按<下一步>,进入到下面的界面:
选择上图红圈的位置,其他的都不要选,这样选择可以以最快的速度安好驱动。

点击<浏览>,此时会选择驱动程序的路径,默认安装IAR的话,会在这里:
搞定上面后,ZigBee仿真器的安装就成功99.9%了,哈哈,还等什么,<确认>吧!这时会自动进入上一个界面,别忘记点<下一步>哟。

一路下一步,只到成功……,如果在你的右下角提示,你的硬件已经安装成功,表明已OK了。

当然如是你确保有没有真的安装上,可以在设备管理器中查看。

看到红色的那个框没有,是什么,哈哈。

有了这一项,能确保你的ZigBee仿真器已安装成功了。

那么恭喜你,你的ZigBee之路可以开始了……
Good Luck。

ZigBee单片机CC2430在无线温度测量系统中的应用

ZigBee单片机CC2430在无线温度测量系统中的应用

ZigBee单片机CC2430在无线温度测量系统中的应用介绍了具有ZigBee无线通信功能的单片机CC2430的结构和功能,分析了ZigBee网络的基本结构和实现方法。

通过无线温度监测系统实例,详细说明了传感器节点、网络管理器及测量终端的设计方法。

标签:ZigBee;单片机;温度;测量Abstract:This paper introduces the structure and function of CC2430 with ZigBee wireless communication function. Analyzes the basic structure and implementation method of ZigBee network. Through the wireless temperature monitoring system examples,descript the sensor nodes,network managers and measurement terminal design methods.Keywords:ZigBee;single chip microcomputer;temperature1 CC2430内部结构及引脚CC2430单片机整合了2.4GHz IEEE802.15.4/ZigBee RF收发机和工业标准的增强型MCS-51单片机内核,是智能化仪器仪表实现短距离无线通信具有较高性价比的首选器件。

CC2430有21个可编程的I/O口,P0、P1口是完全的8位口,P2口只有5个可使用的位。

通过软件设定一组SFR寄存器的位和字节,可使这些引脚作为通用的I/O 口或作为连接ADC、计时器或USART部件的外围设备I/O 口使用。

CC2430的内部结构框图如图1所示。

2 基于ZigBee的无线温度测量系统设计2.1 CC2430无线温度测量终端设计无线温度测量终端由CC2430为核心构成,CC2430实现对测控电路的控制、A/D转换(或数字温度传感器数据读取)、测量信息处理、电源控制、人机交互和ZigBee无线通信等功能。

基于CC2430的ZigBee无线传感网络节点的设计

基于CC2430的ZigBee无线传感网络节点的设计
第 2 卷第 4 9 期 2 l 年 l 月 o1 2
; 瓣蠡
J CHE I NGDI ANLU ONGXUN T
V 12 N . 0. 9 o4 D e 2 1 e .0 1
基 于 C 23 C 4 0的 Zg e 线 传 感 网络 节点 的设 计 iB e无
梁伟 明 曹 彪
引 言
随着无线通信、 集成 电路、 传感器 以及微机电 系统等技术 的飞速发展和 日益成熟 , 传感器信息 获取技术已经从过去的单一化逐渐向集成化 、 微
靠 。为推动 Z B e i e 技术 的发展 , h cn E br g C i o 、 m e、 p
F e s ae r e c l 、Ho e we Mi u ih Mo o aa h l s ny  ̄ s bs i t tr l 、P i p i
给观 察者 。基 于 Zg e 协 议 、 C 2 3 频芯 片为核 心 的硬 件设 计方 法 , iB e 以 C 4 0射 实现 了一 个基 于 Zge i e的无 b 线传 感 器 网络 节点硬 件平 台 的开发 。 关键 词 无线传 感 器网络 Zg e C 23 iBe C 40
2 无线传感器 网络介 绍
无线传感器网络是一种无中心节点的全分布 网络。通过随机投放的方式 , 众多传感器节点被 密集部署在监控区域。这些传感器节点集成有传
感器、 数据处理单元和通信模块, 它们通过无线信 道相连 , 自组织地构成 网络系统。传感器节点利
近年来 , 无线传感器 网络被广泛 的应用在预防医
部的数据交的技术提案。它有 自己的无线电标准 , 在数 千个微小的传感器之间相互协调实现通信。这些 传感器只需要很少的能量 , 以接力 的方式通过无

基于CC2430的Zigbee无线通信设计

基于CC2430的Zigbee无线通信设计
制器通过SPI 总线和一些离散 控制信号与RF 射频收发器 相连, 控制器 SP巨 件而RF 充当 主器 收发器充当 件。 从器 控制器实 现了IEEE802.
1SA MAC 层和 ZigBee 协议层。
1 前言
(4)4 休眠摸 E 式时仅0.9 ”人 的流耗, 外部 断或RTC 能唤褪系 统.在待 机镇式时少 近来来, 随着微电子系统、教字电子, 的中 . 协A的流耗, 的中 外部 断能唤酸系统. 网 络和通信技术等方面的飞 速发展, 无线通信 于。 ‘
在RF射烦收发器上 本设计选用了Chipeon 公司的CC2430射领 收发器 它实 i现z gBee 协议的物理层(PHY)及媒体访问 控制器 ( MAC ) 层, 低能耗、 具有 唤醒时间 短等特
性。 该芯片仅需很少的外围部件配合就能实
MAC计时器. 1个常 规的16 位计时器 和2个
8 位计时器。
O Reset), 掉电 n检侧电 路(Brown - out 一 detection) 以及21个可编怪1/ 0 引 脚。 CC2430芯片采用0. 18 VMCMOS 工艺 生
产, 时的电 N耗为27m凡在接收和发射 工作 R 模式下, 电流损耗分别低干27mA 或25mA, CC2430的休眠模式和转换到主动模式的超短
关 词:无 通 CC2430 Zigbee 锐 线 信 中圈 号:TP321. 1 分类 文 标识码iA 狱
文 童编号;1672- 3791(2007)08(a卜0092- 01 up Timer,OST) 除了1个看门 狗定时器之 外, 另 外还有3 个 时器及2个CCP核块, 行通 定 串 信挑式方面支持MSSP和USART 等特 控 性。
(5)硬件支持CSMA/ CA功能。

zigbee CC2430一个完整程序

zigbee CC2430一个完整程序

Net Buildmy nwk address is:0x0000my mac address is:0x2100121314151617 my panid is:0x0021Src NWKAddr:0x0001Src MACAddr:0x0000000000000000 Src Tem:38 CSrc Bat:2.7VData Len:034Data:via:@sendocRSSI:-24LQI:159Dst NWKAddr:0x0000Dst MACAddr:0x2100121314151617 Dst Tem:29 CDst Bat:3.3VSrc NWKAddr:0x0001Src MACAddr:0x0000000000000000 Src Tem:39 CSrc Bat:2.7VData Len:034Data:via:@sendocRSSI:-24LQI:159Dst NWKAddr:0x0000Dst MACAddr:0x2100121314151617 Dst Tem:29 CDst Bat:3.3VSrc NWKAddr:0x796FSrc MACAddr:0x0000000000000003 Src Tem:18 CSrc Bat:2.4VData Len:034Data:via:@sendocRSSI:-32LQI:137Dst NWKAddr:0x0000Dst MACAddr:0x2100121314151617 Dst Tem:32 CDst Bat:3.3VSrc NWKAddr:0x796FSrc MACAddr:0x0000000000000003 Src Tem:18 CSrc Bat:2.4VData Len:034Data:via:@sendocRSSI:-28LQI:148Dst NWKAddr:0x0000Dst MACAddr:0x2100121314151617 Dst Tem:32 CDst Bat:3.3VSrc NWKAddr:0x796FSrc MACAddr:0x0000000000000003 Src Tem:18 CSrc Bat:2.3VData Len:034Data:via:@sendocRSSI:-29LQI:145Dst NWKAddr:0x0000Dst MACAddr:0x2100121314151617 Dst Tem:30 CDst Bat:3.3VSrc NWKAddr:0x7970Src MACAddr:0x0000000000000002 Src Tem:29 CSrc Bat:2.2VData Len:034Data:via:@sendocRSSI:-44LQI:103Dst NWKAddr:0x0000Dst MACAddr:0x2100121314151617 Dst Tem:31 CDst Bat:3.4VSrc NWKAddr:0x796FSrc MACAddr:0x0000000000000003 Src Tem:18 CSrc Bat:2.3VData Len:034Data:via:@sendocRSSI:-29LQI:145Dst NWKAddr:0x0000Dst MACAddr:0x2100121314151617 Dst Tem:32 CDst Bat:3.3VSrc NWKAddr:0x7970Src MACAddr:0x0000000000000002 Src Tem:29 CSrc Bat:2.2VData Len:034Data:via:@sendocRSSI:-37LQI:123Dst NWKAddr:0x0000Dst MACAddr:0x2100121314151617 Dst Tem:30 CDst Bat:3.3VSrc NWKAddr:0x796FSrc MACAddr:0x0000000000000003 Src Tem:18 CSrc Bat:2.3VData Len:034Data:via:@sendocRSSI:-28LQI:148Dst NWKAddr:0x0000Dst MACAddr:0x2100121314151617 Dst Tem:32 CDst Bat:3.3VSrc NWKAddr:0x7970Src MACAddr:0x0000000000000002 Src Tem:29 CSrc Bat:2.3VData Len:034Data:via:@sendocRSSI:-33LQI:134Dst NWKAddr:0x0000Dst MACAddr:0x2100121314151617 Dst Tem:32 CDst Bat:3.4VSrc NWKAddr:0x796FSrc MACAddr:0x0000000000000003 Src Tem:18 CSrc Bat:2.3VData Len:034Data:via:@sendocRSSI:-29LQI:145Dst NWKAddr:0x0000Dst MACAddr:0x2100121314151617 Dst Tem:32 CDst Bat:3.4VSrc NWKAddr:0x7970Src MACAddr:0x0000000000000002 Src Tem:29 CSrc Bat:2.2VData Len:034Data:via:@sendocRSSI:-35LQI:128Dst NWKAddr:0x0000Dst MACAddr:0x2100121314151617 Dst Tem:32 CDst Bat:3.3VSrc NWKAddr:0x0001Src MACAddr:0x0000000000000000 Src Tem:36 CSrc Bat:2.7VData Len:034Data:via:@sendocRSSI:-24LQI:159Dst NWKAddr:0x0000Dst MACAddr:0x2100121314151617 Dst Tem:32 CDst Bat:3.3VSrc NWKAddr:0x7970Src MACAddr:0x0000000000000002Src Tem:29 CSrc Bat:2.2VData Len:034Data:via:@sendocRSSI:-33LQI:134Dst NWKAddr:0x0000Dst MACAddr:0x2100121314151617Dst Tem:32 CDst Bat:3.3VSrc NWKAddr:0x0001Src MACAddr:0x0000000000000000Src Tem:37 CSrc Bat:2.6VData Len:034Data:via:@sendocRSSI:-26LQI:154Dst NWKAddr:0x0000Dst MACAddr:0x2100121314151617Dst Tem:32 CDst Bat:3.3V/****************************************************************************** ********************Filename: SampleApp.cRevised: $Date: 2007-10-27 17:16:54 -0700 (Sat, 27 Oct 2007) $Revision: $Revision: 15793 $Description: Sample Application (no Profile).Copyright 2007 Texas Instruments Incorporated. All rights reserved.IMPORTANT: Your use of this Software is limited to those specific rightsgranted under the terms of a software license agreement between the userwho downloaded the software, his/her employer (which must be your employer)and Texas Instruments Incorporated (the "License"). You may not use thisSoftware unless you agree to abide by the terms of the License. The Licenselimits your use, and you acknowledge, that the Software may not be modified,copied or distributed unless embedded on a Texas Instruments microcontrolleror used solely and exclusively in conjunction with a Texas Instruments radiofrequency transceiver, which is integrated into your product. Other than forthe foregoing purpose, you may not use, reproduce, copy, prepare derivativeworks of, modify, distribute, perform, display or sell this Software and/orits documentation for any purpose.YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION AREPROVIDED 揂S IS?WITHOUT W ARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,INCLUDING WITHOUT LIMITATION, ANY W ARRANTY OF MERCHANTABILITY, TITLE,NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALLTEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHERLEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVEOR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENTOF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES(INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.Should you have any questions regarding your right to use this Software,contact Texas Instruments Incorporated at .******************************************************************************* *******************//*********************************************************************This application isn't intended to do anything useful, it isintended to be a simple example of an application's structure.This application sends it's messages either as broadcast orbroadcast filtered group messages. The other (more normal)message addressing is unicast. Most of the other sampleapplications are written to support the unicast message model.Key control:SW1: Sends a flash command to all devices in Group 1.SW2: Adds/Removes (toggles) this device in and outof Group 1. This will enable and disable thereception of the flash command.*********************************************************************/ /********************************************************************* * INCLUDES*/#include "OSAL.h"#include "ZGlobals.h"#include "AF.h"#include "aps_groups.h"#include "ZDApp.h"#include "SampleApp.h"#include "SampleAppHw.h"#include "OnBoard.h"/* HAL */#include "hal_lcd.h"#include "hal_led.h"#include "hal_key.h"/********************************************************************* * MACROS*//********************************************************************* * CONSTANTS*//********************************************************************* * TYPEDEFS*//********************************************************************* * GLOBAL V ARIABLES*/// This list should be filled with Application specific Cluster IDs.const cId_t SampleApp_ClusterList[SAMPLEAPP_MAX_CLUSTERS] ={SAMPLEAPP_PERIODIC_CLUSTERID,SAMPLEAPP_FLASH_CLUSTERID};const SimpleDescriptionFormat_t SampleApp_SimpleDesc ={SAMPLEAPP_ENDPOINT, // int Endpoint;SAMPLEAPP_PROFID, // uint16 AppProfId[2]; SAMPLEAPP_DEVICEID, // uint16 AppDeviceId[2]; SAMPLEAPP_DEVICE_VERSION, // int AppDevVer:4; SAMPLEAPP_FLAGS, // int AppFlags:4; SAMPLEAPP_MAX_CLUSTERS, // uint8 AppNumInClusters; (cId_t *)SampleApp_ClusterList, // uint8 *pAppInClusterList; SAMPLEAPP_MAX_CLUSTERS, // uint8 AppNumInClusters; (cId_t *)SampleApp_ClusterList // uint8 *pAppInClusterList;};// This is the Endpoint/Interface description. It is defined here, but// filled-in in SampleApp_Init(). Another way to go would be to fill// in the structure here and make it a "const" (in code space). The// way it's defined in this sample app it is define in RAM.endPointDesc_t SampleApp_epDesc;/********************************************************************* * EXTERNAL V ARIABLES*//********************************************************************* * EXTERNAL FUNCTIONS*//********************************************************************* * LOCAL V ARIABLES*/uint8 SampleApp_TaskID; // Task ID for internal task/event processing// This variable will be received when// SampleApp_Init() is called.devStates_t SampleApp_NwkState;uint8 SampleApp_TransID; // This is the unique message ID (counter)afAddrType_t SampleApp_Periodic_DstAddr;afAddrType_t SampleApp_Flash_DstAddr;aps_Group_t SampleApp_Group;uint8* nwkaddr_mem;uint8* macaddr_mem;extern uint8 Mac_rssi;uint8 newline = '\n';uint8 rxlen; //接收数据长度uint8* databuf;//接收数据块指针uint8 SampleAppPeriodicCounter = 0;uint8 SampleAppFlashCounter = 0;/********************************************************************* * LOCAL FUNCTIONS*/void SampleApp_HandleKeys( uint8 shift, uint8 keys );void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pckt );void SampleApp_SendPeriodicMessage( void );void SampleApp_SendFlashMessage( uint16 flashTime );void rxCB( uint8 port,uint8 event );uint8 SampleApp_ReadBattery( void );uint8 SampleApp_ReadTemperature( void );void GetDeviceInfo( void );uint8 hextoword1(uint8 t );uint8 hextoword2(uint8 t);uint8 *GetNWKAddr( void );uint8 *GetMACAddr( void );/********************************************************************* * NETWORK LAYER CALLBACKS*//********************************************************************* * PUBLIC FUNCTIONS*//********************************************************************* * @fn SampleApp_Init** @brief Initialization function for the Generic App Task.* This is called during initialization and should contain* any application specific initialization (ie. hardware* initialization/setup, table initialization, power up* notificaiton ... ).** @param task_id - the ID assigned by OSAL. This ID should be* used to send messages and set timers.** @return none*/void SampleApp_Init( uint8 task_id ){SampleApp_TaskID = task_id;SampleApp_NwkState = DEV_INIT;SampleApp_TransID = 0;// Device hardware initialization can be added here or in main() (Zmain.c).// If the hardware is application specific - add it here.// If the hardware is other parts of the device add it in main().#if defined ( SOFT_START )// The "Demo" target is setup to have SOFT_START and HOLD_AUTO_START // SOFT_START is a compile option that allows the device to start// as a coordinator if one isn't found.// We are looking at a jumper (defined in SampleAppHw.c) to be jumpered// together - if they are - we will start up a coordinator. Otherwise,// the device will start as a router.if ( readCoordinatorJumper() )zgDeviceLogicalType = ZG_DEVICETYPE_COORDINATOR;elsezgDeviceLogicalType = ZG_DEVICETYPE_ROUTER;#endif // SOFT_START#if defined ( HOLD_AUTO_START )// HOLD_AUTO_START is a compile option that will surpress ZDApp// from starting the device and wait for the application to// start the device.ZDOInitDevice(0);#endif// Setup for the periodic message's destination address// Broadcast to everyoneSampleApp_Periodic_DstAddr.addrMode = (afAddrMode_t)AddrBroadcast; SampleApp_Periodic_DstAddr.endPoint = SAMPLEAPP_ENDPOINT; SampleApp_Periodic_DstAddr.addr.shortAddr = 0xFFFF;// Setup for the flash command's destination address - Group 1SampleApp_Flash_DstAddr.addrMode = (afAddrMode_t)AddrBroadcast;//(afAddrMode_t)afAddrGroup;SampleApp_Flash_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;SampleApp_Flash_DstAddr.addr.shortAddr = 0xFFFF;//SAMPLEAPP_FLASH_GROUP;// Fill out the endpoint description.SampleApp_epDesc.endPoint = SAMPLEAPP_ENDPOINT;SampleApp_epDesc.task_id = &SampleApp_TaskID;SampleApp_epDesc.simpleDesc= (SimpleDescriptionFormat_t *)&SampleApp_SimpleDesc;SampleApp_tencyReq = noLatencyReqs;// Register the endpoint description with the AFafRegister( &SampleApp_epDesc );// Register for all key events - This app will handle all key eventsRegisterForKeys( SampleApp_TaskID );// By default, all devices start out in Group 1SampleApp_Group.ID = 0x0001;osal_memcpy( SampleApp_, "Group 1", 7 );aps_AddGroup( SAMPLEAPP_ENDPOINT, &SampleApp_Group );halUARTCfg_t uartConfig;uartConfig.configured = TRUE;uartConfig.baudRate = HAL_UART_BR_38400;uartConfig.flowControl = FALSE;uartConfig.flowControlThreshold = 1;uartConfig.rx.maxBufSize = 255;uartConfig.tx.maxBufSize = 255;uartConfig.idleTimeout = 1;uartConfig.intEnable = TRUE;uartConfig.callBackFunc = rxCB;HalUARTOpen (HAL_UART_PORT_0, &uartConfig);#if defined ( LCD_SUPPORTED )HalLcdWriteString( "SampleApp", HAL_LCD_LINE_1 );#endif}/********************************************************************** @fn SampleApp_ProcessEvent** @brief Generic Application Task event processor. This function* is called to process all events for the task. Events* include timers, messages and any other user defined events.** @param task_id - The OSAL assigned task ID.* @param events - events to process. This is a bit map and can* contain more than one event.** @return none*/uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events ){afIncomingMSGPacket_t *MSGpkt;if ( events & SYS_EVENT_MSG ){MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID );while ( MSGpkt ){switch ( MSGpkt->hdr.event ){// Received when a key is pressedcase KEY_CHANGE:SampleApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys );break;// Received when a messages is received (OTA) for this endpointcase AF_INCOMING_MSG_CMD:SampleApp_MessageMSGCB( MSGpkt );break;// Received whenever the device changes state in the networkcase ZDO_STA TE_CHANGE:SampleApp_NwkState = (devStates_t)(MSGpkt->hdr.status);if ( (SampleApp_NwkState == DEV_ZB_COORD)|| (SampleApp_NwkState == DEV_ROUTER)|| (SampleApp_NwkState == DEV_END_DEVICE) ){GetDeviceInfo();// Start sending the periodic message in a regular interval.osal_start_timerEx( SampleApp_TaskID,SAMPLEAPP_SEND_PERIODIC_MSG_EVT,SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT );}else{// Device is no longer in the network}break;default:break;}// Release the memoryosal_msg_deallocate( (uint8 *)MSGpkt );// Next - if one is availableMSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID );}// return unprocessed eventsreturn (events ^ SYS_EVENT_MSG);}// Send a message out - This event is generated by a timer// (setup in SampleApp_Init()).if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT ){// Send the periodic messageSampleApp_SendPeriodicMessage();// Setup to send message again in normal period (+ a little jitter)osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT, (SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT + (osal_rand() & 0x00FF)) );// return unprocessed eventsreturn (events ^ SAMPLEAPP_SEND_PERIODIC_MSG_EVT);}// Discard unknown eventsreturn 0;}/********************************************************************** Event Generation Functions/********************************************************************** @fn SampleApp_HandleKeys** @brief Handles all key events for this device.** @param shift - true if in shift/alt.* @param keys - bit field for key events. Valid entries:* HAL_KEY_SW_2* HAL_KEY_SW_1** @return none*/void SampleApp_HandleKeys( uint8 shift, uint8 keys ){if ( keys & HAL_KEY_SW_1 ){/* This key sends the Flash Command is sent to Group 1.* This device will not receive the Flash Command from this* device (even if it belongs to group 1).*/SampleApp_SendFlashMessage( SAMPLEAPP_FLASH_DURATION );}if ( keys & HAL_KEY_SW_2 ){/* The Flashr Command is sent to Group 1.* This key toggles this device in and out of group 1.* If this device doesn't belong to group 1, this application* will not receive the Flash command sent to group 1.*/aps_Group_t *grp;grp = aps_FindGroup( SAMPLEAPP_ENDPOINT, SAMPLEAPP_FLASH_GROUP );if ( grp ){// Remove from the groupaps_RemoveGroup( SAMPLEAPP_ENDPOINT, SAMPLEAPP_FLASH_GROUP );}else{// Add to the flash groupaps_AddGroup( SAMPLEAPP_ENDPOINT, &SampleApp_Group );}}/********************************************************************* * 节点信息结构体*typedef struct{uint8 SENSOR_TYPE; //传感器类型uint8 NODE_TYPE; //节点类型uint8 NWK_ADDR; //节点网络地址uint8 MAC_ADDR; //节点物理地址MACuint8 PANID; //网络标识uint8 TEMPERATURE; //温度uint8 BATTERY; //电量}NODE_INFO; //节点信息NODE_INFO node_info;**********************************************************************/ /********************************************************************* * LOCAL FUNCTIONS*//********************************************************************* * @fn SampleApp_MessageMSGCB** @brief Data message processor callback. This function processes* any incoming data - probably from other devices. So, based* on cluster ID, perform the intended action.** @param none** @return none*/void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ){uint16 flashTime;/****************************************************************/uint8 str_Src_NWKAddr[ ] = "Src NWKAddr:";uint8 str_Src_MACAddr[ ] = "Src MACAddr:";uint8 str_Src_Tem[ ] = "Src Tem:";uint8 str_Src_Bat[ ] = "Src Bat:";uint8 str_Dst_NWKAddr[ ] = "Dst NWKAddr:";uint8 str_Dst_MACAddr[ ] = "Dst MACAddr:";uint8 str_Dst_Tem[ ] = "Dst Tem:";uint8 str_Dst_Bat[ ] = "Dst Bat:";uint8 str_Data_Len[ ] = "Data Len:";uint8 str_Data[ ] = "Data:";uint8 str_RSSI[ ] = "RSSI:-";uint8 str_LQI[] = "LQI:";//uint8 newline = '\n';uint8 Src_nwk_addr_H;uint8 Src_nwk_addr_L;uint8 Dst_nwk_addr_H;uint8 Dst_nwk_addr_L;uint8 data_Len[3];uint8 *data_pointer;uint8 Src_nwk_addr[6];uint8 Src_mac_addr[18];uint8 Src_Tem_buffer[4];uint8 Src_Bat_buffer[4];uint16 Dst_shortaddr;uint8 Dst_nwk_addr[6];uint8 *Dst_macaddr;uint8 Dst_mac_addr[18];uint8 RSSI_buffer[2];uint8 LQI_buffer[3];uint8 Dst_Tem_Read;uint8 Dst_Tem_buffer[4];uint8 Dst_Bat_Read;uint8 Dst_Bat_buffer[4];/****************************************************************/switch ( pkt->clusterId ){case SAMPLEAPP_PERIODIC_CLUSTERID:/****************************************************************///----------------/*data_length*/data_Len[0] = (pkt->cmd.Data[0])/100+48;data_Len[1] = ((pkt->cmd.Data[0])%100)/10+48;data_Len[2] = (pkt->cmd.Data[0])%10+48;//----------------Src_nwk_addr[0] = 48;Src_nwk_addr[1] = 120;Src_nwk_addr_H = pkt->cmd.Data[1];Src_nwk_addr_L = pkt->cmd.Data[2];Src_nwk_addr[2] = hextoword1(Src_nwk_addr_H);Src_nwk_addr[3] = hextoword2(Src_nwk_addr_H);Src_nwk_addr[4] = hextoword1(Src_nwk_addr_L);Src_nwk_addr[5] = hextoword2(Src_nwk_addr_L);//-----------------Src_mac_addr[0] = 48;Src_mac_addr[1] = 120;for( uint8 i=2;i<18;i++ ){Src_mac_addr[i] = pkt->cmd.Data[1+i];}//-----------------Src_Tem_buffer[0] = pkt->cmd.Data[19];Src_Tem_buffer[1] = pkt->cmd.Data[20];Src_Tem_buffer[2] = ' ';Src_Tem_buffer[3] = 'C';//-----------------Src_Bat_buffer[0] = pkt->cmd.Data[21];Src_Bat_buffer[1] = '.';Src_Bat_buffer[2] = pkt->cmd.Data[22];Src_Bat_buffer[3] = 'V';//-----------------data_pointer = &(pkt->cmd.Data[23]);//-----------------Dst_shortaddr = NLME_GetShortAddr();Dst_nwk_addr_H = (uint8)((Dst_shortaddr&0xff00)>>8);Dst_nwk_addr_L = (uint8)Dst_shortaddr;Dst_nwk_addr[0] = 48;Dst_nwk_addr[1] = 120;Dst_nwk_addr[2] = hextoword1(Dst_nwk_addr_H);Dst_nwk_addr[3] = hextoword2(Dst_nwk_addr_H);Dst_nwk_addr[4] = hextoword1(Dst_nwk_addr_L);Dst_nwk_addr[5] = hextoword2(Dst_nwk_addr_L);//----------------Dst_macaddr = GetMACAddr();Dst_mac_addr[0] = 48;Dst_mac_addr[1] = 120;for( uint8 i=2;i<18;i++ ){Dst_mac_addr[i] = *Dst_macaddr++;}//----------------Dst_Tem_Read = SampleApp_ReadTemperature();Dst_Tem_buffer[0] = (Dst_Tem_Read/10)+'0';Dst_Tem_buffer[1] = (Dst_Tem_Read%10)+'0';Dst_Tem_buffer[2] = ' ';Dst_Tem_buffer[3] = 'C';//----------------Dst_Bat_Read = SampleApp_ReadBattery();Dst_Bat_buffer[0] = (Dst_Bat_Read/10)+'0';Dst_Bat_buffer[1] = '.';Dst_Bat_buffer[2] = (Dst_Bat_Read%10)+'0';Dst_Bat_buffer[3] = 'V';//----------------RSSI_buffer[0] = ((uint8)(~Mac_rssi+1))/10+48;//pkt->rssi/100+48;RSSI_buffer[1] = ((uint8)(~Mac_rssi+1))%10+48;//(pkt->rssi%100)/10+48; //----------------LQI_buffer[0] = pkt->LinkQuality/100+48;LQI_buffer[1] = (pkt->LinkQuality%100)/10+48;LQI_buffer[2] = pkt->LinkQuality%10+48;//----------------//Src NWKAddrHalUARTWrite ( 0, str_Src_NWKAddr, 12 );HalUARTWrite ( 0, Src_nwk_addr, 6 );HalUARTWrite ( 0, &newline, 1 );//Src MACAddrHalUARTWrite ( 0, str_Src_MACAddr, 12 );HalUARTWrite ( 0, Src_mac_addr, 18 );HalUARTWrite ( 0, &newline, 1 );//Src TemHalUARTWrite ( 0, str_Src_Tem, 8 ); HalUARTWrite ( 0, Src_Tem_buffer, 4 ); HalUARTWrite ( 0, &newline, 1 );//Src BatHalUARTWrite ( 0, str_Src_Bat, 8 ); HalUARTWrite ( 0, Src_Bat_buffer, 4 ); HalUARTWrite ( 0, &newline, 1 );//data lengthHalUARTWrite ( 0, str_Data_Len, 9 ); HalUARTWrite ( 0, data_Len, 3 ); HalUARTWrite ( 0, &newline, 1 );//dataHalUARTWrite ( 0, str_Data,5 ); HalUARTWrite ( 0, data_pointer, 11 ); HalUARTWrite ( 0, &newline, 1 );//RSSIHalUARTWrite ( 0, str_RSSI, 6 ); HalUARTWrite ( 0, RSSI_buffer, 2 ); HalUARTWrite ( 0, &newline, 1 );//LQIHalUARTWrite ( 0, str_LQI, 4 ); HalUARTWrite ( 0, LQI_buffer, 3 ); HalUARTWrite ( 0, &newline, 1 );//Dst NWKAddrHalUARTWrite ( 0, str_Dst_NWKAddr, 12 ); HalUARTWrite ( 0, Dst_nwk_addr, 6 ); HalUARTWrite ( 0, &newline, 1 );//Dst MACAddrHalUARTWrite ( 0, str_Dst_MACAddr, 12 ); HalUARTWrite ( 0, Dst_mac_addr, 18 ); HalUARTWrite ( 0, &newline, 1 );//Dst TemHalUARTWrite ( 0, str_Dst_Tem, 8 ); HalUARTWrite ( 0, Dst_Tem_buffer, 4 ); HalUARTWrite ( 0, &newline, 1 );//Dst BatHalUARTWrite ( 0, str_Dst_Bat, 8 );HalUARTWrite ( 0, Dst_Bat_buffer, 4 );HalUARTWrite ( 0, &newline, 1 );HalUARTWrite ( 0, &newline, 1 );HalUARTWrite ( 0, &newline, 1 );/****************************************************************///HalUARTWrite( HAL_UART_PORT_0,(pkt->cmd).Data,(pkt->cmd).DataLength );HalLedBlink( HAL_LED_4, 4, 50, (1000 / 4) );break;case SAMPLEAPP_FLASH_CLUSTERID:flashTime = BUILD_UINT16(pkt->cmd.Data[1], pkt->cmd.Data[2] );HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4) );break;}}void rxCB( uint8 port,uint8 event ){uint8 temp[8];HalUARTRead(HAL_UART_PORT_0,temp,8);HalUARTWrite(HAL_UART_PORT_0,temp, 8);}/********************************************************************** @fn SampleApp_SendPeriodicMessage** @brief Send the periodic message.** @param** @return*/void SampleApp_SendPeriodicMessage( void ){uint8 databuf[34];/*nwk_addr*/uint16 nwk_addr;uint8 nwk_addr_H;uint8 nwk_addr_L;nwk_addr=NLME_GetShortAddr();nwk_addr_H=(uint8)((nwk_addr&0xff00)>>8);nwk_addr_L=(uint8)nwk_addr;/*mac_addr*/uint8 *macaddr;macaddr = GetMACAddr();/*Temperature*/uint8 Tem_Read;Tem_Read = SampleApp_ReadTemperature();/*Battery*/uint8 Bat_Read;Bat_Read = SampleApp_ReadBattery();databuf[0] = 34; //一字节存放数据长度datalength databuf[1] = nwk_addr_H; //一字节存放源地址高8位databuf[2] = nwk_addr_L; //一字节存放源地址低8位nwk_addrfor(uint8 i=3;i<19;i++){databuf[i] = *macaddr++;} //mac_addrdatabuf[19] = (Tem_Read/10)+'0';databuf[20] = (Tem_Read%10)+'0'; //temperaturedatabuf[21] = (Bat_Read/10)+'0';databuf[22] = (Bat_Read%10)+'0'; //batterydatabuf[23] = 'v';databuf[24] = 'i';databuf[25] = 'a';databuf[26] =':';databuf[27] = '@';databuf[28] = 's';databuf[29] = 'e';databuf[30] = 'n';databuf[31] = 'd';databuf[32] = 'o';databuf[33] = 'c';if ( AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc,SAMPLEAPP_PERIODIC_CLUSTERID,34,databuf,//(uint8*)&SampleAppPeriodicCounter,&SampleApp_TransID,AF_DISCV_ROUTE,AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ){}else{// Error occurred in request to send.}}/********************************************************************** @fn SampleApp_SendFlashMessage** @brief Send the flash message to group 1.** @param flashTime - in milliseconds** @return none*/void SampleApp_SendFlashMessage( uint16 flashTime ){uint8 buffer[3];buffer[0] = (uint8)(SampleAppFlashCounter++);buffer[1] = LO_UINT16( flashTime );buffer[2] = HI_UINT16( flashTime );if ( AF_DataRequest( &SampleApp_Flash_DstAddr, &SampleApp_epDesc,SAMPLEAPP_FLASH_CLUSTERID,3,buffer,&SampleApp_TransID,AF_DISCV_ROUTE,AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ){}else{// Error occurred in request to send.}}/****************************************************************************** * @fn SampleApp_ReadBattery** @brief Reports battery sensor reading** @param** @return*/// ADC definitions for CC2430 from the hal_adc.c file#define HAL_ADC_REF_125V 0x00 /* Internal 1.25V Reference */#define HAL_ADC_DEC_064 0x00 /* Decimate by 64 : 8-bit resolution */#define HAL_ADC_DEC_128 0x10 /* Decimate by 128 : 10-bit resolution */#define HAL_ADC_DEC_512 0x30 /* Decimate by 512 : 14-bit resolution */#define HAL_ADC_CHN_VDD3 0x0f /* Input channel: VDD/3 */#define HAL_ADC_CHN_TEMP 0x0e /* Temperature sensor */uint8 SampleApp_ReadBattery( void ){#if defined HAL_MCU_CC2430uint16 value;/* Clear ADC interrupt flag */ADCIF = 0;ADCCON3 = (HAL_ADC_REF_125V | HAL_ADC_DEC_128 | HAL_ADC_CHN_VDD3);/* Wait for the conversion to finish */while ( !ADCIF );/* Get the result */value = ADCL;value |= ((uint16) ADCH) << 8;/** value now contains measurement of Vdd/3* 0 indicates 0V and 32767 indicates 1.25V* voltage = (value*3*1.25)/32767 volts* we will multiply by this by 10 to allow units of 0.1 volts*/value = value >> 6; // divide first by 2^6value = value * 37.5;value = value >> 9; // ...and later by 2^9...to prevent overflow during multiplication return value;#endif // CC2430。

CC2430芯片简介

CC2430芯片简介

有人形容高尔夫的18洞就好像人生,障碍重重,坎坷不断。

然而一旦踏上了球场,你就必须集中注意力,独立面对比赛中可能出现的各种困难,并且承担一切后果。

也许,常常还会遇到这样的情况:你刚刚还在为抓到一个小鸟球而欢呼雀跃,下一刻大风就把小白球吹跑了;或者你才在上一个洞吞了柏忌,下一个洞你就为抓了老鹰而兴奋不已。

CC2430芯片简介CC2430/CC2431是芯片巨人TI公司收购无线单片机公司CHIPCON后推出的全新概念新一代ZigBee无线单片机系列芯片。

CC2430是一款真正符合IEEE802.15. 4标准的片上SOC ZigBee产品。

CC2430除了包括RF收发器外,还集成了加强型8051MCU、32/64/128 KB的Flash内存、8 KB的RAM、以及ADC、DMA、看门狗等。

CC2430可工作在2.4 GHz频段,采用低电压(2.0~3.6 V)供电且功耗很低(接收数据时为27 mA,发送数据时为25 mA),其灵敏度高达-91 dBm、最大输出为+ 0.6 dBm、最大传送速率为250 kbps。

CC2430的外围元件数目很少,它使用一个非平衡天线来连接非平衡变压器,以使天线性能更加出色。

电路中的非平衡变压器由电容C309、C311和电感L301、L302、L303组成,整个结构可满足RF输入/输出匹配电阻(50 Ω)的要求。

内部T/R交换电路用于完成LNA和PA之间的交换。

R200、R201为偏置电阻,其中R200主要用于为32 MHz的晶体振荡器提供合适的工作电流,通过R201可为芯片内部射频部分提供精密电流参考源。

选用一只32 MHz的石英谐振器和两只电容(C210、C211)可以构成32 MHz晶体振荡器电路。

芯片内部的电压稳压器可为所有1.8 V电压的引脚和内部电源供电,C214、C209、C200等为去耦电容,主要用于电源滤波,以提高芯片的工作稳定性。

CC2430芯片的主要特点如下:◇内含高性能和低功耗的8051微控制器核;◇集成有符合IEEE802.15.4标准的2.4 GHz的RF无线电收发机;◇具有优良的无线接收灵敏度和强大的抗干扰能力。

基于zigbee协议和CC2430的立体闹钟模型方案设计

基于zigbee协议和CC2430的立体闹钟模型方案设计
特 点 明显 。C 2 3 是 一 颗 真 正 的 系 统 芯 片 (o ) M O C 40 SC C S
( C 26 L D184),控制按键 ,DS 2 8 7 1C 8 时钟芯片 ,语 音
芯 片 ( S 4 0),以及 一 个 D 1B 0 度 传 感 器 指 示 ID10 S 8 2温 室 内温 度 。 DS 2 8 始 终 芯 片 能 够 自动 产 生 世 纪 、年 、月 、 1C8 7
Zg e联 盟 于 2 0 年 1月 推 出 了基 于 IE 8 21 . i e B 04 2 E E 0. 4 5
信号 ,如 “2 2 ” ,问题无法设置很多个 ,是 一个 简 1+ =
单的问题列表 ,循 环使用 ,不 回答 问题 ,无法停止闹钟 信号 ;此外还具有定时 自动放下窗帘功能 。 闹钟三大部分硬件设计 :
解决方案 ,用于实现嵌入式zg e应用 的片上 系统。它 i e B
支 持 2 G zI E 0 . . Zg e协 议 。这 种 解 决 方 案 . H E 821 4 iB e 4 E 5 /
能够提高性能并满足 P i e为基础的2 G M波段 AZg e B . Hz S 4 I
g 3

] C N I ≤Y 技术应用 T H O j E 0
支持 “ 一线总线 ”接 口的温度传感器 ,可以直接将温度
转化成 串行数字信号供处理器处理 。
I D 0 0 音 芯片工作 电压 3 S 4 0语 V,单片 录音8 1 分 ~6
钟 ,音质 好 ,适 合 闹钟 使 用 。 室 内照 明 电灯 控制 部 分 : 晶 闸 管 调 光 电路 电 路 采 用 M OC 0 1 向 晶 闸 管 3 2双

基于CC2430的低功耗Zigbee无线传感器网络节点的设计

基于CC2430的低功耗Zigbee无线传感器网络节点的设计

The Designed of Low Power Wireless Sensor Network Node Based on CC2430作者: 刘琼[1] 周志光[2] 朱志伟[2]
作者机构: [1]湖南工业职业技术学院,湖南长沙410208 [2]湖南长沙民政职业技术学院,湖南长沙410004
出版物刊名: 湖南工业职业技术学院学报
页码: 15-16页
主题词: 无线传感器网络 CC2430 节点 低功耗
摘要:无线传感器网络是综合了传感器、微机电、网络及无线通讯等技术的一种全新信息获取和处理技术。

Zigbee是一种近距离小功率无线通讯协议。

其低功耗、低成本、应用简单的特性正好是无线传感器网络需求的。

在简要介绍CC2430的功能特点的基础上,对无线传感器网络节点的设计要点进行了阐述。

由该节点组成的无线传感器网络功耗低、节点体积小,可以广泛地应用于远程监控、环境监测、移动医疗等领域。

基于CC2430的无线温度检测终端的设计

基于CC2430的无线温度检测终端的设计

基于CC2430的无线温度检测终端的设计王 玮,樊则宾(昆明理工大学理学院,云南省昆明市650093)摘 要:介绍了无线射频芯片CC2430和一线数字温度计DS1822的结构和功能;设计了一种无线温度检测终端。

该终端以基于Z i g Bee 技术的无线射频芯片CC2430为中央控制器,集成于该芯片内部的MCU 不仅负责控制DS1822,而且还负责控制芯片内部的射频电路。

该终端能实时响应管理中心的命令,并通过DS1822实现对环境温度的实时检测。

利用多个此类终端可对较大环境进行实时、无线、多点的温度检测。

关键词:CC2430;DS1822;无线检测中图分类号:TP274.5收稿日期:2006-11-17;修回日期:2007-04-09。

0 引 言在现代工农业生产中,常常需要对环境温度进行检测。

传统的方法往往费时、费力,效率低下,不便应用在对较大环境的温度检测中。

本文设计了一种基于无线射频技术的温度检测终端,它以RF(射频)芯片CC2430为核心,在温度传感器DS1822的配合下,能够高效地完成对环境温度的无线检测。

1 CC2430芯片概述CC2430芯片为Chipcon 公司生产的2.4GH z 射频系统单芯片,其结构框图如图1所示。

图1 CC2430结构框图该单芯片上整合了Z i g Bee RF 前端,内存,微控制器。

其主要特点如下:高性能和低功耗的8051微控制器核;集成符合I EEE 802.15.4标准的2.4GH z 的RF 无线电收发机;优良的无线接收灵敏度和强大的抗干扰性;在休眠模式时仅0.9L A 的流耗,外部的中断或RTC (实时时钟)唤醒系统,在待机模式时少于0.6L A 的流耗,外部的中断能唤醒系统;硬件支持CS MA /C A (具有检测冲击的载波侦听多路接入)功能;较宽的电压范围(2.0V ~3.6V );数字化的RSSI(接收信号强度指示)/LQ I(链路质量指示)支持和强大的D MA (直接存储器存取)功能;具有电池监测和温度感测功能;集成了14位ADC (A /D 转换器);集成AES (高级加密标准)安全协处理器;带有2个强大的支持几组协议的USART(通用异步同步收发器),以及1个符合I EEE 802.15.4规范的MAC (媒体访问控制)层计时器,1个常规的16位计时器和2个8位计时器;21个可编程的I/O 引脚,P0、P1口是完全8位口,P2口只有5个可使用位,可以由软件设定一组SFR (专用寄存器)的位和字节,使这些引脚作为通常的I/O 口或作为连接ADC 、计时器、USART 等部件的外围设备口使用。

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);}}//********************************************************低功耗这块内容一直没有实验成功,不知是没设置好还是硬件模块有问题,以后有时间再琢磨琢磨……相关学习网址:。

ZigBee芯片 cc2430 汇总之寄存器篇

ZigBee芯片 cc2430 汇总之寄存器篇

CC2430寄存器配置说明
Zigbee的出现是为了满足WSN(Wireless Sensor Network)的要求,一般而言WSN 有以下几个特征:
1.采集点众多,分布面积广
2.网络节点间的位置关系不定,节点动态加入或脱离网络
3.采集点无法和市电网络相连,依赖于电池供电,要求有很好的节电及电源管理
为了实现节能的特性,还跟CC2430模块以外的采集模块有关,本文主要关注的是CC2430自身的管理使用,故对外界数据的采集简化为从AD中采集数据。

目标系统将具备以下功能:
1.协调器建立网络,终端节点加入网络
2.节点能采集多种数据
从例程中选用一个合适的范例作为模板可以大大缩短开发时间,节约成本。

选用SimpleApp作为模板。

SimpleApp中有两个例程,一个是控制器-开关,一个是收集器-传感器,将使用收集器-传感器例程。

收集器-传感器例程中以传感器终端的温度及电源电压为数据源,传感器定时采集这两个数据,送往收集器,收集器收到数据后通过串口传给PC机。

可以说SimpleApp本身就是一个接近实用的WSN例程,本文的目标在于学习SimpleApp的使用,并加上一个通过AD采集数据的功能。

此外,由于SimpleApp的传感器终端启动后就一直采集发送数据,无法由收集器控制其采集的开启/关停,将增添由PC发送指令到收集器,再由收集器发送指令控制某终端的某项采集功能的开启/关闭。

PERCFG(外设控制寄存器)。

基于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直接序列扩频通信原理

CC2430ZIGBEE无线单片机系列技术文章之一:CC2430无线单片机直接序列扩频通信原理前言:CC2430无线单片机内部集成了全部802.15.4短距离无线通讯标准所需要的高频电路部分;图一是CC2430 2.4GH数字高频部分的框图:其数字高频部分,采用了直接序列扩频(DSSS)技术,不仅能够非常方便的实现802.15.4短距离无线通讯标准兼容,而且大大提高了无线通讯的可靠性;下面,就简单介绍直接序列扩频(DSSS)的原理,对于CC2430无线单片机高频部分的其他优点和工作原理,我们将在本系列文章陆续进行介绍。

一直接序列扩频通讯的优点直接序列扩频(DSSS),(Direct seqcuence spread spectrdm)是直接利用具有高码率的扩频码系列采用各种调制方式在发端与扩展信号的频谱,而在收端,用相同的扩频码序去进行解码,把扩展宽的扩频信号还原成原始的信息。

它是一种数字调制方法,具体说,就是将信源与一定的PN码(伪噪声码)进行摸二加。

例如说在发射端将"1"用11000100110,而将"0"用00110010110去代替,这个过程就实现了扩频,而在接收机处只要把收到的序列是11000100110就恢复成"1"是00110010110就恢复成"0",这就是解扩。

这样信源速率就被提高了11倍,同时也使处理增益达到10dB以上,从而有效地提高了整机倍噪比。

直接序列扩频的优点是:* 直扩系统射频带宽很宽。

小部分频谱衰落不会使信号频谱严重的畸变。

* 多径干扰是由于电波传播过程中遇到各种反射体(高山,建筑物)引起,使接受端接受信号产生失真,导致码间串扰,引起噪音增加。

而直扩系统可以利用这些干扰能量提高系统的性能。

* 直扩系统除了一般通信系统所要求的同步以外,还必须完成伪随机码的同步,以便接受机用此同步后的伪随机码去对接受信号进行相关解扩。

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

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

0 引言现在,无线通信技术已经成为人们日益关注的问题之一。

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

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

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

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

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

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

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

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

ZigBee协议比蓝牙、GSM、Wi-Fi更加简单实用,表1列出了ZigBee同其它无线网络的比较。

2总体设计为了进行模块化的设计,本文采用了基于通用异步收发模式(UART)接口的设计,以便方便的通过此接口将STIM(智能传感器接口模块)和该无线模块连接在一起,从而发送用户的数据。

为了能够方便在线调试,并测试串口的数据,本系统设计分为两个部分:一是CC2430部分,该部分采用四层板小型化设计,上面只有CC2430芯片和部分外围器件;另一部分是测试底板,该板采用两层板设计,包含USB与UART接口、指示灯、复位和调试接口等。

C51RF-WSN-CC2430

C51RF-WSN-CC2430

C51RF-WSN-CC2430开发系统产品简介:ZigBee无线传感器网络C51RF-WSN是基于IEEE 802.15.4技术标准和ZigBee网络协议而设计的无线数据传输网络。

为中短距离、低速率无线传感器网络,射频传输成本低,各节点只需要很少的能量,功耗小适于电池长期供电,可实现一点对多点、两点间对等通信、快速组网自动配置、自动恢复和高级电源管理,任意个传感器之间可相互协调实现数据通信。

C51RF-WSN适合用于无线传感监控,工业监控、楼宇自动化、数据中心、制冷监控、设备监控、社区安防、环境数据检测、仓库货物监控、农业蔬菜大棚内数据监控,煤气抄表等领域。

C51RF-WSN主要用于中短距离无线系统连接,提供传感器或二次仪表无线双功网络接入,能够满足对各种传感器的数据输出和输入控制命令和信息的需求使现有系统网络化、无线化。

系统设计可允许使用第三方的传感器、执行器件或低带宽数据源。

产品图片:功能特点:支持ZigBee网络协议无线传感器网络支持ZigBee网络协议,数据传输中采用多层次握手方式,保证数据传输的准确可靠。

采用2.4GHz,功耗小、灵活度高,符合环保要求,符合国际通用无需批准的规范。

组网灵活配置快捷无线传感器网络系统传非常容易快捷配置,组网接入灵活、方便,几台、几十台或几百台均可,最多可达3万台,支持5级路由深度。

可以在需要安放传感器地方任意布置无须电源和数据线,增加和减少数据点非常容易。

由于没有数据线省去了综合布线的成本,传感器无线网络更容易应用,安装成本非常低。

节点耗电低系统节点耗电低,电池使用时间长,支持各种类型传感器和执行器件。

双向传送数据和控制命令不但可以从网络节点传出数据,而且双向通信功能够可以将控制命令传到无线终端相连的传感器、无线路由器,也可将数据送入到网络显示或控制远程设备。

迅速简单的自动配置无线传感器网络终端自动配置,当终端设备上的LED由闪烁转灭,说明该终端在网络系统中。

Zigbee之旅第一个CC2430程序——LED灯闪烁实验讲解

Zigbee之旅第一个CC2430程序——LED灯闪烁实验讲解

Zigbee之旅(二):第一个CC2430程序——LED灯闪烁实验一、承上启下在上一篇文章《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配置基本结束,下面来介绍其编码实现。

基于zigbee技术的射频芯片cc2430

基于zigbee技术的射频芯片cc2430

基于ZigBee技术的射频芯片CC2430引言ZigBee采用IEEE802.15.4 标准,利用全球共用的公共频率 2.4 GHz,应用于监视、控制网络时,其具有非常显著的低成本、低耗电、网络节点多、传输距离远等优势,目前被视为替代有线监视和控制网络领域最有前景的技术之一。

CC2430芯片以强大的集成开发环境作为支持,内部线路的交互式调试以遵从IDE的IAR 工业标准为支持,得到嵌入式机构很高的认可。

它结合Chipcon公司全球先进的ZigBee协议栈、工具包和参考设计,展示了领先的ZigBee解决方案。

其产品广泛应用于汽车、工控系统和无线感应网络等领域,同时也适用于ZigBee之外2.4 GHz频率的其他设备。

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

它使用1个8位MCU (8051 ),具有128 KB可编程闪存和8 KB的RAM,还包含模拟数字转换器(ADC)、几个定时器(Timer )、AES128协同处理器、看门狗定时器(/.WF耳I山疋「)、32 kHz晶振的休眠模式定时器、上电复位电路F了心 C;-r Y泠存.:、掉电检测电路| : :「「.,.,,以及21个可编程I/O引脚。

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

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

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

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

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

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

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

引言:ZigBee采用IEEE802.15.4标准,利用全球共用的公共频率2.4 GHz,应用于监视、控制网络时,其具有非常显著的低成本、低耗电、网络节点多、传输距离远等优势,目前被视为替代有线监视和控制网络领域最有前景的技术之一。

CC2430芯片是Chipcon公司生产的首款符合ZigBee技术的2.4GHz射频系统单芯片。

适用于各种ZigBee或类似ZigBee的无线网络节点,包括调谐器、路由器和终端设备。

CC2430芯片以强大的集成开发环境作为支持,内部线路的交互式调试以遵从IDE的IAR工业标准为支持,得到嵌入式机构很高的认可。

它结合Chipcon公司全球先进的ZigBee协议栈、工具包和参考设计,展示了领先的ZigBee 解决方案。

其产品广泛应用于汽车、工控系统和无线感应网络等领域,同时也适用于ZigBee之外2.4 GHz频率的其他设备。

CC2430也是Chipcon公司SmartRF03家族中的一个关键部分,基于Chipcon 占主导地位的CC2420ZigBee无线收发器其出货量已经超越1百万片。

测量尺寸大约是1克拉钻石大小(7×7mm),CC2430表现出了相当清晰的设计结合了一颗强大的鲁棒射频,可编程的微控制器,闪存和IEEE802.15.4,ZigBee两个软体,所有都集成到一个易用并有效的一颗芯片上。

CC2430 SoC家族包括3个不同产品CC2430-F32, CC2430-F64 and CC2430-F128。

它们的区别在于内置闪存的容量不同,以及针对不同IEEE802.14.5/Zigbee应用的成本优化。

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

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

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

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

◆高性能和低功耗的8051微控制器核。

◆集成符合IEEE802.15.4标准的2.4GHz的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位计时器。

◆强大和灵活的开发工具。

2、CC2430芯片的引脚功能3、 CC2430芯片采用7mm×7mmQLP封装,共有48个引脚。

全部引脚可分为I/O端口线引脚、电源线引脚和控制线引脚三类。

2.1 I/O端口线引脚功能CC2430有21个可编程的I/O口引脚,P0、P1口是完全的8位口,P2口只有5个可使用的位。

通过软件设定一组SFR寄存器的位和字节,可使这些引脚作为通常的I/O口或作为连接ADC、计时器或USART部件的外围设备I/O口使用。

I/O口有下面的关键特性:◆可设置为通常的I/O口,也可设置为外围I/O口使用。

◆ 在输入时有上拉和下拉能力。

◆全部21个数字I/O口引脚都具有响应外部的中断能力。

如果需要外部设备,可对I/O口引脚产生中断,同时外部的中断事件也能被用来唤醒休眠模式。

◆1~6脚(P1_2~P1_7):具有4 mA输出驱动能力。

8,9脚(P1_0,P1_1):具有20 mA的驱动能力。

43,44,45,46,48脚(P2_4,P2_3,P2_2,P2_1,P2_0):具有4 mA输出驱动能力。

2.2 电源线引脚功能7脚(DVDD):为I/O提供2.0~3.6 V工作电压。

20脚(AVDD_SOC):为模拟电路连接2.0~3.6 V的电压。

23脚(AVDD_RREG):为模拟电路连接2.0~3.6 V的电压。

24脚(RREG_OUT):为25,27~31,35~40引脚端口提供1.8 V 的稳定电压。

25脚 (AVDD_IF1 ):为接收器波段滤波器、模拟测试模块和VGA的第一部分电路提供1.8 V电压。

27脚(AVDD_CHP):为环状滤波器的第一部分电路和充电泵提供1.8 V电压。

28脚(VCO_GUARD):VCO屏蔽电路的报警连接端口。

29脚(AVDD_VCO): 为VCO和PLL环滤波器最后部分电路提供1.8 V电压。

30脚(AVDD_PRE): 为预定标器、Div 2和LO缓冲器提供1.8 V 的电压。

31脚(AVDD_RF1): 为LNA、前置偏置电路和PA提供1.8 V的电压。

33脚(TXRX_SWITCH): 为PA提供调整电压。

35脚(AVDD_SW): 为LNA/PA交换电路提供1.8 V电压。

36脚(AVDD_RF2): 为接收和发射混频器提供1.8 V电压。

37脚(AVDD_IF2): 为低通滤波器和VGA的最后部分电路提供1.8 V电压。

38脚(AVDD_ADC): 为ADC和DAC的模拟电路部分提供1.8 V电压。

39脚(DVDD_ADC): 为ADC的数字电路部分提供1.8 V电压。

40脚(AVDD_DGUARD): 为隔离数字噪声电路连接电压。

41脚(AVDD_DREG): 向电压调节器核心提供2.0~3.6 V电压。

42脚(DCOUPL): 提供1.8 V的去耦电压,此电压不为外电路所使用。

47脚(DVDD): 为I/O端口提供2.0~3.6 V的电压。

2.3 控制线引脚功能10脚(RESET_N): 复位引脚,低电平有效。

19脚(XOSC_Q2): 32 MHz的晶振引脚2。

21脚(XOSC_Q1): 32 MHz的晶振引脚1,或外部时钟输入引脚。

22脚(RBIAS1): 为参考电流提供精确的偏置电阻。

26脚(RBIAS2): 提供精确电阻,43 kΩ,±1%。

32脚(RF_P): 在RX期间向LNA输入正向射频信号;在TX期间接收来自PA的输入正向射频信号。

34脚(RF_N): 在RX期间向LNA输入负向射频信号;在TX期间接收来自PA的输入负向射频信号。

43脚 (P2_4/XOSC_Q2): 32.768 kHz XOSC的2.3端口。

44脚 (P2_4/XOSC_Q1): 32.768 kHz XOSC的2.4端口。

11~18脚(P0_0 ~P0_7):具有4 mA输出驱动能力。

3、电路典型应用3.1硬件应用电路CC2430芯片需要很少的外围部件配合就能实现信号的收发功能。

电路使用一个非平衡天线,连接非平衡变压器可使天线性能更好。

电路中的非平衡变压器由电容C341和电感L341、L321、L331以及一个PCB 微波传输线组成,整个结构满足RF输入/输出匹配电阻(50Ω)的要求。

内部T/R交换电路完成LNA和PA之间的交换。

R221和R261为偏置电阻,电阻R221主要用来为32MHz的晶振提供一个合适的工作电流。

用1个32 MHz的石英谐振器(XTAL1)和2个电容(C191和C211)构成一个32MHz 的晶振电路。

用1个32.768 kHz的石英谐振器(XTAL2)和2个电容(C 441和C431)构成一个32.768 kHz的晶振电路。

电压调节器为所有要求1.8V电压的引脚和内部电源供电,C241和C421电容是去耦合电容,用来电源滤波,以提高芯片工作的稳定性。

3.2软件编程由于篇幅限制,下面仅给出在32MHz系统时钟下,用DMA向闪存内部写入程序部分源代码。

MOV DPTR,#DMACFG ;为DMA通道结构设定一个带有地址的数据指针,开始写入DMA结构MOV A,#SRC_HI;源数据的高位地址MOVX @DPTR ,A;INC DPTR;MOV A,#SRC_LO;源数据的低位地址MOVX @DPTR,A;INC DPTR;MOV A,#0DFh;高位地址的定义MOV X@DPTR,A;INC DPTR;MOV A,#0AFh;低位地址的定义MOVX @DPTR,A;INC DPTR;MOV A,#BLK_LEN;数据的长度MOVX @DPTR,A;INC DPTR;MOV A,#012h;8位,单模式,Flash触发器使用MOVX @DPTR,A;INC DPTR;MOV A,#042h;屏蔽中断,DMA高通道优先MOVX @DPTR,A;MOV DMA0CFGL,#DMACFG_LO;为当前的DMA结构设置开始地址MOV DMA0CFGH,#DMACFG_HI;MOV DMAARM,#01h;设置DMA的0通道MOV FADDRH,#00h;设置闪存高位地址MOV FADDRL,#01h;设置闪存低位地址MOV FWT,#2Ah;设置闪存计时MOV FCTL,#02h;开始向闪存写程序4、结语目前,国内外嵌入式射频芯片中,CC2430芯片是性能最好、功能更强的一个。

它结合了市场领先的Z_StackTM ZigBeeTM协议软件和其他Chipcon公司的软件工具,为开发出无接口、紧凑、高性能和可靠的无线网络产品提供了便利。

相信在未来几年,它的应用将会涉及到社会的更多领域。

Chipcon公司的ZigBeeTMSoC解决方案对于制造商是一个巨大的飞跃,产品面向家庭和楼宇自动化,供暖、通风和空调系统,自动抄表,医疗设施,家庭娱乐,物流,和其它终端市场,都可以被相当便宜和低功耗的无线通讯替代。

CC2 430将让制造商开发出无接口,紧凑,高性能和可靠的无线网络产品,用该芯片作为在系统中的主动设备,并减少上市时间以及将生产和测试成本降到最低。

“从一开始,我们就给自己定位,不能仅仅宣传ZigBeeTM解决方案,而是确实要付诸使用”。

Chipcon公司的董事长GeirForre讲道,“Chipcon公司今天发布的产品,具有针对不同ZigBeeTM适合方案的完整的开发工具。

当其它供应商比较他们第一代方案时,Chipcon已经拥有了2代ZigBeeTM,并逐渐会有第3或第4代。

相关文档
最新文档