填坑:
发送Beacon的流程:
发送信标后,PA设置为强化接收。
(如果主机在该次周期没有收到信标,就需要等待下一次发送信标)
该流程导致10s电流会维持在30mA左右的电流,因为相当于10s接收
修改方式:将PA接收关闭,并进入睡眠
是否能进入睡眠需要通过两个方面决定:
1.OSAL方面
PM2: 有定时任务,并且开启电源保护
PM3: 将轮询设置为0,并且开启电源保护
2.MAC层
在mac_sleep.c中,
macRxActive || macRxOutgoingAckFlag || macTxActive || macRxEnableFlags都为0。
只有都为0才能进入睡眠
两个方面都达到,才能进入睡眠
减少Beacon包,接收时间的方法:
(一个Beacon信标的总时间为10s,一个周期10s)
在ZDApp.c - ZDApp_event_loop - ZDO_NETWORK_INIT - 添加一个定时任务:
ZDO_StartDevice( (uint8)ZDO_Config_Node_Descriptor.LogicalType, devStartMode,
DEFAULT_BEACON_ORDER, DEFAULT_SUPERFRAME_ORDER );
osal_start_timerEx(Copy_TaskID, TEST_EVT_7, 3000);
(这里的3000,表示发送信标的时间)
定时任务中,关闭PA接收:
if( events & TEST_EVT_7 )
[
macRxHardDisable(); //关闭PA的RX强化接收
isSleep(1); //进入睡眠
return ( events ^ TEST_EVT_7 );
]
(剩下的时间进入睡眠)
现在有个问题:每次申请入网后的最后会出现一个尖峰,还需优化
填坑:
发送Beacon的流程:
发送信标后,PA设置为强化接收。
(如果主机在该次周期没有收到信标,就需要等待下一次发送信标)
该流程导致10s电流会维持在30mA左右的电流,因为相当于10s接收
修改方式:将PA接收关闭,并进入睡眠
是否能进入睡眠需要通过两个方面决定:
1.OSAL方面
PM2: 有定时任务,并且开启电源保护
PM3: 将轮询设置为0,并且开启电源保护
2.MAC层
在mac_sleep.c中,
macRxActive || macRxOutgoingAckFlag || macTxActive || macRxEnableFlags都为0。
只有都为0才能进入睡眠
两个方面都达到,才能进入睡眠
减少Beacon包,接收时间的方法:
(一个Beacon信标的总时间为10s,一个周期10s)
在ZDApp.c - ZDApp_event_loop - ZDO_NETWORK_INIT - 添加一个定时任务:
ZDO_StartDevice( (uint8)ZDO_Config_Node_Descriptor.LogicalType, devStartMode,
DEFAULT_BEACON_ORDER, DEFAULT_SUPERFRAME_ORDER );
osal_start_timerEx(Copy_TaskID, TEST_EVT_7, 3000);
(这里的3000,表示发送信标的时间)
定时任务中,关闭PA接收:
if( events & TEST_EVT_7 )
[
macRxHardDisable(); //关闭PA的RX强化接收
isSleep(1); //进入睡眠
return ( events ^ TEST_EVT_7 );
]
(剩下的时间进入睡眠)
现在有个问题:每次申请入网后的最后会出现一个尖峰,还需优化
举报