当前位置:首页 >> 信息与通信 >>

ZigBee 2006协议栈


专业尚阳

2010-01-10

ZigBee 2006协议栈 开发指导手册

专业尚阳 2010-01-10

1

专业尚阳

2010-01-10

目录 1 ZigBee..............................

........................................................................................ 4 1.1 设备类型(Device Types) ................................................................................. 4 1.1.1 Coordinator(协调器).......................................................................... 4 1.1.2 1.1.3 Router(路由器) .................................................................................. 5 End-Device(终端设备)...................................................................... 5

1.2 栈配置(Stack Profile) ...................................................................................... 5 2 寻址(Addressing)........................................................................................................ 5 2.1 地址类型(Address types) ............................................................................... 5 2.2 网络地址分配(Network address assignment) ................................................. 6 2.3Z-Stack寻址(Addressing in z-stack)................................................................. 6 2.3.1 单点传送(Unicast)................................................................................ 7 2.3.2 间接传送(Indirect) ............................................................................... 7 2.3.3 广播传送(broadcast)............................................................................. 7 2.3.4 组寻址(Group Addressing)................................................................... 8 2.4 重要设备地址(Important Device Adresses).................................................... 8 3 绑定(Binding) ............................................................................................................. 9 3.1 建立绑定表(Building a Binding Table) .......................................................... 9 3.1.1 ZigBee Device Object Binding Request ............................................ 9 3.1.2 配置源绑定(Configuring Source Binding) ........................................ 11 4 路由(Routing) ........................................................................................................... 11 4.1 概述(Overview) ............................................................................................. 11 4.2 路由协议(Routing Protocol) ......................................................................... 12 4.2.1 路径的发现和选择(Route Discovery and Selection) ........................ 12 4.2.2 路径保持维护(Route maintenance) ................................................... 13 4.2.3 路径期满(Route expiry) ..................................................................... 13 4.3 表存储(Table storage) ................................................................................... 13 4.3.1 路由表(Routing table) ................................................................................ 13 4.3.2 路径发现表(Route discovery table) ................................................... 14 4.4 路径设置快速参考(Routing Settings Quick reference) ............................... 14 5 ZDO消息请求(ZDO Message requests) .................................................................. 14 6 便携式设备(Portable Devices)................................................................................. 15 7 端到端确认(End end acknowledgements) ............................................................... 16 8 其他(Miscellaneous)................................................................................................. 16
2

专业尚阳

2010-01-10

8.1 配置信道(Configuring channel) .................................................................... 16 8.2 配置PAN ID和要加入的网络(Configuring PAN ID and network to join) .. 17 8.3 最大有效载荷大小(Maximum payload size) ............................................... 17 8.4 离开网络(Leave Network) ............................................................................ 17 8.5 描述符(Descriptors) ...................................................................................... 18 8.6 非易失性存储项(Non-volatile Memory Items) ............................................ 18 8.6.1 网络层非易失性存储器(Network Layer Non-Volatile Memory) ..... 18 8.6.2 应用的非易失性存储器(Application Non-Volatile Memory)........... 19 9 安全(Security)........................................................................................................... 19 9.1 概述(Overview) ............................................................................................. 19 9.2 配置(Configuration) ...................................................................................... 19 9.3 网络访问控制(Network access control) ....................................................... 20 9.4 更新密码(Key Updates) ................................................................................ 20 9.5 快速参考(Quick Reference) .......................................................................... 20

3

专业尚阳

2010-01-10

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 网络本身的分布特性,因此接下 来整个网络的操作就不在依赖协调器是否存在。

4

专业尚阳

2010-01-10

1.1.2 Router(路由器)
路由器的功能主要是: 允许其他设备加入网络, 多跳路由和协助它自己的由 电池供电的儿子终端设备的通讯。 通常, 路由器希望是一直处于活动状态, 因此它必须使用主电源供电。 但是 当使用树群这种网络模式时, 允许路由间隔一定的周期操作一次, 这样就可以使 用电池给其供电。

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 来维护和分配。 16 为网络地址是当设备加入网络后分配的。 它在网络中是唯一的, 用来在网 络中鉴别设备和发送数据。

5

专业尚阳

2010-01-10

