如何实现ZigBee休眠与唤醒

供稿:hz-xin.com     日期:2024-05-17
如何实现ZigBee休眠与唤醒

CC2530有3种睡眠模式,pm2模式比较省功耗而且可以被定时唤醒;pm3模式最省电但是只能被外部中断唤醒


1、sensordemo的sensor在入网以后,为什么灯在不断地闪?
其实,闪一次就是睡眠了一次:亮的时候睡过来,灭的时候睡下去。具体代码在halSleep函数里。要做的,就是读懂这个机制是怎么运作的。


2、为什么闪的频率那么高?
zstack的睡眠机制就是在操作系统没事干的时候才睡眠,频率高说明应用程序让操作系统不断做事。你想让它长时间睡眠,那要做的就是不要不断地给操作系统事情做,找到分配系统任务的地方。


要设置低功耗模式,先确认:
1.f8wConfig.cfg文件中DRFD_RCVC_ALWAYS_ON定义为FALSE
2.Options->C/C++Compiler->Defined symbols中添加预编译“POWER_SAVING”;

重要函数void halSleep( uint16 osal_timeout )
1.首先将osal_timeout转成以320US为单位
2.获取下一次MAC定时器到期时间
3. halPwrMgtMode = (timeout == 0) ? HAL_SLEEP_DEEP : HAL_SLEEP_TIMER;
//为PM2,PM3模式。 没有任务要执行就进入PM3深度睡眠,否则进入PM2睡眠,可以定时器唤醒。
4.唤醒

OSAL机制的ZigBee低功耗管理(CC2530)


涉及文件
OSAL_PwrMgr.h OSAL电源管理的API头文件
OSAL_PwrMgr.C OSAL电源管理的API C文件
hal_sleep.c 底层的电源管理文件

电源管理结构体
typedef struct
{
uint16 pwrmgr_task_state; //任务状态
uint16 pwrmgr_next_timeout; //下一次超时
uint16 accumulated_sleep_time; //睡眠时间
uint8 pwrmgr_device; //电源管理设备属性,有PWRMGR_ALWAYS_ON 和 PWRMGR_BATTERY两种

} pwrmgr_attribute_t;

#define PWRMGR_ALWAYS_ON 0
#define PWRMGR_BATTERY 1
选择PWRMGR_ALWAYS_ON的话将不会进入睡眠模式,选择PWRMGR_BATTERY将允许HAL管理CPU进入SLEEP LITE或者SLEEP DEEP状态。

#define PWRMGR_CONSERVE 0
#define PWRMGR_HOLD 1
低功耗标志,主要用于osal_pwrmgr_task_state()这个函数中,用于标志每一任务是否需要低功耗。

extern pwrmgr_attribute_t pwrmgr_attribute

定义一个电源管理的全局变量。

/*********************************************************************
* @brief 初始化电源管理函数,这个函数在OSAL.C里面的osal_init_system( )调用,
也就是在OSAL系统初始化的时候将电源管理模式调成了不会进入睡眠模式的状态。
*/
void osal_pwrmgr_init( void )
{
pwrmgr_attribute.pwrmgr_device = PWRMGR_ALWAYS_ON; //默认没有睡眠模式
pwrmgr_attribute.pwrmgr_task_state = 0; //清零
}

OSAL系统在检查完所有的任务事件之后发现没有事件需要处理,这样在POWER_SAVING宏定义打开的情况下将调用osal_pwrmgr_powerconserve();函数,在这函数中将会根据选择系统进入休眠。

退出休眠
当出现IO中断或者复位时候会退出休眠,或者在休眠定时器中断时候也将会退出休眠。如果是IO中断或者休眠定时器中断退出之后将回到进入休眠的地方继续向下执行,复位退出的话进入程序的初部分执行。

