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