17322|14

3238

帖子

5

TA的资源

五彩晶圆(中级)

楼主
 

如何实现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;  
//PM2PM3模式。 没有任务要执行就进入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中断或者休眠定时器中断退出之后将回到进入休眠的地方继续向下执行,复位退出的话进入程序的初部分执行。
此帖出自无线连接论坛

最新回复

时间会自己计算啊    详情 回复 发表于 2015-8-7 19:28
点赞 关注(1)
 

回复
举报

57

帖子

1

TA的资源

一粒金砂(中级)

沙发
 
路由节点能休眠么
此帖出自无线连接论坛

点评

TI的zigbee路由器不支持睡眠功能,只有终端节点支持。:)  详情 回复 发表于 2013-6-14 10:27
 
 

回复

3238

帖子

5

TA的资源

五彩晶圆(中级)

板凳
 

回复 沙发 myl593799546 的帖子

TI的zigbee路由器不支持睡眠功能,只有终端节点支持。
此帖出自无线连接论坛

点评

这个应该主要看芯片采用什么协议的吧。我查了资料,如下: --------------------- 对于电源管理能力,Wireless HART、DigiMesh 和 WaveMesh 都能支持全部节点包括路由 节点在内都能进行休眠,相比较之下WaveMesh  详情 回复 发表于 2013-6-14 15:52
个人签名淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
 
 
 

回复

57

帖子

1

TA的资源

一粒金砂(中级)

4
 

回复 板凳 wateras1 的帖子

这个应该主要看芯片采用什么协议的吧。我查了资料,如下:
---------------------
对于电源管理能力,Wireless HART、DigiMesh 和 WaveMesh 都能支持全部节点包括路由
节点在内都能进行休眠,相比较之下WaveMesh 的休眠技术比较灵活。ZigBee 和 Z-Wave
只能支持部分节点休眠:ZigBee的终端设备可以休眠;Z-Wave网络中传感器类设备可以休眠。
对点对多点系统的评估参考了Wi-Fi和Bluetooth网络的电池的续航能力。
----------------------
然后呢,我手上是一块昂宇的zigbee芯片,不知道版主知不知道昂宇的支持路由节点休眠不
此帖出自无线连接论坛

点评

我没用过昂宇的zigbee芯片,其实这个和什么芯片没很大关系,主要还是看你采用的哪家zigbee协议栈。你可以问下卖你芯片的采用的是哪家的协议栈。:)  详情 回复 发表于 2013-6-15 16:10
 
 
 

回复

3238

帖子

5

TA的资源

五彩晶圆(中级)

5
 

回复 4楼 myl593799546 的帖子

我没用过昂宇的zigbee芯片,其实这个和什么芯片没很大关系,主要还是看你采用的哪家zigbee协议栈。你可以问下卖你芯片的采用的是哪家的协议栈。
此帖出自无线连接论坛

点评

哦?你用过啊,我用的是z-stack的  详情 回复 发表于 2013-7-23 10:54
个人签名淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
 
 
 

回复

57

帖子

1

TA的资源

一粒金砂(中级)

6
 

回复 5楼wateras1 的帖子

哦?你用过啊,我用的是z-stack的
此帖出自无线连接论坛

点评

我目前用的是ZSTACK:)  详情 回复 发表于 2013-7-23 11:46
 
 
 

回复

3238

帖子

5

TA的资源

五彩晶圆(中级)

7
 

回复 6楼myl593799546 的帖子

我目前用的是ZSTACK
此帖出自无线连接论坛
个人签名淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
 
 
 

回复

147

帖子

0

TA的资源

一粒金砂(高级)

8
 
不管是TI的z-stack还是Atmel的协议,都应该要支持低功耗模式。
此帖出自无线连接论坛

点评

嗯,有些协议栈支持路由和协调器和终端都低功耗,有些就终端低功耗,有些是路由和终端低功耗,不过目前看了下绝大多数厂家的模块仅仅终端低功耗:)  详情 回复 发表于 2013-9-26 21:33
 
 
 

回复

3238

帖子

5

TA的资源

五彩晶圆(中级)

9
 

回复 8楼罗菜鸟 的帖子

嗯,有些协议栈支持路由和协调器和终端都低功耗,有些就终端低功耗,有些是路由和终端低功耗,不过目前看了下绝大多数厂家的模块仅仅终端低功耗
此帖出自无线连接论坛

点评

协调器和路由是不可以低功耗的,虽然可以让他们休眠。  详情 回复 发表于 2013-9-26 23:12
个人签名淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
 
 
 

回复

147

帖子

0

TA的资源

一粒金砂(高级)

10
 

回复 9楼wateras1 的帖子

协调器和路由是不可以低功耗的,虽然可以让他们休眠。
此帖出自无线连接论坛

点评

其实低功耗会出很多问题,尤其是有连续的数据传输时很容易导致数据丢失:)  详情 回复 发表于 2013-9-30 13:54
 
 
 

回复

3238

帖子

5

TA的资源

五彩晶圆(中级)

11
 

回复 10楼罗菜鸟 的帖子

其实低功耗会出很多问题,尤其是有连续的数据传输时很容易导致数据丢失
此帖出自无线连接论坛
个人签名淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(中级)

12
 

zigbee 定时睡眠

我用的是 halSleep(10000);放在了 GenericApp_ProcessEvent函数中,可以实现睡眠 但是有个问题是,睡眠唤醒一段时间就不好使了,我测试的时候差不多10分钟就会出问题,不能发数据了,为什么呢??
此帖出自无线连接论坛

点评

这个没遇到过,不太清楚。其实你根据TI的配置方法就可以实现低功耗,如果功耗还是很高就要考虑你硬件问题了:)  详情 回复 发表于 2013-10-14 20:42
 
 
 

回复

3238

帖子

5

TA的资源

五彩晶圆(中级)

13
 

回复 12楼aidaiplayer 的帖子

这个没遇到过,不太清楚。其实你根据TI的配置方法就可以实现低功耗,如果功耗还是很高就要考虑你硬件问题了
此帖出自无线连接论坛
个人签名淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

14
 
版主威武   收藏了~!
此帖出自无线连接论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

15
 
aidaiplayer 发表于 2013-10-10 11:15
我用的是 halSleep(10000);放在了 GenericApp_ProcessEvent函数中,可以实现睡眠 但是有个问题是,睡眠唤醒 ...

时间会自己计算啊  
此帖出自无线连接论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表