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.

LAUNCHXL-CC1352P: CC1352P开发板做协调器,新设备入网导致协调器进入Error_raiseX状态

Part Number: LAUNCHXL-CC1352P
Other Parts Discussed in Thread: CC1352P, CC2652P

CC1352P协调器,加入一个不支持Zigbee 3.0的节点,超时触发BDB_TC_LK_EXCH_PROCESS_EXCH_FAIL事件后,在bdb_TCJoiningDeviceFree中释放入网节点信息。在bdb_TCJoiningDeviceFree中运行到OsalPort_free( descCurrent )这一步时,协调器死机,进入Error_raiseX函数,并且在if (Error_policy_D == Error_SPIN) 中陷入死循环。

同一块开发板,在多个不同版本的SDK上面验证,均出现该现象。同样的程序,移植到CC2652P模块上就不会出现该问题。

  • 您好

    已经收到了您的案例,调查需要些时间,感谢您的耐心等待

  • 我这边找到原因了,系bdb_TCProcessJoiningList释放设备记录导致,在队列中先释放指针,再从指针中获取下一个地址,或导致协调器获取到一个错误的指针。

    很奇怪,在CC1352P开发板上有这个问题,但是在我们自己的CC2652模块上没有该问题。

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    void bdb_TCProcessJoiningList(void)
    {
    bdb_joiningDeviceList_t* tempJoiningDescNode;
    if(bdb_joiningDeviceList)
    {
    tempJoiningDescNode = bdb_joiningDeviceList;
    while(tempJoiningDescNode)
    {
    if(tempJoiningDescNode->NodeJoinTimeout)
    {
    tempJoiningDescNode->NodeJoinTimeout--;
    }
    if(tempJoiningDescNode->NodeJoinTimeout == 0)
    {
    uint8_t isTCLKExchangeRequired = bdb_doTrustCenterRequireKeyExchange();
    //Check if the key exchange is required
    if(isTCLKExchangeRequired)
    {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX