Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9226841
  • 博文数量: 1731
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 19900
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1731)

文章存档

2024年(7)

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: Android平台

2017-12-22 17:23:04

2017.12.22 人脸识别系统C/S搭建评测基本结束, 下周开始Zigbee 3.0的入手.
文档先看 BaseDeviceBehaviorSpacification, 再看Z-stack3.0, 后续通过2538实操一下,主要是入网的4种方式以及各项簇的使用.

BDB v1.0 规定了在zigbee-pro协议栈运行时的基本设备行为, 确保应用配置文件(profile)之间的互操作性 profile interoperability.

1.简介
  1.1 范围:
     基本设备行为规范包括
        基本设备需要的环境
        基本设备初始化流程
        基本设备
运转流程(commission)
        基本设备复位流程
        基本设备安全流程
    .
    1.2 目标
        其中重要的是在Zigbee-Pro 协议栈上运行时确保配置文件的交互性 profile interoperablity,

2. 参考
    2.1 zigbee联盟的文档
        zigbee 说明
        zigbee cluster libraray 说明 ZigBee Cluster Library Specification
        zigbee application architecture 应用框架
        zigbee profile interoperablility Technical 
        installation code key derivation sample code. 范例代码
        Base Device Behavior Test

3. 定义
    Application cluster: 应用簇用于产生持续的功能业务. 例如温度检测应用簇(采集数据发出), 智能开关簇(等待命令)等
    Application transaction: 交易业务. 是簇命令集和响应. 例如报告采集数据/响应开关命令等. 是纯应用级别的交易.  某个簇 cluster 作为发起者(initialtor)发起应用交易, 另一个簇 (cluster) 作为目标(target) 接受初始化消息. 因为存在多绑定/群绑定/目标广播的可能性, 目标簇可能时多个终结点(endpoints)或者节点.
    bind 绑定动作
    binding: 是Zigbee 节点上源表的一个条目, 代表数据从那个那个簇(cluster)的那个终结点(endpoint)发来的.
    Centralized security network: 集中安全网络. 由协调器(Zigbee Coordinator)的 Trust Center 构成. 要加入网络的节点node必须通过 Trust Center的认证.
    Commissioning director: 委托代理. 一种节点, 在网络中作为能处理bindings信息或者上报其他节点配置的节点存在.
    Device: 做个节点的一部分, 拥有单独的id, 用于实现一项固有功能, 叫做 device Endpoint. 一个节点可以有多个 devices, 即可以有多个(device endpoint)
    distributed security network: 分布的安全网络.  由路由器(Zigbee Router, 不存在Trust Center)生成, 节点仅需要被父节点认证即可入网.
    dynamic device: 动态设备, 一种没有固定业务的endpoint, 这个endpoint不需要特定的application clusters
    EZ-mode: 一种在节点上定义网络,复位设备等方法, 包括 发现/绑定某些簇的终结点等. 在device上调用Ez-mode需要3分钟的窗口期, 在窗口期内, 节点nodes执行EZ-mode网络环境运行, devices执行EZ-mode 搜索绑定到其他EZ-mode的设备(Devices)上. 目标设备通过ID簇来标识自己. 发起者设备积极的发现设备,并绑定对应目标设备上的簇.
    EZ-Mode finding & binding: 自动建立应用链接的过程. 通过 ID簇 (identify cluster) 在应用簇匹配的多个设备间组网.
    EZ-Mode network steering: EZ-Mode网络构建. 对于未入网节点就是搜寻(search)和入网(join)的动作. 对已入网节点即为允许其他节点加入的动作.
    Initiator cluster: 发起簇. 发起交易的应用簇.
    Node: 节点, 拥有IEEE地址, 运行在zigbee-pro协议栈上的实例, 包括了多个逻辑device实例, 而每个device代表一个终结点(endpointer). 同时也可以有其他类型的终结点, 例如ZDO在 endpoint 0上.
    simple device: 应用级别特殊的endpoint, 拥有一些应用簇.
   Touchlink commissioning: TouchLink委托, 可选的一种机制, 通过一种命令完成近距离的 Inter-PAN 通讯.
    coordinator: 协调器. LogicType = 0b000, 建立集中安全网, 管理节点接入以及网络内key的发布.
    end device: 终端  LogicType = 0b010. 只能加入已存在的网络.
    router: 路由, LogicType = 0b010. 不能建立集中安全网络, 但可以建立分布安全网络.

常量:
bdbcMaxSameNetworkRetryAttempts:  对通过网络最大链接尝试次数.  10次
bdbcMinCommissioningTime:              180 秒级, 网络开放的最小时间, 此时间内允许节点加入或者允许节点证明他自己.
bdbcRecSameNetworkRetryAttempts:  3次, recommended建议的最大次数, 同bdbcMaxSameNetworkRetryAttempts
bdbcTCLinkKeyExchangeTimeout: 向协调器发送APS请求最大的等待时间, 秒级.   5秒

