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

orphan 节点无法加入协调器网络的问题

1. 终端ZE使用了NV_RESTORE,加入了协调器ZR,协调器也开了NV_RESTORE;

2. 若协调器掉电,重新上电协调器,协调器可以正常与ZE通信;

3. 若ZE掉电,然后重新上电,协调器可以正常与ZE通信;

4.若ZE掉电,协调器断电,ZE重新上电,抓包狗捕捉到ZE发出 orphan notification ,然后就开始发出 Beacon Request信号;然后开启另一个协调器,ZE无法加入新的协调器;

 请问有前辈可以指教吗? 终端使用了NV_RESTORE要如何才能加入新网络?

felix shih:

你需要加入 reset 功能

你看一下 ZDApp.c 的 ZDOInitDevice()

去執行這段

#if defined ( NV_RESTORE ) // Hold down the SW_BYPASS_NV key (defined in OnBoard.h) // while booting to skip past NV Restore. if ( zdappHoldKeys == SW_BYPASS_NV ) { zdappHoldKeys = 0; // Only once networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE; } else { // Determine if NV should be restored networkStateNV = ZDApp_ReadNetworkRestoreState(); }

if ( networkStateNV == ZDO_INITDEV_RESTORED_NETWORK_STATE ) { networkStateNV = ZDApp_RestoreNetworkState(); } else { // Wipe out the network state in NV NLME_InitNV(); NLME_SetDefaultNV(); // clear NWK key values ZDSecMgrClearNVKeyValues(); }#endif

Aries Lord:

orphan节点顾名思义,要记录原先的父节点,以PANID为判断依据,你新开的协调器PANID与orphan节点的PANID不一致,就不能加。

一个最简单的方法,把NV区擦除

for(n = HAL_NV_PAGE_BEG; n <= HAL_NV_PAGE_END; n++){EA = 0;HalFlashErase(n);while(FCTL & 0x80);EA = 1;}

Jiancan Chen:

回复 felix shih:

hi felix shih,

    感谢回复,我使用的是Version 2.5.1a 版本,这一段代码有点区别,ZDOInitDevice()原来的代码是这样的:

uint8 ZDOInitDevice( uint16 startDelay )
{uint8 networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE;uint16 extendedDelay = 0;if ( devState == DEV_HOLD ){// Initialize the RAM items table, in case an NV item has been updated.zgInitItems( FALSE );}ZDConfig_InitDescriptors();//devtag.071807.todo - fix this temporary solution_NIB.CapabilityFlags = ZDO_Config_Node_Descriptor.CapabilityFlags;#if defined ( NV_RESTORE )// Get Keypad directly to see if a reset nv is needed.// Hold down the SW_BYPASS_NV key (defined in OnBoard.h)// while booting to skip past NV Restore.if ( HalKeyRead() == SW_BYPASS_NV )networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE;else{// Determine if NV should be restorednetworkStateNV = ZDApp_ReadNetworkRestoreState();/*读取NV网络状态的状态*/}if ( networkStateNV == ZDO_INITDEV_RESTORED_NETWORK_STATE ){networkStateNV = ZDApp_RestoreNetworkState();}else{// Wipe out the network state in NVNLME_InitNV();NLME_SetDefaultNV();// clear NWK key valuesZDSecMgrClearNVKeyValues();}
#endif

这段代码是通过按键来绕过NV数据恢复,功能与你贴出的版本应该无异。

请问您说的 reset功能是? 

zhongwei xu1:

回复 felix shih:

楼上的正解,VV大神曾经也是这么建议的,Aries Lord的方法要求对NV比较了解,都可以尝试下!

zhongwei xu1:

回复 felix shih:

 felix shih的办法是可以的,V大神在其他帖子里也是这么建议的,Aries Lord的办法也可行,要求对NV比较了解。

Jiancan Chen:

回复 felix shih:

hi felix shih ,

    谢谢你的建议。不过如果是产品的话,按键有时不太合理。

     不知道zigbee终端节点能不能在尝试加入原来的网络失败(协调器掉电后),自动扫描其他网络 ?

Kairan Wang:

回复 Jiancan Chen:

您好,请问你的问题解决了么?可以实现自动扫描新网络了吗?

赞(0)
未经允许不得转载:TI中文支持网 » orphan 节点无法加入协调器网络的问题
分享到: 更多 (0)