当前位置:文档之家› ZigBee协议栈原理简介

ZigBee协议栈原理简介

第1章ZigBee协议栈原理

2007 年4 月,德州仪器推出业界领先的ZigBee 协议栈(Z-Stack)。Z-Stack 符合ZigBee2006 规范,支持多种平台,包括基于CC2420 收发器以及TI MSP430 超低功耗单片机的平台、CC2530 SOC 平台等。Z-Stack 包含了网状网络拓扑的几近于全功能的协议栈,在竞争激烈的ZigBee 领域占有很重要地位。

4.1 Zigbee

设备类型

在 ZigBee 网络中存在三种逻辑设备类型:Coordinator(协调器),Router(路由器)和End-Device(终端设备)。ZigBee 网络由一个Coordinator 以及多个Router 和多个End_Device组成。

下图是一个简单的ZigBee 网络示意图。其中黑色节点为Coordinator,红色节点为Router,

白色节点为End-Device。

1、Coordinator(协调器)

协调器负责启动整个网络。它也是网络的第一个设备。协调器选择一个信道和一个网络ID(也称之为PAN ID,即Personal Area Network ID),随后启动整个网络。协调器也可以用来协助建立网络中安全层和应用层的绑定(bindings)。

注意,协调器的角色主要涉及网络的启动和配置。一旦这些都完成后,协调器的工作就像一个路由器。

2、Router(路由器)

路由器的功能主要是:允许其他设备加入网络,多跳路由和协助它自己的由电池供电的子终端设备的通讯。通常,路由器希望是一直处于活动状态,因此它必须使用主电

源供电。但是当使用树型网络模式时,允许路由间隔一定的周期操作一次,这样就可以使用电池给其供电。

3、End-Device(终端设备)

终端设备没有特定的维持网络结构的责任,它可以睡眠或者唤醒,因此它可以是一个电池供电设备。通常,终端设备对存储空间(特别是RAM)的需要比较小。

注意:在Z-Stack 1.4.1 中一个设备的类型通常在编译的时候通过编译选项

(ZDO_COORDINATOR 和RTR_NWK)确定。所有的应用例子都提供独立的项目文件来

编译每一种设备类型。

栈配置(Stack Profile)

栈参数的集合需要被配置为一定的值,连同这些值在一起被称之为栈配置。ZigBee 联盟定义了这些由栈配置组成的栈参数。网络中的所有设备必须遵循同样的栈配置。为了促进互用性这个目标,ZigBee 联盟为ZigBee2006 规范定义了栈配置。所有遵循此栈配置的设备可以在其它开发商开发的遵循同样栈配置的网络中使用。

4.2 寻址(Addressing)

地址类型(Address types)

ZigBee 设备有两种类型的地址。一种是64 位IEEE 地址,即MAC 地址,另一种是16位网络地址。64 位地址是全球唯一的地址,设备将在它的生命周期中一直拥有它。它通常由制造商或者被安装时设置。这些地址由IEEE 来维护和分配。16位网络地址是当设备加入网络后分配的。它在网络中是唯一的,用来在网络中鉴别设备和发送或接收数据。

网络地址分配(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)剩下的地址空间。

如果开发人员想改变这些值,则需要完成以下几个步骤:

1)首先,你要保证这些参数新的赋值要合法。即,整个地址空间不能超过216,这就限制了参数能够设置的最大值。可以使用projects\ZStack\tools 文件夹下的CSkip.xls 文件来确认这些值是否合法。当在表格中输入了这些数据后,如果你的数据不合法的话就会出现错误信息。

2)当选择了合法的数据后,开发人员还要保证不再使用标准的栈配置,取而代之的是网络自定义栈配置( 例如:在nwk_globals.h文件中将STACK_PROFILE_ID 改为

NETWORK_SPECIFIC)。然后nwk_globals.h 文件中的MAX_DEPTH 参数将被设置为合适的值。

Z-Stack寻址(Addressing in Z-Stack)

为了向一个在ZigBee网络中的设备发送数据,应用程序通常使用AF_DataRequest()函

数。数据包将要发送给一个afAddrType_t(在ZComDef.h 中定义)类型的目标设备。

typedef struct

{

union

{

uint16 shortAddr;//16位网络短地址

} addr;

afAddrMode_t addrMode;

byte endPoint;

} afAddrType_t;

注意,除了网路地址之外,还要指定地址模式参数。目的地址模式可以设置为以下几个值:

typedef enum

{

afAddrNotPresent = AddrNotPresent,//地址未指定

afAddr16Bit = Addr16Bit, //16位网络地址

afAddrGroup = AddrGroup, //组地址

afAddrBroadcast = AddrBroadcast //广播地址

} afAddrMode_t;

因为在Zigbee 中,数据包可以单点传送(unicast),多点传送(multicast)或者广播传送,所以必须有地址模式参数。一个单点传送数据包只发送给一个设备,多点传送数据包则要传送给一组设备,而广播数据包则要发送给整个网络的所有节点。这个将在下面详细解释。

1、单点传送(Unicast)

Unicast是标准寻址模式,它将数据包发送给一个已经知道网络地址的网络设备。将afAddrMode设置为Addr16Bit并且在数据包中携带目标设备地址。

2、间接传送(Indirect)

当应用程序不知道数据包的目标设备在哪里的时候使用的模式。将模式设置为AddrNotPresent并且目标地址没有指定。取代它的是从发送设备的栈的绑定表中查找目标设备。这种特点称之为源绑定。当数据向下发送到达栈中,从绑定表中查找并且使用

该目标地址。这样,数据包将被处理成为一个标准的单点传送数据包。如果在绑定表中找到多个设备,则向每个设备都发送一个数据包的拷贝。

上一个版本的ZigBee(ZigBee04),有一个选项可以将绑定表保存在协调器(Coordinator)当中。发送设备将数据包发送给协调器,协调器查找它栈中的绑定表,然后将数据发送给最终的目标设备。这个附加的特性叫做协调器绑定(Coordinator Binding)。

3、广播传送(broadcast)

当应用程序需要将数据包发送给网络的每一个设备时,使用这种模式。地址模式设置为AddrBroadcast。目标地址可以设置为下面广播地址中的一种:

1) NWK_BROADCAST_SHORTADDR_DEVALL(0xFFFF)——数据包将被传送到网络上的所有设备,包括睡眠中的设备。对于睡眠中的设备,数据包将被保留在其父亲节点直到查询到它,或者消息超时(NWK_INDIRECT_MSG_TIMEOUT 在f8wConifg.cfg 中)。

2)NWK_BROADCAST_SHORTADDR_DEVRXON(0xFFFD)——数据包将被传送到网络上的所有在空闲时打开接收的设备(RXONWHENIDLE),也就是说,除了睡眠中的所有设备3)NWK_BROADCAST_SHORTADDR_DEVZCZR(0xFFFC)——数据包发送给所有的路由器,包括协调器。

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;

https://www.doczj.com/doc/8e13833001.html,[0] = 0; // This could be a human readable string

aps_AddGroup( SAMPLEAPP_ENDPOINT, &group );

重要设备地址(Important device adresses)

应用程序可能需要知道它的设备地址和父地址。使用下面的函数获取设备地址(在ZStack API 中定义):

● NLME_GetShortAddr()——返回本设备的16 位网络地址

● NLME_GetExtAddr()——返回本设备的64 位扩展地址

使用下面的函数获取该设备的父亲设备的地址:

● NLME_GetCoordShortAddr()——返回本设备的父亲设备的16 位网络地址

● NLME_GetCoordExtAddr()——返回本设备的父亲设备的64 位扩展地址

4.3 绑定(Binding)

绑定是一种两个(或者多个)应用设备之间信息流的控制机制。在ZigBee2006 发布版本中,它被称为资源绑定,所有的设备都必须执行绑定机制。

绑定允许应用程序发送一个数据包而不需要知道目标地址。APS层从它的绑定表中确定目标地址,然后将数据继续向目标应用或者目标组发送。

注意:在ZigBee的1.0 版本中,绑定表是保存在协调器(Coordinator 当中)。现在所有的