2.2 网络地址分配(Network address assignment)
ZigBee 使用分布式寻址方案来分配网络地址。 这个方案保证在整个网络中所 有分配的地址是唯一的。 这一点是必须的, 因为这样才能保证一个特定的数据包 能够发给它指定的设备, 而不出现混乱。 同时, 这个寻址算法本身的分布特性保 证设备只能与他的父辈设备通讯来接受一个网络地址。 不需要整个网络范围内通 讯的地址分配,这有助于网络的可测量性。 在每个路由加入网络之前,寻址方案需要知道和配置一些参数。这些参数是 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)剩下的地址空 间。 如果开发人员想改变这些值,则需要完成以下几个步骤: 首先,你要保证这 些参数新的赋值要合法。即,整个地址空间不能超过216, 这 就 限 制 了 参 数 能 够 设 置 的 最 大 值 。 可 以 使 用 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.3Z-Stack 寻址(Addressing in z-stack)
为 了 向 一 个 在 ZigBee 网 络 中 的 设 备 发 送 数 据 , 应 用 程 序 通 常 使 用AF_DataRequest()函数。 数据包将要发送给一个 afAddrType_t(在 ZComDef.h 中定 义)类型的目标设备。
typedef struct { union {

6

专业尚阳
uint16 shortAddr; } addr; afAddrMode_t addrMode; byte endPoint;

2010-01-10

} afAddrType_t; 注意, 除了网路地址之外, 还要指定地址模式参数。 目的地址模式

可以设置为以 下几个值:
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)
当应用程序需要将数据包发送给网络的每一个设备时,使用这种模式。地址

7

专业尚阳

2010-01-10

模式设置为AddrBroadcast。目标地址可以设置为下面广播地址的一种: NWK_BROADCAST_SHORTADDR_DEVALL(0xFFFF)——数据包将被传送 到网络上的所有设备, 包括睡眠中的设备。 对于睡眠中的设备, 数据包将被保留 在其父亲节点直到查询到它,或者消息超时(NWK_INDIRECT_MSG_TIMEOUT 在f8wConifg.cfg 中)。 NWK_BROADCAST_SHORTADDR_DEVRXON(0xFFFD)—— 数 据 包 将 被 传送到网络上的所有在空闲时打开接收的设备(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 中定义): z NLME_GetShortAddr()——返回本设备的16 位网络地址 z NLME_GetExtAddr()—— 返回本设备的64 位扩展地址 使用下面的函数获取该设备的父亲设备的地址: z NLME_GetCoordShortAddr()——返回本设备的父亲设备的 16 位 网 络地址 z NLME_GetCoordExtAddr()—— 返回本设备的父亲设备的 64 位 扩 展地址

8

专业尚阳

2010-01-10

3 绑定(Binding)
绑定是一种两个(或者多个)应用设备之间信息流的控制机制。在ZigBee2006 发布版本中,它被称为资源绑定,所有的设备都必须执行绑定机制。 绑定允许 应用程序发送一个数据包而不需要知道目标地址。 APS 层从它的绑 定表中确定目标地址,然后将数据继续向目标应用或者目标组发送。 注意:在 ZigBee 的 1.0 版本中,绑定表是保存在协调器(Coordinator 当中)。 现在所有的绑定记录都保存在发送信息的设备当中。

3.1 建立绑定表(Building a Binding Table)
有三种方法可以建立一个绑定表: z Zigbee Device Object Bind Request——一个启动工具可以告诉设备创建 一个绑定记录 z Zigbee Device Object End Device Bind Request——两个设备可以告诉协 调器它们想要建立一个绑定表记录。协调器来协调并在两个设备中创建 绑定表记录。 z Device Application——一个设备上的应用程序建立或者管理一个绑定表

3.1.1 ZigBee Device Object Binding Request
任何一个设备都可以发送一个 ZDO 信息给网络中的另一个设备,用来建立 绑定表。称之为援助绑定,它可以为一个发送设备创建一个绑定记录。

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。 对 于 解 除 绑 定 响 应 , 从 协 调 器 返 回 的 状 态 将 是

9

专业尚阳

2010-01-10

ZDP_SUCCESS,ZDP_NO_ENTRY 或者ZDP_NOT_SUPPORTED。

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 按键)。 你应该注意到, 所有的例程都有处理关键事件的函数(例如: TransmitApp.c 中 在 的 TransmitApp_HandleKeys() 函 数 ) 。 这 个 函 数 调 用 ZDApp_SendEndDeviceBindReq()(在 ZDApp.c 中)。这个函数搜集所有终端节点 的请求信息, 然后调用ZDP_EndDeviceBindReq()函数将这些信息发送给协调器。 协调器调用函数 ZDP_IncomingData()【ZDProfile.c 中】函数接收这些信息, 然后再调用 ZDApp_ProcessEndDeviceBindReq ()【ZDObject.c 中】函数分析这些 信息,最后调用 ZDApp_EndDeviceBindReqCB【ZDApp.c 中】函数,这个函数 再调用ZDO_MatchEndDeviceBind()【ZDObject.c 中】函数来处理这个请求。 当收到两个匹配的终端设备绑定请求, 协调器在请求设备中启动创建源绑定 记录的进程。假设在 ZDO 终端设备中发现了匹配的请求,协调器将执行下面的 步骤: z 发送一个解除绑定请求给第一个设备。这个终端设备锁定进程,这样解 除绑定被首先发送来去掉一个已经存在的绑定记录。 z 等待 ZDO 解除绑定的响应, 如果响应的状态是 ZDP_NO_ENTRY, 则发 送 一 个 ZDO 绑 定 请 求 在 源 设 备 中 创 建 一 个 绑 定 记 录 。 如 果 状 态 是 ZDP_SUCCESS,则继续前进到第一个设备的群ID。 z 等待ZDO 绑定响应, 如果收到了, 则继续前进到第一个设备的下一个群 ID。 z 当地一个设备完成后,用同样的方法处理第二个设备。 z 当第二个设备也完成之后,发送 ZDO 终端设备绑定请求消息给两个 设 备。

