This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

修改协调器PAN ID和Channel,协调器广播至所有的设备重启加入新建后的网络,修改不成功

理想状态:

1. 协调器连接串口,通过上位机打开协调器的com口,同时终端也入网了。

2. 通过协调器发送广播给所有在同一网络的终端,内容是即将要修改的信道号。

3. 终端接收到广播

4. 终端修改信道成功

 

现在的问题是:

1.2.3都解决了,通过调试能看到终端收到了协调器发的广播。但是信道没修改成功。

 

问题详细:

      _NIB.nwkLogicalChannel = 17;                           //17是新修改的信道号

      NLME_UpdateNV(0x01);                                     //0x01的定义是保存网络层NIB

     SystemReset();                                                        //重启后,保存的信息生效

 

这段代码没有问题,因为我用串口直接改协调器是可以的,从没有出错过,重启后很快就能组网。

我烧板子的时候信道=26,代码中更改成12。

当终端把这段代码走完后,信道改了,也确实保存了,但是不能入网,此时协调器也改成和终端同样的信道号,终端不断的发送重启的信息,我打印出log看NV区的信道也确实是我刚才改的。当我一旦把协调器的信道恢复成初始信道26时,终端自动的将自己信道恢复成26并入网。也就是说终端只记得他之前入网的信道,不管自己的信道是多少,只要之前的网络还在,就自适应自我调整去加入,我觉得很神奇!!!   我怀疑是因为nv_restore.我查了很久,查到了一句话:

加入这个宏定义好处肯定是有的,但是问题也来了,如果终端想加入别的协调器网络,既是PANID和频道都一样,不管重启多少次都不会加入新的协调器中。

但是nv_restore不能去掉,还有别的功能是依赖于它的。

我又找到一个函数:

application wants to delete the stored NV information It just needs to set the ZCD_NV_STARTUP_OPTION as explained below and do a reset. 

"If the application would like to force a "new" join, the application should set the ZCD_STARTOPT_DEFAULT_NETWORK_STATE bit in the ZCD_NV_STARTUP_OPTION NV item before calling this function. "New" join means to not restore the network state of the device. Use zgWriteStartupOptions() to set these options 

[zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE);]

我把这一句放到了修改信道的前面,但是SystemReset()后又恢复到了初始的信道号。

 

有没有什么方法可以让nv区清除入网信息,同时也要接受新的参数?

 

谢谢大家!!!鞠躬!鞠躬!鞠躬!