绑定记录都保存在发送信息的设备当中。

建立绑定表(Building a Binding Table)

有三种方法可以建立一个绑定表:

● Zigbee Device Object Bind Request——一个启动工具可以告诉设备创建一个绑定记录。

● Zigbee Device Object End Device Bind Request——两个设备可以告诉协调器它们想要建立一个绑定表记录。协调器来协调并在两个设备中创建绑定表记录。

● Device Application——一个设备上的应用程序建立或者管理一个绑定表。

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。

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

你应该注意到,所有的例程都有处理关键事件的函数(例如:在TransmitApp.c 中的TransmitApp_HandleKeys() 函数) 。这个函数调用

ZDApp_SendEndDeviceBindReq()(在ZDApp.c 中)。这个函数搜集所有终端节点的请求信息,然后调用ZDP_EndDeviceBindReq()函数将这些信息发送给协调器。

协调器调用函数ZDP_IncomingData()[DProfile.c 中]数接收这些信息,然后再调用ZDApp_ProcessEndDeviceBindReq () 【ZDObject.c 中】函数分析这些信息,最后调用ZDApp_EndDeviceBindReqCB 【ZDApp.c 中】函数,这个函数再调用

ZDO_MatchEndDeviceBind()【ZDObject.c 中】函数来处理这个请求。

当收到两个匹配的终端设备绑定请求,协调器在请求设备中启动创建源绑定记录的进程。假设在ZDO 终端设备中发现了匹配的请求,协调器将执行下面的步骤:

●发送一个解除绑定请求给第一个设备。这个终端设备锁定进程,这样解除绑定被首先发送以去掉一个已经存在的绑定记录。

●等待 ZDO 解除绑定的响应,如果响应的状态是ZDP_NO_ENTRY,则发送一个ZDO 绑定请求在源设备中创建一个绑定记录。如果状态是ZDP_SUCCESS,则继续前进到第一个设备的群ID。

●等待 ZDO 绑定响应,如果收到了,则继续前进到第一个设备的下一个群ID。、

●当地一个设备完成后,用同样的方法处理第二个设备。

●当第二个设备也完成之后,发送 ZDO 终端设备绑定请求消息给两个设备。

2、Device Application Binding Manager

另一种进入设备绑定记录的方式是应用自己管理绑定表。这就意味着应用程序需要通过调用下面的绑定管理函数在本地进入并且删除绑定记录:

● bindAddEntry()——在绑定表中增加一个记录

● bindRemoveEntry()——从绑定表中删除一个记录

● bindRomoveClusterIdFromList()——从一个存在的绑定表记录中删除一个群

ID

● bindAddClusterIdToList()——向一个已经存在的绑定记录中增加一个群ID

● bindRemoveDev()——删除所有地址引用的记录

● bindRemoveSrcDev()——删除所有源地址引用的记录

● bindUpdateAddr()——将记录更新为另一个地址

● bindFindExisting()——查找一个绑定表记录

● bindIsClusterIdInList()——在表记录中检查一个已经存在的群ID

● bindNumBoundTo()——拥有相同地址(源或者目的)的记录的个数

● bindNumEntries()——表中记录的个数

● bindCapacity()——最多允许的记录个数

● bindWriteNV()——在NV 中更新表