3. Device Application Binding Manager
另一种进入设备绑定记录的方式是应用自己管理绑定表。 这就意味着应用程序需 要通过调用下面的绑定管理函数在本地进入并且删除绑定记录: z bindAddEntry()——在绑定表中增加一个记录 z bindRemoveEntry()——从绑定表中删除一个记录

10

专业尚阳

2010-01-10

z bindRomoveClusterIdFromList()——从 一 个 存 在 的 绑 定 表 记 录 中 删 除 一 个群ID z bindAddClusterIdToList()——向 一 个 已 经 存 在 的 绑 定 记 录 中 增 加 一 个 群 ID z bindRemoveDev()——删除所有地址引用的记录 z bindRemoveSrcDev()——删除所有源地址引用的记录 z bindUpdateAddr()——将记录更新为另一个地址 z bindFindExisting()——查找一个绑定表记录 z bindIsClusterIdInList()——在表记录中检查一个已经存在的群 ID z bindNumBoundTo()——拥有相同地址(源或者目的)的记录的个数 z bindNumEntries()——表中记录的个数 z bindCapacity()——最多允许的记录个数 z bindWriteNV()——在NV 中更新表

3.1.2 配置源绑定(Configuring Source Binding)
为了在你的设备中使能源绑定在 f8wConfig.cfg 文件中包含 REFLECTOR 编 译 标 志 。 同 时 在f8wConfig.cfg 文 件 中 查 看 配 置 项 目 NWK_MAX_BINDING_ENTRIES 和 MAX_BINDING_CLUSTER_IDS 。 NWK_MAX_BINDING_ENTRIES 是 限 制 绑 定 表 中 的 记 录 的 最 大 个 数 ,MAX_BINDING_CLUSTER_IDS 是每个绑定记录的群ID 的最大个数。 绑定表在静态 RAM 中(未分配),因此绑定表中记录的个数,每条记录中群 ID 的 个 数 都 实 际 影 响 着 使 用 RAM 的 数 量 。 每 一 条 绑 定 记 录 是 8 字 节 多 (MAX_BINDING_CLUSTER_IDS * 2 字节)。除了绑定表使用的静态 RAM 的数 量,绑定配置项目也影响地址管理器中的记录的个数。

4 路由(Routing)
4.1 概述(Overview)
A mesh network is described as a network in which the routing of messages is performed as a decentralized , cooperative process involving many peer devices routing on each others’ behalf. 路由对与应用层来说是完全透明的。 应用程序只需简单的向下发送去往任何 设备的数据到栈中, 栈会负责寻找路径。 这种方法, 应用程序不知道操作是在一 个多跳的网络当中的。 路由还能够自愈 ZigBee 网络,如果某个无线连接断开了,路由功能又能自 动寻找一条新的路径避开那个断开的网络连接。这就极大的提高了网络的可 靠 性,同时也是ZigBee 网络的一个关键特性。
11

专业尚阳

2010-01-10

