CC2530/CC2538 TI zigbee协调器只有Update Device入网困难bug

本文详细分析了Zigbee网络中使用TI的CC2530/CC2538ZNP方案时遇到的设备入网稳定性问题。在特定情况下,第三个设备通过中间设备无法成功入网。通过ubiqua抓包分析,发现并定位到代码bug,主要涉及bdb_TCProcessJoiningList函数。解决方案是对代码进行修改,以确保在兼容zigbee1.2设备的同时,不影响3.0设备的安全性。修复后,设备入网问题得到解决。
  • 目前zigbee领域最稳定的方案仍然是TI的CC25xx方案,没有之一。
  • 很多人可能遇到类似问题,CC2530/CC2538 ZNP工程,已经定义了宏TP2_LEGACY_ZC,用于协调器兼容旧zigbee设备(1.2协议)。复现步骤,网络内第一个ZR直接可以入网,第二个ZR通过中间ZR也可以入网,有Update Device之后ZC立马回复Tunnel Transport Key,可以入网,第三个设备通过中间ZR基本无法入网,中间ZR给ZC发送了Update Device,没有任何反应,导致入网失败,之后多次尝试,依旧失败。
  • ubiqua抓包分析后,大概能看到如下现象
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

解决方案
  • 经过对bdb.c和ZDSecMgr.c代码的分析,发现了bug,修改如下位置
/****************************************************************************
* @fn          bdb_TCProcessJoiningList
*
* @brief       Process the timer to handle the joining devices if the TC link
*              key is mandatory for all devices
*
* @param       none
*
* @return      none
*/
void bdb_TCProcessJoiningList(void)
{
   
   
  bdb_joiningDeviceList_t* tempJoiningDescNode;
  
  if(bdb_joiningDeviceList)
  {
   
   
    tempJoiningDescNode = bdb_joiningDeviceList;
  
    while(tempJoiningDescNode)
    {
   
   
      if(tempJoiningDescNode->NodeJoinTimeout)
      {
   
   
        tempJoiningDescNode->NodeJoinTimeout--;
      }
      
      i
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值