配置源绑定(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.4 路由(Routing)

概述(Overview)

路由对于应用层来说是完全透明的。应用程序只需简单的向下发送去往任何设备的数据到栈中,栈会负责寻找路径。这种方法,应用程序不知道操作是在一个多跳的网络当中的。

路由还能够自愈ZigBee 网络,如果某个无线连接断开了,路由功能又能自动寻找一条新的路径避开那个断开的网络连接。这就极大的提高了网络的可靠性,同时也是ZigBee网络的一个关键特性。

路由协议(Routing Protocol)

ZigBee 执行基于用于AODV专用网络的路由协议,简化后用于传感器网络。ZigBee 路由协议有助于网络环境有能力支持移动节点、连接失败和数据包丢失。

当路由器从它自身的应用程序或者别的设备那里收到一个单点发送的数据包,则网络层(NWK Layer)根据路由程序将它继续传递下去。如果目标节点是它相邻路由器中的一个,则数据包直接被传送给目标设备。否则,路由器将要检索它的路由表中与所要传送的数据包的目标地址相符合的记录。如果存在与目标地址相符合的活动路由记录,则数据包将被发送到存储在记录中的下一级地址中去。如果没有发现任何相关的路由记录,则路由器发起路径寻找,数据包存储在缓冲区中直到路径寻找结束。

ZigBee 终端节点不执行任何路由功能。终端节点要向任何一个设备传送数据包,它只需简单的将数据向上发送给它的父设备,由它的父设备以它自己的名义执行路由。同样的,任何一个设备要给终端节点发送数据,发起路由寻找,终端节的的父亲节点都已它的名义来回应。

注意ZigBee 地址分配方案使得对于任何一个目标设备,根据它的地址都可以得到一条路径。在Z-Stack 中,如果万一正常的路径寻找过程不能启动的话(通常由于缺少路由表空间),那么Z-Stack 拥有自动回退机制。

此外,在Z-Stack 中,执行的路由已经优化了路由表记录。通常,每一个目标设备都需要一条路由表记录。但是,通过把一定父亲节点记录与其子所有子结点的记录合并,这样既可以优化路径也可以不丧失任何功能。

ZigBee 路由器,包括协调器执行下面的路由函数:(i)路径发现和选择;(ii)路径保持维护;(iii)路径期满。

1、路径的发现和选择(Route Discovery and Selection)

路径发现是网络设备凭借网络相互协作发现和建立路径的一个过程。路由发现可以由任意一个路由设备发起,并且对于某个特定的目标设备一直执行。路径发现机制寻找源地址和目标地址之间的所有路径,并且试图选择可能的最好的路径。

路径选择就是选择出可能的最小成本的路径。每一个结点通常持有跟它所有邻接点的“连接开销(link costs)”。通常,连接开销的典型函数是接收到的信号的强度。沿着路径,求出所有连接的连接成本总和,便可以得到整个路径的“路径成本”。路由算法试图寻找到拥有最小路径成本的路径。

路径通过一系列的请求和回复数据包被发现。源设备通过向它的所有邻接节点广播一个路由请求数据包,来请求一个目标地址的路径。当一个节点接收到RREQ 数据包,它依次转发RREQ 数据包。但是在转发之前,它要加上最新的连接成本,然后更新RREQ 数据包中的成本值。这样,沿着所有它通过的连接,RREQ 数据包携带着连接成本的总和。这个过程一直持续到RREQ 数据包到达目标设备。通过不同的路由器,许多RREQ 副本都将到达目标设备。目标设备选择最好的RREQ 数据包,然后发回一个路径答复数据包(a Route Reply)RREP 给源设备。

RREP 数据包是一个单点发送数据包,它沿着中间节点的相反路径传送直到它到达原来发送请求的节点为止。

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

2、路径保持维护(Route maintenance)

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

3、路径期满(Route expiry)

路由表为已经建立连接路径的节点维护路径记录。如果在一定的时间周期内,没有数据沿着这条路径发送,这条路径将被表示为期满。期满的路径一直保留到它所占用的空间要被使用为止。这样,路径在绝对不使用之前不会被删除掉的。在配置文件

f8wConfig.cfg中配置自动路径期满时间。设置ROUTE_EXPIRY_TIME 为期满时间,单位为秒。如果设置为0,则表示关闭自动期满功能。

表存储(Table storage)

路由功能需要路由器保持维护一些表格。

1、路由表(Routing table)

每一个路由器包括协调器都包含一个路由表。设备在路由表中保存数据包参与路由所需的信息。每一条路由表记录都包含有目的地址,下一级节点和连接状态。所有的数据包都通过相邻的一级节点发送到目的地址。同样,为了回收路由表空间,可以终止路由表中的那些已经无用的路径记录。

路由表的容量表明一个设备路由表拥有一个自由路由表记录或者说它已经有一个与目标地址相关的路由表记录。在文件“f8wConfig.cfg”中配置路由表的大小。将

MAX_RTG_ENTRIES 设置为表的大小(不能小于4)。

2、路径发现表(Route discovery table)

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

4.5 ZDO 消息请求(ZDO Message requests)

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

图4.2 ZDO IEEE 地址请求及应答

图4.3为一个应用程序想知道什么时候一个新的设备加入网络的例子。一个应用想要接收所有ZDO 设备的通知信息。

图4.3 ZDO Device Announce delivered to an application

4.6 便携式设备(Portable Devices)

在ZigBee2006中终端节点就是便携式的设备。这就意味着当一个终端节点没有侦听到它的父节点回应(超出范围或者无法胜任),它将试着重新加入网络(加入到另一个新的父节点)。没有设置或者编译标志位来设置这个选项。

终端节点通过巡检(MAC数据请求)失败或者通过数据消息失败侦听它的父亲节点都没有回应。MAX_POLL_FAILURE_RETRIES 用来控制失败重传次数。这个值可以在

f8wConfig.cfg 文件中修改。并且,这个值越大敏感度就越低,重新加入网络需要的时间就更长。

当网络层侦测到它的父节点没有回应,它将调用ZDO_SynIndicationCB()函数,这个函数将启动重新加入。重新加入过程首先对已有的父亲节点进行孤点扫描

(orphan-scan),然后扫描潜在的父节点并且跟它的潜在父节点加入网络。

在一个安全网络中,假设设备都拥有一个钥匙,新的钥匙不用再分发给设备。

4.7端到端确认(End-to-end acknowledgements)

对于非广播消息,有两种基本的消息重试类型:端到端的确认(APS ACK)和单级确认(single hop acknowledgement)(MAC ACK)。MAC ACK 默认情况下是一直打开的,通常能够充分保证网络的高可靠性。为了提供附加的可靠性,同时使发送设备能够得到数据包已经被发送到目的地的确认,可以使用APS ACK。

APS acknowledgement 在APS 层完成,是从目标设备到源设备的一个消息确认系统。源设备将保留这个消息知道目标设备发送一个APS ACK 消息表明它已经收到了消息。对于每个发出的消息可以通过调用函数AF_DataRequest()的选项来使能/禁止来禁止这个功能。这个选项区域是一个位映射选项,对于将要发送的消息的选项区域或

AF_ACK_REQUEST 就可以使能APS ACK。消息重试(如果APS ACK 消息没有收到) 的次数和重试之间的时间间隔的配置项在f8wConfig.cfg 文件中。

APSC_MAX_FRAME_RETRIES 是APS 层在放弃发送数据之前,没有收到APS ACK 确认重新发送消息的次数。APSC_ACK_WAIT_DURATION_POLLED 是重新发送之间的时间间隔。

4.8 其他(Miscellaneous)

配置信道(Configuring channel)

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

配置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 函数。

最大有效载荷 (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保留。

离开网络(Leave Network)

ZDO 管理器执行函数“ ZDO_ProcessMgmtLeaveReq ”,这个函数提供对

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

如果一个子节点的父节点离开了网络,子节点依然存在于网络中。

尽管“NLME-LEAVE.request”原语提供了一些可选参数,但是ZigBee2006却限制了这些参数的使用。现在,在ZDO_ProcessMgmtLeaveReq 函数中使用的可选参数(“RemoveChildren”、“Rejion”and “Silent”)都应该使用默认值。如果改变这些值,将会发生不可预料的结果。

描述符(Descriptors)

ZigBee 网络中的所有设备都有一个描述符,用来描述设备类型和它的应用。这个信息可以被网络中的其他设备获取。

配置项在文件ZDOConfig.h 和ZDOConfig.c 中定义和创建。这两个文件还包含节点,电源描述符和默认用户描述符。确认改变这些描述符来定义你的网络。

非易失性存储项(Non-volatile Memory Items)

1、网络层非易失性存储器(Network Layer Non-Volatile Memory)

ZigBee 设备有许多状态信息需要被存储到非易失性存储空间中,这样能够让设备在意外复位或者断电的情况下复原。否则它将无法重新加入网络或者起到有效作用。

为了启用这个功能,需要包含NV_RESTORE 编译选项。注意,在一个真正的ZigBee 网络中,这个选项必须始终启用。关闭这个选项的功能也仅仅是在开发阶段使用。

ZDO层负责保存和恢复网络层最重要的信息,包括最基本的网络信息(Network Information Base NIB,管理网络所需要的最基本属性);子节点和父节点的列表;包含应用程序绑定表。此外,如果使用了安全功能,还要保存类似于帧个数这样信息。

当一个设备复位后重新启动,这类信息恢复到设备当中。如果设备重新启动,这些信息可以使设备重新恢复到网络当中。在ZDAPP_Init 中,函数NLME_RestoreFromNV()的调用指示网络层通过保存在NV 中的数据重新恢复网络。如果网络所需的NV 空间没有建立,这个函数的调用将同时初始化这部分NV 空间。

2、应用的非易失性存储器(Application Non-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。

4.9 安全(Security)

概述(Overview)

AES/CCM 安全算法是ZigBee 联盟以外的研究人员发明的,并且广泛应用于其他通讯协议之中。ZigBee 提供如下的安全特性:

●构造安全 (Infrastructure security)

●网络访问控制(Network access control)

●应用数据安全

配置(Configuration)

为了拥有一个安全的网络,首先所有的设备镜像的创建,必须将预处理标志位SECURE都置为1。在文件“f8wConfig.cfg”文件中可以找到。

接下来,必须选择一个默认的密码。这个可以通过“f8wConfig.cfg”文件中的DEFAULT_KEY 来设置。理论上,这个值设置为一个随机的128 位数据。

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

网络访问控制(Network access control)

在一个安全的网络中,当一个设备加入网络时会被告知一个信任中心(协调器)。协调器拥有允许设备保留在网络或者拒绝这个设备访问网络的选择权。

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

更新密码(Key Updates)

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

网络密码,此时,新的网络密码将被作为替代密码保存在所有网络设备中。一旦信任中心调用“ZDSecMgrSwitchNwkKey”,一个全网范围的广播将触发所有的网络设备使用替代密码。

Zigbee协议栈系统事件

系统常用事件处理函数: -按键事件 -接收消息事件 -网络状态改变事件 -绑定确认事件 -匹配响应事件 1、按键事件 Case KEY_CHANGE: 当有按键事件发生的时,调用按键事件处理函数Sample_HandleKeys()来处理按键事件。 在SampleApp例程中按键处理函数处理了以下2件事情 -如果按键1按下,将向网络中的其他设备发送LED闪烁命令 -如果按键2按下,检测组ID号为SAMPLEAPP_FLASH_GROUP的组是否已经注册。如果已经注册,调用aps_RemoveGroup()将其删除;如果没注册就在APS层注册

2、接收消息事件 Case:AF_INCOMING_MSG_CMD: 如果有接收消息事件发生,则调用函数SampleApp_MessageMSGCB(MSG)对接收的消息进行处理。一般的接收消息事件是通过用户自定义的端点输入簇和输出簇来处理的。 在LED闪烁命令的发送函数中的输出簇为SAMPLEAPP_FLASH_CLUSTERID,所以在接收消息事件的输入簇中为SAMPLEAPP_FLASH_CLUSTERID即收到LED闪烁命令

3、网络状态改变事件 Case:ZDO_STATE_CHANGE 当有网络状态改变事件发生后,会调用函数SampleApp_NwkState()来处理网络状态改变事件。在SampleApp例程中,网络状态改变事件主要处理了以下事件: -判断设备类型(区分协调器、路由节点、终端节点) -当协调器网络建立成功后或其他类型节点加入网络后点亮led1 -通过调用osal_start_timerEx()设置一个定时事件,当时间到达后启用用户自定义事件SampleApp_Send_PERIODIC_MSG_EVT 备注:在使用过程中这里的3种设备类型不是全选,写一个就可以了,其他的删除

ZigBee 协议架构

根据应用和市场需要定义了ZigBee 协议的分层架构,其协议的体系结构如图1 所示,其中物理层(physical layer,PHY)和媒介访问控制层(medium access control sub-layer,MAC)是由IEEE802.15.4-2003 标准定义的,在这个底层协议的基础上ZigBee 联盟定义了网络层(network layer,PHY)和应用层(application layer,APL)架构. 图1 zigbee协议栈体系结构 物理层规范 物理层定义了它与MAC 层之间的两个接口:数据服务接口PD-SAP 和管理服务接口PLME-SAP,其中PD-SAP 接口还为物理层提供了相应的数据服务,负责从无线物理信道上收发数据,而PLME-SAP 接口同时为物理层提供相应的管理服务,用于维护一个由物理层相关数据组成的数据库。物理层负责数据的调制、发送和接收、空闲信道评估(clear channel assessment,CCA)信道能量的监测(energy detect,ED)和链接质量指示(link quality indication,LQI)等。物理层帧结构由同步头、物理层帧头和物理层有效载荷三部分组成,如表1 所示。

同步头又包括32bit 的前同步码和8bit 的帧定界符,前同步码用来为数据收发提供码元或数据符号的同步;帧界定符用来标识同步域的结束及数据的开始。物理层帧头包括7bit 的帧长度和1bit 的预留位,帧长度定义了物理层净荷的字节数。物理层有效载荷就是MAC层的帧内容。 表一物理层帧格式 媒体接入控制层规范 MAC 层定义了它与网络层之间的接口,包括提供给网络层的数据服务接口MLDE-SAP 和管理服务接口MLME-SAP,同时提供了MAC 层数据服务和MAC 层管理服务。MAC层数据服务主要实现数据帧的传输;MAC 层管理服务主要负责媒介访问控制、差错控制等。 MAC 层主要功能包括以下几个方面: (1)ZigBee 协调器产生网络信标 (2)设备与信标同步 (3)支持节点加入或着退出操作 (4)信道接入方式采用免冲突载波检测多路访问(CSMA-CA)机制 (5)建立并维护保护时隙机制 (6)为设备提供安全支持 MAC 帧格式由三个基本部分组成:MAC 帧头、MAC 帧载荷和MAC 帧尾。不同类型的MAC 帧,其帧头和帧尾都是一样的,只是MAC 帧载荷有差别,通用MAC 帧格式如表2所示。 表二通用MAC帧格式 网络层规范 网络层定义了它与应用层之间的接口,包括提供给应用层的数据服务接口NLDE-SAP和管理服务接口NLME-SAP , 同时提供了网络层数据服务和网络层管理服务。网络层主要负责拓扑结构的建立和网络的维护,具体的功能如下:(1)初始化网络,即建立一个新的包含协调器、路由器和终端设备的网络(2)设备连接和断开时所采用的机制 (3)对一跳邻居节点的发现和相关节点信息的存储 (4)ZigBee 协调器和路由器为新加入节点分配短地址

Zigbee协议栈原理基础

1Zigbee协议栈相关概念 1.1近距离通信技术比较: 近距离无线通信技术有wifi、蓝牙、红外、zigbee,在无线传感网络中需求的网络通信恰是近距离需求的,故,四者均可用做无线传感网络的通信技术。而,其中(1)红外(infrared):能够包含的信息过少;频率低波衍射性不好只能视距通信;要求位置固定;点对点传输无法组网。(2)蓝牙(bluetooth):可移动,手机支持;通信距离10m;芯片价格贵;高功耗(3)wifi:高带宽;覆盖半径100m;高功耗;不能自组网;(4)zigbee:价格便宜;低功耗;自组网规模大。?????WSN中zigbee通信技术是最佳方案,但它连接公网需要有专门的网关转换→进一步学习stm32。 1.2协议栈 协议栈是网络中各层协议的总和,其形象的反映了一个网络中文件传输的过程:由上层协议到底层协议,再由底层协议到上层协议。 1.2.1Zigbee协议规范与zigbee协议栈 Zigbee各层协议中物理层(phy)、介质控制层(mac)规范由IEEE802.15.4规定,网络层(NWK)、应用层(apl)规范由zigbee联盟推出。Zigbee联盟推出的整套zigbee规范:2005年第一版ZigBeeSpecificationV1.0,zigbee2006,zigbee2007、zigbeepro zigbee协议栈:很多公司都有自主研发的协议栈,如TI公司的:RemoTI,Z-Stack,SimpliciTI、freakz、msstatePAN 等。 1.2.2z-stack协议栈与zigbee协议栈 z-stack协议栈与zigbee协议栈的关系:z-stack是zigbee协议栈的一种具体实现,或者说是TI公司读懂了zigbee 协议栈,自己用C语言编写了一个软件—---z-stack,是由全球几千名工程师共同开发的。ZStack-CC2530-2.3.1-1.4.0软件可与TI的SmartRF05平台协同工作,该平台包括MSP430超低功耗微控制器(MCU)、CC2520RF收发器以及CC2591距离扩展器,通信连接距离可达数公里。 Z-Stack中的很多关键的代码是以库文件的形式给出来,也就是我们只能用它们,而看不到它们的具体的实现。其中核心部分的代码都是编译好的,以库文件的形式给出的,比如安全模块,路由模块,和Mesh自组网模块。与z-stack 相比msstatePAN、freakz协议栈都是全部真正的开源的,它们的所有源代码我们都可以看到。但是由于它们没有大的商业公司的支持,开发升级方面,性能方面和z-stack相比差距很大,并没有实现商业应用,只是作为学术研究而已。 还可以配备TI的一个标准兼容或专有的网络协议栈(RemoTI,Z-Stack,或SimpliciTI)来简化开发,当网络节点要求不多在30个以内,通信距离500m-1000m时用simpliciti。 1.2.3IEEE802.15.4标准概述 IEEE802.15.4是一个低速率无线个人局域网(LowRateWirelessPersonalAreaNetworks,LR-WPAN)标准。定义了物理层(PHY)和介质访问控制层(MAC)。 LR-WPAN网络具有如下特点: ◆实现250kb/s,40kb/s,20kb/s三种传输速率。 ◆支持星型或者点对点两种网络拓扑结构。 ◆具有16位短地址或者64位扩展地址。 ◆支持冲突避免载波多路侦听技术(carriersensemultipleaccesswithcollisionavoidance,CSMA/CA)。(mac层) ◆用于可靠传输的全应答协议。(RTS-CTS) ◆低功耗。 ◆能量检测(EnergyDetection,ED)。 ◆链路质量指示(LinkQualityIndication,LQI)。 ◆在2.45GHz频带内定义了16个通道;在915MHz频带内定义了10个通道;在868MHz频带内定义了1个通道。 为了使供应商能够提供最低可能功耗的设备,IEEE(InstituteofElectricalandElectronicsEngineers,电气及电子工程师学会)定义了两种不同类型的设备:一种是完整功能设备(full.functionaldevice,FFD),另一种是简化功能设备

ZigBee协议栈OSAL介绍

讨论ZigBee协议栈的构成以及内部OSAL的工作机理。 ZigBee协议栈OSAL介绍 操作系统抽象层 OSAL常用术语: 1.资源(Resource):任何任务所占用的实体都叫资源,如变量、数组、结构体 2.共享资源(Shared Resource):两个或两个以上任务使用的资源,为防止破坏资源,任务在操作共享资源时是独占状态。 3.任务(Task):即线程,简单的程序的执行过程。任务设计时将问题尽可能分成多个任务,每个任务独立完成某项功能,同时赋予优先级、CPU寄存器和堆栈空间。一般一个任务设计为一个无限循环。 4.多任务运行(Muti-task Running):其实同一时刻只有一个任务运行。 5.内核(Kernel):内核负责管理各个任务。包括:分配CPU时间;任务调度;任务间的通信。 6.互斥(Mutual Exclusion):多任务通信最常用方法是共享数据结构。 保护共享资源常用的方法: 关中断; 使用测试并置位指令(T&S指令); 禁止任务切换; 使用信号量; 7.消息队列(Message Queue):用于任务间传递消息。 OSAL提供如下功能: 任务注册、初始化和启动; 任务间的同步、互斥; 中断处理; 储存器分配和管理; OSAL运行机理: OSAL就是一种支持多任务运行的系统资源分配机制。 OSAL是一种基于事件驱动的轮询式操作系统。、 void osal_start_system(void)是ZigBee协议栈的灵魂,不断的查看事件列表,如果有事件发生就调用相应的事件处理函数。 SYS_EVENT_MSG是一个事件集合,是由协议栈定义的事件,即系统强制事件(Mandatory Events),它的定义为: #define SYS_EVENT_MSG 0x8000; 它包含如下事件: AF_INCOMING_MSG_CMD 收到一个新的无线数据

2020年Zigbee协议栈中文说明免费

1.概述 1.1解析ZigBee堆栈架构 ZigBee堆栈是在IEEE 802.15.4标准基础上建立的,定义了协议的MAC和PHY层。ZigBee设备应该包括IEEE802.15.4(该标准定义了RF射频以及与相邻设备之间的通信)的PHY和MAC层,以及ZigBee堆栈层:网络层(NWK)、应用层和安全服务提供层。图1-1给出了这些组件的概况。 1.1.1ZigBee堆栈层 每个ZigBee设备都与一个特定模板有关,可能是公共模板或私有模板。这些模板定义了设备的应用环境、设备类型以及用于设备间通信的簇。公共模板可以确保不同供应商的设备在相同应用领域中的互操作性。 设备是由模板定义的,并以应用对象(Application Objects)的形式实现(见图1-1)。每个应用对象通过一个端点连接到ZigBee堆栈的余下部分,它们都是器件中可寻址的组件。 图1-1 zigbe堆栈框架 从应用角度看,通信的本质就是端点到端点的连接(例如,一个带开关组件的设备与带一个或多个灯组件的远端设备进行通信,目的是将这些灯点亮)。 端点之间的通信是通过称之为簇的数据结构实现的。这些簇是应用对象之间共享信息所需的全部属性的容器,在特殊应用中使用的簇在模板中有定义。图1-1-2就是设备及其接口的一个例子:

图1-1-2 每个接口都能接收(用于输入)或发送(用于输出)簇格式的数据。一共有二个特殊的端点,即端点0和端点255。端点0用于整个ZigBee设备的配置和管理。应用程序可以通过端点0与ZigBee 堆栈的其它层通信,从而实现对这些层的初始化和配置。附属在端点0的对象被称为ZigBee设备对象 (ZD0)。端点255用于向所有端点的广播。端点241到254是保留端点。 所有端点都使用应用支持子层(APS)提供的服务。APS通过网络层和安全服务提供层与端点相接,并为数据传送、安全和绑定提供服务,因此能够适配不同但兼容的设备,比如带灯的开关。APS使用网络层(NWK)提供的服务。NWK负责设备到设备的通信,并负责网络中设备初始化所包含的活动、消息路由和网络发现。应用层可以通过ZigBee设备对象(ZD0)对网络层参数进行配置和访问。 1.1.2 80 2.15.4 MAC层 IEEE 802.15.4标准为低速率无线个人域网(LR-WPAN)定义了OSI模型开始的两层。PHY层定义了无线射频应该具备的特征,它支持二种不同的射频信号,分别位于2450MHz波段和868/915MHz 波段。2450MHz波段射频可以提供250kbps的数据速率和16个不同的信道。868 /915MHz波段中,868MHz支持1个数据速率为20kbps的信道,915MHz支持10个数据速率为40kbps的信道。MAC层负责相邻设备间的单跳数据通信。它负责建立与网络的同步,支持关联和去关联以及MAC 层安全:它能提供二个设备之间的可靠链接。 1.1.3 关于服务接入点 ZigBee堆栈的不同层与802.15.4 MAC通过服务接入点(SAP)进行通信。SAP是某一特定层提供的服务与上层之间的接口。 ZigBee堆栈的大多数层有两个接口:数据实体接口和管理实体接口。数据实体接口的目标是向上层提供所需的常规数据服务。管理实体接口的目标是向上层提供访问内部层参数、配置和管理数据的机制。 1.1.4 ZigBee的安全性 安全机制由安全服务提供层提供。然而值得注意的是,系统的整体安全性是在模板级定义的,这意味着模板应该定义某一特定网络中应该实现何种类型的安全。 每一层(MAC、网络或应用层)都能被保护,为了降低存储要求,它们可以分享安全钥匙。SSP是通过ZD0进行初始化和配置的,要求实现高级加密标准(AES)。ZigBee规范定义了信任中心的用

从Zigbee协议栈底层添加自己的按键配置

本实验是基于ZStack-CC2530-2.5.1a版本的协议栈来进行实验的,整个实验需要改动 hal_board_cfg.h、hal_board_cfg.h、hal_key.c、hal_key.h和自己定义的Coordinator.c这5个文件。 注意:添加自己的按键时尽量不要修改协议栈里面的按键程序,自己另行添加即可。 1、hal_key.h 在/* Switches (keys) */下面添加自己的按键定义 #define HAL_KEY_SW_8 0x80 图1: ---------------------------------------------------------------------------------------- 2、hal_board_cfg.h 在/* S6 */ #define PUSH1_BV BV(1) #define PUSH1_SBIT P0_1 #if defined (HAL_BOARD_CC2530EB_REV17) #define PUSH1_POLARITY ACTIVE_LOW #elif defined (HAL_BOARD_CC2530EB_REV13) #define PUSH1_POLARITY ACTIVE_LOW #else #error Unknown Board Indentifier #endif 下面模仿/* S6 */下的程序定义自己的按键值: /* S8 */ #define PUSH8_BV BV(4)//修改 #define PUSH8_SBIT P0_4//修改 #if defined (HAL_BOARD_CC2530EB_REV17)

ZigBee测试与协议分析

ZigBee测试与协议分析 1 前言 ZigBee协议栈包括物理层协议(IEEE802.15.4)和上层软件协议(ZigBee 2007以及其他的ZigBee网络协议)。本文将从这两方面来了解这些协议,通过介绍如何捕获及如何理解关键参数,深层次剖析ZigBee技术。有了这些本质性的认识,对于分析解决无线产品应用问题,会有很大的帮助。 2 物理层分析 ZigBee的物理层为IEEE802.15.4标准所规定,定义了ZigBee底层的调制编码方式。这些规约大多是芯片设计者需要关心的,对于应用开发来说,更关心的是衡量一个芯片、一个射频系统性能的参数。在过去的文章中,已介绍了输出功率、接收灵敏度和链路预算等参数,这一讲将更深入地介绍一个调制质量的参数:EVM。EVM指的是误差向量(包括幅度和相位的矢量),表征在一个给定时刻理想无误差基准信号与实际发射信号的向量差,。从EVM参数中,可以了解到一个输出信号的幅度误差及相位误差。 EVM是衡量一个RF系统总体调制质量的指标,定义为信号星座图上测量信号与理想信号之间的误差,它用来表示发射器的调制精度,调制解调器、PA、混频器、收发器等对它都会有影响。EVM数据和眼图。 了解完这个参数之后,再看看实际测试中是如何获取EVM参数的。 ZigBee物理层的测试,在产品研发、生产和维护阶段,可以分别采用不同的仪器。 (1)产品研发阶段要测量EVM参数,需要使用带协议解析的频谱仪,最好是自带相应协议插件的仪器,可以使用安捷伦PXA N9030A频谱分析仪+8960B插件(选配了ZigBee分析插件)。这些仪器可以测试出ZigBee调制信号的星座图、实时数据和眼图等信息,在芯片级开发过程中,需要考量高频电容电感以及滤波器等的单个及组合性能,特别需要注意的是ZigBee信号的临道抑制参数,利用PXA N9030A的高分辨率,可以查看点频的带外信号,这些细节在更换射频器件供应商时,需要仔细测量,一般数字电路抄板比较容易,因为器件性能的影响不是很大,只要值和封装对了就可以,但是射频前端的设计上,即使原样的封装、容值和感值,供应商不一样,射频参数也是不一样的,板材的选用也极大地影响着阻抗匹配,因此复制和再开发都有较大难度。合格的测试工具,加上有质量保证的射频器件供应商资源,方能真正具备RF设计能力。安捷伦PXA N9030A频谱分析仪。 (2)批量生产阶段在批量生产中,不可能将实验室的研发测试仪器搬到工厂,因此,需要便携小巧的测试设备,这时可用罗德与斯瓦茨公司的热功率探头,如NRP-Z22,做一个2.4 GHz的输出功率测试,保证能够输出公差允许的功率信号即可,因为在生产中,射频器件的焊接不良、馈线连接头的接触不良,都会造成输出功率的下降甚至消失。需要注意的是,探头非常容易被静电损坏,必须要带上防静电手套进行操作,返修过程如需要经过德国,则时间长,经费也不便宜,不是很严重的损坏倒是可以在深圳维修中心处理。NRP-Z22。 (3)应用阶段在现场出现问题时,ZigBee节点已经安装到现场,不能逐一拆下来测试,并且周围的电磁环境也是没办法在单个节点上检测到,这时就需要手持式的频谱仪进行现场勘查了,例如安捷伦公司的N9912A手持式频谱仪。使用该频谱仪,可以完成无线系统设计初期的现场勘查工作,检测现场各个地点是否有异常电磁干扰,对于ZigBee来说,当然是检测是否有持续的WIFI信号干扰了。同时,更为详细的现场勘查,还包括在定点进行数据发送,预期覆盖点进行信号强度分析,以实地评估墙体等障碍物的信号衰减,在已经架设好的ZigBee网络中,也可以检测信号覆盖,数据通信是否正常等。N9912A。

zigbee协议栈代码主要名词解释

zigbee协议重要名词解释及英文缩写(转载)网络层功能: 1. 加入和退出网络 2. 申请安全结构 3. 路由管理 4. 在设备之间发现和维护路由 5. 发现邻设备 6. 储存邻设备信息 当适当的重新分配地址联合其他设备,ZIGBEE2006可以依赖于网络协调者建立一个新网络. ZIGBEE应用层由APS(应用支持)、AF(应用结构)、ZDO(ZIGBEE设备对象)和厂商自定义应用对象组成。 APS功能 1. 绑定维持工作台,定义一个两个合拢的设备进行比较建立他们的需要和服务。 2. 促进信息在设备之间的限制 3. 组地址定义,移除和过滤组地址消息 4. 地址映射来自于64位IEEE地址和16位网络地址 5. 分裂、重新组装和可靠数据传输 ZDO功能 1. 定义设备内部网络(ZigBee协调者和终端接点) 2. 开始和/或回答绑定请求 3. 在网络设备中建立一个网络安全关系 4. 在网络中发现设备和决定供给哪个应用服务 ZDO同样有责任在网络中发现设备和为他们提供应用服务。 1.1.4 网络拓扑 ZIGBEE网络层支持星状、树状和网状拓扑。在星状拓扑中网络受约束与单个设备,呼叫COORD。COORD有责任建立和维持在网络中发现的设备和其他所有设备,都知道的终端接点直接和COORD 通信。在网状和树状拓扑中,COORD有责任建立一个网络和选择几个关键网络参数,但是网络有有可能直接应用于ZigBee路由器。在树状网络中,利用分等级路由策略完成路由传输数据和控制消息直通网络。树状网络在802.15.4-2003中可以采用信标引导通信。网状网络将允许所有对等网络通信。ZIGBEE 路又将不能在网状网络中发射规则的IEEE802.15.4-2003信标。

一文读懂zigbee技术的协议原理

一文读懂zigbee技术的协议原理 一.前言 从今天开始,我们要正式开始进行zigbee相关的通信实验了,我所使用的协议栈是ZStack 是TI ZStack-CC2530-2.3.0-1.4.0版本,大家也可以从TI的官网上直接下载TI公司为cc2530写的协议栈代码,毕竟,我们作为初学者,应该先不要去深究协议栈是怎么用代码编写的,毕竟zigbee已经相当成熟了,我们应该先学会使用zigbee协议栈进行通信,并能应用于实际项目中,比如说智能家具,不知道大家是不是有同感,所以下面我就先给大家介绍一下zigbee通信的原理以及体系架构。 二.ZStack 体系架构 ZStack 的体系结构由称为层的各模块组成。每一层为其上层提供特定的服务:即由数据服务实体提供数据传输服务;管理实体提供所有的其他管理服务。每个服务实体通过相应的服务接入点(SAP) 为其上层提供一个接口,每个服务接入点通过服务原语来完成所对应的功能。 ZStack 根据IEEE 802.15.4 和ZigBee 标准分为物理层,介质接入控制层,网络层,应用层。物理层提供了基础的服务,数据传输和接收,网络层提供了各个节点连入的服务,是zigbee网络通信的关键,应用层是我们关注的重点,提供了应用的框架和ZDO。大家如果想了解体系结构的具体内容,可以自己去看说明文档,下面我给大家介绍一下zigbee 工作原理。 ZStack 采用操作系统的思想来构建,采用事件轮循机制,而且有一个专门的Timer2 来负责定时。从CC2530 工作开始,Timer2 周而复始地计时,有采集、发送、接收、显示…等任务要执行时就执行。当各层初始化之后,系统进入低功耗模式,当事件发生时,唤醒系统,开始进入中断处理事件,结束后继续进入低功耗模式。如果同时有几个事件发生,判断优先级,逐次处理事件。这种软件构架可以极大地降级系统的功耗。 整个ZStack 的主要工作流程,如图所示,大致分为以下6 步:(1) 关闭所有中断;(2) 芯

TI_zigbee协议栈结构分析应用

无线盛世《快速进入ZB世界》
Ver:1

进入Zigbee世界的准备工作
§ 首先,我们需具备一些硬件设备及平台。以下 我就罗列一下Zigbee开发基本工具: § 计算机:不管是设计电路还是编程开发都是离 不开它的。 § Zigbee开发板:对于初学者来说,Zigbee开发 板无疑是最佳选择。有了开发板,你可以在我 们成熟设计的基础上学习或者做自己的设计。 § Zigbee模块:集MCU,RF,天线设计于一体 的Zigbee模块。使用它,我们可省去设计天线 及IC周边电路设计的复杂工作。

进入Zigbee世界的准备工作
§ Zigbee仿真器:是集烧写程序、在线编程和在线仿真 功能于一身的开发过程工作中必不可少的开发工具。 编程器既能对CC243x芯片(其实包括TI产品中的CC 系列的大部分芯片)进行烧写程序(hex标准文件程序 ),也能对CC243x芯片进行在线编程和仿真,让我们 能方便地在线调试开发,从而大大地提高了开发效率 。 § Zigbee协议分析仪:ZigBee的设计开发者必不可少的 工具!ZigBee协议分析仪具有广泛的功能,包括:分 析以及解码在PHY、MAC、NETWORK/SECURITY、 APPLICATION FRAMEWORK、和APPLICATION PROFICES等各层协议上的信息包;显示出错的包以 及接入错误;指示触发包;在接收和登记过程中可连 续显示包。

进入Zigbee世界的准备工作
§ 再次,我们需要在将用于开发Zigbee的计 算机平台上安装这些软件: § Zigbee协议分析软件(sniffer) § 程序烧写软件(Flash Programmer) § IAR公司的EW8051 version 7.20I/W32 。

ZigBee协议架构

编号:_______________本资料为word版本,可以直接编辑和打印,感谢您的下载 ZigBee协议架构 甲方:___________________ 乙方:___________________ 日期:___________________

(application layer,APL )架构. 图1 zigbee协议栈体系结构 物理层规范 物理层定义了它与MAC层之间的两个接口:数据服务接口PD-SAP和管理服务接口PLME-SAP其中PD-SAP接口还为物理层提供了相应的数据服务,负责从无线物理信道上收发数据,而PLME-SAPg口同时为物理层提供相应的管理服务,用丁维护一个由物理层相关数据组成的数据库。物理层负责数据的调制、发送和接收、空闲信道评估(clear channel assessment,CCA)信道能量的监测(energy detect,ED )和链接质量指示(link quality indication , LQI)等。物理层帧结构由同步头、物理层帧头和物理层*效载荷三部分组成,如表1所示。 同步头乂包括32bit的前同步码和8bit的帧定界符,前同步码用来为数据收发提供码元或数据符号的同步;帧界定符用来标识同步域的结束及数据的开始。物理层帧头包括7bit的帧长度和1bit的预留位,帧长度定义了物理层净荷的字节数。物理层有效载荷就是MAC层的帧内容。 表一物理层帧格式

媒体接入控制层规范 MAC层定义了它与网络层之间的接口,包括提供给网络层的数据服务接口MLDE-SAFffi管理服务接口MLME-SAP同时提供了MAC层数据服务和MAC层管理服务。MA@数据服务主要实现数据帧的传输;MAC层管理服务主要负责媒介访问控制、差错控制等。 MAC层主要功能包括以下几个方面: (1) ZigBee协调器产生网络信标 (2) 设备与信标同步 (3) 支持节点加入或着退出操作 (4) 信道接入方式采用免冲突载波检测多路访问(CSMA-CA机制 (5) 建立并维护保护时隙机制 (6) 为设备提供安全支持 MAC帧格式由三个基本部分组成:MAC帧头、MAC帧载荷和MAC帧尾。不同类型的MAC帧,其帧头和帧尾都是一样的,只是MAC帧载荷有差别,通用MAC帧格式如表2所小。 表二通用MA#格式 网络层规范 网络层定义了它与应用层之间的接口 ,包括提供给应用层的数据服务接口 NLDE-SAP管理服务接口NLME-SAP,同时提供了网络层数据服务和网络层管理 服务。网络层主要负责拓扑结构的建立和网络的维护,具体的功能如下: (1) 初始化网络,即建立一个新的包含协调器、路由器和终端设备的网络 (2) 设备连接和断开时所采用的机制 (3) 对一跳邻居节点的发现和相关节点信息的存储 (4) ZigBee协调器和路由器为新加入节点分配短地址 (5)确保MAC正常工作,并且为应用层提供合适的服务接口 网络层帧结构包括网络层帧头(Network header, NHR和网络层载荷(Network payload,NPL)两部分,其中网络层帧头域由帧控制域、目的设备地址、源设备地址、广播半径和广播序列号等部分组成,通用网络帧的结构如表3所示。 表3通用网络层帧结构

ZigBee协议栈任务处理分析笔记

ZigBee协议栈任务处理分析笔记 ----(转载请注明出处774910349@https://www.doczj.com/doc/8e13833001.html,)Everhuai写于2011-11-17 弄了这么久ZigBee协议栈,今天终于有一点头绪了,基本上知道了整个系统任务怎么被添加,又是怎么被切换的一个过程。下面就简单讲一讲这部分内容。 首先看的当然是main()函数,不过这个函数不是今天的重点,里面有我添加的注释,先就一笔带过吧。 int main( void ) { // Turn off interrupts osal_int_disable( INTS_ALL );//关闭全局中断EA=0,初始化过程不响应任何中断 // Initialization for board related stuff such as LEDs HAL_BOARD_INIT();//配置了时钟、LED、串口 // Make sure supply voltage is high enough to run zmain_vdd_check();//检查电源电压 // Initialize stack memory zmain_ram_init();//初始化堆内存 // Initialize board I/O /初始化板子用到的IO口 InitBoard( OB_COLD ); // Initialze HAL drivers HalDriverInit();//初始化外设 // Initialize NV System //系统初始化 osal_nv_init( NULL ); // Initialize basic NV items//任务初始化 zgInit(); // Initialize the MAC ZMacInit(); // Determine the extended address //确定长地址 zmain_ext_addr(); #ifndef NONWK // Since the AF isn't a task, call it's initialization routine afInit(); #endif // Initialize the operating system osal_init_system(); //系统初始化

zigbee协议栈源码

竭诚为您提供优质文档/双击可除 zigbee协议栈源码 篇一:zigbeez-stack协议栈构架 zstack基础 1、zstack协议栈构架 zigbee协议栈就是将各个层定义的协议都集合在一起,以函数的形式实现,并给用户提供一些应用层api,供用户调用。协议栈体系分层架构与协议栈代码文件夹对应表如下:整个协议栈的构架,如图所示 app:应用层目录,这是用户创建各种不同工程的区域,在这个目录中包含了应用层的内容和这个项目的主要内容,在协议栈里面一般是以操作系统的任务实现的。 hal:硬件层目录,包含有与硬件相关的配置和驱动及操作函数。 mac:mac层目录,包含了mac层的参数配置文件及其mac的lib库的函数接口文件。 mt:监控调试层,主要用于调试目的,即实现通过串口调试各层,与各层进行直接交互。nwk:网络层目录,含网络层配置参数文件及网络层库的函数接口文件,aps层库的

函数接口。 osal:协议栈的操作系统。 profile:aF层目录,包含aF层处理函数文件。 security:安全层目录,安全层处理函数接口文件,比如加密函数等。 services:地址处理函数目录,包括着地址模式的定义及地址处理函数。 tools:工程配置目录,包括空间划分及zstack相关配置信息。 zdo:zdo目录。 zmac:mac层目录,包括mac层参数配置及mac层lib 库函数回调处理函数。zmain:主函数目录,包括入口函数main()及硬件配置文件。 output:输出文件目录,这个ew8051ide自动生成的。 2、zigbee20xx协议栈源码库结构分析 了解了zigbee20xx协议栈整个构架后,再来看看协议栈源码库结构是什么样的,各层的具体文件是什么,建立不同的项目、添加自己的应用层任务及处理函数需要修改什么文件。zigbee20xx协议栈zstack-1.4.2文件目录及说明如下: 打开smapleapp项目工程 先看app层:

Zigbee协议栈学习总结教学提纲

典型的智能家居网络总体结构图 智能家居系统模块整体框图

ZigBee是一种标准,该标准定义了短距离、低速率传输速率无线通讯所需要的一系列通信协议。基于ZigBee的无线网络所使用的工作频段为868MHz、915MHz和2.4GHz,最大数据传输速率为250Kbps。 ZigBee无线网络共分为5层:物理层(PHY),介质访问控制层(MAC),网络层(NWK),应用程序支持子层(APS),应用层(APL)。 总体而言,ZigBee技术有如下特点:高可靠性,低成本,低功耗,高安全性,低数据速率

Zigbee网络中的设备主要分为三种: 1,协调器,协调器节点负责发起并维护一个无线网络,识别网络中的设备加入网络,一个ZigBee 网络只允许有一个ZigBee 协调器; 2,路由器,路由器节点支撑网络链路结构,完成数据包的转发;。ZigBee 网格或树 型网络可以有多个ZigBee 路由器。ZigBee 星型网络不支持ZigBee 路由器。 3,终端节点,负责数据采集和可执行的网络动作。 从功能上,zigbee节点应由微控制器模块、存储器、无线收发模块、电源模块和其它外设功能模块组成。 ZigBee/IEEE802.15.4定义了两种类型的设备:它们是全功能设备(FFD,Full Function Device)和精减功能设备(RFD,Reduced Function Device)。FFD可以当作一个网络协调器或者一个普通的传感器节点,它可以和任何其他的设备通讯,传递由RFD发来的数据到其他设备,即充当了路由的功能。而RFD只能是传感器节点,它只能和FFD进行通讯,经过FFD可以将自己测得数据传送出去。在ZigBee网络中大多是这两种设备,网络中结点数理论上最多可达65,536个,可以组成三种类型网络:星型、网状型和树型。 星状网络由一个PAN 协调器和多个终端设备组成,只存在PAN 协调器与终端的通讯,终端设备间的通讯都需通过PAN 协调器的转发。 树状网络由一个协调器和一个或多个星状结构连接而成,设备除了能与自己的父节点或子节点进行点对点直接通讯外,其他只能通过树状路由完成消息传输。 网状网络是树状网络基础上实现的,与树状网络不同的是,它允许网络中所有具有路由功能的节点直接互连,由路由器中的路由表实现消息的网状路由。 星型,如果用星型网络的话,在房间内的节点是否能够穿墙,与房间外的协调器进行正常通信。

zigbee协议名词解释

zigbee协议重要名词解释及英文缩写(转载) 网络层功能: 1.加入和退出网络 2.申请安全结构 3.路由管理 4.在设备之间发现和维护路由 5.发现邻设备 6.储存邻设备信息 当适当的重新分配地址联合其他设备,ZIGBEE2006可以依赖于网络协调者建立一个新网络. ZIGBEE应用层由APS(应用支持)、AF(应用结构)、ZDO(ZIGBEE设备对象)和厂商自定义应用对象组成。 APS功能 1.绑定维持工作台,定义一个两个合拢的设备进行比较建立他们的需要和服务。 2.促进信息在设备之间的限制 3.组地址定义,移除和过滤组地址消息 4.地址映射来自于64位IEEE地址和16位网络地址 5.分裂、重新组装和可靠数据传输 ZDO功能 1.定义设备内部网络(ZigBee协调者和终端接点) 2.开始和/或回答绑定请求 3.在网络设备中建立一个网络安全关系 4.在网络中发现设备和决定供给哪个应用服务 ZDO同样有责任在网络中发现设备和为他们提供应用服务。 1.1.4网络拓扑 ZIGBEE网络层支持星状、树状和网状拓扑。在星状拓扑中网络受约束与单个设备,呼叫COORD。COORD有责任建立和维持在网络中发现的设备和其他所有设备,都知道的终端接点直接和COORD 通信。在网状和树状拓扑中,COORD有责任建立一个网络和选择几个关键网络参数,但是网络有有可能直接应用于ZigBee路由器。在树状网络中,利用分等级路由策略完成路由传输数据和控制消息直通网络。树状网络在802.15.4-2003中可以采用信标引导通信。网状网络将允许所有对等网络通信。ZIGBEE 路又将不能在网状网络中发射规则的IEEE802.15.4-2003信标。

1.ZigBee协议栈简介

1、ZigBee协议栈简介 本节内容仅仅是对ZigBee协议栈的一些大家必须理解清楚的概念进行简单的讲解,并没有对ZigBee协议栈的构成及工作原理进行详细的讨论。让刚接触ZigBee协议栈的朋友们对它有个初步的感性认识,有助于后面使用ZigBee协议栈进行真正的项目开发。 什么是ZigBee协议栈呢?它和ZigBee协议有什么关系呢 协议是一系列的通信标准,通信双方需要共同按照这一标准进行正常的数据发射和接收。协议栈是协议的具体实现形式,通俗点来理解就是协议栈是协议和用户之间的一个接口,开发人员通过使用协议栈来使用这个协议的,进而实现无线数据收发。 图1展示了ZigBee无线网络协议层的架构图。ZigBee的协议分为两部分,IEEE 802.15.4定义了PHY(物理层)和MAC(介质访问层)技术规范;ZigBee 联盟定义了NWK(网络层)、APS(应用程序支持子层)、APL(应用层)技术规范。ZigBee协议栈就是将各个层定义的协议都集合在一直,以函数的形式实现,并给用户提供API(应用层),用户可以直接调用。 图1 ZigBee无线网络协议层 在开发一个应用时,协议较底下的层与应用是相互独立的,它们可以从第三方来获得,因此我们需要做的就只是在应用层进行相应的改动。 介绍到这里,大家应该清楚协议和协议栈的关系了吧,是不是会想着怎么样才能用协议栈来开发自己的项目呢?技术总是不断地在发展地,我们可以用ZigBee厂商提供的协议栈软件来方便地使用ZigBee协议栈(注意:不同厂商提供的协议栈是有区别的,此处介绍TI推出的ZigBee 2007协议栈也称Z-Stack)。 Z-stack是挪威半导体公司Chipcon(目前已经被TI公司收购)推出其CC2430开发平台时,推出的一款业界领先的商业级协议栈软件,由于这个协议栈软件的出现,用户可以很容易地开发出具体的应用程序来,也就是大家说的掌

Zigbee协议栈原理基础

Zigbee协议栈原理基础

1Zigbee协议栈相关概念 1.1近距离通信技术比较: 近距离无线通信技术有wifi、蓝牙、红外、zigbee,在无线传感网络中需求的网络通信恰是近距离需求的,故,四者均可用做无线传感网络的通信技术。而,其中(1)红外(infrared):能够包含的信息过少;频率低波衍射性不好只能视距通信;要求位置固定;点对点传输无法组网。(2)蓝牙(bluetooth):可移动,手机支持;通信距离10m;芯片价格贵;高功耗(3)wifi:高带宽;覆盖半径100m;高功耗;不能自组网;(4)zigbee:价格便宜;低功耗;自组网规模大。?????WSN中zigbee通信技术是最佳方案,但它连接公网需要有专门的网关转换→进一步学习stm32。 1.2协议栈 协议栈是网络中各层协议的总和,其形象的反映了一个网络中文件传输的过程:由上层协议到底层协议,再由底层协议到上层协议。 1.2.1Zigbee协议规范与zigbee协议栈 Zigbee各层协议中物理层(phy)、介质控制层(mac)规范由IEEE802.15.4规定,网络层(NWK)、应用层(apl)规范由zigbee联盟推出。Zigbee联盟推出的整套zigbee规范:2005年第一版ZigBeeSpecificationV1.0,zigbee2006,zigbee2007、zigbeepro zigbee协议栈:很多公司都有自主研发的协议栈,如TI公司的:RemoTI,Z-Stack,SimpliciTI、freakz、msstatePAN 等。 1.2.2z-stack协议栈与zigbee协议栈 z-stack协议栈与zigbee协议栈的关系:z-stack是zigbee协议栈的一种具体实现,或者说是TI公司读懂了zigbee 协议栈,自己用C语言编写了一个软件—---z-stack,是由全球几千名工程师共同开发的。ZStack-CC2530-2.3.1-1.4.0软件可与TI的SmartRF05平台协同工作,该平台包括MSP430超低功耗微控制器(MCU)、CC2520RF收发器以及CC2591距离扩展器,通信连接距离可达数公里。 Z-Stack中的很多关键的代码是以库文件的形式给出来,也就是我们只能用它们,而看不到它们的具体的实现。其中核心部分的代码都是编译好的,以库文件的形式给出的,比如安全模块,路由模块,和Mesh自组网模块。与z-stack 相比msstatePAN、freakz协议栈都是全部真正的开源的,它们的所有源代码我们都可以看到。但是由于它们没有大的商业公司的支持,开发升级方面,性能方面和z-stack相比差距很大,并没有实现商业应用,只是作为学术研究而已。 还可以配备TI的一个标准兼容或专有的网络协议栈(RemoTI,Z-Stack,或SimpliciTI)来简化开发,当网络节点要求不多在30个以内,通信距离500m-1000m时用simpliciti。 1.2.3IEEE802.15.4标准概述 IEEE802.15.4是一个低速率无线个人局域网(LowRateWirelessPersonalAreaNetworks,LR-WPAN)标准。定义了物理层(PHY)和介质访问控制层(MAC)。 LR-WPAN网络具有如下特点: ◆实现250kb/s,40kb/s,20kb/s三种传输速率。 ◆支持星型或者点对点两种网络拓扑结构。 ◆具有16位短地址或者64位扩展地址。 ◆支持冲突避免载波多路侦听技术(carriersensemultipleaccesswithcollisionavoidance,CSMA/CA)。(mac层) ◆用于可靠传输的全应答协议。(RTS-CTS) ◆低功耗。 ◆能量检测(EnergyDetection,ED)。 ◆链路质量指示(LinkQualityIndication,LQI)。

相关主题
文本预览
相关文档 最新文档