logo资料库

ZigBee协议栈Z-Stack开发指南.pdf

第1页 / 共19页
第2页 / 共19页
第3页 / 共19页
第4页 / 共19页
第5页 / 共19页
第6页 / 共19页
第7页 / 共19页
第8页 / 共19页
资料共19页,剩余部分请下载后查看
1 ZigBee
1.1 设备类型(Device Types)
1.1.1 Coordinator(协调器)
1.1.2 Router(路由器)
1.1.3 End-Device(终端设备)
1.2 栈配置(Stack Profile)
2 寻址(Addressing)
2.1 地址类型(Address types)
2.2 网络地址分配(Network address assignment)
2.3 Z-Stack寻址(Addressing in z-stack)
2.3.1 单点传送(Unicast)
2.3.2 间接传送(Indirect)
2.3.3 广播传送(broadcast)
2.3.4 组寻址(Group Addressing)
2.4 重要设备地址(Important Device Adresses)
3 绑定(Binding)
3.1 建立绑定表(Building a Binding Table)
3.2 ZigBee Device Object Binding Request
3.2.1 启动申请(The Commissioning Application)
3.2.2 ZigBee Device Object End Device Bind Request
3.2.3 Device Application Binding Manager
3.3 配置源绑定(Configuring Source Binding)
4 路由(Routing)
4.1 概述(Overview)
4.2 路由协议(Routing Protocol)
4.2.1 路径的发现和选择(Route Discovery and Selection)
4.2.2 路径保持维护(Route maintenance)
4.2.3 路径期满(Route expiry)
4.3 表存储(Table storage)
4.3.1 路由表(Routing table)
4.3.2 路径发现表(Route discovery table)
4.4 路径设置快速参考(Routing Settings Quick reference)
5 ZDO消息请求(ZDO Message requests)
6 便携式设备(Portable Devices)
7 端到端确认(End-to-end acknowledgements)
8 其他(Miscellaneous)
8.1 配置信道(Configuring channel)
8.2 配置PAN ID和要加入的网络(Configuring PAN ID and network to join)
8.3 最大有效载荷大小(Maximum payload size)
8.4 离开网络(Leave Network)
8.5 描述符(Descriptors)
8.6 非易失性存储项(Non-volatile Memory Items)
8.6.1 网络层非易失性存储器(Network Layer Non-Volatile Memory)
8.6.2 应用的非易失性存储器(Application Non-Volatile Memory)
9 安全(Security)
9.1 概述(Overview)
9.2 配置(Configuration)
9.3 网络访问控制(Network access control)
9.4 更新密码(Key Updates)
9.5 快速参考(Quick Reference)
ZigBee 协议栈 Z-Stack 开发指南 目录 1. ZigBee ................................................................................................................................... 1 1.1. 设备类型(Device Types) ......................................................................................... 1 1.1.1. Coordinator(协调器) ....................................................................................... 1 1.1.2. Router(路由器) ............................................................................................... 1 1.1.3. End-Device(终端设备) ................................................................................... 2 1.2. 栈配置(Stack Profile) ............................................................................................... 2 2. 寻址(Addressing) ................................................................................................................. 2 2.1. 地址类型(Address types) ......................................................................................... 2 2.2. 网络地址分配(Network address assignment) .......................................................... 2 2.3. Z-Stack 寻址(Addressing in z-stack) ....................................................................... 3 2.3.1. 单点传送(Unicast) ......................................................................................... 4 2.3.2. 间接传送(Indirect) ......................................................................................... 4 2.3.3. 广播传送(broadcast) ...................................................................................... 4 2.3.4. 组寻址(Group Addressing) ............................................................................ 5 2.4. 重要设备地址(Important Device Adresses) ............................................................ 5 3. 绑定(Binding) ...................................................................................................................... 5 3.1. 建立绑定表(Building a Binding Table) ................................................................... 6 3.1.1. ZigBee Device Object Binding Request ......................................................... 6 3.1.2. 配置源绑定(Configuring Source Binding) .................................................... 7 4. 路由(Routing) ...................................................................................................................... 8 4.1. 概述(Overview) ........................................................................................................ 8 4.2. 路由协议(Routing Protocol) .................................................................................... 8 4.2.1. 路径的发现和选择(Route Discovery and Selection) .................................... 9 4.2.2. 路径保持维护(Route maintenance) ............................................................... 9 4.2.3. 路径期满(Route expiry) .............................................................................. 10 I
4.3. 表存储(Table storage) ............................................................................................ 10 4.3.1. 路由表(Routing table) ................................................................................. 10 4.3.2. 路径发现表(Route discovery table) ............................................................ 10 4.4. 路径设置快速参考(Routing Settings Quick reference) ........................................ 10 5. ZDO 消息请求(ZDO Message requests) ............................................................................ 11 6. 便携式设备(Portable Devices) .......................................................................................... 12 7. 端到端确认(End-to-end acknowledgements) .................................................................... 12 8. 其他(Miscellaneous) .......................................................................................................... 13 8.1. 配置信道(Configuring channel) ............................................................................. 13 8.2. 配置 PAN ID 和要加入的网络(Configuring PAN ID and network to join) ......... 13 8.3. 最大有效载荷大小(Maximum payload size) ........................................................ 13 8.4. 离开网络(Leave Network) ..................................................................................... 14 8.5. 描述符(Descriptors) ............................................................................................... 14 8.6. 非易失性存储项(Non-volatile Memory Items) ..................................................... 14 8.6.1. 网络层非易失性存储器(Network Layer Non-Volatile Memory) .............. 14 8.6.2. 应用的非易失性存储器(Application Non-Volatile Memory) .................... 15 9. 安全(Security) .................................................................................................................... 15 9.1. 概述(Overview) ...................................................................................................... 15 9.2. 配置(Configuration) ............................................................................................... 16 9.3. 网络访问控制(Network access control) ................................................................ 16 9.4. 更新密码(Key Updates) ......................................................................................... 16 9.5. 快速参考(Quick Reference) ................................................................................... 17 II
1. ZigBee 1.1. 设备类型(Device Types) 在 ZigBee 网络中存在三种逻辑设备类型:Coordinator( 协调器) ,Router(路由器) 和 End-Device(终端设备)。ZigBee 网络由一个 Coordinator 以及多个 Router 和多个 End_Device 组成。 上图是一个简单的 ZigBee 网络示意图。其中黑色节点为 Coordinator,红色节点为 Router, 白色节点为 End-Device。 1.1.1. Coordinator(协调器) 协调器负责启动整个网络。它也是网络的第一个设备。协调器选择一个信道和一个网络 ID(也称之为 PAN ID,即 Personal Area Network ID),随后启动整个网络。 协调器也可以用来协助建立网络中安全层和应用层的绑定(bindings)。 注意,协调器的角色主要涉及网络的启动和配置。一旦这些都完成后,协调器的工作就 像一个路由器(或者消失 go away)。由于 ZigBee 网络本身的分布特性,因此接下来整个网络 的操作就不在依赖协调器是否存在。 1.1.2. Router(路由器) 路由器的功能主要是:允许其他设备加入网络,多跳路由和协助它自己的由电池供电的 儿子终端设备的通讯。 通常,路由器希望是一直处于活动状态,因此它必须使用主电源供电。但是当使用树群 1
这种网络模式时,允许路由间隔一定的周期操作一次,这样就可以使用电池给其供电。 1.1.3. End-Device(终端设备) 终端设备没有特定的维持网络结构的责任,它可以睡眠或者唤醒,因此它可以可以是一 个电池供电设备。 通常,终端设备对存储空间(特别是 RAM 的需要)比较小。 注 意 : 在 Z-Stack 1.4.1 中 一 个 设 备 的 类 型 通 常 在 编 译 的 时 候 通 过 编 译 选 项 (ZDO_COORDINATOR 和 RTR_NWK)确定。所有的应用例子都提供独立的项目文件来编译 每一种设备类型。 1.2. 栈配置(Stack Profile) 栈参数的集合需要被配置为一定的值,连同这些值在一起被称之为栈配置。ZigBee 联盟 定义了这些由栈配置组成的栈参数。 网络中的所有设备必须遵循同样的栈配置。 为了促进互用性这个目标,ZigBee 联盟为 ZigBee2006 规范定义了栈配置。所有遵循此 栈配置的设备可以在其他开发商开发的遵循同样栈配置的网络中。 2. 寻址(Addressing) 2.1. 地址类型(Address types) ZigBee 设备有两种类型的地址。一种是 64 位 IEEE 地址,即 MAC 地址,另一种是 16 位网络地址。 64 位 IEEE 地址是一个全球唯一的地址,并且一经分配就将跟随设备一生。它通常由制 造商或者被安装时设置。这些地址由 IEEE 组织来维护和分配。 16 位网络地址是当设备加入网络后分配的。它在网络中是唯一的,用来在网络中鉴别 设备和发送数据。 2.2. 网络地址分配(Network address assignment) ZigBee 使用分布式寻址方案来分配网络地址。这个方案保证在整个网络中所有分配出 去的网络地址是唯一的。这一点是必须的,因为这样才能保证一个具体的数据包能够发送到 它指定的设备,而不出现混乱。同时,这个寻址算法本身的分布特性保证设备只能与他的父 辈设备通讯来接收一个唯一的网络地址。不需要整个网络范围内通讯的地址分配,这有助于 网络的可测量性。 2
在 每 个 路 由 加 入 网 络 之 前 , 寻 址 方 案 需 要 知 道 和 配 置 一 些 参 数 。 这 些 参 数 是 MAX_DEPTH,MAX_ROUTERS 和 MAX_CHILDREN。这些参数是栈配置的一部分, ZigBee2006 协议栈已经规定了这些参数的值:MAX_DEPTH = 5,MAX_ROUTERS = 6 和 MAX_CHILDREN = 20。 MAX_DEPTH 决定了网络的最大深度。协调器(Coordinator)位于深度 0,它的儿子位于 深度 1,他的儿子的的儿子位于深度 2,以此类推。MAX_DEPTH 参数限制了网络在物理上的 长度。 MAX_CHILDREN 决定了一个路由(Router)或者一个协调器节点可以处理的儿子节点的 最大个数。 MAX_ROUTER 决定了一个路由(Router)或者一个协调器(Coordinator)节点可以处理的 具有路由功能的儿子节点的最大个数。这个参数是 MAX_CHILDREN 的一个子集,终端节点 使用(MAX_CHILDREN – MAX_ROUTER)剩下的地址空间。 如果开发人员想改变这些值,则需要完成以下几个步骤: 首先,你要保证赋给这些参数的新值要合法。即整个地址空间不能超过,这就限制了参 数能够设置的最大值。可以使用 projects\ZStack\tools 文件夹下的 CSkip.xls 文件来确认这些 值是否合法。当在表格中输入了要修改的数据后,如果数据不合法的话就会出现错误信息。 当选择了合法的数据后,开发人员还要保证不再使用标准的栈配置,取而代之的是使用 网 络 自 定 义 栈 配 置 ( 例 如 : 在 nwk_globals.h 文 件 中 将 STACK_PROFILE_ID 改 为 NETWORK_SPECIFIC),然后设置 nwk_globals.h 文件中的 MAX_DEPTH 参数为一个适当的值。 此外,还必须设置 nwk_globals.c 文件中的 Cskipchldrn 数组和 CskipRtrs 数组。这些数 组的值由 MAX_CHILDREN 和 MAX_ROUTER 构成。 2.3. Z-Stack 寻址(Addressing in z-stack) 应用程序通常使用 AF_DataRequest()函数向一个 ZigBee 网络中的设备发送数据。数据 包要发送给一个 zAddrType_t(在 ZComDef.h 中定义)类型的目标设备。 typedef struct { union { uint16 shortAddr; } addr; afAddrMode_t addrMode; byte endPoint; } afAddrType_t; 3
注意,除了网路地址之外,还要指定地址模式参数。目的地址模式可以设置为以下几个 值: typedef enum { afAddrNotPresent = AddrNotPresent, afAddr16Bit = Addr16Bit, afAddrGroup = AddrGroup, afAddrBroadcast = AddrBroadcast } afAddrMode_t; 因为在 Zigbee 中,数据包可以单点传送(unicast),多点传送(multicast)或者广播传送, 所以必须有地址模式参数。一个单点传送数据包只发送给一个设备,多点传送数据包则要传 送给一组设备,而广播数据包则要发送给整个网络的所有节点。这个将在下面详细解释。 2.3.1. 单点传送(Unicast) Uicast 是标准寻址模式,它将数据包发送给一个已经知道网络地址的网络设备。将 afAddrMode 设置为 Addr16Bit 并且在数据包中携带目标设备地址。 2.3.2. 间接传送(Indirect) 当 应 用 程 序 不 清 楚 数 据 包 的 最 终 目 标 的 时 候 使 用 间 接 传 送 。 将 模 式 设 置 为 AddrNotPresent 并且不指定目标地址。取而代之的是,从发送设备的栈的绑定表中查找到的 目标。这种特点称之为源绑定(在后面的绑定一节详细介绍)。 当数据向下发送到栈中,从绑定表中查找并且使用该目标地址。这样,数据包将被处理 成为一个标准的单点传送数据包。如果在绑定表中找到多个设备,则向每个设备都发送一个 数据包的拷贝。 上一个版本的 ZigBee(ZigBee04),有一个选项可以讲绑定表保存在协调器(Coordinator) 当中。发送设备将数据包发送给协调器,协调器查找它栈中的绑定表,然后将数据发送给最 终的目标设备。这个附加的特性叫做协调器绑定(Coordinator Binding)。 2.3.3. 广播传送(broadcast) 当应用程序需要将数据包发送给网络的每一个设备时,使用这种模式。地址模式设置为 AddrBroadcast。目标地址可以设置为下面广播地址的一种: NWK_BROADCAST_SHORTADDR_DEVALL(0xFFFF)——数据包将被传送到网络 上的所有设备,包括睡眠中的设备。对于睡眠中的设备,数据包将被保留在其父亲节点直到 查询到它,或者消息超时(NWK_INDIRECT_MSG_TIMEOUT 在 f8wConifg.cfg 中)。 NWK_BROADCAST_SHORTADDR_DEVRXON(0xFFFD)——数据包将被传送到网 4
络上的所有的打开接收的空闲设备(RXONWHENIDLE),也就是说,除了睡眠中的所有设备。 NWK_BROADCAST_SHORTADDR_DEVZCZR(0xFFFC)——数据包发送给所有的路 由器,包括协调器。 2.3.4. 组寻址(Group Addressing) 当应用程序需要将数据包发送给网络上的一组设备时,使用该模式。地址模式设置为 afAddrGroup 并且 addr.shortAddr 设置为组 ID。 在使用这个功能之前,必须在网络中定义组。(参见 Z-stack API 文档中的 aps_AddGroup() 函数)。 注意组可以用来关联间接寻址。再绑定表中找到的目标地址可能是是单点传送或者是一 个组地址。另外,广播发送可以看做是一个组寻址的特例。 下面的代码是一个设备怎样加入到一个 ID 为 1 的组当中: aps_Group_t group; // Assign yourself to group 1 group.ID = 0x0001; group.name[0] = 0; // This could be a human readable string aps_AddGroup( SAMPLEAPP_ENDPOINT, &group ); 2.4. 重要设备地址(Important Device Adresses) 应用程序可能需要知道它的设备地址和父亲地址。使用下面的函数获取设备地址(在 ZStack API 中定义): l NLME_GetShortAddr()——返回本设备的 16 位网络地址 l NLME_GetExtAddr()—— 返回本设备的 64 位扩展地址 使用下面的函数获取该设备的父亲设备的地址: l NLME_GetCoordShortAddr()——返回本设备的父亲设备的 16 位网络地址 l NLME_GetCoordExtAddr()—— 返回本设备的父亲设备的 64 位扩展地址 3. 绑定(Binding) 绑定是一种两个(或者多个)应用设备之间信息流的控制机制。在 ZigBee2006 发布版本 中,它被称为资源绑定,所有的设备都必须执行绑定机制。 绑定允许应用程序发送一个数据包而不需要知道目标地址。APS 层从它的绑定表中确定 目标地址,然后将数据继续向目标应用或者目标组发送。 注意:在 ZigBee 的 1.0 版本中,绑定表是保存在协调器(Coordinator 当中)。现在所有的 绑定记录都保存在发送信息的设备当中。 5
3.1. 建立绑定表(Building a Binding Table) 有三种方法可以建立一个绑定表: 1) Zigbee Device Object Bind Request——一个启动工具可以告诉设备创建一个绑定 记录 2) Zigbee Device Object End Device Bind Request——两个设备可以告诉协调器它们 想要建立一个绑定表记录。协调器来协调并在两个设备中创建绑定表记录。 3) Device Application——一个设备上的应用程序建立或者管理一个绑定表 3.1.1. ZigBee Device Object Binding Request 任何一个设备都可以发送一个 ZDO 信息给网络中的另一个设备,用来建立绑定表。称 之为援助绑定,它可以为一个发送设备创建一个绑定记录。 3.1.1.1. 启动申请(The Commissioning Application) 一个应用程序可以通过 ZDP_BindReq()函数(在 ZDProfile.h),并在绑定表中包含两个请 求(地址和终点)以及想要的群 ID。第一个参数(目标 dstAddr)是绑定源的短地址即,16 位网 络地址。 确定你已经在 ZDConfig.h 允许了这个功能(ZDO_BIND_UNBIND_REQUEST)。 你也可以使用 ZDP_UnbindReq()用同样的参数取消绑定记录。 目标设备发回 ZigBee Device Object Bind 或者 Unbind Response 信息,该信息是 ZDO 代 码根据动作的状态,通过调用 ZDApp_BindRsq()或者 ZDApp_UnbindRsq()函数来分析和通知 ZDApp.c 的。 对于绑定响应,从协调器返回的状态将是 ZDP_SUCCESS,ZDP_TABLE_FULL 或者 ZDP_NOT_SUPPORTED。 对于解除绑定响应,从协调器返回的状态将是 ZDP_SUCCESS,ZDP_NO_ENTRY 或者 ZDP_NOT_SUPPORTED。 3.1.1.2. ZigBee Device Object End Device Bind Request 这个机制是在指定的时间周期(timeout period)内,通过按下选定设备上的按钮或者类似 的动作来绑定。协调器在指定的时间周期内,搜集终端设备的绑定请求信息,然后以配置 ID(Profile ID)和群 ID(Cluster ID)协议为基础,创建一个绑定表记录作为结果。默认的设备绑 定时间周期(APS_DEFAULT_MAXBINDING_TIME)是 16 秒钟(在 nwk_globals.h 中定义)。 但是将它添加到 f8wConfig.cfg 中,则可以更改。 在“用户指南”中的应用程序就是一个终端设备绑定的例子(在每个设备上按下 SW2 按 键)。 6
分享到:
收藏