------  touch link 节点的一些常量
bdbcTLInterPANTransIdLifetime      8s  内网交易ID持续的最长时间.
bdbcTLMinStartupDelayTime          2s  协调器等待目标设备完成网络建立的时间.
bdbcTLPrimaryChannelSet              0x02108800 在touchlink scan的时候, 各个频道的屏蔽位.
bdbcTLRxWindowDuration              5s 节点没有收到对方节点反应的最大时长.
bdbcTLScanTimeBaseDuration        0.25s  touch scan 的扫描时间
bdbcTLSecondaryChannelSet          0x07fff800 XOR bdbcTLPrimaryChannelSet  第二级频段扫描屏蔽位

Atrributes
bdbCommissioningGroupID: 发起者节点initator nodes,每个终结点endpoint. 
bdbCommissioningMode: 每个NODE的每个终节点 EP
bdbCommissioningStatus: 每个NODE的每个终节点 EP
bdbJoiningNodeEui64: 协调器. IEEE地址, 
bdbJoiningNodeNewTCLinkKey: 协调器 128bits
bdbJoinUsesInstallCodeKey: True/False, 协调器用.
bdbNodeCommissioning-Capability: 8bits, 所有节点.
bdbNodeIsOnANetwork: True/False 所有节点.
bdbNodeJoinLinkKeyType: ZR/ZED  在入网时是否用link key加密.
bdbPrimaryChannelSet: 所有Node
bdbScanDuration: 所有Node
bdbSecondaryChannelSet: 所有Node
bdbTCLinkKeyExchange-Attempts : ZR/ZED
bdbTCLinkKeyExchange-AttemptsMax : ZR/ZED
bdbTCLinkKeyExchange-Method : ZR/ZED
bdbTrustCenterNodeJoin-Timeout: ZC  秒级
bdbTrustCenterRequireKey-Exchange: True/False. ZC

中心网路只能有一个协调器, 路由节点可以加入中心网络或者分布网络, 同时在无网络的情况下, 路由节点也可以创建分布网络.

每个节点都应该有的key
1. 默认的 global Trust Center link key. 中心安全.  16Bytes
2. 默认的分布式link key. distributed security global link key. 16Bytes
3. install code 衍生的 预配置的 link key. 
4. touchlink 预配置的 link key (可选项)


所有Device的最小需求:
1. ZDO discovery service:
    Active_EP_req, Node_Desc_req, Simple_Desc_req,
    IEEE_addr_req,  NWK_addr_req, Match_Desc_req ,
    respond with 
    Active_EP_rsp,Node_Desc_rsp, Simple_Desc_rsp,
    IEEE_addr_rsp, NWK_addr_rsp, Match_Desc_rsp

2. ZDO node manager service
    Mgmt_Bind_req,  Mgmt_Lqi_req
    Mgmt_Bind_rsp,  Mgmt_Lqi_rsp

3. ZDO binding table service
    Bind_req,  Unbind_req
    Bind_rsp,  Unbind_rsp

4. ZDO network manager service
    Mgmt_Leave_req, Mgmt_Leave_rsp

5. 节点node 至少得有一个 identify cluster, 在 finding/binding期间, identify Query response 会响应 identify Query命令. 节点对多个 identify Query response  可以接收但要分别处理.

6. 作为发起者的节点, 应实现一个 binding table (条目应>=簇实例总和). 在finding/binding或 touchlink或commission期间动态配置 binding table. 

7. 节点应存在属性的报告配置.

8. 目标节点设备应存有组地址和至少8个组成员.

默认报告配置. (可更新的报告配置.), 即发送数据的时机和间隔(考虑功耗等原因).

Mac Data Pooling: 对于休眠的ZED, mac层数据推送很有必要, ZED应设计为唤醒机制来获取Mac数据推送. 建议有两种模式, 快速和慢速推送率.
zigbee Pro 规定获取一个数据推送不能超过 7.5秒. 
对于APS的ACK, ZCL的响应要尽快, 快速率至少为 3 秒.
节点在非等待消息时可能进入慢速模式, 例如1小时激活一次, 保证和父节点的链接而已.
在入网,寻网/绑定时ZED应当在快速模式.

初始化流程



commissioning 过程为每个终结点EP通过bdbCommissioningMode属性. 当节点不再网络, 或在网路中但没有绑定任何device, 或者在网络内但绑定的时另外一个device.
commissioning 过程为人为触发, 按键,API调用等等.





网络节点的可控过程 steering
    节点开放一段有限的时间来允许其他节点加入.


