我要建立的网络比较简单,只有终端和协调器两种设备,但现在遇到一个关于PAN ID冲突的问题,如下:(已定义NV_RESTORE)
1、启动协调器C1,PAN ID设为0xFFFF,假设C1实际所建网络的PAN ID为0x1234。
2、启动终端E1,之后会连接到C1所建的网络0x1234。
3、关闭C1、E1。
4、启动协调器C2,PAN ID设为0x1234,使C2实际所建网络的PAN ID固定位0x1234。
5、启动协调器C1,问题出来了,C1仍然会建立PAN ID为0x1234的网络,与C2的PAN ID冲突。
我抓包发现,只要协调器建立了一个网络并连接过一个设备之后,再将它重启时,就不会再通过发送一个信标请求来进行主动扫描(用于检测PAN ID是否已被占用),这就造成了上面这种情况:C1重启时,不再检测PAN ID是否被占用,而是直接建立网络。
我对协调器的启动过程进行跟踪调试,发现此种情况应该是由NV条目ZCD_NV_STARTUP_OPTION造成的,这个NV条目的值决定了协调器启动时的devStartMode。当这个NV条目指示需要恢复网络状态时,协调器的启动模式为MODE_RESUME,造成在ZDO_StartDevice函数中不会去调用NLME_NetworkFormationRequest(创建网络),而是直接恢复之前的网络,不判断PAN ID是否冲突。
以上是我的测试和推测,可能有误。不知这种情况该怎样解决?