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.

zigbee终端节点有必要打开NV_RESTORE么?



我做了下测试,打开不打开结果完全一样,测试过程如下:

  • 如果你不打开NV功能,那么你的第一种情况不会成立,当你的C1关闭后,E失去父节点加入到R中,这时候有R来维护整个网络的运行,PANID并没有发生改变。此时如果你的C1重新上电而且没有启用的NV功能的,C1会新建一个网络,在新建网络的时候首先启动网络扫描,发现该信道有其他网络存在,所以会改信道,或者会更改一个不会冲突的PANID重新建立一个新的网络,那么此时就会有两个网络存在了,不会出现你画的那种情况。

  • C和R都开了NV_RESTORE,只有E没开啊

    不过我用另一组(PANID=0x2202,CHN=0x15)测的时候,有发现变化过一次,实际应用中是不是C、R、E都得开NV_RESTORE?

  • 现在又有一个问题,还是上述设备,

    1个协调器,1个路由器,1个终端节点,

    然后,关掉协调器,又下载了一个终端节点,发现这个节点无法加入路由器维持的网络,

    sniffer观察,一直发送beacon request(另一个节点一直发送data request正常),

    打开协调器之后,这个节点才加入网络,

    再关掉协调器,这个节点有断网了,

    这是什么情况,

    难道是所谓的路由器关联表满了么,

    为嘛不会自动更新关联表,

    该怎么处理?

     

    PS: 终端节点在上述测试中只换过三四次短地址的,期间还开了一台路由器

     

  • 当节点发送beacon request的时候,你有看到路由器发送beacon出来吗?

    路由器是不是关闭了permit join?

    打开协调器以后,节点直接加入到协调器,以协调器作为父节点,协调器断网以后,照道理节点成为孤立节点以后吗,应该自动加到路由上去,这个你有看到么?

  • 默认permit join应该是开的吧,我程序里没操作,

    协调器断网以后,这个这个节点有成为孤立节点,

    然后不停的发送beacon request,路由器什么也没发,

    但是我把另一个节点的父节点转移到协调器上,

    然后断开协调器,这个节点成为孤立节点后发送beacon request,

    路由器就有回应发送beacon,然后节点发送rejoin request重新入网没问题。

     

    PS:我看父节点的方法是,

    在sniffer里,当节点发data request时,目的地址是哪个,哪个就是父节点,应该没错吧。

  • 今天特地把节点刷了协调器的程序,再刷回节点的程序,

    还是不行,一直发beacon request,连不上网,

    然后把天线装上(之前一直没装天线),就好了,哈哈。。

    协调器开的时候能连上,可能是协调器离的比较近吧,

    以前没装天线本来都没问题的。

     

    另外,还发现一个现象,

    当协调器关掉时候,只留路由器维持网络,

    新下载一个节点,此时节点的父节点为路由器,

    这时再打开协调器,重启此节点,节点的父节点变成协调器,

    而且若此节点没开NV_RESTORE,短地址会发生改变,

    但是若开了NV_RESTORE,短地址不会发生改变。

  • 又发现一个很奇怪的现象:

    实验中有两个zigbee网络

    一个PANID=0x1101,CHN=0x0B,

    设备为:1个协调器C1.1,1个路由器R1.1,1个开NV_RESTORE的节点E1.1,1个没开NV_RESTORE的节点E1.2;

    另一个PANID=0x2202,CHN=0x15,

    设备为:1个协调器C2.1,1个路由器R2.1,2个没开NV_RESTORE的节点E2.1和E2.2;

     

    在E1.1和E1.2的父节点都是C1.1的情况下,关掉C1.1,

    此时,E1.2居然加入了PANID=0x2202的网络里,父节点是C2.1,

    在这个网络里,通信完全正常,

    当然不是每次都会这样加入到另一个网络里,

    只是偶尔发生了一次,

    很奇怪。

  • E1.2没有开启NV_RESTORE功能,没有保存网络信息,加入到PANID=0x2202的网络很正常啊,对于E1.2来说发出去beacon request然后收到beacon,肯定会有好几个beacon,每一个beacon里面包含了网络的信息,节点地址等等。所以E1.2就选择了一个网络加入。

    另外每次需要重新调试NV功能前,最好用Smart Flash Programer软件,把flash erase下,这样可以把之前保存的NV信息,擦除掉。

  • 谢谢!

    不过Smart Flash Programer没看到单独erase的选项啊,

    只看到erase and program和erase , program and verify,

    是用这个么?

     

    另外,

    E1.2虽然没有开启NV_RESTORE功能,

    但是已经指定PANID=0x1101,CHN=0x0B,

    按手册上说,应该只能加入这个PANID才对。

     

    手册内容如下:

    9.2  Configuring the PAN ID and network to join
    This is an optional configuration item to control which network a ZigBee Router or End Device will join. The
    ZDO_CONFIG_PAN_ID parameter in f8wConfig.cfg can be set to a value (between 0 and 0xFFFE). A coordinator
    will use this value as the PANId of the network that it starts. A router or end-device will only join a network that has
    a PANId configured in this parameter. To turn this feature off, set the parameter to a value of 0xFFFF.

  • 的确有可能加入到其他网络中,

    E1.2发beacon的时候,dest pan和dest addr都是0xFFFF,且在两个网络里都有观察到,

    不过这回有点乱,

    协调器C1.1关掉之后,两个网络都加不进去,

    如下图,E1.2一直向panid=0x2202, addr=0x132A发送rejoin request,

    可是0x132A在panid=0x1101的网络里,即为R1.1,

     

    出现这种情况一段时间后打开C1.1,此时E1.2发送rejoin request的目的地址变成0x0000了,

    但PANID还是0x2202,最终还是加入了0x2202的网络里。

     

    其中,

    R1.1 : 0x132A

    E1.1 : 0xC824

    E1.2 : 0x8B5B

    R2.1 : 0xD59C

    E2.1 : 0xBF2F

    E2.2 : 0xAACE