Zigbee是不支持路由器节点休眠的,因为遵循Zigbee协议,只有终端节点支持休眠,方法如下:
要设置低功耗模式,先确认: 1.f8wConfig.cfg文件中DRFD_RCVC_ALWAYS_ON定义为FALSE 2.Options->C/C++Compiler->Defined symbols中添加预编译“POWER_SAVING”;
重要函数void halSleep( uint16 osal_timeout ) 1.首先将osal_timeout转成以320US为单位 2.获取下一次MAC定时器到期时间 3. halPwrMgtMode = (timeout == 0) ? HAL_SLEEP_DEEP : HAL_SLEEP_TIMER; //为PM2,PM3模式。没有任务要执行就进入PM3深度睡眠,否则进入PM2睡眠,可以定时器唤醒。 4.唤醒 OSAL机制的ZigBee低功耗管理(CC2530) 涉及文件 OSAL_PwrMgr.h OSAL电源管理的API头文件 OSAL_PwrMgr.C OSAL电源管理的API C文件 hal_sleep.c 底层的电源管理文件 电源管理结构体 typedef struct { uint16 pwrmgr_task_state; //任务状态 uint16 pwrmgr_next_timeout; //下一次超时 uint16 accumulated_sleep_time; //睡眠时间 uint8 pwrmgr_device; //电源管理设备属性,有PWRMGR_ALWAYS_ON 和 PWRMGR_BATTERY两种 } pwrmgr_attribute_t; #define PWRMGR_ALWAYS_ON 0 #define PWRMGR_BATTERY 1 选择PWRMGR_ALWAYS_ON的话将不会进入睡眠模式,选择PWRMGR_BATTERY将允许HAL管理CPU进入SLEEP LITE或者SLEEP DEEP状态。 #define PWRMGR_CONSERVE 0 #define PWRMGR_HOLD 1 低功耗标志,主要用于osal_pwrmgr_task_state()这个函数中,用于标志每一任务是否需要低功耗。 extern pwrmgr_attribute_t pwrmgr_attribute 定义一个电源管理的全局变量。 /********************************************************************* * @brief 初始化电源管理函数,这个函数在OSAL.C里面的osal_init_system( )调用, 也就是在OSAL系统初始化的时候将电源管理模式调成了不会进入睡眠模式的状态。 */ void osal_pwrmgr_init( void ) { pwrmgr_attribute.pwrmgr_device = PWRMGR_ALWAYS_ON; //默认没有睡眠模式 pwrmgr_attribute.pwrmgr_task_state = 0; //清零 } OSAL系统在检查完所有的任务事件之后发现没有事件需要处理,这样在POWER_SAVING宏定义打开的情况下将调用osal_pwrmgr_powerconserve();函数,在这函数中将会根据选择系统进入休眠。 退出休眠 当出现IO中断或者复位时候会退出休眠,或者在休眠定时器中断时候也将会退出休眠。如果是IO中断或者休眠定时器中断退出之后将回到进入休眠的地方继续向下执行,复位退出的话进入程序的初部分执行。