4.2 路由协议(Routing Protocol)
ZigBee 执行基于用于AODV 专用网络的路由协议。 简化后用于传感器网络。 ZigBee 路由协议有助于网络环境有能力支持移动节点,连接失败和数据包丢失。 当路由器从他自身的应用程序或者别的设备那里收到一个单点发送的数 据 包,则网络层(NWK Layer)根据一下程序将它继续传递下去。如果目标节点是它 相邻路由器中的一个, 则数据包直接被传送给目标设备。 否则, 路由器将要检索 它的路由表中与所要传送的数据包的目标地址相符合的记录。 如果存在与目标地 址相符合的活动路由记录,则数据包将被发送到存储在记录中的下一级地址 中 去。 如果没有发现任何相关的路由记录, 则路由器发起路径寻找, 数据包存储 在 缓冲区中知道路径寻找结束。 ZigBee 终端节点不执行任何路由功能。 终端节点要向任何一个设备传送数据 包, 它只需简单的将数据向上发送给它的父亲设备, 由它的父亲设备以它自己的 名义执行路由。同样的,任何一个设备要给终端节点发送数据,发起路由寻找, 终端节的的父亲节点都已它的名义来回应。 注意 ZigBee 地址分配方案使得对于任何一个目标设备,根据它的地址都 可 以得到一条路径。 Z-Stack 中, 在 如果万一正常的路径寻找过程不能启动的话 (通 常由于缺少路由表空间),那么Z-Stack 拥有自动回退机制。 此外,在 Z-Stack 中,执行的路由已经优化了路由表记录。通常,每一个目 标设备都需要一条路由表记录。 但是, 通过把一定父亲节点记录与其子所有子结 点的记录合并,这样既可以优化路径也可以不丧失任何功能。 ZigBee 路由器,包括协调器执行下面的路由函数:(i)路径发现和选择;(ii) 路径保持维护;(iii)路径期满。

4.2.1 路径的发现和选择(Route Discovery and Selection)
路径发现是网络设备凭借网络相互协作发现和建立路径的一个过程。 路由发 现可以由任意一个路由设备发起, 并且对于某个特定的目标设备一直执行。 路径 发现机制寻找源地址和目标地址之间的所有路径, 并且试图选择可能的最好的路 径。 路径选择就是选择出可能的最小成本的路径。 每一个结点通常持有跟它所有 邻接点的“连接成本(link costs)”。通常,连接成本的典型函数是接收到的信号的 强度。沿着路径,求出所有连接的连接成本总和,便可以得到整个路径的“路径 成本”。路由算法试图寻找到拥有最小路径成本的路径。 路径通过一系列的请求和回复数据包被发现。 源设备通过向它的所有邻接节 点广播一个路由请求数据包,来请求一个目标地址的路径。当一个节点接收 到 RREQ 数据包, 它依次转发 RREQ 数据包。 但是在转发之前, 它要加上最新的 连 接成本,然后更新 RREQ 数据包中的成本值。这样,沿着所有它通过的连 接, RREQ 数据包携带着连接成本的总和。 个过程一直持续到 RREQ 数据包到 这 达目 标设备。通过不同的路由器,许多 RREQ 副本都将到达目标设备。目标 设 备 选 择 最 好 的 RREQ 数 据 包 , 然 后 发 回 一 个 路 径 答 复 数 据 包 (a Route Reply)RREP 给
12

专业尚阳

2010-01-10

源设备。 RREP 数据包是一个单点发送数据包,它沿着中间节点的相反路径传送直到 它到达原来发送请求的节点为止。 一旦一条路径被创建,数据包就可以发送了。当一个结点与它的下一级相邻 节点失去了连接(当它发送数据时,没有收到 MAC ACK),该节点向所有等待接 收它的 RREQ 数据包的节点发送一个 RERR 数据包,将它的路径设为无效。各 个结点根据收到的数据包RREQ、RREP 或者RERR 来更新它的路由表。

4.2.2 路径保持维护(Route maintenance)
网状网提供路径维护和网络自愈功能。中间节点沿着连接跟踪传送失败,如 果一个连接被认定是坏链, 那么上游节点将针对所有使用这条连接的路径启动路 径修复。节点发起重新发现直到下一次数据包到达该节点,标志路径修复完成。 如果不能够启动路径发现或者由于某种原因失败了, 节点则向数据包的源节点发 送一个路径错误包(RERR),它将负责启动新路径的发现。这两种方法,路径都 自动重建。

4.2.3 路径期满(Route expiry)
路由表为已经建立连接路径的节点维护路径记录。如果在一定的时间周 期 内, 没有数据通过沿着这条路径发送, 这条路径将被表示为期满。 期满的路径 一 直保留到它所占用的空间要被使用为止。 这样, 路径在绝对不使用之前不会被 删 除 掉 的 。 在 配 置 文 件 f8wConfig.cfg 文 件 中 配 置 自 动 路 径 期 满 时 间 。 设 置 ROUTE_EXPIRY_TIME 为期满时间,单位为秒。如果设置为 0, 则表示关闭自 动期满功能。

4.3 表存储(Table storage)
路由功能需要路由器保持维护一些表格。

