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.

CC2530: Ztack3.0.2中,协调器第二次开放网络许可,设备无法入网问题

Part Number: CC2530

Ztack协议栈版本号为3.0.2

在协调器复位后,第一次打开入网许可至结束的区间内,设备均可以正常入网、退网、再次入网

在协调器网络关闭后,再次打开网络,设备无法成功入网

其次,在ZDObject.c,ZDO_ProcessMgmtPermitJoinReq( zdoIncomingMsg_t *inMsg )中

每次有设备入网均会执行函数ZDO_ProcessMgmtPermitJoinReq( zdoIncomingMsg_t *inMsg )

该函数内会刷新网络开放时间,stat = (byte) NLME_PermitJoiningRequest( duration )

请问这么设计的目的是什么,如果我将该行注释掉,不刷新网络开放时间会如何?

以下为抓包结果

流程:第一次网络开放-->设备入网-->网络关闭-->设备退网-->第二次网络开放-->设备入网失败

第二次打开网络失败.zip

  • 您好我们已收到您的问题并升级到英文论坛寻求帮助,如有答复将尽快回复您。谢谢!

  • 补充:如果我这边周期调用NLME_PermitJoiningRequest( duration )刷新网络开放时间,设备可以保持入网

    只有在第一次网络关闭后,第二次打开才会入网失败。

    问题可能出在第二次打开入网许可需要做什么额外的操作?

    请问一下,我这类问题有没有相关的手册可以查询解答?

  • 设备退网后,你设备有做factory reset擦除NV內的网路資訊嗎?

  • 子设备吗,调用的是bdb_resetLocalAction()而后reset

    第一次开放网络未关闭前,反复入网都是可以的

  • 對,我說的是子设备,請問你用原始sample ligh/switch做測試會有這樣的狀況嗎?

  • 也会出现这个状况

    基于原始的代码

    1.UI_相关部分移除

    2.在zclSampleSw_Init()末尾添加

    bdb_StartCommissioning( BDB_COMMISSIONING_MODE_NWK_FORMATION | BDB_COMMISSIONING_MODE_FINDING_BINDING );
    NLME_PermitJoiningRequest(60);
    osal_start_timerEx(zclSampleSw_TaskID, SAMPLEAPP_LCD_AUTO_UPDATE_EVT, 500000);

    3.在zclSampleSw_event_loop()中添加

    if ( events & SAMPLEAPP_LCD_AUTO_UPDATE_EVT )
    {
    NLME_PermitJoiningRequest(60);
    return ( events ^ SAMPLEAPP_LCD_AUTO_UPDATE_EVT );
    }

    500秒后,第二次打开网络,入网失败

    均是在第一次网络开放期间,同一设备可以反复入网,在第二次网络开放期间,没有设备可以入网

  • 你的SampleSw是當coordinator還是device?

  • ztack3.0.2 SampleSW coordinate

  • SampleSW當coordinator照理不應該在zclSampleSw_Init內都使用bdb_StartCommissioning( BDB_COMMISSIONING_MODE_NWK_FORMATION | BDB_COMMISSIONING_MODE_FINDING_BINDING ),這是coordinator沒有組網前才這樣調用,如果已經組網過了,應該直接調用bdb_StartCommissioning(0),建議你調整一下這部份再試試

  • 尝试了,设备无法入网,子设备Beacon Request没有收到Coordinator的Beacon

    SampleSW作为Coordinator启动,第一步应当也是建立网络吧。我是通过刷FLASH重新测试的,所以每次都是重新组网

    请问如果Coordinator在reset前已经完成了组网,在reset后该如何查看以便于我去调用组网/bdb_StartCommissioning(0)

  • 通过刷FLASH重新测试的,所以每次都是重新组网

    如果是這樣確實就要用bdb_StartCommissioning( BDB_COMMISSIONING_MODE_NWK_FORMATION | BDB_COMMISSIONING_MODE_FINDING_BINDING ),但是接著不應該直接調用NLME_PermitJoiningRequest,應該是要等組網完成後再去permit join