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 3.0 终端入不了网

协调器配置如下:

开启NV_INIT和NV_RESTORE

初始化里bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_FORMATION);

终端配置如下:

开启NV_INIT和NV_RESTORE

测试步骤:

协调器触发BDB_COMMISSIONING_MODE_NWK_STEERING,终端触发BDB_COMMISSIONING_MODE_NWK_STEERING,

终端加入成功,如果此时把终端恢复出厂设置(bdb_resetLocalAction),重复上面的入网步骤,发现终端加入该协调器后几秒就重启,

此时终端的短地址就变了,一直重复下去,终端不断的重启,短地址不断的变化
这是什么原因?是不是协调器那边关于该终端第一次入网的信息没有擦除导致的?

尝试把协调器和终端都bdb_resetLocalAction,再重新入网,此时没问题了

不明白这是什么原因?请帮忙分析一下!

  • 你的终端也需要清除NV
  • 终端执行bdb_resetLocalAction不就是器清除NV吗?如果不是,那是什么命令?
    现在的情况是单独对终端执行bdb_resetLocalAction,该终端无法再加入原来的协调器
    终端和协调器都执行bdb_resetLocalAction,终端可以加入该协调器
  • 我用原始SampleLight/SampleSwitch測試沒有這個問題,你是不是有修改到協議棧的源碼?
  • "现在的情况是单独对终端执行bdb_resetLocalAction,该终端无法再加入原来的协调器" 上传抓包文件看看。
  • 抓包文件如附件,这次测试没遇到终端恢复出厂后无法入网的问题,但是抓包文件好像也不对,

    一直有beacon数据,不知道是什么原因?

    001抓包文件.psd

  • 你的抓包文件裡面有個終端入網3次都是成功的,看不出來哪裡有你說的問題啊
  • 问题复现了,附件的终端一直在加协调器,加上了就掉线了,又加,一直无限循环

    002重复入网.psd

  • 抓包文件002重复入网.psd裡面還是看到有個終端入網3次都是成功的,看不出來哪裡有你說的問題
  • 是入网成功没错,但是一直再不断的入网掉线,入了之后几秒后就掉线了,
    此时再重新入网,又成功入网几秒后又掉线,每次终端的短地址也是变化的,
    这就没法用了啊,终端一直在那不停的变化短地址,排除硬件问题,
    他们的直线可视距离在1米左右
  • 你是不是有修改到協議棧的源碼?
  • 下面的改动是否有影响
    -DRFD_RCVC_ALWAYS_ON=TRUE

    /* The number of milliseconds to wait between data request polls to the coordinator.(默认1000) */
    -DPOLL_RATE=0

    /* This is used after receiving a data indication to poll immediately
    * for queued messages...in milliseconds.(默认100)
    */
    -DQUEUED_POLL_RATE=0

    /* This is used after receiving a data confirmation to poll immediately
    * for response messages...in milliseconds(默认100)
    */
    -DRESPONSE_POLL_RATE=0

    /* This is used as an alternate response poll rate only for rejoin request.
    * This rate is determined by the response time of the parent that the device
    * is trying to join.(默认440)
    */
    -DREJOIN_POLL_RATE=1000

    /* Rejoin retry backoff silent period timer duration in milliseconds - default 15 minutes according to HA test spec */
    -DREJOIN_BACKOFF=60000

    /* Rejoin retry backoff scan timer duration in milliseconds - default 15 minutes according to HA test spec */
    -DREJOIN_SCAN=60000

    /* Latest sample apps use LED4 and do not use S1 switch (默认-DENABLE_LED4_DISABLE_S1)*/
  • POLL_RATE不要設置成0試試
  • 还有几个问题请教一下:
    1.协调器的初始化里为BDB_COMMISSIONING_MODE_NWK_FORMATION
    以后如果新的终端加入,协调器则按键触发BDB_COMMISSIONING_MODE_NWK_STEERING
    终端通过按键触发BDB_COMMISSIONING_MODE_NWK_STEERING实现加网,这有没有问题?
    2.测试发现新的终端加网的时候,必须先打开协调器的BDB_COMMISSIONING_MODE_NWK_STEERING,终端才能入得上,
    如果是先打开终端的BDB_COMMISSIONING_MODE_NWK_STEERING后打开协调器的BDB_COMMISSIONING_MODE_NWK_STEERING,
    则一直入不上,按说180秒内还分顺序吗?
    3.对于终端的函数我做了如下修改,我的要求是终端只加入协调器,不加入路由,不知道修改的是否有问题?
    void ZDO_beaconNotifyIndCB( NLME_beaconInd_t *pBeacon )
    {
    // Pass the beacon Indication to another task if it registers the callback
    // Otherwise, process the beacon notification here.
    if (zdoCBFunc[ZDO_BEACON_NOTIFY_IND_CBID] != NULL )
    {
    zdoCBFunc[ZDO_BEACON_NOTIFY_IND_CBID]( (void*)pBeacon );
    }
    else
    {
    if(pBeacon->sourceAddr == 0x0000)//只加入协调器
    {
    …………
    4.上面的抓包数据一直都有beacon payload数据,这个是什么?正常的吗?
  • 还有几个问题请教一下:
    1.协调器的初始化里为BDB_COMMISSIONING_MODE_NWK_FORMATION
    以后如果新的终端加入,协调器则按键触发BDB_COMMISSIONING_MODE_NWK_STEERING
    终端通过按键触发BDB_COMMISSIONING_MODE_NWK_STEERING实现加网,这有没有问题?
    2.测试发现新的终端加网的时候,必须先打开协调器的BDB_COMMISSIONING_MODE_NWK_STEERING,终端才能入得上,
    如果是先打开终端的BDB_COMMISSIONING_MODE_NWK_STEERING后打开协调器的BDB_COMMISSIONING_MODE_NWK_STEERING,
    则一直入不上,按说180秒内还分顺序吗?
    3.对于终端的函数我做了如下修改,我的要求是终端只加入协调器,不加入路由,不知道修改的是否有问题?
    void ZDO_beaconNotifyIndCB( NLME_beaconInd_t *pBeacon )
    {
    // Pass the beacon Indication to another task if it registers the callback
    // Otherwise, process the beacon notification here.
    if (zdoCBFunc[ZDO_BEACON_NOTIFY_IND_CBID] != NULL )
    {
    zdoCBFunc[ZDO_BEACON_NOTIFY_IND_CBID]( (void*)pBeacon );
    }
    else
    {
    if(pBeacon->sourceAddr == 0x0000)//只加入协调器
    {
    …………
    4.上面的抓包数据一直都有beacon payload数据,这个是什么?正常的吗?
  • 1.没有问题
    2. 是有分network searching跟finding/binding沒錯,建議還是先协调器则按键触发BDB_COMMISSIONING_MODE_NWK_STEERING然後终端再通过按键触发BDB_COMMISSIONING_MODE_NWK_STEERING加网
    3. 看來行得通
    4. 你說的beacon payload数据是指什麼?
  • 抓包的时候一直有下图所示的包,不知道是怎么来的?这正常吗?

  • 你把你的ZC permitjoin 打开试一下。
  • 协调器的BDB_COMMISSIONING_MODE_NWK_STEERING当然是打开的,这个是180秒内的时间抓的
  • 請附上你截圖的抓包檔
  • 有个现象,加入后的终端,把终端复位bdb_resetLocalAction,

    此时已经过了协调器使能BDB_COMMISSIONING_MODE_NWK_STEERING后的180秒

    怎么复位后的终端还是加入原来的协调器里面去了?是不是原来协调器里有该终端的NV导致的?

    抓包文件如下图,有好多类似上面截图的数据包不知道是哪里来的?

    7041.001抓包文件.psd

  • 1. 加入后的终端,把终端复位bdb_resetLocalAction,此时已经过了协调器使能BDB_COMMISSIONING_MODE_NWK_STEERING后的180秒,怎么复位后的终端还是加入原来的协调器里面去了? 這個有抓包檔可以看嘛?
    2. 上面截图的数据包是協調器一直在發送beacon frame
  • 抓包如附件,协调器使能BDB_COMMISSIONING_MODE_NWK_STEERING后大概10分钟后,

    把已经入网的终端bdb_resetLocalAction,终端还是自动加到该协调器里面了,请问是什么原因?该如何处置?

    另外beacon frame是什么?是正常的吗?只要是正常的我就不管他了003.psd

  • 從抓包檔看到你的协调器有使能permit join,所以终端可以入網;你的beacon frame看起來是正常的
  • 协调器触发BDB_COMMISSIONING_MODE_NWK_STEERING后,180秒不是自动关闭permit join的吗?
    我是不是该这么做:
    打开协调器允许入网权限时:
    bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING);
    NLME_PermitJoiningRequest(180);//允许入网180秒
    HalLedBlink( HAL_LED_2, 180 , 50 , 1000 );//LED闪烁指示180秒
  • 不用調用 NLME_PermitJoiningRequest(180);//允许入网180秒
  • 另外终端恢复出厂bdb_resetLocalAction后,会自动重启吗?
    协调器恢复出厂(同时清除NV),是不是也用bdb_resetLocalAction?也是自动重启?
  • 應該都会自动重启
  • 1.测试时遇到一个现象,20个终端同时上电,此时发现一个终端都入不了网,我一个一个的上电,
    可以正常入网,这是什么原因?
    2.另外终端的data poll有没有什么好的办法不要让所有的终端都在同一时刻去poll?
    如果是把每个终端的poll间隔都设置为不一样,那样批量下载不好办,不能每个终端都改一遍程序,
    有没有什么好的办法?
  • 1. 一般建議一個一個入網
    2. zigbee有碰撞偵測,polling前會偵測空中有沒有人在發射,所以不會有的终端都在同一时刻去poll