4.3.1 路由表(Routing table)
每一个路由器包括协调器都包含一个路由表。 设备在路由表中保存数据包参 与路由所需的信息。 每一条路由表记录都包含有目的地址, 下一级节点和连接状 态。 所有的数据包都通过相邻的一级节点发送到目的地址。 同样, 为了回收路由 表空间,可以终止路由表中的那些已经无用的路径记录。 路由表的容量表明一个设备路由表拥有一个自由路由表记录或者说它已 经 有一个与目标地址相关的路由表记录。 在文件“f8wConfig.cfg”文件中配置路 由表 的大小。将MAX_RTG_ENTRIES 设置为表的大小(不能小于4)。

13

专业尚阳

2010-01-10

4.3.2 路径发现表(Route discovery table)
路由器设备致力于路径发现,保持维护路径发现表。这个表用来保存路径发 现过程中的临时信息。 这些记录只在路径发现操作期间存在。 一旦某个记录到期, 则它可以被另一个路径发现使用。 这个值决定了在一个网络中, 可以同时并发执 行 的 路 径 发 现 的 最 大 个 数 。 这 个 可 以 在 f8wConfig.cfg 文 件 中 配 置 MAX_ RREQ_ENTRIES。

4.4 路径设置快速参考(Routing Settings Quick reference)
MAX_RTG_ENTRIES,这个值不能小于4 (f8wConfig.cfg 文件) ROUTE_EXPIRY_TIME,单位秒。设置为零则关闭路径 设置路径期满时间 期满(f8wConfig.cfg 文件) 网络中可以同时执行的路径发现 设置路径发现表大小 MAX_RREQ_ENTRIES, 操作的个数 设置路由表大小

5 ZDO 消息请求(ZDO Message requests)
ZDO 模块提供功能用来发送 ZDO 服务发现请求消息,接收 ZDO 服务发 现 回复消息。下图描述了应用程序发送 IEEE 地址请求和接收 IEEE 地址回复 的函 数调用。

14

专业尚阳

2010-01-10

ZDO IEEE 地址请求及应答 下面这个例子,一个应用程序想知道什么时候 一个新的设备加入网络。一个 应用想要接收所有ZDO 设备的通知信息。

ZDO Device Announce delivered to an application

6 便携式设备(Portable Devices)
在 ZigBee2006 中终端节点就是便携式的设备。这就意味着当一个终端节 点 没有侦听到它的父节点回应(超出范围或者无法胜任), 它将试着重新加入网络 (加
15

专业尚阳

2010-01-10

入到另一个新的父亲节点)。没有设置或者编译标志位来设置这个选项。 终端节点通过巡检(MAC 数据请求)失败或者通过数据消息失败侦听它的父 亲节点都没有回应。MAX_POLL_FAILURE_RETRIES 用来控制失败的敏感度。 这个值可以在 f8wConfig.cfg 文件中修改。并且,这个值越大敏感度就越低,重 新加入网络需要的时间就更长。 当网络层侦测到它的父亲节点没有回应,它将调用 ZDO_SynIndicationCB() 函数, 这个函数将启动重新加入。 重新加入过程首先对已有的父亲节点进行孤儿 扫描(orphan-scan),然后扫描潜在的父亲节点并且跟它的潜在父节点加入网络。 在一个安全网络中, 假设设备都拥有一个钥匙, 新的钥匙不用在分发给设备。

7 端到端确认(End end acknowledgements)
对于非广播消息,有两种基本的消息重试类型:端到端的确认(APS ACK)和 单级确认(single hop acknowledgement)(MAC ACK)。MAC ACK 默认情况下是一 直打开的, 通常能够充分保证网络的高可靠性。 为了提供附加的可靠性, 同时使 发送设备能够得到数据包已经被发送到目的地的确认,可以使用APS ACK。 APS acknowledgement 在 APS 层完成,是从目标设备到源设备的一个消息确 认系统。源设备将保留这个消息知道目标设备发送一个 APS ACK 消息表明它已 经收到了消息。 对于每个发出的消息可以通过调用函数 AF_DataRequest()的选项 来使能/禁止来禁止这个功能。这个选项区域是一个位映射选项,对于将要发送 的消息的选项区域或上(OR)AF_ACK_REQUEST 就可以使能 APS ACK。消息重 试 (如 果 APS ACK 消 息 没 有 收 到 )的 次 数 和 重 试 之 间 的 时 间 间 隔 的 配 置 项 在 f8wConfig.cfg 文件中。APSC_MAX_FRAME_RETRIES 是 APS 层在放弃 发送数 据 之 前 , 没 有 收 到 APS ACK 确 认 重 新 发 送 消 息 的 次 数 。 APSC_ACK_WAIT_DURATION_POLLED 是重新发送之间的时间间隔。

