微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > CC2530 Z-Stack 3.0.0 终端不能入网

CC2530 Z-Stack 3.0.0 终端不能入网

时间:10-02 整理:3721RD 点击:

请教一下大家, 

在KEY_CHANGE事件中, 通过下面代码, 已经使协调器组网成功了。

bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_FORMATION);
NLME_PermitJoiningRequest(0xFF);

终端在KEY_CHANGE事件中, 通过下面的代码,缺不能入网成功。(ZDO_STATE_CHANGE事件中, 最后的状态是 DEV_HOLD)

bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING);

NLME_PermitJoiningRequest(0xFF);

大家知道问题在那里吗?

我总结的一篇文章,在附件,希望能帮助到你。

协调器 组网, 终端入网 都是调用下面的代码吗?

bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_FORMATION | BDB_COMMISSIONING_MODE_NWK_STEERING | BDB_COMMISSIONING_MODE_FINDING_BINDING | BDB_COMMISSIONING_MODE_INITIATOR_TL);

我这边终端入网,ZDO_STATE_CHANGE事件中 最终的状态  devStates_t 是 DEV_HOLD, 请问这是什么原因?

我是先干掉了HAL_KEY=FALSE,不要任何按键,然后是在GenericApp示例程序基础上开发的,没有问题,协调器和路由器之间的TCLK和network key保持一直,刷完就自动入网了,或者恢复出厂设置以后,重新启动,也会自动入网,NV_RESTORE之类的Z-Stack 3.0都是默认开启的。

在Ztack 3.0.1的general app的示例中为啥我去掉LCD和KEY之后,其他什么都没有改,为啥一直捉取不到报文,这个还需要什么注意的地方吗?

新的协议栈里面信道有第一类信道和第二类信道,看是不是一直扫描第二类信道上去了。

请问你的问题解决了吗?我也遇到了同样的情况

3.0协议栈是会有这类问题,有时候一次入不了网,多试几次,就能入了,分析ubiqua抓包数据,发现Transport key过去以后没有任何反应,然后又Transport key了一次,还是没反应,多试几次反而就成功了,profile交换都正常了,不知道是什么原因。

按理说附近只有一个coordinator开放网络,不至于错误加入到别的网络中,就是很奇怪的了。

你好 hold li  请问你的这个问题后面解决了吗 是怎么解决的呢?我现在也也碰到这个问题了,求帮助,

wei shi5

你好 hold li  请问你的这个问题后面解决了吗 是怎么解决的呢?我现在也也碰到这个问题了,求帮助,

@wei shi5 请将你的测试数据包发送给我下,谢谢!

VV

wei shi5

你好 hold li  请问你的这个问题后面解决了吗 是怎么解决的呢?我现在也也碰到这个问题了,求帮助,

@wei shi5 请将你的测试数据包发送给我下,谢谢!

抓包文件在附件里@VV 

@wei shi5,

这个问题我们这里也有复现,目前正在解决中。

1、我分析了你的ubiqua包,发现刚开始0x0000给0x3A38 Transport Key过去以后,0x3A38节点也没Verify Key,就直接Device Announce了,可能是之前已经入过网,重复入网就是这样,话说Device Announce不就是入网成功的标志吗? 后面接着又有Match Descriptor Request/Response,不就是进行了profile交换,看起来都正常啊

2、后面怎么0x3A38又被Leave掉了呢,莫非是router和coordinator的预编译network key不一致吗,这种情况我测试过,即使之前入过网,但是后面key修改后,两边交换确认不对,也是会被Leave掉的。

3、协议栈自带的network key默认都是0x00,宏DEFAULT_KEY在f8wConfig.cfg中定义的,后面入网后会重新生成network key,用于后面network数据通讯。我看你们的key是00:C8:B5:50:C7:FC:E5:12:C1:56:94:0B:80:08:55:40,应该是自己修改了network key对不? 

4、我实际测试过,两边的TCLK和network key都要保持一致,才能入网,否则就会被踢掉。

