无法随意修改终端panid但协调器可以的问题
大家好,打扰你们了。
硬件:cc2530
预编译选项:
ZTOOL_P1
NV_RESTORE
协议栈 2.5
动态修改PanID的方法:
_NIB.nwkPanId = new_panid;
NLME_UpdateNV(0x01);
zb_SystemReset();
协调器:在f8wConfig.cfg文件中设置 PanID = A
终端:在f8wConfig.cfg文件中设置 PanID = A
1、协调器、终端上电,终端可以加入到网络,正常;
2、用函数修改协调器的PanID为B,终端断开,正常,这是再修改终端的PanID为B,发现无法改成功,终端始终没法加入网。
(在上面这种情况中是先改协调器的PanID,再改终端的PanID,终端的PanID就改不了)
协调器:在f8wConfig.cfg文件中设置 PanID = A
终端:在f8wConfig.cfg文件中设置 PanID = A
1、协调器、终端上电,终端可以加入到网络,正常;
2、用函数修改终端的PanID为B,可以改成功,终端这时断开了网络,正常,修改协调器PanID为B,终端重新入网成功。
(这种情况则是先改终端的PanID,再改协调器的PanID,就可以实现)
协调器:在f8wConfig.cfg文件中设置 PanID = A
终端:在f8wConfig.cfg文件中设置 PanID = A
1、协调器、终端上电,终端可以加入到网络,正常;
2、先改终端的PanID为B,再改协调器的PanID为B,两者可以重新建立起网络,此时协调器和终端的PanID都是B了;
3、先改协调器的PanID为A,再改终端的PanID为A,两者又可以重新建立网络!
上面三个实验总结出得规律就是:
终端的f8wConfig.cfg文件中设置哪个 PanID,它就可以在任何情况下修改到这个PanID,但如果要修改到其他的PanID,
必须是再它还在某个网络中(仍与协调器保持着连接)的前提下。而协调器则没有这个限制。
请问是为什么呢?
已经看了 http://www.deyisupport.com/question_answer/wireless_connectivity/zigbee/f/104/p/88126/228859.aspx
还是不清楚问题在哪,好奇怪。
不管怎样,先谢谢你们,若有时间回复,感激不尽。
问题解决了,按照 那个帖子里VV说的,在修改PANID的后面加上osal_nv_write。
贴上我按键更改PANID的代码,供以后的人参考:
if ( keys & HAL_KEY_SW_1 ) { uint16 mypanid = 0x1122; _NIB.nwkPanId = mypanid; NLME_UpdateNV(0x01); zgConfigPANID = mypanid; osal_nv_write(ZCD_NV_PANID, 0, osal_nv_item_len( ZCD_NV_PANID ), &zgConfigPANID); //要用定时器延时一段时间后再重启,否则 osal_nv_write 会来不及执行 osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_RESET_EVT, SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT ); }
应该跟先后顺序没有关系
你好,我也尝试了这种方法但是还是不行,我用的是同样的程序,分别选择router和coordinate下载在不同的板子上,我的情况是这样的:
1.开始设置coordinate和的panid的panid都为A,组网加入都正常,修改coordinate的panid为B,重启后,coordinate修改成功,router无法加入。这时候再想修改router的panid为B,发现修改失败,依旧无法加入
2.对于router节点,设置其panid为A,下载到板子中,不添加coordinate节点,直接利用串口修改router的panid,发现router根本无法执行重启
请问这个又遇到吗 希望你可以看到 谢谢你