8 其他(Miscellaneous)
8.1 配置信道(Configuring channel)
每一个设备都必须有一个 DEFAULT_CHANLIST 来控制信道集合。 于一个 对 ZigBee 协调起来说,这个表格用来扫描噪音最小的信道。对于终端节点和路由 器几点来说,这个列表用来扫描并加入一个存在的网络。

16

专业尚阳

2010-01-10

8.2 配置PAN ID 和要加入的网络(Configuring PAN ID and network to join)
这个可选配置项用来控制 ZigBee 路由器和终端节点要加入那个网络。文 件 f8wConfg.cfg 中的 ZDO_CONFIG_PAN_ID 参数可以设置为一个 0~0x3FFF 之间 的一个值。协调器使用这个值,作为它要启动的网络的 PAN ID。而对于路 由器 节点和终端节点来说只要加入一个已经用这个参数配置了 PAN ID 的网 络。 如果 要关闭这个功能,只要将这个参数设置为0xFFFF。 要 更 进 一 步 控 制 加 入 过 程 , 需 要 修 改 ZDApp.c 文 件 中 的 ZDO_NetworkDiscoveryConfirmCB 函数。

8.3 最大有效载荷大小(Maximum payload size)
对于一个应用程序最大有效载荷的大小基于几个因素。MAC 层提供了一个 有效载荷长度常数 102。NWK 层需要一个固定头大小,一个有安全的大小和一 个没有安全的大小。APS 层必须有一个可变的基于变量设置的头大小,包 括 ZigBee 协议版本,KVP 的使用和 APS 帧控制设置等等。最后,用户不必根 据前 面的要素来计算最大有效载荷大小。AF 模块提供一个 API,允许用户查 询 栈 的 最 大 有 效 载 荷 或 者 最 大 传 送 单 元 (MTU) 。 用 户 调 用 函 数 afDataReqMTU(见 af.h 文件),该函数将返回MTU 或者最大有效载荷大小。 typedef struct { uint8 kvp; APSDE_DataReqMTU_t aps; }afDataReqMTU_t; uint8 afDataReqMTU( afDataReqMTU_t* fields ) 通常 afDataReqMTU_t 结构只需要设置 kvp 的值, 这个值表明 KVP 是否被使 用。而aps 保留。

8.4 离开网络(Leave Network)
ZDO 管 理 器 执 行 函 数 “ZDO_ProcessMgmtLeaveReq” , 这 个 函 数 提 供 对 “NLME-LEAVE.request”原语的访问。“NLME-LEAVE.request”原语设备移除 它自 身或者它的一个儿子设备。 ZDO_ProcessMgmtLeaveReq 根据提供给它的 IEEE 地 址移除设备。 如果设备要移除它自己, 它需等待大约 5 秒钟然后复位。 一旦设备 复位它将重新回来, 并处于空闲模式。 它将不在试图连接或者加入网 络。 如果设 备要移除它的儿子设备,它将从本地的群从表(accociation table)中删 除该设备。 只有在它的儿子设备是个终端节点的情况下,NWK 地址才会被重 新使用。如果 儿子节点是个路由器设备,NWK 地址将不再使用。

17

专业尚阳

2010-01-10

如果一个儿子节点的父亲节点离开了网络,儿子节点依然存在于网络。 尽管“NLME-LEAVE.request”原语提供了一些可选参数,但是 ZigBee2006(TI 当 前 的 应 用 也 一 样 ) 却 限 制 了 这 些 参 数 的 使 用 。 现 在 , 在 ZDO_ProcessMgmtLeaveReq 函 数 中 使 用 的 可 选 参 数 (“RemoveChildren” 、 “Rejion”and “Silent”)都应该使用默认值。如果改变这些 值,将会发生不可预料的 结果。

8.5 描述符(Descriptors)
ZigBee 网络中的所有设备都有一个描述符,用来描述设备类型和它的应用。 这个信息可以被网络中的其他设备获取。 配置项在文件 ZDOConfig.h 和 ZDOConfig.c 中定义和创建。 这两个文件还包 含节点,电源描述符和默认用户描述符。确认改变这些描述符来定义你的网络。

8.6 非易失性存储项(Non-volatile Memory Items) 8.6.1 网络层非易失性存储器(Network Volatile Memory) Layer Non-

