ZigBee协议栈
ZigBee堆栈是IEEE 802.15.4标准基础上建立的,定义了协议的MAC和PHY层。ZigBee设备应该包括IEEE802.15.4(该标准定义了RF射频以及与相邻设备之间的通信)的PHY与MAC层,以及ZigBee堆栈层:网络层(NWK)、应用层和安全服务提供层。
从应用的角度看,通信的本质就是端点到端点的连接。 端点之间的通信是通过称之为簇的数据结构实现的。这些簇是应用对象之间共享信息所需的全部属性的容器。 每个端口都能接收(用于输入)或发送(用于输出)簇格式的数据。一共有两个特殊的端点,即端点0和端点255。端点0用于整个ZigBee设备的配置和管理。应用程序通过端点0与ZigBee堆栈的其他层通信,从而实现对这些层的初始化和配置。负数在端点0的对象被称为ZigBee设备对象(ZDO)。端点255用于向所有端点的广播。端点241到254是保留端点。
ZigBee术语
1、属性
属性Attribute是一个反映物理数量或状态的数据值,比如开关值(On/Off) ,温度值、百分比等。
2、群集
群集Cluster是包含一个或多个属性(attribute)的群组。简单的说,群集就是属性的集合。每个群集都被分配一个唯一的群集ID 且每个群集最多有65536个属性。
3、设备描述
设备描述Device Description是指一个大型目标应用的一部分,包括一个或多个群集,并且指定群集是输入还是输出。
4、端点
端点EndPoint是协议栈应用层的入口,也可以理解应用对象(Application Object)存在的地方,它是为实现一个设备描述而定义的一组群集。每个ZigBee设备可以最多支持240这样的端点,这也意味着在每个设备上可以定义240个应用对象。端点0被保留用于与ZDO接口而端点255被保留用于广播,端点241-254则被保留用于将来做扩展使用。
5、配置文件
配置文件Profile可以理解为共同促成交互式应用的多个设备描述项的集合。 ZigBee联盟已经定义了部分标准的配置文件,比如远程控制开关配置文件和光传感器配置文件等。任何遵循某一标准配置文件的节点都可以与实现相同配置文件的节点进行互操作。用户也可以创建自己的配置文件然后递交ZigBee联盟测试、审核批准。
配置文件是对逻辑设备及其接口描述的集合,是面向某个应用类别的公约、准则。设备描述符是为分布应用提供的描述项,多种描述项共同组成描述集合Profile。定义Profile的目的就是使得不同厂商生产的ZigBee设备能够实现互操作。
6、节点
节点Node也可以理解为一个容器,包含一组ZigBee设备,分享一个无线信道。每个节点有且只有一个无线信道使用。
7、绑定(Binding)
ZigBee定义了一个称为端点绑定的特殊过程。绑定即在源节点的某个端点( EndPoint)和目标节点的某个端点之间创建一条逻辑链路。绑定可以发生在两个或多个设备之间。协调器节点维护一个基本上包括两个或多个端点之间的逻辑链路的绑定表。
在绑定表中,包含如下信息,源节点和目的节点的IEEE地址、Endpoint号以及ClusterID。对于可以建立绑定关系的两个节点,它们的Cluster的属性必须一个选择“输入”,另一个选择“输出”,而且ClusterID值相等,只有这样,它们彼此才能建立绑定。如果目标设备的扩展地址是已知的,则调用zb_BindDeviceRequest( )函数可以创建一个绑定条目。
8、寻址(Addressing)
在ZigBee网络中,使用两种地址:
一种是64位的IEEE Address,也叫物理地址,64位地址在所有ZigBee设备之中是唯一,其中包含一个由IEEE分配、也是全球唯一的24位制造商特定组织标识符OUI(Organizationally Unique Identifier)。
另一种是16位的NWK Address即网络地址,当设备加入ZigBee网络时,从允许其加入的父设备上获取16位网络地址。该地址在ZigBee网络中唯一,用于数据传输和数据包路由。
在ZigBee中,数据包可以单点传送(unicast),多点传送(multicast)或者广播传送(broadcast),所以必须有地址模式参数。一个单点传送数据包只发送给一个设备,多点传送数据包则要传送给一组设备,而广播数据包则要发送给整个网络的所有节点。当应用程序需要将数据包发送给网络上的一组设备时,还可以使用组寻址方式(Group Addressing)。
802.15.4 MAC层
MAC层负责相邻设备间的单跳数据通信。他负责建立与网络的同步,支持关联和去关联以及MAC层安全:他能提供两个设备间的可靠连接。
ZigBee堆栈的大多数层有两个接口:数据实体接口和管理实体接口。数据实体接口的目标是向上层提供所需的常规数据服务。管理实体接口的目标是向上测提供访问内部层参数、配置和管理数据的机制。
ZigBee网络和树形网络可以有多个ZigBee路由器。ZigBee星型网络不支持ZigBee路由器。
NWK支持的网络拓扑有星型、树形和网格型。其中,星型网络对资源的要求最低。
ZDO ZigBee Device Object ZigBee设备对象
描述了一个基本的功能函数, 这个功能在应用对象、设备profile和APS之间提供了一个接口。ZDO位于应用框架和应用支持子层之间。它满足左右ZigBee协议栈中应用操作的一般需要。此外ZDO还有以下作用:
(1)初始化支持子层(APS),网络层(NWK),安全服务规范(SSS)。
(2)从终端应用集合中配置的信息来确定和执行安全管理、发现、网络管理、以及绑定管理。 ZDO描述了应用框架层中应用对象的公用接口以及控制设备和应用对象的网络功能。 在终端节点0,ZDO提供了与协议栈中与低一层连接的接口,如果是数据则通过APS数据实体(APSDE-SAP),如果是控制信息则通过APS管理实体(APSME-SAP)。
在ZigBee网络中两个设备之间通信的关键是同一一个profile。
端点:这是一个8位的域,描述了不同的应用程序,这些应用都是有单个无线电来维持的。端点0x00用来寻址设备profile,设备profile是每个ZigBee设备必须使用的;端点0xff用来寻址所有活动的端点(广播端点),且端点0xf1-0xfe保留。结果一个单独的物理ZigBee无线电能维持最多240个应用程序在端点0x01-0xf0.
1. 设备类型(Device Types)
在ZigBee网络中存在三种逻辑设备类型:Coordinator(协调器)、 Router(路由器)、End-Device(终端设备)。
ZigBee网络由一个Coordinator以及多个Router和多个End-Device组成。
1.1 Coordinator(协调器)
协调器负责启动整个网络。它也是网络的第一个设备。协调器选择一个信道和一个网络ID(也称之为PAN ID, 即Personal Area Network ID), 随后启动整个网络。
协调器也可以用来协助建立网络中安全层和应用层的绑定(bindings)。
注意,协调器的角色主要涉及网络的启动和配置。一旦这些都完成,协调器的工作就像一个路由器(或者消失go away)。由于ZigBee网络本身的分布特性,因此接下来整个网络的操作就不在以来协调器是否存在。
1.2 Router(路由器)
路由器的功能主要是:允许其他设备加入网络,多跳路由器和协助它自己的由电池供电的子终端设备的通讯。
通常,路由器希望是一直处于活动状态,因此它必须使用主电源供电。但是当使用树状网络模式时,允许路由器有间隔一定的周期操作一次,这样就可以使用电池给其供电。
1.3 End-Device(终端设备)
终端设备没有特定的维持网络结构的责任,他可以睡眠或者唤醒,因此他可以是一个电池供电设备。
通常,终端设备对存储空间(特别是RAM的需要)比较小。
注意:在Z-Stack1.4.1中一个设备的类型通常在编译的时候通过编译选项(ZDO_COORDINATOR 和 RTR_NWK)确定。所有的应用例子都提供独立的项目文件来编译每一种设备类型。
2. 寻址(Addressing)
ZigBee设备有两种类型的地址: 一、64位IEEE地址,即MAC地址,二、16位网络地址。
64位地址是全球唯一的地址,设备将在他的生命周期内一直拥有它。它通常有制造商或者被安装时设置。这些地址由IEEE来维护和分配。
16位网络地址是当设备加入网络后分配的。它在网络中是唯一的,用来在网络中鉴别设备和发送数据。
ZigBee使用分布式寻址方案来分配网络地址。这个方案保证在整个网络中所有分配的地址是唯一的,这点是必须的,
TI Z-Stack协议栈架构分析
.jpg)
协议栈定义通信硬件和软件在不同级如何协调工作。在网络通信领域,在每个协议层的实体们通过对信息打包与对等实体通信。在通信的发送方,用户需要传递的数据包按照从高层到低层的顺序依次通过各个协议层,每一层的实体按照最初预定消息格式向数据信息中加入自己的信息,比如每一层的头信息和校验等终抵达最低的物理层,变成数据位流,在物理连接间传递。在通信的接收方数据包依次向上通过协议栈,每一层的实体能够根据预定的格式准确的提取需要在本层处理的数据信息,最终用户应用程序得到最终的数据信息进行处理。
ZigBee无线网络的实现,是建立在ZigBee协议栈的基础上的,协议栈采用分层的结构协议分层的目的是为了使各层相对独立,每一层都提供一些服务,服务由协议定义,程序员只需关心与他的工作直接相关的那些层的协议,它们向高层提供服务,并由低层提供服务。
在ZigBee协议栈中,PHY、MAC层位于最低层,且与硬件相关;NWK、APS, APL层以及安全层建立在PHY和MAC层之上,并且完全与硬件无关。分层的结构脉络清晰、一目了然,给设计和调试带来极大的方便。
整个Z-Stack采用分层的软件结构,硬件抽象层(HAL)提供各种硬件模块的驱动,包括定时器Timer,通用I/O口GPIO,通用异步收发传输器UART,模数转换ADC的应用程序接口API,提供各种服务的扩展集。操作系统抽象层OSAL实现了一个易用的操作系统平台,通过时间片轮转函数实现任务调度,提供多任务处理机制。用户可以调用OSAL提供的相关API进行多任务编程,将自己的应用程序作为一个独立的任务来实现。
Z-stack OSAL API 介绍
OSAL层是与协议栈独立的,但是整个协议都要基于OS才能运行。OSAL提供如下服务和管理:信息管理、任务同步、时间管理、中断管理、任务管理、内存管理、电源管理以及非易失存储管理。
1、信息管理API
信息管理为任务间的信息交换或者外部处理事件(例如:中断服务程序或一个控制循环内的函数调用等)提供一种管理机制。包括允许任务分配或不分配信息缓存、发送命令信息到其他任务、接受应答信息等API函数。
2、同步任务API
该API允许一个任务等待某个事件的发生并返回等待期间的控制。该API的功能是为某个任务设置事件,一旦任何一个事件被设置就修改该任务。
3、时间管理API
该API允许定时器被内部(Z-Stack)任务和外部任务使用。该API提供开始和停止一个定时器的功能,这些定时器能用毫秒(ms)设置。
4、中断管理API
这些API是外部中断和任务的接口。这些API函数允许一个任务为每个中断分配指定服务程序。这些中断能被允许或禁止。在服务程序内,可为其他的任务设置事件。
5、任务管理API
该API用在管理OSAL中的任务,包括系统任务和用户自定义任务的创建、管理和信息处理等。
6、内存管理API
该API描绘了简单的存储分配系统。这些函数允许动态存储分配。
7、电源管理API
这里描写了OSAL的电源管理系统。当OSAL安全地关闭接收器与外部硬件并使处理器进入休眠模式时,该系统提供向应用/任务通告该事务的方式。