/*
在程序运行中修改zigbee PanId Chanel出现的问题:
测试方式:
终端1:在f8wConfig.cfg文件中设置 PanID = 0x2345 chanel = 0x0D
终端2:在f8wConfig.cfg文件中设置 PanID = 0x1234 chanel = 0x0F
协调器:在f8wConfig.cfg文件中设置 PanID = 0x2345 chanel = 0x0D
1、先协调器上电,再将两个终端上电,此时终端1能够加入到网络中 并且通信正常
2、通过串口修改协调器的PanID chanel 代码如下:
_NIB.nwkPanId=0x1234;
_NIB.nwkLogicalChannel=0x0F;
NLME_UpdateNV(0x01);
SystemResetSoft(); 这时候终端2能够加入到网络并且通信正常
3、通过串口修改终端1的PanID chenel 代码如下:
_NIB.nwkPanId=0x1234;
_NIB.nwkLogicalChannel=0x0F;
NLME_UpdateNV(0x01);
SystemResetSoft(); 这时候终端1无法加入到协调器组建的网络中,这是为什么呢?
程序degbug的时候 _NIB.nwkPanId=0x1234 _NIB.nwkLogicalChannel=0x0F值是对的
4、如果把协调器的PanID chanel 再修改为PanID = 0x2345 chanel = 0x0D
终端2的此时无法加入到网络中 正常!!
此时如果把终端1的PanID设为0x2345 chanel设为0x0D 那么终端1就又能跟协调器通信了
很怪异的问题,我该怎么修改zigbee终端的PANID 和 chanel(程序运行中)
*/
VV:
修改PANID的时候,把下面的代码也加上
zgDefaultChannelList = MyNewDesiredChannel;
osal_nv_write(ZCD_NV_CHANLIST, 0, osal_nv_item_len( ZCD_NV_CHANLIST ), &zgDefaultChannelList);
zgConfigPANID = MyNewPanId;
osal_nv_write(ZCD_NV_PANID, 0, osal_nv_item_len( ZCD_NV_PANID ), &zgConfigPANID);
另外问下你用的协议栈版本,还有能不把每个过程用抓包看下,具体的数据包交互是什么,这样比较清楚到底发生了什么。
P M:
回复 VV:
@VV
协议栈用的是2.5.1a 我抓了一包数据 详见附件!!
P M:
回复 VV:
@VV 有看到我的回复么。。。。。
能从抓到的数据看出是什么问题来么?
debug的时候 _NIB.nwkPanId _NIB.nwkLogicalChannel两个值都是我设置的值 但就是不能加入网络!!
如果我再从这个值再改回跟f8wConfig.cfg文件中设置的值一样 就能正常工作了 这什么情况啊?
我加了你给的几行代码也还是没效果。。。
求助….
P M:
回复 VV:
@VV
为什么我问的问题 就没有回应了啊 ? 这个问题到现在也没有解决。。。
VV,你这边能不能提供一个demo给我啊?实在不知道是怎么回事。
VV:
回复 P M:
你的终端1设备以前是否加过其他的网络,如果是的话,那么除了保存PANID,Channel以外,还有一个变量ExtendPANID,一般每个网络的ExtendPANID都是Coordinator的MAC地址。
P M:
回复 VV:
hi VV:
zgDefaultChannelList = 0x00002000;
osal_nv_write(ZCD_NV_CHANLIST, 0, osal_nv_item_len( ZCD_NV_CHANLIST ), &zgDefaultChannelList);
zgConfigPANID = 0x2233;
osal_nv_write(ZCD_NV_PANID, 0, osal_nv_item_len( ZCD_NV_PANID ), &zgConfigPANID);
SystemReset();
上次你让我加入这段代码,加入之后 有这样一个现象:
在f8wconfig文件中设置PanId=0x1345 channelList=0x00002000;
用按键将panId修改为0x2233后,channelList不变,这个时候如果重新启动,有时候能成功加入2233的网络,有时候不能。重新断电测试多次,发现基本上有两次就能成功加入到2233网络一次,这个是由于什么原因出现的呢?
debug发现,当startmode为mode_resume的时候 好像都成功了 为mode_rejoin的时候 都失败了!!
另,你说的ExtendPanId是什么意思,例如有两个协调器A、B 当终端1加入A之后,通过按键修改 要让终端1加入B协调器,我要将协调器B的ExtendPanId写入到终端1 NV中么?
关于在程序运行中修改PanId、channel、或者设备类型 是否可以提供一个标准的demo,出现这种修改之后无法加入网络的问题 确实很头疼,调试花掉的时间确实很多…
在MT任务中貌似有修改PanId的函数 但是好像也没有效果啊!
还请VV继续为我解答一下我的问题 谢谢了!!
xueshi xie:
回复 P M:
我也遇到了类似的问题,通过串口修改pan_id和channel,新的pan_id和channel都不起作用,在f8wConfig.cfg中手动修改,编译,重新下载,用_NIB.nwkLogicalChannel和_NIB.nwkPanId读取,还是以前的的panid 和channel,在f8wConfig.cfg中的修改也没起作用,也很头疼,项目卡在这了。楼主的问题如果解决了,分享下方法,谢谢
P M:
回复 xueshi xie:
@xie
还没解决 我也是卡在这了 ,vv大神又潜水了… @VV
P M:
回复 xueshi xie:
@xueshi xie
你的问题解决了么?交流一下??
xueshi xie:
回复 P M:
没解决呢啊,有方法大家出来分享下啊