ZigBee 设备有许多状态信息需要被存储到非易失性存储空间中, 这样能够让 设备在意外复位或者断电的情况下复原。 否则它将无法重新加入网络或者起到有 效作用。 为了启用这个功能,需要包含 NV_RESTORE 编译选项。注意,在一个真正 的 ZigBee 网络中,这个选项必须始终启用。关闭这个选项的功能也仅仅是在开 发阶段使用。 ZDO 层 负 责 保 存 和 恢 复 网 络 层 最 重 要 的 信 息 , 包 括 最 基 本 的 网 络 信 息 (Network Information Base NIB,管理网络所需要的最基本属性);儿子节 点和父 亲节点的列表;包含应用程序绑定表。此外,如果使用了安全功能,还要 保存类 似于帧个数这样信息。 当一个设备复位后重新启动, 这类信息恢复到设备当中。 如果设备重新启动, 这 些 信 息 可 以 使 设 备 重 新 恢 复 到 网 络 当 中 。 在 ZDAPP_Init 中 , 函 数NLME_RestoreFromNV()的调用指示网络层通过保存在NV 中的数据重新恢 复网 络。如果网络所需的 NV 空间没有建立,这个函数的调用将同时初始化 这部分 NV 空间。

18

专业尚阳

2010-01-10

8.6.2 应 用 的 非 易 失 性 存 储 器(ApplicationNon-Volatile Memory)
NV 同样可以用来保存应用程序的特定信息,用户描述符就是一个很好的例 子。NV 中用户描述符ID 项是ZDO_NV_USERDESC(在ZComDef.h 中定义)。 在ZDApp_Init()函数中, 调用函数osal_nv_item_init()来初始化用户描述符所 需要的NV 空间。如果这个针对这个NV 项,这个函数是第一次调用,这个初始 化 函 数 将 为 用 户 描 述 符 保 留 空 间 , 并 且 将 它 设 置 为 默 认 值 ZDO_DefaultUserDescriptor。 当 需 要 使 用 保 存 在 NV 中 的 用 户 描 述 符 时 , 就 像 ZDO_ProcessUserDescReq()(在 ZDObject.c 中)函数一样, 调用 osal_nv_read()函 数 从NV 中获取用户描述符。 如 果 要 更 新 NV 中 的 用 户 描 述 符 , 就 像 ZDO_ProcessUserDescSet()( 在ZDObject.c 中)函数一样,调用osal_nv_write()函数更 新NV 中的用户描述符。 记住: NV 中的项都是独一无二的。 如果用户应用程序要 创建自己的NV 项,那么必须从应用值范围0x0201~0x0FFF 中选择ID。

9 安全(Security)
9.1 概述(Overview)
ZigBee security is built with the AES block cipher and the CCM mode of operation as the underlying security primitive。AES/CCM 安全算法是ZigBee 联盟 以外的研究人员发明的,并且广泛应用于其他通讯协议之中。 ZigBee 提供如下的安全特性: z 构造安全 (Infrastructure security) z 网络访问控制(Network access control) z 应用数据安全

9.2 配置(Configuration)
为了拥有一个安全的网络,首先所有的设备镜像的创建,必须将预处理标志 位SECURE 都置为1。在文件“f8wConfig.cfg”文件中可以找到。 接下来,必须选择一个默认的密码。这个可以通过“f8wConfig.cfg”文件中的 DEFAULT_KEY 来设置。理论上,这个值设置为一个随机的128 位数据。 这个 默认的密码可以预先配置到网络上的每个设备或者只配置到协调器上, 然 后 分 发 给 假 如 网 络 的 所 有 设 备 。 这 个 可 以 通 过 文 件 “nwk_globals.c” 文 件 的

19

专业尚阳

2010-01-10

gPreConfigKeys 选项来配置。 如果这个值为真, 那么默认的密码将被预先配置到 每一个网络设备上。 如果这个值为假, 那么默认的密码只需配置到协调器设备当 中。注意,在以后的场合,这个密码将被分发到每一个加入网络当中的设备。因 此,加入网络期间成为“瞬间的弱点”,竞争对手可以通过侦听获取密码,从而降 低了网络的安全性能。

9.3 网络访问控制(Network access control)
在一个安全的网络中,当一个设备加入网络时会被告知一个信任中心(协 调 器)。协调器拥有允许设备保留在网络或者拒绝网络访问这个设备的选择权。 信任中心可以通过任何逻辑方法决定一个设备是否允许进入这个网络中。 其 中一种就是信任中心只允许一个设备在很短的窗口时间加入网络。这个时可能 的,举例说明,如果一个信任中心设备有一个“push”按键。当按键按下,在这个 很短的时间窗口中, 它允许任何设备加入网络。 否则所有的加入请求都将被拒绝。 以他们的IEEE 地址为基础,一个秒级的时间段将被配置在信任中心用来接收或 者拒绝设备。 这 种 类 型 的 策 略 可 以 通 过 修 改 ZDSeeMgr.c 模 块 中 的 ZDSecMgrDeviceValidate()函数来实现。