非网络节点的可控过程 steering
非网络节点寻早一个合适的网络加入, 加入后被认证且收到网络key, 最后如果协调器的TCunchain, 那么节点会获取TC产生的link key. 
变量vDoPrimaryScan 布尔变量代表是否做频道扫描.
vScanChannels: 代表要扫描的频道集合


steering流程说明:
1. 节点设置 bdbCommissioningStatus = IN_PROGRESS
    vDoPrimaryScan = TRUE
    vScanChannels = bdbPrimaryChannelSet, 如果 bdbPrimaryChannelSet 为空, 则进行步骤 12

2. 节点开始在制定的频道集合内搜索可用的网络,  发出NLME-NETWORK-DISCOVERY.request (附带ScanChannels=vScanChannels, 参数ScanDuration=bdbScanDuration). 当收到 NWK层的  NLME-NETWORK-DISCOVERY.confirm响应后, 节点被通知发现网络.
3. 当收到 NWK层的  NLME-NETWORK-DISCOVERY.confirm 不是 success 状态时, 说明没有搜寻到网络, 那么进行步骤 12

4. 节点通过分析 NetworkCount 和  NetworkDescriptor参数决定是否有允许加入的网络.
5. 如果节点没有扫描到合适的网络, 那么执行步骤 12

6. 节点通过MAC协议的 NLME-JOIN.request(附带参数 ExtendedPANId = 选中网络的PANID,  RejoinNetwork=0x00, ScanChannels=0x0, ScanDuration=0x0, CapabilityInformation=应用指定,  SecurityEnable=False) 来尝试入网,  当收到  NLME-JOIN.confirm, 节点则已经加入网络了.
7. 如果NLME-JOIN.confirm 不是success状态, 则节点尝试步骤6, 进行下个网络的尝试,也可以重新尝试加入同一个网络, 但尝试次数最好不要超过 bdbcMaxSameNetworkRetryAttempts. 没有网络可尝试链接, 则进行步骤 12

8. 节点入网后, 最长等待 apsSecurityTimeOutPeriod ms 时间得到认证和从父节点获取network key. network key可能是有协调器TC发出的用default global Trust Center link key加密或者install code derived preconfigured link key加密 或者 分布式网络父节点用distributed security global link key加密发出的. 节点应当设置 bdbNodeJoinLinkKeyType 来说明key的类型.
9. 节点超时收不到此key信息, 节点应当重置网络参数, 并选择下个可连网络, 即进行步骤 6. 否则进行步骤 12

10. 节点设置 bdbNodeIsOnANetwork=TRUE, 并广播 ZDO 命令 Device_annce. 如果 apsTrustCenterAddress = 0xffffffffffffffff, 则进行步骤 13

11. 节点准备接收 新的 TC link key, 然后进行步骤 13. 
        否则应当离开原有网络, 重置网络参数, bdbNodeIsOnANetwork=FALSE, bdbCommissioningStatus = TCLK_EX_FAILURE. 离开网络需要发送 NLME-LEAVE.request(附带参数 DeviceAddress=NULL, RemoveChildren=FALSE, Rejoin=FALSE)  请求,  当收到NLME-LEAVE.confirm, 则节点离开网络.

12. 当 vDoPrimaryScan = FASLE 或者 bdbSecondaryChannelSet = 0x00000000. 进行步骤16.
     当 bdbSecondaryChannelSet != 0x00000, 则 应设置 vDoPrimaryScan = FALSE, vScanChannels = bdbSecondaryChannelSet, 然后进行步骤2.

13. 节点广播 ZDO 命令 Mgmt_Permit_Joining_req (PermitDuration=bdbcMinCommissioningTime,  TC_Significance=1), 收到此命令的开放的节点会复位定时器,即扩展时间来让更多其他的节点加入.

14. 如果节点允许其他节点入网, 则应开启网络, 发出 NLME-PERMIT-JOINING.request (PermitDuration=bdbcMinCommissioningTime), 收到 NWK层的 NLME-PERMIT-JOINING.confirm 时代表网络开放入网成功.

15. 节点设置 bdbCommissioningStatus = SUCCESS. 如果节点支持 touchlink, 则设置变量 aplFreeNwkAddrRangeBegin, aplFreeNwkAddrRangeEnd,  aplFreeGroupID-RangeBegin/  aplFreeGroupID-RangeEnd 为 0x0000, 代表节点入网时采用 MAC association.

16. 节点没能入网, 则设置bdbCommissioningStatus=NO_NETWORK, bdbNodeIsOnANetwork=FALSE 来结束steering过程.