5、问题来了,还是Transport key好几次,router节点都没反应,这个问题我之前也遇到过好多次,多试几次反而就成功了,初步推测可能是router收到key了,但是卡在verify那里了,所以一致没反应过来,coordinator认为超时了,所以就会重发几次,如果是这样,显然是协议栈自身的bug,我后面有空会尝试分析一下代码,看看有没有希望找到问题。

hold li

1、我分析了你的ubiqua包,发现刚开始0x0000给0x3A38 Transport Key过去以后,0x3A38节点也没Verify Key,就直接Device Announce了,可能是之前已经入过网,重复入网就是这样,话说Device Announce不就是入网成功的标志吗? 后面接着又有Match Descriptor Request/Response,不就是进行了profile交换,看起来都正常啊

2、后面怎么0x3A38又被Leave掉了呢,莫非是router和coordinator的预编译network key不一致吗,这种情况我测试过,即使之前入过网,但是后面key修改后,两边交换确认不对,也是会被Leave掉的。

3、协议栈自带的network key默认都是0x00,宏DEFAULT_KEY在f8wConfig.cfg中定义的,后面入网后会重新生成network key,用于后面network数据通讯。我看你们的key是00:C8:B5:50:C7:FC:E5:12:C1:56:94:0B:80:08:55:40,应该是自己修改了network key对不? 

4、我实际测试过,两边的TCLK和network key都要保持一致,才能入网,否则就会被踢掉。

5、问题来了,还是Transport key好几次,router节点都没反应,这个问题我之前也遇到过好多次,多试几次反而就成功了,初步推测可能是router收到key了,但是卡在verify那里了,所以一致没反应过来,coordinator认为超时了,所以就会重发几次,如果是这样,显然是协议栈自身的bug,我后面有空会尝试分析一下代码,看看有没有希望找到问题。

真的很感谢你这么认真的帮我分析,其实那个leave是我自己触发的,这个抓包的意思是我入网后很快又主动leave 然后再入网就会出问题,上次V神已经过来这边当面分析了一番,发现是发transportKey的时候带的加密密钥有问题,第一次入网和之后的入网密钥一样,但是第二次校验不通过,你可以看最后一个入网成功的信息,发现秘钥又不同了 ,换成了传输密钥就成功了  

UINT16 ZDApp_event_loop( uint8 task_id, UINT16 events ) 
............ 
if ( events & ZDO_DEVICE_RESET )
  {
#ifdef ZBA_FALLBACK_NWKKEY
    if ( devState == DEV_END_DEVICE_UNAUTH )
    {
      ZDSecMgrFallbackNwkKey();
    }
    else
#endif
    {
      // Set the NV startup option to force a "new" join.
      --zgWriteStartupOptions( ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE );
      ++zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_CONFIG_STATE | ZCD_STARTOPT_DEFAULT_NETWORK_STATE);

      // The device has been in the UNAUTH state, so reset
      // Note: there will be no return from this call
      SystemResetSoft();
    }
  }
.................

请按照上面的代码修改测试下。

看样子VV 给的是个workaround解决方案,我还没测试。

我刚才又重新分析了ubiqua log

1、14:51:14.841129 时间点,0x0000给0x3A38发送了一个Transport Key,传输的是network key,结果没有任何反应

2、14:51:15:055169 时间点,0x3A38又主动请求0x0000 获取TCLK一次,不是第一次入网的时候,TCLK都已经发过去了吗,两边TCLK一致,后面也不会再请求TCLK了

3、后面倒是通过中间人0xF941把TCLK再次传送给0x3A38,结果就验证通过了,最后入网成功

4、看来前面一直是TCLK无法校验通过,才导致无法入网,据我了解,开始入网是beacon以后,0x0000会主动用TCLK加密network key对其进行发送,对方收到以后,可以用相同的TCLK进行解密拿出network key,以后通讯都用network key了。如果是第一步有问题,那不就是后面都没法入网了

出现问题的原因是在设备Leave的时候,没有把APS的Link Key恢复到默认的TC Link Key,仍然再使用重新分配的APS Link Key对数据包进行解密,就会有问题。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top