9.4 更新密码(Key Updates)
信任中心可以根据自己的判断更新通用网络密码。 应用程序开发人员修改网 络密码更新策略。 默认信任中心执行能够用来符合开发人员的指定策略。 一个样 例策略将按照一定的间隔周期更新网络密码。 另外一种将根据用户输入来更新网 络密码。ZDO 安全管理器(ZDSecMgr.c)API 通过 “ZDSecMgrUpdateNwkKey” 和 “ZDSecMgrSwitchNwkKey”提供必要的功能。“ZDSecMgrUpdateNwkKey”允许 信 任中心向网络中的所有设备广播新的网络密码, 此时, 新的网络密码将被作为 替 代 密 码 保 存 在 所 有 网 络 设 备 中 。 一 旦 信 任 中 心 调 用 “ZDSecMgrSwitchNwkKey”, 一个全网范围的广播将触发所有的网络设备使用 替代密码。

9.5 快速参考(Quick Reference)
使能安全(Enabling Security) 使 能 预 配 置 网 络 密 码 (Enabling Preconfig Network Key) 设置预配置网络密码(Setting Preconfig 使能/禁止信任中心的加入许可 功能 (Enabling/Disabling joining SECURE = 1(f8wConfig.cfg) gPreConfigKeys = TRUE(nwk_globals.c) 设置defautlKey = {KEY}(ZDSecMgr.c) 调 用 函 数 ZDSecMgrPermitJoining()(ZDSecMgr.c)

20

专业尚阳 10

2010-01-

加入期间特定设备批准(Specific device 网络密码更新(Network key updates)

修 改 ZDSecMgrDeviceValidate(ZDSecMgr.c) 调 用 ZDSecMgrUpdateNwkKey() 和 ZDSecMgrSwitchNwkKEy() 函 数 (ZDSecMgr.c)

21


相关文章:
基于zigbee协议栈的简单led灯闪烁程序
基于zigbee协议栈的简单led灯闪烁程序_信息与通信_工程科技_专业资料。基于zigbee 2006协议栈的led灯闪烁程序,描述osal中task如何创建,初始化,和事物处理。今日...
zigbee2006协议栈硬件层修改说明
zigbee2006协议栈硬件层修改说明_信息与通信_工程科技_专业资料。这个是自己根据 天运的一个板子,为了适用于 zigbee2006协议栈而自己进行的修改底层硬件层的做法,由于...
zigbee协议版本
例如 Jennic 公司将 ZigBee2004 协议栈固化在 ROM 中(JN5121/JN5139)。将无法和 ZigBee 2006 以后的协议栈兼容。ZigBee 2006 协议栈, 将是 ZigBee 兼容的一个...
ZigBee2006中文-ZDO
ZigBee2006协议栈使用指... 11页 2下载券 ZigBee2006协议栈使用指... 12页 ...ZigBee Device Objects是ZigBee终端、路由器、协调器上执行在网络层和应用层原语...
zstack完整资料
TI 的第三种 Zigbee 方案是无线网络处理器 CC2480(RF 收发器和 ZigBee 协议栈),可搭配 任意 MCU,比如 MSP430。TI 的 Z-Stack 软件 ZigBee-2006 协议栈可在...
ZigBee2006入门_1
75页 20财富值 ZigBee2006协议栈定位系统... 30页 免费 1第一部分:入门 9页 2财富值 基础1 暂无评价 65页 免费 基础1 暂无评价 4页 免费喜欢...
zigbee协议无线通信的实现
ZIGBEE2006协议栈为应用开发提供了程序框架,就象使用VC++一样,我们只须关心应用 的建立。先让我们认识一下ZIGBEE2006协议栈,打开协议栈,在工程文件的左边Workspace ...
Zigbee技术规范与协议栈分析
本文通过对最典型的、 起到承上启下作用的 Zigbee-2006 协议栈的解读, 对协议程序的运行过程提供一种准确的解释分析, 降低开发者的阅读难度和工作 量,为协议栈...
比较ZigBee各版本规范
第一个 ZigBee 协议栈规范于 2004 年 12 月正式生效,称为 ZigBee 1.0 或 ZigBee 2004。 第二个 ZigBee 协议栈规范于 2006 年 12 月发布, 称为 ZigBee ...
zigbee2006中断处理
#endif 这里定义了在不同编译环境下的终端函数, 我们可以看出 ZigBee2006 协议栈仅支持 IAR 和 Keil 两种编译环境,其他的编译器会当做未识别的编译器并报错("...
更多相关标签:
zigbee协议栈 | zigbee协议栈详解 | zigbee协议栈有哪些 | zigbee协议栈结构图 | zigbee协议栈中文说明 | zigbee协议栈工作原理 | zigbee开源协议栈 | 开源zigbee3.0协议栈 |