网络建立过程.(协调器ZC建立中心安全网络, 并激活TC(trust Center), ZR建立分布式安全网络)
需要的参数 
vDoPrimaryScan: Boolean 确定节点按primary/secondary两个频道集合中的那个尽心扫描.
vScanChannels: 要扫描的频道集合.


1. 节点设置 bdbCommissioningStatus =IN_PROGRESS,  vDoPrimaryScan = TRUE, vScanChannels = bdbPrimaryChannelSet. 当 bdbPrimaryChannelSet=0时进行步骤4

2. 节点尝试在指定频道上建立网络. 发出 NLME-NETWORK-FORMATION.request (ScanChannels=vScanChannels, ScanDuration=bdbScanDuration, BeaconOrder=0x0f, SuperframeOrder=0, BatteryLifeExtension=FALSE ), 收到对应的NLME-NETWORK-FORMATION.confirm时代表产生新网络成功. 
3.  NLME-NETWORK-FORMATION.confirm 不是success, 那么进行步骤5

4. 
vDoPrimaryScan=FALSE 或者 bdbSecondaryChannelSet=0 时, 节点执行8.
    如果 bdbSecondaryChannelSet != 0 , 则节点应把 vDoPrimaryScan=FALSE,     vScanChannels  =bdbSecondaryChannelSet, 然后执行步骤2
5. 节点设置 bdbNodeIsOnANetwork=TRUE,  当节点不是协调器 ZC. 那么执行步骤7
6.  协调器 ZC 建立 TC(trust center)
7. 设置 bdbCommissioningStatus = TRUE, 结束建网过程.
8. 设置 bdbCommissioningStatus = FORMATION_FAILURE 结束建网过程.


终结点 Taget endpoint 扫描和绑定 Finding & binding
 目标EP开放其节点一段时间, 然后在一个发起者EP上处理扫描和绑定一系列请求.

发起者终结点 initiator endpoint 扫描和绑定 Finding & binding 过程



    

Touchlink procedure for an initiator  (Page 60)

8.8 TouchLink 过程. (目标端)
    发起者发起touchlink requests, 目标端响应并建立新网络或者加入发起者的网络. 此过程不会引起 commissioning 过程.
    目标端如果在休眠, 应该手动唤醒,并时能接收端并能响应发起者的扫描请求.
    目标端如果收到额外的touchlink commissioning簇的  scan request 指令, 那么target 可以直接抛弃当前的 touchlink过程.
    发起者 touchlink commissioning 簇发出的  network start request 和 network join router/end device request (包含 vIPTransID 参数) 会让目标端离开当前网络加入新网络, 即所谓的偷人.   Page 66



9. 复位节点上某个 device: 恢复到工厂默认状态. 
    通过基本簇 basic cluster 复位:   basic cluster, reset to factory defaults command, 只能复位在target device上所有cluster支持的 attributes 而已, (network settings, groups and bindings 不受影响)

    通过 touchl ink commissioning cluster 复位: 提供 reset to factory new request 指令,由initiator 通过 inter-PAN 发出.. 会清除所有的永存数据, 是比较完整的工厂复位模式. initiator 首先执行 touchlink 过程进行通道扫描, 然后产生一个inter-PAN命令参数reset to factory new request报文到 目标端的 touchlink commissioning cluster

    通过 the network leave command 复位:
    通过 Mgmt_Leave_req ZDO command 复位:
    通过本地动作复位: (推荐方式) 例如物理按键(或者程序的某个合适的时机)触发, 触发后 执行  NLME-LEAVE.request立刻网络, 并置  DeviceAddress = NULL, RemoveChildren=FALSE, 收取confirm后清空NV区域即可.


安全机制:
     Instal l codes: 格式 128 bit number  + 16 bit CRC (CCITT CRC=????16 + ????12 + ????5 + 1), 类似于 83FE D340 7A93 9723 A5C6 39B2 6916 D505 C3B5
        1. 工厂设定 Install Code, 
        2. 通过Matyas-Meyer-Oseas MMO 哈希运算得到 pre-configured link key (AES-128 key)
        3. 把 pre-configured link key 配置到节点中. 对于 使用TC的节点, pre-configured link key配置到 TC中去.

规则:
    acceptNewUnsolicitedTrustCenterLinkKey    
    acceptNewUnsol ici tedAppl icat ionLinkKey  







Trust Center behavior  
     Adding the instal l code
         bdbJoinUsesInstallCodeKey.  允许加入的节点, 加入AIB apsDeviceKeyPairSet , 内容包括DeviceAddress + LinkKey.  apsLinkKeyType=0


     Adding a new node  into the network 

     Behavior when a known node joins
        

Distributed securi ty network behavior  
     Adding a new node into the network: 节点应使用  distributed security global link key 来加密 network key.



























































阅读(11330) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~