ZigBee 电源管理
时间:10-02
整理:3721RD
点击:
我在调试过程中发现 我的设备状态是 DEV_END_DEVICE 并且 ZDO_Config_Node_Descriptor.CapabilityFlags = 0 并且也能男进入void halSleep( uint16 osal_timeout )函数 但是就是不能进入睡眠 通过跟踪发现 MAC_PwrOffReq(MAC_PWR_SLEEP_DEEP) 返回值等于 MAC_DENIED; 请问这个问题如何解决原因是什么,多谢。
既然你能够进入halSleep这个函数,那么就说明,进入低功耗的基本配置没有问题。
首先看看进入halSleep函数的参数,它决定了进入睡眠的深度,看halPwrMgtMode值是不是HAL_SLEEP_DEEP。
我在调试它的低功耗时,也遇到这样的问题,可能MAC层还有待发送的射频数据,你再多跑几次,肯定是能够执行成功的。
如果一致执行失败,我提供的建议是,手动关闭MAC层接收机。MAC_PwrOffReq底层会调用macSleep函数来判断是否能够进入低功耗状态。
手动关闭MAC层接收机的方法:
#define MAC_RECEIVE_ON 1
#define MAC_RECEIVE_OFF 0
uint8 value = MAC_RECEIVE_OFF;
MAC_MlmeSetReq(MAC_RX_ON_WHEN_IDLE,&value);
希望能够帮助到你。
谢谢,我也遇到这样的问题,在进入休眠判断设备状态后,强制关闭MAC层,解决了。