ZigBee的应用层.docx
《ZigBee的应用层.docx》由会员分享,可在线阅读,更多相关《ZigBee的应用层.docx(35页珍藏版)》请在冰豆网上搜索。
ZigBee的应用层
ZigBee的应用层协议格式
本篇内容
●ZigBee协议应用层的概述;
●主讲应用层(APL)下的应用支持子层(APS)规范;
1、概述
ZigeBee协议栈结构是在IEEE802.15.4标准基础上建立的,而该标准定义了协议的MAC和PHY层。
ZigBee设备应该包括IEEE802.15.4的PHY层和MAC层、以及ZigBee堆栈层:
网络层(NWK)、应用(APL)层和安全服务管理。
图1给出这些组件的关系结构。
图1ZigBee协议结构体系
应用层
ZigBee设备对象
(ZDO)
应用对象1
应用对象240
ZDO
公共接口
MAC层
(物理)PHY层
ZDO
管理
端点1
APSDE-SAP
端点240
APSDE-SAP
端点0
APSDE-SAP
APS安全管理
APS信息中间
响应信息
MLDE-SAP
MLDE-SAP
NWK层
网络层数据实体SAP
网络安全管理
网络层信息中间
路由管理
网络管理
MLDE-SAP
MLDE-SAP
PD-SAP
PD-SAP
2.4GHz
868/915Hz
安全管理
每个ZigBee设备都与一个特定模板有关,可能是公共模板或私有模板。
这些模板定义了设备的应用环境、设备类型以及用于设备简通信的串(或称簇).公共模板可以确保不同供应商的设备在相同应用领域中的互操作性。
设备是由模板定义的,并以应用对象(ApplicationObjects)的形式实现。
每个应用对象通过一个端口连接到ZigBee堆栈的余下部分,它们都是器件中可寻址的组件。
从应用的角度看,通信的本质就是端口到端口的连接(例如,一个带开关组件的设备与带一个或多个灯组件的设备进行通信,目的是点亮这些灯)。
端口之间的通信是通过簇的数据结构实现的。
这些簇是应用对象之间共享信息所需要的全部属性的容器,特殊应用中的簇在模板中有定义。
每个接口都能接收或发送簇格式的数据,一共有两个特殊的端口,即端口0和端口255.端口0用于整个ZigBee设备的配置和管理。
应用程序可以通过端口0与ZigBee堆栈的其他层通信,从而实现对这些层的初始化和配置。
附属在端口0的对象被称为ZigBee设备对象(ZDO)。
端口255用于向所有端口的广播。
端口241~254是保留端口。
所有端口都使用应用支持子层(APS)提供的服务。
APS通过网络层和安全服务提供层与端口相连接,并为数据传送、安全和绑定提供服务,因此能够适配不同单兼容的设备,如带灯的开关。
APS使用网络(NWK)层提供的服务。
NWK负责设备到设备的通信,并负责网络中设备初始化所包含的活动、消息路由和网络发现。
应用层可以通过ZigBee设备对象(ZDO)对网络层参数进行配置和访问。
再从图1中观察可以发现,ZigBee应用层框架包括应用支持子层(APS)、ZigBee设备对象(ZDO)和制造商所定义的应用对象。
1.1、应用支持子层(APS)
ZigBee协议栈中应用层(APL)的APS提供了在NWK层和APL层之间及从ZDO到供应商的应用对象的通用服务集的接口。
这种服务由两个实体APSDE和APSME实现。
1.2、ZigBee设备对象(ZDO)
ZDO代表着一个基本的功能函数类,这个功能在应用对象、设备模式与APS之间提供了一个接口。
ZDO位于应用框架与应用支持子层之间,它满足所有在ZigBee协议栈中应用操作的一般需要,具有以下作用:
●初始化应用支持子层(APS)、网络层(NWK)、安全服务规范(SSS);
●从终端应用中集合配置信息来确定和执行发现、安全管理、网络管理和绑定管理。
ZDO描述了应用框架层应用对象的公用接口以控制设备和应用对象的网络功能。
在终端端口0,ZDO提供了与协议栈中低一层相接的接口,如果是数据,则通过APSDE-SAP;如果是控制信息,则通过APSME-SAP。
在ZigBee协议栈的应用框架中,ZDO公用接口提供设备、发现、绑定、安全等功能的地址管理。
1.2.1、设备发现
设备发现,是一个ZigBee设备发现其他ZigBee设备的过程。
有两种形式的设备发送请求:
IEEE地址请求和网络地址请求。
IEEE地址请求是单播到一个特定的设备且假定网络地址已知;网络地址请求是广播且携带一个已知的IEEE地址作为数据负载。
1.2.2、服务发现
服务发现是一个已知设备被其他设备发现的过程。
服务发现通过在一个已知设备的每个端口发送查询或通过使用一个匹配服务功能(广播或单播)。
服务发现可方便定义和使用各种描述来概述一个设备的能力。
服务发现信息在网络中也许被隐藏,在这种情况下,设备提供的某种服务可能不好在发现操作时到达,致使服务可能无法访问。
1.2.3、制造商所定义的应用对象
运行在ZigBee协议栈上的应用程序实际就是厂商自定义的应用对象。
这些应用程序使用ZigBee联盟给出的并且批准的规范(Profile)进行开发并运行在端点1-240上。
2、应用支持子层(APS)
2.1、概述
ZigBee协议栈中应用层(APL)的APS提供了在NWK层和APL层之间及从ZDO到供应商的应用对象的通用服务集的接口。
这种服务由两个实体实现:
●APS数据实体(APSDE):
通过APSDE服务接入点(APSDE-SAP)实现;
●APS管理实体(APSME):
通过APSME服务接入点(APSME-SAP)实现。
2.2、APS数据实体APSDE
APSDE提供在同一个网络中的两个或者多个应用实体之间的数据通信,为NWK、ZDO和应用对象提供一个数据服务,使得应用程序的PDU在两个或多个设备之间传输,设备本身必须位于同一个网络。
APSDE提供的服务:
●发出应用层PDU(APDU):
APSDE会接收应用PDU,并通过增加合适协议开销发出一个APSPDU;
●绑定:
一旦两个设备绑定,APSDE就可以从一个绑定设备传输一个信息给第二个设备;
●组地址过滤:
提供了根据是否是终端组的成员过滤组地址信息的功能;
●可靠传输:
在NWK层采用端到端重试,增加了事件的可靠性;
●重复拒绝:
传输所提供的信息将不会被多次接收;
●分裂:
可以分裂和重组长于一个NWK层负载的信息。
2.3、APS管理实体APSME
APSME提供的功能包括维持绑定表及在绑定的设备之间传送消息。
绑定指的是基于两台设备的服务和需求将它们匹配地连接起来。
APSME提供的服务:
●绑定管理:
根据服务和需求一起匹配两个设备的功能;
●AIB管理:
在设备的AIB中获取并设置属性的功能;
●安全:
通过使用安全密钥与其他设备建立可信关系的功能;
●组管理:
提供了宣布多个设备共享一个地址,增加设备到组以及从组中移除设备的功能;
2.4、服务规范
APS子层提供了上层实体(NHLE)和NWK层之间的一个接口。
APS子层的APSME通过激发子层管理功能提供了服务接口,它还负责维护一个管理有关APS子层对象的数据库(AIB)。
图2描绘了APS子层的组件和接口。
图2应用支持子层参考模型
APS子层的两种服务通过NLDE-SAP和(在有限范围内)NLME-SAP,提供了NHLE和NWK层之间的接口。
NWK层和APS子层之间的NLME-SAP接口只支持NLME-GET和NLME-SET原语;所有其它NLME-SAP原语只能通过ZDO访问。
除这些外部的接口,在APSME和APSDE之间还有一个隐藏接口,它允许APSME使用APS数据服务。
层与层间的通信方式如图3
Indication
Request
Request
Confirm
Confirm
图3request-confirm-indication
2.4.1、APS数据服务
APS子层数据实体SAP(APSDE-SAP)支持应用协议数据单元在对等应用实体之间的传输,表1列出了APSDE-SAP支持的原语。
表1APSDE-SAP原语
APSDE-SAP原语
请求
确认
指示
APSDE-DATA
APSDE-DATA.request
APSDE-DATA.confirm
APSDE-DATA.indication
Request-confirm原语执行的流程示意图见图4,各原语详细内容如下描述;
图4req-con流程
2.4.1.1、APSDE-DATA.request原语
该原语请求一个从本地NHLE到一个或多个对等NHLE实体传输一个NHLEPDU(ASDU);每当一个数据PDU(ASDU)要被传输给一个对等的NHLE时,该原语由一个本地的NHLE生成,并根据其参数进行不同形式的传输。
参数见表2
表2指明APSDE-DATA.request原语参数
名称
类型
有效范围
描述
DstAddrMode
Integer
0x00-0xff
使用目的地址以及传输APDU的寻址模式
0x00:
DstAddress和DstEndpoint不存在
0x01:
DstAddress16位组地址;DstEndpoint不存在;
0x02:
DstAddress和DstEndpoint都存在,是16位组地址;
0x03:
DstAddress16和DstEndpoint都存在,是64位扩展地址;
0x04-0xff保留;
DstAddress
Address
通过DstAddrMode
参数指定
ASDU要被传输到的实体的单独的设备地址或者组地址
DstEndpoint
Integer
0x00-0xf0,0xff
当且仅当DstAddrMode参数的值为0x02/0x03时,该参数才存在,此时该参数或者ASDU要被传输到的实体的单独个端点的编号,或者是广播端点(0xff)
Profiled
Integer
0x0000-0xffff
帧要被送到的profilede标识符
ClusterId
Integer
0x0000-0xffff
帧要被送到的对象的标识符
SrcEndpoint
Integer
0x00-0xf0
被传输的ASDU来自的实体的单个端点
ASDULength
Integer
0x00-256*(NSDULength-
apscMinHeaderOverhead)
构成被传输的ASDU的字节数,单负载的最大长度由NSDULength-
apscMinheaderOverhead给定。
如果分段,用256个这样的块组成单个最大的ASDU
ASDU
Setofoctets
-
组成被传输的ASDU的字节集合
TxOption
Bitmap
00000xxx(x为0/1)
被传输的ASDU的传输选项:
0x01:
启用安全传输
0x02:
使用密钥传输
0x04:
确认传输
0x08:
允许分段
Radius
Unsignedinteger
0x00-0xff
允许一个被传输的帧通过网络进行传输的距离量,以跳为单位
2.4.1.2、APSDE-DATA.confirm原语
该原语报告请求从一个本地NHLE传输一个数据PDU(ASDU)到一个对等NHLE的结果。
它由本地APS子层实体在响应一个APSDE-DATA.request原语时产生。
当返回的状态参数值为SUCCESS,表明请求传输成功,或者为错误代码NO_SHORT_ADDRESS,
NO_BOUND_DEVICE或SECURITY_FAIL或者为任何NLDE-DATA.confirm原语返回
的状态值。
参数见表3
表3APSDE-DATA.confirm原语的参数
名称
类型
有效范围
描述
DstAddrMode
Integer
0x00-0xff
使用目的地址以及传输APDU的寻址模式
0x00:
DstAddress和DstEndpoint不存在
0x01:
DstAddress16位组地址;DstEndpoint不存在;
0x02:
DstAddress和DstEndpoint都存在,是16位组地址;
0x03:
DstAddress16和DstEndpoint都存在,是64位扩展地址;
0x04-0xff保留;
DstAddress
Address
通过DstAddrMode
参数来指定
ASDU要被传输到实体的单个设备的地址或组地址
DstEndpoint
Integer
0x00-0xf0,0xff
当且仅当DstAddrMode参数的值为0x02/0x03时,该参数才存在,此时,该参数是APDU要被传输到实体的单个端点的编号;
SrcEndpoint
Integer
0x00-0xf0
ASDU要被传输到的实体的单个端点
Status
Enumeration
SUCCESS,NO_ACK,
NO_SHORT_ADDRESS,NO_BOUND_DEVICE,
ASDU_TOO_LONG,SECURITY_FALL以及从NLDE-DATA.confirm原语返回的任何状态返回值
相应的请求状态
TxTime
Integer
具体执行
对基于本地时钟的传输包的时间指示,如NWK层所提供的那样
Indication原语执行的流程示意图见图5,原语详细内容见如下描述;
图5indication原语流程
2.4.1.3、APSDE-DATA.indication原语
本原语表示从APS子层传输一个数据PDU(ASDU)到本地应用实体。
(参数说明见表4)当从本地网络层实体接收到适当地址的数据帧,或随后收到一个DstAddrMode为0x00且绑定表条目指示帧送到设备本身的APSDE-DATA.request时,该原语由APS子层产生并发送给上层。
如果ASDU头的帧控制域表明该帧安全保护,则执行相应的安全管理程序处理。
当从本地网络层实体接收到适当地址的数据帧时,该原语由APS子层产生,并通过NLDE-DATA.indication原语发给上层实体。
如果APDU头的帧控制域表明该帧安全保护,则执行相应的安全程序进行处理。
如果帧处理失败,APSDE设置状态参数为安全处理返回的安全错误代码。
如果帧未被保护或安全处理成功,APSDE必须检查帧是否被分段。
如果扩展头包含在APDU头中且扩展帧控制域的分段子域表示帧被分段,但是这个设备不支持分段,APSDE就设置状态参数为DEFRAG_UNSUPPORTED。
如果扩展头包含在APDU头中且扩展帧控制域的分段子域表示帧被分段,且这个设备支持分段,但是当前不能重组该帧,APSDE就设置状态参数为DEFRAG_DEFERRED。
在其它所以情况下,APSDE设置状态参数为SUCCESS。
如果状态参数不设置为SUCCESS,APSDE设置ASDULength参数为0,ASDU参数为空字节集合。
APS子层实体必须通过使用NIB中的属性nwkAddressMap把接收到的帧的源地址映射为相应的扩展的64位IEEE地址。
如果能找到相应的64为IEEE地址,则APSDE发出该原语,其参数SrcAddrMode设为0x03,SrcAddress参数设为相应的64位IEEE地址。
如果找不到相应的64位IEEE地址,APSDE将发出该原语,其参数SrcAddrMode设为0x02,参数SrcAddress设为接收帧包含的16位源地址。
表4APSDE-DATA.indication原语参数
名称
类型
有效范围
描述
DstAddrMode
Integer
0x00-0xff
使用目的地址以及传输APDU的寻址模式
0x00:
保留
0x01:
DstAddress16位组地址;DstEndpoint不存在;
0x02:
DstAddress和DstEndpoint都存在,是16位组地址;
0x03-0xff保留;
DstAddress
Address
通过DstAddrMode
参数指定
ASDU要被传输到的实体的单独的设备地址或者组地址
DstEndpoint
Integer
0x00-0xf0
ASDU所针对的是本地实体上的目标端点
SrcAddrMode
Integer
0x00-0xff
使用目的地址以及传输APDU的寻址模式
0x00、0x01、0x04-0xff:
保留
0x02:
DstAddress和DstEndpoint都存在,是16位组地址;
0x03:
SrcAddress和SrcEndpoint都存在,是64位扩展地址
SrcAddress
Address
通过SrcAddrMode指定
来自收到的ASDU的实体的单个设备的地址或组地址
SrcEndpoint
Integer
0x00-0xf0
来自被传输的ASDU的实体的单个端点
Profiled
Integer
0x0000-0xffff
发起该帧的profilede标识符
ClusterId
Integer
0x0000-0xffff
接收对象的标识符
ASDULength
Integer
通过APSDE表示的ASDU包含的字节数
ASDU
Setofoctets
-
通过APSDE表示的ASDU包含的字节集合
Status
Enumeration
SUCCESS,
DEFRAG_DEFERRED
DEFRAG_UNSUPPO
RTED或者帧安全处理
返回的任何状态
输入帧处理的状态
SecurityStatus
Enumeration
UNSECURED,
SECURED_NWK_KEYSECURED_LINK_KEY
如果在没有任何安全情况下接收ASDU,返回UNSECURED
如果接收到的ASDU用网络密钥加密,返回SECURED_NWK_KEY
如果ASDU使用一个链接密钥加密,返回SECURED_LINK_KEY
LinkQuality
Integer
0x00-0xff
NLDE传送的链路质量指示
RxTime
Integer
具体执行
对基于本地时钟的传输包的时间指示,如NWK层所提供的那样
2.4.2、APS管理服务
APSME支持上层和APSME之间的管理命令的传输。
表5为APSME-SAP接口支持的原语。
并在下面的内容逐一介绍各原语。
表5APSME-SAP原语
名称
请求
指示
响应
确认
APSME-BIND
.request
.confirm
APSME-UNBIND
.request
.confirm
APSME-GET
.request
.confirm
APSME-SET
.request
.confirm
APSME-ADD-GROUP
.request
.confirm
APSME-REMOVE-GROUP
.request
.confirm
APSME-REMOVE-ALL-GROUP
.request
.confirm
2.4.2.1、绑定原语
这两组原语定义了设备的上层如何往其本地绑定表中增加/移除一个绑定记录。
原语执行的流程示意图见图6;
绑定:
APSME-BIND.request&APSME-BIND.confirm
移除绑定:
APSME-UNBIND.request&APSME-UNBIND.confirm
只有支持绑定表或绑定表缓存的设备可以处理这些原语,如果任何其他设备从其上层接收到这些原语,原语将会被丢弃。
图6BIND&UNBIND原语流程
(1)、APSME-BIND.request原语
本原语允许上层通过在其本地绑定表中创建一个实体,请求把两个设备绑定到一起,或绑定一个设备到某个组中。
由上层实体生成,发给APS子层,目的是在一个支持绑定表的设备上发起绑定操作。
参数说明见表6
表6APSME-BIND.request原语参数
名称
类型
有效范围
描述
SrcAddr
IEEE
Address
有效的64位IEEE地址
绑定目录的源IEEE地址
SrcEndpoint
Integer
0x00-0xff
绑定目录的源端点
ClusterId
Integer
0x0000-0xffff
将要绑定到目的设备上的cluster标识符
DstAddrMode
Integer
0x00-0xff
使用目的地址以及传输APDU的寻址模式
0x00、0x02、0x04-0xff:
保留
0x01:
DstAddress16位组地址;DstEndpoint不存在;
0x03:
DstAddress和DstEndpoint都存在,是64位扩展地址;
DstAddr
Address
通过DstAddrMode
参数指定
绑定目录的目的地址
DstEndpoint
Integer
0x00-0xf0,0xff
当DstAddrMode参数为0x03时存在,此时参数为绑定目录的目标端点
(2)、APSME-BIND.confirm原语
本原语允许上层被通知其直接或代理请求绑定两个设备,或绑定一个设备到某个组。
它由APSME生成,发给其NHLE以响应一个APSME-BIND.Request原语。
参数说明见表7
表7APSME-BIND.confirm原语参数
名称
类型
有效范围
描述
Status
Enumeration
SUCCESS
ILLEGAL_DEVICE
ILLEGAL_REQUEST
TABLE_FULL
NOT_SUPPORTED
绑定请求结果
其余参数见表6
(3)、APSME-UNBIND.request原语
与APSME-BIND.request原语比较操作基本相同,参数说明见表6;
(4)、APSME-UNBIND.confirm原语
与APSME-BIND.confirm原语比较不同在于返回的状态参数,参数说明见表 8;
表8APSME-UNBIND.confirm原语参数
名称
类型
有效范围
描述
Status
Enumeration
SUCCESS
ILLEGAL_DEVICE
ILLEGAL_REQUEST
ILLEGAL_BINDING
取消绑定请求的结果
其余参数参见表6
2.4.2.2、信息库维护
这两组原语定义了设备上层如何读取和写入AIB中的属性。
原语执行的流程示意图见图7
图7SET-GET原语流程图
(1)、APSME-GET.Request原语
该原语允许设备上层从AIB中读取。
由上层生成,发给其APSME,目的是从AIB中读取一个属性,APSME-GET.Request{AIBAttribute}//参数说明见表9;
表9信息库包含管理设备的APS层所要求的属性
属性
标识符
类型
有效范围
描述
Default
apsBindingTable
0xc1
Set
可变
设备绑定表目录当前集合
空集
apsDesignatedC
oordinator
0xc2
Bool
TRUE/FALSE
设备为协调器时为TRUE
FALSE
apsChannelMask
0xc3
IEEE802.15.4
信道掩码