我在调试过程中发现 我的设备状态是 DEV_END_DEVICE 并且 ZDO_Config_Node_Descriptor.CapabilityFlags = 0 并且也能男进入void halSleep( uint16 osal_timeout )函数 但是就是不能进入睡眠 通过跟踪发现 MAC_PwrOffReq(MAC_PWR_SLEEP_DEEP) 返回值等于 MAC_DENIED; 请问这个问题如何解决原因是什么,多谢。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
既然你能够进入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);
希望能够帮助到你。