Zigbee协议栈中文说明免费.docx
《Zigbee协议栈中文说明免费.docx》由会员分享,可在线阅读,更多相关《Zigbee协议栈中文说明免费.docx(34页珍藏版)》请在冰豆网上搜索。
![Zigbee协议栈中文说明免费.docx](https://file1.bdocx.com/fileroot1/2023-4/20/895ac5a5-b639-42ec-9296-2b87a22b173f/895ac5a5-b639-42ec-9296-2b87a22b173f1.gif)
Zigbee协议栈中文说明免费
1.概述
1.1解析ZigBee堆栈架构
ZigBee堆栈是在IEEE802.15.4标准基础上建立的,定义了协议的MAC和PHY层。
ZigBee设备应该包括IEEE802.15.4(该标准定义了RF射频以及与相邻设备之间的通信)的PHY和MAC层,以及ZigBee堆栈层:
网络层(NWK)、应用层和安全服务提供层。
图1-1给出了这些组件的概况。
1.1.1ZigBee堆栈层
每个ZigBee设备都与一个特定模板有关,可能是公共模板或私有模板。
这些模板定义了设备的应用环境、设备类型以及用于设备间通信的簇。
公共模板可以确保不同供应商的设备在相同应用领域中的互操作性。
设备是由模板定义的,并以应用对象(ApplicationObjects)的形式实现(见图1-1)。
每个应用对象通过一个端点连接到ZigBee堆栈的余下部分,它们都是器件中可寻址的组件。
图1-1zigbe堆栈框架
从应用角度看,通信的本质就是端点到端点的连接(例如,一个带开关组件的设备与带一个或多个灯组件的远端设备进行通信,目的是将这些灯点亮)。
端点之间的通信是通过称之为簇的数据结构实现的。
这些簇是应用对象之间共享信息所需的全部属性的容器,在特殊应用中使用的簇在模板中有定义。
图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.2802.15.4MAC层
IEEE802.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.4MAC通过服务接入点(SAP)进行通信。
SAP是某一特定层提供的服务与上层之间的接口。
ZigBee堆栈的大多数层有两个接口:
数据实体接口和管理实体接口。
数据实体接口的目标是向上层提供所需的常规数据服务。
管理实体接口的目标是向上层提供访问内部层参数、配置和管理数据的机制。
1.1.4ZigBee的安全性
安全机制由安全服务提供层提供。
然而值得注意的是,系统的整体安全性是在模板级定义的,这意味着模板应该定义某一特定网络中应该实现何种类型的安全。
每一层(MAC、网络或应用层)都能被保护,为了降低存储要求,它们可以分享安全钥匙。
SSP是通过ZD0进行初始化和配置的,要求实现高级加密标准(AES)。
ZigBee规范定义了信任中心的用途。
信任中心是在网络中分配安全钥匙的一种令人信任的设备。
1.1.5ZigBee堆栈容量和ZigBee设备
根据ZigBee堆栈规定的所有功能和支持,我们很容易推测ZigBee堆栈实现需要用到设备中的大量存储器资源。
不过ZigBee规范定义了三种类型的设备,每种都有自己的功能要求:
ZigBee协调器是启动和配置网络的一种设备。
协调器可以保持间接寻址用的绑定表格,支持关联,同时还能设计信任中心和执行其它活动。
一个ZigBee网络只允许有一个ZigBee协调器。
ZigBee路由器是一种支持关联的设备,能够将消息转发到其它设备。
ZigBee网格或树型网络可以有多个ZigBee路由器。
ZigBee星型网络不支持ZigBee路由器。
ZigBee端终设备可以执行它的相关功能,并使用ZigBee网络到达其它需要与其通信的设备。
它的存储器容量要求最少。
然而需要特别注意的是,网络的特定架构会戏剧性地影响设备所需的资源。
NWK支持的网络拓扑有星型、树型和网格型。
在这几种网络拓扑中,星型网络对资源的要求最低。
ZigBee堆栈应该可以提供ZigBee规范要求的所有功能,因此制造商的重点工作是开发实际的应用。
为了更加容易实现,如果制造商使用某种公共模板,那么可用大多数现成的配置。
如果没有合适的公共模板,则可以充分利用其它模板已经做过的工作创建自己的模板。
ZigBee协议栈体系包含一系列的层元件,其中有IEEE802.15.42003标准中的MAC层和PHY层,当然也包括ZigBee组织设计的NWK层。
每个层的元件有其特定的服务功能。
本说明描述内容涉及ZigBee协议栈的各层元件,但侧重于描述最具实际和理论探讨性的APL应用层和NWK网络层。
图1-1为ZigBee栈结构框图。
2.APL应用层介绍
2.1.1应用层简介
如图2-1所示,ZigBee应用层由三个部分组成,APS子层、ZDO(包含ZDO管理平台)和制造商定义的应用对象。
图2-1zigbee协议堆栈分层结构
2.1.2应用层框架
ZigBee中的应用框架是为驻扎在ZigBee设备中的应用对象提供活动的环境。
最多可以定义240个相对独立的应用程序对象,且任何一个对象的端点编号都是从1到240。
此外还有两个附加的终端节点,为了APSDE-SAP的使用:
端点号0固定用于ZDO数据接口;另外一个端点255固定用于所有应用对象广播数据的数据接口功能。
端点241-254保留(留给未来扩展使用)。
2.1.2.1应用Profiles
应用profiles是一组统一的消息,消息格式和处理方法,允许开发者建立一个可以共同使用的分布式应用程序,这些应用是利用驻扎在独立设备中的应用实体来实现的。
这些应用profiles允许应用程序发送命令、请求数据和处理命令的请求。
2.1.2.2簇
簇标识符可用来区分不同的簇,簇标识符联系着从设备流出和向设备流入的数据。
在特殊的应用profiles范围内,簇标识符是唯一的。
2.1.3ZigBee设备对象
ZigBee设备对象(ZDO),描述了一个基本的功能函数,这个功能在应用对象、设备profile和APS之间提供了一个接口。
ZDO位于应用框架和应用支持子层之间。
它满足所有在ZigBee协议栈中应用操作的一般需要。
此外ZDO还有以下作用:
(1)初始化应用支持子层(APS),网络层(NWK),安全服务规范(SSS)。
(2)从终端应用集合中配置的信息来确定和执行安全管理、发现、网络管理、以及绑定管理。
ZDO描述了应用框架层中应用对象的公用接口以及控制设备和应用对象的网络功能。
在终端节点0,ZDO提供了与协议栈中与低一层连接的接口,如果是数据则通过APSDE-SAP,如果是控制信息则通过APSME-SAP。
ZDO的具体描述在2.5节。
2.1.3.1设备发现
设备发现是ZigBee设备为什么能发现其他设备的过程。
这有两种形式的设备发现请求:
IEEE地址请求和网络地址请求。
IEEE地址请求是单播到一个特殊的设备且假定网络地址已经知道。
网络地址请求是广播且携带一个已知的IEEE地址作为负载。
2.1.3.2服务发现
服务发现是为什么一个已知设备被其他设备发现的能力的过程。
服务发现通过在一个已知设备的每一个端点发送询问或通过使用一个匹配服务(广播或者单播)。
服务发现方便定义和使用各种描述来概述一个设备的能力。
服务发现信息在网络中也许被隐藏,在这种情况下,设备提供的特殊服务便可能不在操作发生的时候到达。
2.2ZigBee应用支持子层APS
APS提供了这样的接口:
在NWK层和APL层之间,从ZDO到供应商的应用对象的通用服务集。
这服务由两个实体实现:
APS数据实体(APSDE)和APS管理实体(APSME)。
(1)APSDE提供在同一个网络中的两个或者更多的应用实体之间的数据通信。
通过APSDE服务接入点(APSDE-SAP);
(2)APSME提供多种服务给应用对象,这些服务包含安全服务和绑定设备,并维护管理对象的数据库,也就是我们常说的AIB。
通过APSME服务接入点(APSME-SAP)。
2.2.1范围
这一小节描述了应用层部分提供的服务规范和生产商定义的应用对象与ZigBee设备对象之间的接口。
规范定义了允许应用对象传输数据的数据服务和提供绑定机制的管理服务。
另外,它还定义了应用支持子层的帧格式和帧类型。
如图2-2
图2-2zigbee帧格式
2.2.2目的
这小节的目的是定义ZigBee应用支持子层的功能。
该功能建立在两个基础之上,一是正确运行ZigBee网络层的驱动功能,二是制造商定义的应用对象所需要的功能。
2.2.3应用支持子层简介
应用支持子层给网络层和应用层通过ZigBee设备对象和制造商定义的应用对象使用的一组服务提供了接口,该接口提供了ZigBee设备对象和制造商定义的应用对象使用的一组服务。
通过两个实体提供这些服务:
数据服务和管理服务。
APS数据实体(APSDE)通过与之连接的SAP,即APSDE-SAP提供数据传输服务。
APS管理实体(APSME)通过与之连接的SAP,即APSME-SAP提供管理服务,并且维护一个管理实体数据库,即APS信息库(NIB)。
2.2.3.1应用支持子层的数据实体(APSDE)
APSDE向网络层提供数据服务,并且为ZDO和应用对象提供服务,完成两个或多个设备之间传输应用层PDU。
这些设备本身必须在同一个网络。
APSDU将提供如下服务:
生成应用层的协议数据单元(APDU):
APSDE将应用层协议数据单元(PDU)加上适当的协议帧头生成应用子层的协议数据单元(PDU)。
绑定:
两个设备服务和需求相匹配的能力。
一旦两个设备绑定了,APSDE将可以把从一个绑定设备接受到的信息传送给另一个设备。
组地址过滤:
提供了基于终点组成员的过滤组地址信息的能力。
可靠传输:
比从网络层仅仅通过端对端的传输增加了可靠性
拒绝重复:
提供传送的信息不会被重复接收
支持大批量的传输:
提供两个设备间顺序传输大批量的数据的能力。
碎片:
当消息的长度大于单个网络层帧时,可以分割并重组消息。
流控制:
APS提供避免传输消息淹没接收者的措施。
阻塞控制:
APS层使用“尽力”原则,提供措施避免传输消息淹没中间网络。
2.2.3.2应用支持子层的管理实体(APSME)
APSME应提供管理服务支持应用程序符合堆栈。
APSME应具有基于两个设备的服务和需求向匹配的能力。
该服务称为绑定服务,APSME应具有能力来构建和维护绑定表来存储这些信息。
另外,APSME应提供如下服务:
1应用层信息库管理:
读取与设置设备应用层信息库属性的能力
2安全:
与其他设备通过使用安全密钥建立可信关系的能力
2.2.4服务规范
应用支持子层为上层实体(NHLE)与网络层提供了一个接口。
APS层理论上包含一个管理实体称为APS层,管理实体(APSME)。
这个实体通过调用子层的管理函数来提供服务接口。
APSME还负责维护一个关于APS子层管理实体的数据库。
这是一个关于APS子层信息库(AIB)的数据库.图2-3描述了APS子层的构成和接口。
图2-3应用支持之层参考模型
APS子层通过两个服务指针(SAPs)提供两种服务。
APS数据服务通过APS子层数据实体服务指针SAP(APSDE-SAP),APS管理服务通过APS则层管理实体服务指针SAP(APSME-SAP).这两个服务通过NLDE-SAP和NLME-SAP接口(见3.2小节)提供了NHLE和网络层之间的接口。
网络层和APS子层之间的NLME-SAP接口只支持NLME-GET和NLME-SET原语,其他的NLME-SAP原语只可以通过ZDO实现(见2.5小节)。
除了这些外部接口以外,在APSME和APSDE之间还有一个内部的接口,支持APSME使用APS数据服务。
2.2.4.1APS数据服务
APS子层数据实体SAP(APSDE-SAP)支持在两个同等的应用实体之间传输应用协议数据单元。
表2-1列出了APSDE-SAP支持的原语。
每一个原语将在下面的小节论述。
2.2.4.1.1APSDE-DATA.request
该原语请求从本地NHLE向一个同等的NHLE实体传输NHLEPDU(ASDU)。
2.2.4.1.1.1服务原语的语法
该原语的语法如下:
APSDE-DATA_request
{
DstAddrMode
DSTAddress
DstEndpoint
Profiled
Clusterld
SrcEndpoint
asduLength
asdu
TxOpionts
RadiusCounter
}
表2.2详细说明了APSDE-DATA.request原语的参数。
2.2.4.1.1.2产生
当有一个数据PDU(ASDU)由本地NHLE向一个同等的NHLE传输时,由本地NHLE生成该原语。
2.2.4.1.1.32
当APS子层实体接收到该原语时,便开始传输提供的ASDU。
如果DstAddrMode参数为0x00,并且接收该原语的设备的APSDE支持绑定表,那么在绑定表中根据参数SrcEndpoint和ClusterId所指定的endpoint和clusteridentifiers寻找相关联的绑定表入口。
如果没有绑定表入口,APSDE将发送状态参数为NO_BOUND_DEVICE的语APSDE-DATA.confirm原语。
如果找到了一个或多个绑定表入口,APSDE将构建APDU,其endpoint信息从绑定表入口获得,当通过网络层传输信息帧时,其destinationaddress信息从绑定表入口获得。
如果存在多于一个绑定表入口,当接收到相应的NLDE-DATA.confirm原语,按上面描述的,APSDE将构建并向下一个绑定表入口传输APDU,直到没有绑定表入口剩余。
如果接收到该原语设备的APSDE不支持绑定表,那么APSDE将发送状态参数为NOT_SUPPORTED的APSDE-DATA.confirm原语。
如果DstAddrMode参数为0x02,DstAddress参数包含扩展的64位IEEE地址,首次必须使用NIB(见表2.24)属性中的nwkAddressMap映射相应的16位网络地址。
如果找不到相应的16位网络地址,那么APSDE将发送状态参数为NO_SHORT_ADDRESS的APSDE-DATA.confirm原语。
如果找到了相应的16位网络地址,其值将被用在NLDE-DATA.request原语中,参数DstEndpoint将被置在作为结果的APDU中。
如果DstAddrMode参数为0x01,表明为群地址,参数DstAddress将被解释为16位的全地址。
这个地址将被放置在APS头中的群地址域,参数DstEndpoint将被忽略,APS头中的destinationendpoint域将被省略。
APS头中的帧控制域的deliverymode子域值在这种情况下为0x03.
如果DstAddrMode参数为0x02,DstAddress参数包含16位的网络地址,并且提供参数DstEndpoint,当目的网络地址用于应用响应,并且网络地址部位后面的数据传输请求保留时,上层只能使用DstAddrMode为0x02.
应用程序可以通过使用参数RadiusCounter来限制在网络中传输数据帧的跳数。
如果参数RadiusCounter为0x00,网络层在网络中传输信息帧没有约束。
如果参数RadiusCounter为非零,则网络层将允许信息帧在网络中传输存在最多RadiusCounter跳。
如果DstAddrMode参数为0x01,表明为群地址,或者DstAddrMode参数为0x00,并且相应的绑定表入口包含哪一个群地址,那么APSME将检查NIB(见表3.42)中的属性nwkUseMulticast值。
如果属性值为FALSE,那么输出帧的帧控制域中的deliverymode子域设为0b11,16位的目的群地址将设置输出帧APS头中的groupaddress域,该帧将以广播方式传输。
传输该帧的原语NLDE-DATA.request的DstAddr参数设置为值0xfffd,广播给所有RxOnWhenIdle=TRUE的设备。
如果属性nwkUseMulticast值为TRUE,那么该帧将使用网络层多点传送方式传输,群地址不用放置在输出帧的APS头中。
如果参数TxOptions指定使用安全传输,则APS子层将使用安全服务为ASDU提供安全(见4.2.4小节)。
如果安全处理失败,则APSDE发送状态参数为SECURITY_FAIL的APSDE-DATA.confirm原语。
APSDE使用NLDE-DATA.request原语向网络层传输构造帧。
当接收到NLDE-DATA.confirm原语,APSDE则发送APSDE-DATA.confirm原语,其状态参数值域从网络层接收到的一致。
APSDE通过每次发送使NLDE-DATA.request原语的DiscoverRoute参数值为0x01确保网络层中的路由发现始终激活。
如果传输的ASDU大于合适的单个帧,当没有请求确认传输或者在TxOptions域的fragmentationpermitted标志位设为0时,则放弃传输ASDU,APSDE将发送状态参数为INVALID_REQUEST的APSDE-DATA.confirm原语。
如果传输的ASDU大于合适的单个帧,当请求确认传输并且在TxOptions域的fragmentationpermitted标志位设为1时,ASDU将按照2.2.8.3.5小节所述分裂为多个APDU。
如果请求传输和安全处理,那么每一个APDU都要进行处理。
注意不要使用分裂处理,除非相应的上层文件或者相互明确表明帧的传输允许分裂处理,并且说明了块的数量和总共传输的大小。
2.2.4.1.2APSDE-DATA.confirm
该原语报告从本地NHLE向一个同等的NHLE传输PDU数据的结果。
2.2.4.1.2.1服务原语的语法
该原语的语法如下:
APSDE-DATA.confirm{
DstAddMode
DstAddress
DstEndpoint
SrcEndpoint
Status
}
表2.3详细介绍了APSDE-DATA.confirm原语的参数。
2.2.4.1.2.2产生
该原语有本地APS子层产生作为对APSDE-DATA.request原语的响应。
该原语返回的状态参数值为SUCCESS,表明请求传输成功,或者为错误代码NO_SHORT_ADDRESS,NO_BOUND_DEVICE或SECURITY_FAIL或者为任何NLDE-DATA.confirm原语返回的状态值。
这些状态值的路由在2.2.4.1.2小节中进行了详细的描述。
2.2.4.1.2.3接收
接收到该原语,发起设备的上层被通报请求传输的结果。
如果传输成功,状态参数值设置为SUCCESS。
否则,状态参数表明错误。
2.2.4.1.3APSDE-DATA.indication
该原语表明一个PDU数据向本地应用实体的APS子层传输。
2.2.4.1.3.1服务原语的语法
该原语的语法如下:
APSDE-DATA.indication
{
DstAddrMode
DSTAddress
DstEndpoint
SrcAddrMode
SARCAddress
SrcEndpoint
Profield
Clusterld
asduLength
asdu
WasBroadcast
SecurityStatus
LinkQuality
}
表2.4详细描述了APSDE-DATA.indication原语的参数。
1.3.2产生
该原语由APS子层产生,当从本地网络层实体接收到适当地址的数据帧时,APS子层向上层发送该原语。
如果ASDU头的帧控制域表明该帧安全保护,则按照4.2.4小节的描述进行安全处理。
该原语由APS子层产生,当通过NLDE-DATA.indication原语从网络层接收到适当地址的数据帧时,发送给上层实体。
如果APDU头的帧控制域表明该帧安全保护,则按照4.2.4小节的描述进行安全处理。
接收到的帧的源地址必须通过NIB(见表2.24)中的属性nwkAddressMap映射为相应的扩展的64位IEEE地址。
如果能找到相应的64为IEEE地址,则APSDE发送该原语,其参数SrcAddrMode设为0x02,SrcAddress参数设为相应的64位IEEE地址。
如果找不到相应的64位IEEE地址,APSDE将发送该原语,其参数SrcAddrMode设为0x01,参数SrcAddress设为接收帧包含的16位源地址。
2.2.4.1.3.3接收
接收到该原语,上层被通报有数据到达该设备。
2.2.4.2APS管理服务
APS管理实体SAP(APSME-SAP)支持上层和APSME层之间传输管理命令。
表2.5总结了APSME通过APSME-SAP接口支持的原语。
各原语的详细描述见下面小节。
2.2.4.3绑定原语
这组原语定义了设备上层如何将一个绑定记录加入(提交)其本地绑定表或将绑定记录从本地绑定表中移除。
只有支持绑定表或者绑定表存储器的设备支持这些原语。
如果其他设备从上层接收到这些原语,那么这些原语将被忽略。
2.2.4.3.1APSME-BIND.request
该原语允许支持绑定的设备上层通过在本地绑定表中建立一个入口请求将两个设备绑定。
2.2.4.6.1.1服务原语的语法
该原语的语法如下:
APSME-BIND.request{
SrcAddr
SrcEndpoint
Clusterld
DstAddrMode
DstAddr
DstEndpoint
}
表2.6详细描述了APSME-BIND.request原语的参数。
2.2.4.3.1.2产生
该原语由上层产生发送给APS子层,在支持绑定表的设备上发起绑定操作。
2.2.4.3.1.3接收
一旦被当前没有加入到网络或不支持绑定表的设备接收到该原语,那么APSME将发送状态参数为ILLEGAL_REQUEST的APSME-BIND.confirm原语。
如果支持绑定表的设备的APS子层从NHLE接收该原语,APSME将试图直接从其绑定表中建立指定的入口。
如果可以建立入口,APSME将发送状态参数为SUCCESS的APSME-BIND.confirm原语。
如果因为其绑定表缺乏能力而无法建立入口,APSME将发送状态参数为TABLE_