cc2530-各种睡眠模式到主动模式的切换
- 格式:doc
- 大小:33.50 KB
- 文档页数:6
第三章 ZigBee无线单片机TI 公司的CC2530是真正的系统级SoC芯片,适用于2.4GHz IEEE 802.15.4,ZigBee和RF4CE应用。
CC2530包括了极好性能的一流的RF收发器,工业标准增强型8051 MCU,系统中可编程的闪存,8KB RAM,具有不同的运行模式,使得它尤其适应超低功耗要求的系统,以及许多其它功能强大的特性,结合德州仪器的业界领先的黄金单元ZigBee 协议栈(Z-Stack™),提供了一个强大和完整的ZigBee 解决方案。
CC2530可广泛应用在2.4-GHz IEEE 802.15.4系统, RF4CE遥控控制系统,ZigBee系统,家庭/建筑物自动化,照明系统,工业控制和监视,低功耗无线传感器网络,消费类电子和卫生保健等领域。
3.1 CC2530芯片的特点CC2530是一个真正的用于2.4-GHz IEEE 802.15.4与Zigbee应用的SOC解决方案。
这种解决方案能够提高性能并满足以ZigBee为基础的2.4 GHz ISM波段应用对低成本、低功耗的要求。
它结合了一个高性能2.4 GHz DSSS(直接序列扩频)射频收发器核心和一颗工业级小巧、高效的8051控制器。
CC2530芯片方框图如图3.1所示。
内含模块大致可以分为三类:CPU 和内存相关的模块;外设、时钟和电源管理相关的模块,以及射频率相关的模块。
CC2530在单个芯片上整合了8051兼容微控制器、ZigBee 射频(RF)前端、内存和FLASH存储器等,还包含串行接口(UART)、模/数转换器(ADC)、多个定时器(Timer)、AESl28安全协处理器、看门狗定时器(WatchDog Timer)、32 kHz晶振的休眠模式定时器、上电复位电路(Power 0n Reset)、掉电检测电路(Brown Out Detection)以及21个可编程IO口等外设接口单元。
CC2530芯片采用O.18um CMOS工艺生产,工作时的电流损耗为20 mA;在接收和发射模式下,电流损耗分别低于30 mA或40 mA。
转:ZigBeeZ-StackCC2530实现低功耗运⾏的配置简介设备⽀持低功耗运⾏是ZigBee⽹络的⼀⼤特点,该特性借助CC2530芯⽚能够很好地体现出来。
CC2530芯⽚有五种运⾏模式,分别为主动模式、空闲模式、PM1、PM2和PM3。
主动模式是⼀般运⾏模式;空闲模式除了CPU内核停⽌运⾏外,其他和主动模式⼀样;PM1、PM2、PM3是低功耗运⾏模式,CC2530通过关闭不必要的部分和调整系统时钟来达到低功耗的效果。
PM1:稳压器的数字部分开启,32 MHzXOSC和 16 MHz RCOSC都不运⾏。
32 kHz RCOSC或32 kHz XOSC运⾏。
复位、外部中断或睡眠定时器溢出时系统将转到主动模式。
PM2:稳压器的数字内核关闭。
32 MHzXOSC和 16 MHz RCOSC都不运⾏。
32kHz RCOSC或32 kHz XOSC运⾏。
复位、外部中断或睡眠定时器过期时系统将转到主动模式。
PM3:稳压器的数字内核关闭。
所有的振荡器都不运⾏。
复位或外部中断时系统将转到主动模式。
⼏种运⾏模式的对⽐如下表所⽰:PM2模式⼜叫LITE SLEEP模式,其功耗在毫安级别,多⽤于需要定时唤醒的场合,⽐如周期性地唤醒传感器来进⾏数据的采集。
PM3模式⼜叫做DEEP SLEEP模式,在⼏种运⾏模式中功耗最低,在微安级别,多⽤于远程遥控场合,⽐如使⽤CC2530做⼀个远程遥控器,在没有按键按下时,可使其进⼊PM3模式以减少电能消耗。
Z-STACK提供了两种低功耗运⾏模式,PM2和PM3。
PM2模式可被睡眠定时器,外部中断和复位唤醒,PM3模式可被外部中断和复位唤醒。
在Z-Stack的使⽤⽂档中得知为了使设备能够进⼊睡眠模式,必须满⾜以下的条件:1、通过添加预编译项POWER_SAVING来使能睡眠模式2、ZDO节点描述符指定“在空闲时发送功能是关闭的”,通过在f8wConfig.cfg⽂件中将RFD_RCVC_ALWAYS_ON设置为FALSE来实现。
粤嵌推出自主研发cc2530zigbee开发套件粤嵌教育项目研发中心,作为粤嵌的核心技术基地,近年陆续推出了多款自主研发、结合当下技术前沿的主流产品,不断的把新技术运用到实验项目当中,从产品的性能和应用领域着手,致力于研发出基于物联网智能架构的全新嵌入式产品。
粤嵌8年的自主研发早已硕果累累,前不久举办的“粤嵌杯”嵌入式与物联网设计大赛上,粤嵌多年来自主研发的一系列教仪产品首度亮相展厅,其关注热度甚至超过比赛成为现场的焦点,不少学校相关专业领导都非常看好这些能将学生的理论运用到实践的教学仪器,甚至提出购买相关产品协助办学,改革目前的教学模式。
10月末,粤嵌项目研发中心又一力作诞生,全新推出的gec-2530EBZigbee开发套件,将粤嵌的嵌入式培训办学推向又一技术高度,旨在通过产品激发学生们的学习热情和动手能力,致力于把嵌入式相关专业学生打造成为企业争夺的综合性技术人才。
产品介绍1、GEC2530EB开发板1.1GEC2530EB开发板硬件资源1)GEC2530RF射频核心板GEC2530RF是基于TI公司第二代2.4GHzlEEE802.15.4/RF4CE/ZigBee的片上系统解决方案CC2530F256的全功能模块,集射频收发及MCU控制功能于一体。
外围元件包含一颗32MHz晶振和一颗32.768KHZ晶振及其他一些阻容器件。
采用板载PCB天线设计,采用巴伦匹配电路,接收灵敏度可达-97dB。
采用DlP2.54mm扩展接口,更加方便用户的扩展,甚至可以用万用板扩展。
在开阔的马路边上,其可视通信距离为200M,室内非混凝土墙可穿透三堵,距离大概可达到10M左右,视测试条件不同略有变化。
2)核心板IO 定义如图所示3)CC2530硬件特性简述强大无线前端低功耗 2.4GHzlEEE802.15.4标准射频收发器 接收模式:24毫安 出色的接收器灵敏度和抗干扰能力发送模式1dBm :29毫安 可编程输出功率为+4.5dBm ,总体无线连接101dbm功耗模式1(4微秒唤醒):0.2毫安 极少量的外部元件功率模式2(睡眠计时器运行):1微安 支持运行网状网系统,只需要一个晶体功耗模式3(外部中断):0.4微安 6毫米x6毫米的QFN40封装宽电源电压范围(2V —3.6V )微控制器应用领域高性能和低功耗8051微控制器内核2.4GHzIEEE802.15.4标准系统工业控制和监测256KB 系统可编程闪存 (32/64/128KB 可选) RF4CE 遥控控制系统(需要大于64KB )低功率无线传感器网络8KB 的内存保持在所有功率模式乙gBee 系统/楼宇自动化消费电子 硬件调试支持照明系统健康照顾和医疗保健ROD P0J P0_22107-6543zz」-CFO5 CP03 CP<0cP T I f P<22、CCDebugger仿真器CCDebugger是一款TICCDebugger增强型的仿真器/下载器。
CC2530/Zigbee开发平台 使用说明书V2.1希望微控工作室/2012年6月11日目 录1 产品组成 (1)2 产品特点 (1)3 应用领域 (3)4 XWWK-CC2530A模块与ZigBee协议 (3)4.1 Zigbee概述 (3)4.2 ZigBee的技术特点 (4)4.3 Zigbee组成及自组网 (5)4.4 XWWK-CC2530A模块与ZigBee2007/PRO协议 (5)4.5 XWWK-CC2530A模块 (7)5使用方法 (8)5.1 CC2530A模块专用主板 (8)5.2 CC2530A模块终端节点的供电 (10)5.2 CC2530A模块与仿真器的连接 (11)6、仿真调试 (11)6.1 安装仿真器USB 驱动程序 (11)6.2 点对点测试程序操作范例 (12)6.3 IAR 7.51工程设置 (14)1 产品产品组成组成组成开发平台开发平台主要由XWWK-CC2530A 模块、专用主板、仿真器、供电底板以及天线、数据线等配件组成,同时,赠送大量软件、代码以及资料等。
2 2 产品产品产品特点特点特点XWWK-CC2530A 模块 是用于2.4-GHz IEEE 802.15.4、ZigBee 和RF4CE 应用的一个真正的片上系统(SoC )解决方案。
模块结合了领先的RF 收发器的优良性能,业界标准的增强型8051 CPU 、 8KB RAM 、256K 闪存。
模具有不同的低功耗运行模式,使得它尤其适应超低功耗要求的系统,且模式切换时间极短。
特点见下表单元 特点说明 真正的片上Soc片内集成8051 微控制器 + 2.4GHzRF 收发器 + 大量片内外设电源电压范围宽(2.0~3.6V );6mm×6mm 的QFN40 封装只需极少的外接元件8051 微控制器 增强型8051 CPU,精简指令集,频率32M,单指令周期。
CC2530F256,大容量Flash8-KB RAM,具备在各种供电方式下的数据保持能力 支持多种中断响应RF收发器 兼容2.4-GHz IEEE 802.15.4 的RF收发器极高的接收灵敏度和抗干扰性能(-97dBm)可编程的输出功率高达4.5 dBm适合系统配置符合世界范围的无线电频率法规:ETSI EN 300 328 和EN 300440(欧洲),FCC CFR47 第15 部分(美国)和ARIB STD-T-66(日本)片内外设 多个定时器:MAC 定时器,通用定时器(一个16 位定时器,一个8 位定时器)强大的5 通道DMAIR 发生电路睡眠定时器,低功耗设计使用。
/说明:PM1和PM2和PM0的切换,用睡眠定时器(因为睡眠定时器计时时间到后,响应睡眠定时器中断,电源模式会自动从PM1/PM2切换到PM0)。
在PM3下,睡眠定时器不起作用,因为32K的晶振都关闭了,故从PM3切换到PM0,用的是外部IO中断。
“设置睡眠定时器的定时间隔”这一步一定要在“设置电源模式”之前,因为进入睡眠后系统就不会继续执行程序了。
读取睡眠定时器的当前计数值,顺序必须遵循:读ST0 → 读ST1 → 读ST2 写入睡眠定时器的比较值,顺序必须遵循:写ST2 → 写ST1 → 写ST0
当定时器的计数值=比较值时,产生中断)
*****************************************/
#include <iocc2530.h>
#define uint unsigned int
#define uchar unsigned char
#define uint8 unsigned char
#define uint32 unsigned long
#define LED_ON 0
#define LED_OFF 1
#define gled P1_0
#define rled P1_1
#define crystal 0 //石英晶振
#define rc 1 //RC晶振
#define s1 P0_1
//延时函数
void delay(uint n)
{
uint i,j;
for(i=0;i<50;i++)
for(j=0;j<n;j++);
}
void initKey(void)
{
P0SEL &= ~0X02;
P0DIR &= ~0X02;
P0IEN |= 0X02;
IEN1 |= 0X20;
EA = 1;
}
void initled(void)
{
P1SEL &= ~0X03; //P1_0,P1_1接口设为通用接口模式
P1DIR |= 0X03; //P1_0,P1_1接口设为输出模式
rled = 1;
gled = 1;
}
//设置主时钟
void set_main_clock(source)
{
if(source)
{
CLKCONCMD |= 0X40; //选择16MHZ RCOSC为系统时钟源while(!(CLKCONSTA & 0X40)); //等待时钟稳定
}else
{
CLKCONCMD &= ~0X40; //选择32MHZ XOSC为系统时钟源while(CLKCONSTA & 0X40); //等待时钟稳定
}
}
//设置系统低速时钟
void set_low_clock(source)
{
if(source)
CLKCONCMD |= 0X80; //选择32KHZ RCOSC为低速时钟源else
CLKCONCMD &= ~0X80; //选择32KHZ XOSC为低速时钟源}
//初始化睡眠定时器
void init_sleep_timer(void)
{
ST2 = 0X00;
ST1 = 0X00;
ST0 = 0X00; //设置计数值
EA = 1; //开中断
STIE = 1; //使能睡眠定时器中断
STIF = 0; //清除睡眠定时器中断标志
}
//led闪烁函数
void blink_led(void)
{
gled = 1;
uchar jj = 10;
while(jj--)
{
rled = !rled;
delay(10000);
}
rled = 1;
gled = 0;
}
//设置睡眠时间
void set_st_period(uint sec)
{
uint32 sleeptimer = 0;
//把ST2:ST1:ST0赋值给sleeptimer
sleeptimer |= (uint32)ST0;
sleeptimer |= ((uint32)ST1 << 8);
sleeptimer |= ((uint32)ST2 << 16);
sleeptimer += ((uint32)sec * (uint32)32768); //低速频率为32.768KHZ,故每秒定时器计数32768次如果低速时钟为32K呢
//把加N秒的计数值赋给ST2:ST1:ST0
ST2 = (uint8)(sleeptimer >> 16);
ST1 = (uint8)(sleeptimer >> 8);
ST0 = (uint8)sleeptimer;
}
void set_powermode(uchar mode)
{
uchar i;
if(mode<4)
{
SLEEPCMD &= ~0X03;
SLEEPCMD |= mode;
for(i=0;i<4;i++);
PCON = 1;
}
else
PCON = 0;
}
void main(void)
{
set_main_clock(crystal);
set_low_clock(crystal);
initled();
init_sleep_timer();
gled = LED_ON;
delay(50000);
//进入PM1模式
gled = LED_OFF;
set_st_period(5);
set_powermode(1);
rled = LED_ON;
delay(50000);
//进入PM2模式
rled = LED_OFF;
set_st_period(5);
set_powermode(2);
gled = LED_ON;
delay(50000);
gled = LED_OFF;
initKey(); //初始化按键
set_powermode(3);
rled = LED_ON;
while(1);
}
//睡眠定时器中断函数
#pragma vector = ST_VECTOR __interrupt void ST_ISR(void) {
EA = 0;
STIF = 0; //标志清除
EA = 1;
}
//P0中断函数
#pragma vector = P0INT_VECTOR
__interrupt void P0_ISR(void)
{
EA = 0;
P0IF = 0;
P0IFG &= ~0X02;
set_powermode(4); //只要响应了IO中断,就会从PM1/PM2/PM3恢复到PM0,故本句也可以取消。
EA = 1;
}。