zigbee模块 CM200有3种睡眠模式,pm2模式比较省功耗而且可以被定时唤醒;pm3模式最省电但是只能被外部中断唤醒
1、sensordemo的sensor在入网以后,为什么灯在不断地闪?其实,闪一次就是睡眠了一次:亮的时候睡过来,灭的时候睡下去。具体代码在halSleep函数里。要做的,就是读懂这个机制是怎么运作的。
2、为什么闪的频率那么高?zstack的睡眠机制就是在操作系统没事干的时候才睡眠,频率高说明应用程序让操作系统不断做事。你想让它长时间睡眠,那要做的就是不要不断地给操作系统事情做,找到分配系统任务的地方。要设置低功耗模式,先确认:
1.f8wConfig.cfg文件中DRFD_RCVC_ALWAYS_ON定义为FALSE
2.Options->C/C++Compiler->Defined symbols中添加预编译“POWER_SAVING”;重要函数void halSleep( uint16 osal_timeout )
1.首先将osal_timeout转成以320US为单位
2.获取下一次MAC定时器到期时间
3.halPwrMgtMode = (timeout == 0) ? HAL_SLEEP_DEEP : HAL_SLEEP_TIMER;//为PM2,PM3模式。没有任务要执行就进入PM3深度睡眠,否则进入PM2睡眠,可以定时器唤醒。
4.唤醒OSAL机制的ZigBee低功耗管理涉及文件OSAL_PwrMgr.hOSAL电源管理的API头文件OSAL_PwrMgr.COSAL电源管理的API C文件hal_sleep.c底层的电源管理文件电源管理结构体typedef struct{uint16 pwrmgr_task_state;//任务状态uint16 pwrmgr_next_timeout;//下一次超时uint16 accumulated_sleep_time;//睡眠时间uint8pwrmgr_device;//电源管理设备属性,有PWRMGR_ALWAYS_ON和PWRMGR_BATTERY两种} pwrmgr_attribute_t;#define PWRMGR_ALWAYS_ON 0#define PWRMGR_BATTERY
1选择PWRMGR_ALWAYS_ON的话将不会进入睡眠模式,选择PWRMGR_BATTERY将允许HAL管理CPU进入SLEEP LITE或者SLEEP DEEP状态。#define PWRMGR_CONSERVE 0#define PWRMGR_HOLD
1低功耗标志,主要用于osal_pwrmgr_task_state()这个函数中,用于标志每一任务是否需要低功耗。extern pwrmgr_attribute_t pwrmgr_attribute定义一个电源管理的全局变量。/********************************************************************** @brief初始化电源管理函数,这个函数在OSAL.C里面的osal_init_system( )调用,也就是在OSAL系统初始化的时候将电源管理模式调成了不会进入睡眠模式的状态。*/void osal_pwrmgr_init( void ){pwrmgr_attribute.pwrmgr_device = PWRMGR_ALWAYS_ON; //默认没有睡眠模式pwrmgr_attribute.pwrmgr_task_state = 0;//清零}OSAL
系统在检查完所有的任务事件之后发现没有事件需要处理,这样在POWER_SAVING宏定义打开的情况下将调用osal_pwrmgr_powerconserve();函数,在这函数中将会根据选择系统进入休眠。退出休眠当出现IO中断或者复位时候会退出休眠,或者在休眠定时器中断时候也将会退出休眠。如果是IO中断或者休眠定时器中断退出之后将回到进入休眠的地方继续向下执行,复位退出的话进入程序的初部分执行。

如何实现ZigBee休眠与唤醒
答:1.首先将osal_timeout转成以320US为单位 2.获取下一次MAC定时器到期时间 3.halPwrMgtMode = (timeout == 0) ? HAL_SLEEP_DEEP : HAL_SLEEP_TIMER;//为PM2,PM3模式。没有任务要执行就进入PM3深度睡眠,否则进入PM2睡眠,可以定时器唤醒。4.唤醒OSAL机制的ZigBee低功耗管理涉及文件OSAL_PwrMgr.h...

Zigbee怎么实现让路由节点休眠?
答:Zigbee是不支持路由器节点休眠的,因为遵循Zigbee协议,只有终端节点支持休眠,方法如下:要设置低功耗模式,先确认: 1.f8wConfig.cfg文件中DRFD_RCVC_ALWAYS_ON定义为FALSE 2.Options->C/C++Compiler->Defined symbols中添加预编译“POWER_SAVING”;重要函数void halSleep( uint16 osal_timeout ) 1....

ZigBee要想自定义休眠时间应该怎样做
答:厦门四信的ZigBee模块都可以自定义休眠时间和唤醒时间,如下图

ZigBee模块远程唤醒有什么方法?
答:你要想想,如果在终端休眠期间,可以通过无线唤醒,那终端必须处于接受状态,这已经是互相矛盾了。例如ZLG的zigbee模块ZM5168可以通过引脚唤醒,或者定时休眠模式。

zigbee终端休眠和唤醒时间怎么确定
答:终端定时发送data request,父节点收到后发回复ack,然后,如果有数据就发送给终端。

zigbee技术采用什么方法实现低功耗
答:这是其它无线设备望尘莫及的。主要方法:1、周期性侦听比如无线模块主动打开个十几到几十毫秒侦听一下,如果没有收到网关指令,就休眠,有指令就干活,干完活再休眠。直到下一个周期开始,再唤醒侦听,如此反复。2、定时唤醒无线单元内部定时器定时唤醒,主动联系网关,把事解决完了,继续休眠。

zigbee中可以让协调器无线控制节点进入睡眠状态,或是从睡眠中唤醒...
答:协调器是不允许休眠的

看懂黑科技,3分钟让你读懂ZigBee无线通讯技术
答:6、实现成本低 模块的初始成本估计在6美元左右,很快就能降到1.5-2.5美元,且Zigbee协议免专利费用。目前低速低功率的UWB芯片组的价格至少为20美元。而ZigBee的价格目标仅为几美分。低成本对于ZigBee也是一个关键的因素。 7、时延短 通信时延和从休眠状态激活的时延都非常短,典型的搜索设备时延30ms,休眠激活的时延是15...

zigbee中路由节点有没有休眠模式
答:据我了解,路由器没有休眠的,只有终端才有休眠模式

zigbee什么意思
答:地抖动翅膀的“舞蹈”来与同伴传递花粉所在方位信息,也就是说蜜蜂依靠这样的方式构成了群体中的通信网络。其特点是近距离、低复杂度、自组织、低功耗、低数据速率、低成本。主要适合用于自动控制和远程控制领域,可以嵌入各种设备。简而言之,ZigBee就是一种便宜的,低功耗的近距离无线组网通讯技术。