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.
My customer is using CC2652P for Zigbee application has met an issue during the a rejoin test. In the test 200 end devices were powered off and on again at the same time. After the power cycle, majority of the end devices can rejoin as expected but a few devices were not able to rejoin because of the reset timer of DEV_END_DEVICE_UNAUTH.
The state machine of the normal devices during rejoining was DEV_INIT -> DEV_NWK_SEC_REJOIN_CURR_CHANNEL -> DEV_END_DEVICE, and the failed devices was DEV_INIT -> DEV_NWK_SEC_REJOIN_CURR_CHANNEL -> DEV_NWK_SEC_REJOIN_ALL_CHANNEL -> DEV_END_DEVICE_UNAUTH. I did not find a document describing the detail of these states, could you please elaborate on what do these states represent and how does a device switch between the states?
The customer's goal is to avoid the end device to reset because of DEV_END_DEVICE_UNAUTH, is there a good way to do so?
The SDK version is simplelink_cc13xx_cc26xx_sdk_6_40_00_13, and the network has 200 end devices and 20 routers.
Best regards,
Shuyang
Hi Shuyang,
Do I assume correctly that these devices would have rejoined correctly if they were the only devices rejoining at that time? If so then the behavior is due to the Zigbee parent having too many rejoin responses to address and thus misses a few. You can set a timer for MAX_DEVICE_UNAUTH_TIMEOUT other than ZDApp_ResetTimerStart and choose a custom approach to rejoin timeout behavior. This observation is also why staggering device rejoin times is recommended.
Regards,
Ryan
Hi Ryan,
As Shuyang mentioned above
the failed devices was DEV_INIT -> DEV_NWK_SEC_REJOIN_CURR_CHANNEL -> DEV_NWK_SEC_REJOIN_ALL_CHANNEL -> DEV_END_DEVICE_UNAUTH.
could you please elaborate on how does a device switch between the states?
Regards,
Sinjin
From ZDApp_ProcessNetworkJoin in zd_app.c
else if ( devState == DEV_NWK_ORPHAN || devState == DEV_NWK_SEC_REJOIN_CURR_CHANNEL || devState == DEV_NWK_TC_REJOIN_CURR_CHANNEL || devState == DEV_NWK_TC_REJOIN_ALL_CHANNEL || devState == DEV_NWK_SEC_REJOIN_ALL_CHANNEL ) { // results of an orphaning attempt by this device if (nwkStatus == ZSuccess) { //When the device has successfully rejoined then reset retryCnt retryCnt = 0; bdbSecureRejoinAttempts = 0; // Verify NWK key is available before sending Device_annce // Device performing TC rejoin shall wait until (new) NWK key received if ( ZDApp_RestoreNwkKey( TRUE ) == false || devState == DEV_NWK_TC_REJOIN_CURR_CHANNEL || devState == DEV_NWK_TC_REJOIN_ALL_CHANNEL ) { if ( ZSTACK_END_DEVICE_BUILD ) { nwk_SetCurrentPollRateType(POLL_RATE_TYPE_JOIN_REJOIN,TRUE); } // wait for auth from trust center ZDApp_ChangeState( DEV_END_DEVICE_UNAUTH ); // Start the reset timer for MAX UNAUTH time ZDApp_ResetTimerStart( MAX_DEVICE_UNAUTH_TIMEOUT ); }
Regards,
Ryan