TI中文支持网
TI专业的中文技术问题搜集分享网站

解决打开NWK_MANAGER后协调器PANID会变的问题

解决原理,NWK MANAGER检测PANID冲突的原理是扫描beacon,router随时随地都能收到beacon,然后根据beacon判断有没有PANID冲突,ShortAddress冲突。

但是beacon帧没有加密,判断该帧的正确性只能依赖CRC,CRC误检的概率不如AES高,因此网内节点多了,总有router会存在误检。

消除误检的办法就是一个router检测到PANID冲突不算冲突,在同一分钟内多个Router都检测到了才算冲突。

修改方案如下:

#if defined ( NWK_MANAGER )
uint8_t ZDNwkMgr_PanIdConflictCounter = 0; //add by luoyiming, 2019-08-20
#endif // NWK_MANAGER


uint32_t ZDNwkMgr_event_loop( byte task_id, uint32_t events )
{...//clear network-report command counter after 1-minute, add by luoyiming 2019-08-20if ( events & ZDNWKMGR_PANID_CONFLICT_EVT ){
#if defined ( NWK_MANAGER )ZDNwkMgr_PanIdConflictCounter = 0;
#endifreturn ( events ^ ZDNWKMGR_PANID_CONFLICT_EVT );}...
}


void ZDNwkMgr_ProcessNetworkReport( ZDNwkMgr_NetworkReport_t *pNetworkReport )
{...if ( pNetworkReport->reportType == NWKREPORT_PANID_CONFLICT ){...//Filter the false network-report command, add by luoyiming 2019-08-20ZDNwkMgr_PanIdConflictCounter ++;if ( !OsalPortTimers_getTimerTimeout( ZDNwkMgr_TaskID, ZDNWKMGR_PANID_CONFLICT_EVT ) ){OsalPortTimers_startTimer( ZDNwkMgr_TaskID, ZDNWKMGR_PANID_CONFLICT_EVT, ONE_MINUTE );}if( ZDNwkMgr_PanIdConflictCounter < ZDNWKMGR_PANID_CONFLICT_THRESHOLD ){return;}.....}
}


Viki Shi:

感谢提供反馈,在英文E2E那边也建议发一下,可能会收录进known issues

Aries Lord:

回复 Viki Shi:

这个问题是在Home 1.2.2就遇到过,参考了silabs的解决办法,适用于Z-stack 3.6.0以前所有版本。

gaoyang9992006:

这个方法非常棒,多谢分享。

赞(0)
未经允许不得转载:TI中文支持网 » 解决打开NWK_MANAGER后协调器PANID会变的问题
分享到: 更多 (0)