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 路由设备无法入网

请教大家一个问题,之前做了一个zigbee无线系统,一直测试没问题,今天新加入一个路由节点,发现加不进去,网络里的其他节点都通信正常,然后把协调器所有的节点信息都清除,发现一个节点也加不进去了。换个协调器就没问题了,不知道是什么原因造成的。芯片用的是2530,协议栈2.5.1,附件是协调器上电,打开网络,路由节点上电,打开网络寻网的数据包,不太会分析数据包,请大家帮忙看看是什么问题,谢谢。2664.抓包文件.psd

  • 有可能是你的关联表满了,你多少个设备,
  • 你好,目前这个系统里面只有12个路由节点,现在的话我重新烧程序路由节点也加不进去,只有擦除之后再烧程序才可以。这个协调器之前加了20多个设备,一直在测试,这些节点反反复复入过很多次网。我是调用zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_CONFIG_STATE | ZCD_STARTOPT_DEFAULT_NETWORK_STATE);这个函数来清除已入网节点信息的。这个函数是清除关联表的吗?

  • 请参考下面帖子擦除节点,如果你反复入网,你的协调器回家满,你要使用leave命令。
    e2echina.ti.com/.../131709
  • 你好,看这个帖子也是说调用函数zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_CONFIG_STATE | ZCD_STARTOPT_DEFAULT_NETWORK_STATE);我清除节点的时候就是调用这个的,代码如下:
    zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_CONFIG_STATE | ZCD_STARTOPT_DEFAULT_NETWORK_STATE);
    SystemResetSoft();
  • 你要先如果你是节点想要擦除,先leave 然后协调器才会更新关联表才能释放空间。
  • 你好 Alvin Chen,我对于擦除节点的操作不太清楚。我想实现的效果是:通过按键去擦除协调器里面所有节点信息,更新关联表释放空间。协调器代码里是这样写吗?
    ZDApp_LeaveReset(false);
    zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_CONFIG_STATE | ZCD_STARTOPT_DEFAULT_NETWORK_STATE);
    SystemResetSoft();
  • 你好 Alvin Chen,请问我怎样才能看到这个关联表里面的数据
  • 你好 Alvin Chen,再请教两个问题。
    1、我按照上面的代码测试,协调器按键按下后执行
    ZDApp_LeaveReset(false);
    zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_CONFIG_STATE | ZCD_STARTOPT_DEFAULT_NETWORK_STATE);
    SystemResetSoft();
    发现这样操作后如果让路由节点再入网会入不进去,只有重启协调器才可以。请问什么原因?
    2、上面说的那个关联表指的是AssociatedDevList里面的数据吗?我打印这里面的数据发现如果没有节点入网,全是FF,如果有子节点,里面会有子节点的短地址。
  • 1.你开始是你要打开permitjoin
    2.blog.csdn.net/.../50695705
  • 你好 Alvin,我在之前的测试里面已经打开了入网允许,代码:
    NLME_PermitJoiningRequest(0xB4); //开启网络0xB4秒
    抓包看数据只有路由节点 biacon request,看不到协调器的无线数据包
  • 你好Alvin Chen,关于关联表这个问题我还是不太理解,再请教几个问题。

    1.对于你说的关联表满了是指AssociatedDevList里面那个成员的值满了?我打印AssociatedDevList[i].shortAddr 发现我之前写的代码清除节点信息已经把关联表里面的短地址清除了。代码是:

    zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_CONFIG_STATE | ZCD_STARTOPT_DEFAULT_NETWORK_STATE);

    SystemResetSoft();

    现在我不清楚之前写的是没有把那个信息清除掉导致出现溢出的问题。想打印信息确认一下是不是这个原因造成的。

    2.现在我在代码里面加上ZDApp_LeaveReset(false);这句后路由节点确实入不了网了,必须重启协调器才可以,我协调器已经打开了入网允许,代码是:

    ZDApp_LeaveReset(false);
    zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_CONFIG_STATE | ZCD_STARTOPT_DEFAULT_NETWORK_STATE);
    SystemResetSoft();

    if(buf[6]==0X11) //允许入网
    {
    NLME_PermitJoiningRequest(0xB4); //开启网络0xB4秒
    LED1 = 1;

    }

    现在很困惑为什么加了这句就必须要重启协调器,还有就是加了这句是否真的清除了关联表。谢谢

  • Alvin Chen,我想做的功能是协调器清除掉网络里所有的设备,并清除关联表,我的这些代码都是写在协调器程序里面,我看了其他的帖子,别人好像是子节点申请退网的时候这么操作的,请问两者操作是一样的吗
  • 节点自动退网擦除NV:
    ZDApp_LeaveReset(false);
    zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_CONFIG_STATE | ZCD_STARTOPT_DEFAULT_NETWORK_STATE);
    SystemResetSoft();
    协调器直接zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_CONFIG_STATE | ZCD_STARTOPT_DEFAULT_NETWORK_STATE);
    SystemResetSoft();即可。
    如果你有问题建议你用demo试一下。
  • 那这样的话又回到了原点。我协调器里面的代码就是这样写的,
    zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_CONFIG_STATE | ZCD_STARTOPT_DEFAULT_NETWORK_STATE);
    SystemResetSoft();路由节点程序没有做任何操作,出现了我发帖子的问题