节点掉线后一直beacon的解决办法
去年做智能家居的时候,发现一个问题:终端节点掉线后rejoin的时候,一直发beacon,无法加入协调器,有时候需要打开网络加入权限才能正常加入,但是过一段时间掉线后又会出现这种情况,通过TI的官方论坛发帖后Susan Yang给出了一种解决办法
更多ZigBee问题可以参考这个:http://www.kaleidscope.cn:1020
You are right. If you don’t power cycle the ZC, NV_RESTORE will not make any difference.
In your sniffer log, there is no MAC Ack in response to Rejoin Req. That means the ZC didn’t hear the messages or didn’t have enough memory to accept the Rejoin Req command. I would focus more on memory issue than on radio issue(TX power / RX sensitivity) because the ZC responded to Beacon Req. Can you check if there is any possibility of memory leak or temporary out-of-memory situation in your code?
By the way, I think what you want is to make ZED retry again and again until it successfully rejoins. Can you please add some lines(marked ‘+’ in the beginning of each line) in ZDApp_NetworkInit() and test?
void ZDApp_NetworkInit( uint16 delay ){
+ if ( devStartMode == MODE_REJOIN )
+ {
+ _tmpRejoinState = true;
+ }
if ( delay )
{
// Wait awhile before starting the device
osal_start_timerEx( ZDAppTaskID, ZDO_NETWORK_INIT, delay );
}
else
{
osal_set_event( ZDAppTaskID, ZDO_NETWORK_INIT );
}
}
按照以上方法在ZDApp_NetworkInit函数中添加了相关代码后就没有再出现这个问题了。应该也是协议栈的小bug,有网友说已经在1.2.2A中解决了这个问题,如果有哪位测试过望告知。谢谢。