[TI Z-Stack Z3.0]zigbee Z-Stack Z3.0 入网方式的探讨

针对TI Z-Stack,zigbee Z-Stack 3.0 入网方式的探讨

Platform:IAR、Z-Stack 3.0

【SPP】Content:

一、经过详细阅读Z-Stack 3.0文档,我们知道,zigbee有四种方式入网,分别是:

  1. global Trust Center link key,也就是集中式入网;
  2. distributed global link key,也就是分布式入网( PS: 在分布式入网模式下,ZR(zigbee router)类型的设备也具有创建网络的功能,不再只是ZC(zigbee coordinator)设备具有创建网络的能力)
  3. install code入网方式(这个可能是3.0协议的新特性,毕竟现在到处都是QR二维码,人家扫一下二维码都能完成入网的事情,为什么还要touchlinkpresslink这种传统的按钮方式入网呢,当然那些不接入互联网也没有APP,更无显示界面的设备,还得依赖这种方式)
  4. touchlink入网方式,就是在ZC上按键以后,持续一段时间网络处于开放状态(允许别的设备加入网络),超时之后就进入关闭状(不允许别的设备加入),然后继续按按键,又处于开放状态,和以前的蓝牙配对类似

                            

二、关于global Trust Center link key3.0协议栈上的说明

众所周知(well know)zigbee联盟推荐的默认key{}{0x5a, 0x69, 0x67, 0x42, 0x65,0x65, 0x41, 0x6c, 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x30, 0x39},zigbee协议栈提供了各种key,让人一时半会搞不清楚都是干什么用的,必须详细阅读Guide文档

1.

结合ubiqua 2.0协议分析工具的分析,ZCZR入网方式如下

ZC:协调器

ZR:路由器

TCLK(Trust Center Link Key)

 

修改变量zgPreConfigKeys = TRUE,在f8wConfig.cfg里面修改DDEFAULT_KEY

义,默认的zgApsLinkKeyType =  ZG_GLOBAL_LINK_KEY不修改,即global trust

link key方式入网,即所有需要入网的设备都使用同一个TCLK

 

组网过程如下:

ZR上电,发出Beacon Request

ZC同时做出响应

ZR发送Association Request

ZC响应Association Response

 

ZC发出Transport Key(用于传输network keyZR,也就是defaultKey数组定义的

key,用于后续NWK层通讯加密使用)

ZR发出Device Announce

ZC发出Device Announce

Descripter Request

Descripter Reponse

 

ZR发出Request key(请求ZC提供的TC Link key

ZC发出Transport key生成全新的TC Link key发送给ZR,这里为什么不是

defaultTCLinkKey数组定义的global Trust Center link key,可能是出于安全考

ZR发出Verify key

ZC响应Confirm key (返回状态成功:Success)

整个组网完成(0x0C4E节点发出的NWK命令请无视,这不知哪里的节点在工作)

1.1

All devices share a default global Trust Center Link Key. This is an APS layer key and is the first key to be used when joining a network, if no other link key is specified.

如果没有配置别的link key(例如install codetouchlink key)Z3.0协议栈会使用默认的global Trust Center link key,也就是defaultTCLinkKey数组定义的key;

 

1.2

Z-Stack 2.x协议不同,2.x协议是在APSME_TCLinkKeyInit函数中,程序初始化的时候把这个数组写进NV的,但是在Z3.0里面已公开的代码是没有显式写入NV的,通过修改defaultTCLinkKey的值进行测试发现,整个入网过程使用了最新修改的defaultTCLinkKey,说明这个数组虽然没有明显写入NV,但是仍然在非公开代码(TI协议栈内部)使用了该数组作为global Trust Center link key;另外,Z3.0也提供了一个全新的API来手动把defaultTCLinkKey写入到NV里面,就是APSME_AddTCLinkKey,这个函数被封装在bdb提供的bdb_setActiveCentralizedLinkKey函数。

 

2、每次新设备入网,在第二次ZCZR发送Transport key的时候,都会动态生成新的TC Link Keyubiqua就会自动加到里面,不明白为啥每个终端入网都会生成新的TCLK

                                           

3、直接调用bdb_setActiveCentralizedLinkKey(TRUE,NULL)直接把defaultTCLinkKey写入NV应该和协议栈内部直接调用defaultTCLinkKey效果是一样的,但是为什么ieee地址都是0,这个行为取决于APSME_AddTCLinkKey函数的内部实现,由于该函数非公开,所以无法得知内部的机理。 通过测试,显式在程序初始化结束后调用bdb_setActiveCentralizedLinkKey(TRUE,NULL);修改使用默认的globalTrust Center link key,也是可以实现组网的,再次说明,如果你不调用这个函数显式修改defaultTCLinkKey,协议栈也会使用defaultTCLinkKey提供的key作为globalTrust Center link key

 

4、那么问题来了,如果两个设备使用不同的defaultTCLinkKey,能够实现入网吗,我们继续测试,测试结果是无法组网,ZC通过Transport Key连续给ZR发送了4次network keyZR都没有任何响应,最后ZCZRLeave掉了,就是给踢掉了,所以不能实现组网,我们可以通过给指定的设备配置相同的defaultTCLinkKey,这些有相同的defaultTCLinkKey的设备,就可以入网,其他设备是无法入网的,ubiqua抓包显示的是单向箭头,说明并没有组网成功,另外标志性的Device announce也没有。

三、入网方式比较

       我们继续测试Z3.0提供的install code方式入网,看看和Z2.6.x的ZG_UNIQUE_LINK_KEY方式入网有何不同?Z3.0提供了新的入网方式,就是install code,我认为翻译为安装序列号是可以的,就好比手机连着协调器,手机自带扫描二维码的功能,然后每个终端都有一个install code(贴有二维码,里面包含了TCLKIEEE地址),这样扫一下对应的条码,就能实现入网了。

       那和Z2.6.xunique有何不同呢,Z2.6.x使用的unique TCLK,是在把各个终端上面的defaultTCLinkKey存储到TC上的NV区域,然后实现入网;根据设计总共有255个NV区域可以存储255个不同的defaultTCLinkKey,当然,是不是多个设备可以使用同一个defaultTCLinkKey,应该也是可以的,毕竟只是入网的时候用TCLK对network key进行加密,然后Transport key到别的设备,别的设备再用同一个TCLK解码,就可以得到相应的network key,后续都用这个network 加密信息,入网成功以后,TCLK就没啥用了。

      Z3.0使用install codeIEEE地址,也是存储到NV区域,只是入网成功以后就自动释放了NV区域,以供别的设备使用,Z2.6.x不需要IEEE地址,只需要TCLK就可以了,但是无法自动释放NV区域,区别就在这。

 

本文源自于转载

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值