ZigBee是一种新兴的短距离、低速率无线网络技术。具有成本低、体积小、能量消耗小和传输速率低等优势。
ZigBee是介于无线标识技术和蓝牙之间的一种技术,主要用于近距离无线连接。它有自己的无线电标准,在数千个微小的传感器之间互相协调实现通信。这些传感器只需要很少的能量,以接力的方式通过无线电波将数据从一个传感器传到另一个传感器,所以它们之间的通信效率非常高。
ZigBee是一组基于IEEE 802.15.4无线标准研制开发的有关组网、安全和应用软件方面的通信技术。IEEE 802.15.4是IEEE确定低速无线个人局域网的标准,这个标准定义了物理层(Physical Layer,PHY)和媒体接入控制层(Media Access Control Layer,MAC)。ZigBee联盟对其网络层(Network Layer)和应用层(Application Layer)进行了标准化。应用层的开发应用根据用户自己的应用需要,对其进行开发利用,因此该技术能够为用户提供机动、灵活的组网方式。
物理层定义物理无线信道和MAC层之间的接口,提供物理层数据服务和物理层管理服务。物理层数据服务是从无线物理信道上收发数据,物理层管理服务维护一个由物理层相关数据组成的数据库。IEEE 802.15.4定义了2.4 GHz和868/915 MHz两个物理层,它们基于直接序列扩频(Direct Sequence Spread Spectmm,DSSS)数据包格式,它们在工作频带、扩频参数、数据参数和适用区域等方面都存在着一定的差异。
ZigBee物理层分组结构:其中前导码4B,主要用于前导同步;分组定界1B,标志分组的开始;物理层头1B,表示数据单元的长度;数据单元用于承载传输数据。
IEEE802系列标准将数据链路层分成逻辑链路控制(L09 iocl Link Control,LLC)和媒介接入控制(Media Access Control,MAC)两个子层。其中,LLC子层在IEEE 802.6中定义为IEEE 802标准系列共用,而MAC子层协议依赖于各自的物理层。
IEEE 802.15.4的MAC层支持多种LLC标准,通过SSCS(Service-Speci6c Convergence Sub-layer)务相关会聚子层协议承载IEEE 802.2类型的LLC标准,且允许其他LLC标准直接使用IEEE 802.15.4MAC层的服务。
考虑到Zig Bee MAC层的设计应尽可能地降低成本、易于实现、数据传输可靠、短距离操作以及低功耗,因此采用了简单灵活的协议,其帧有4种类型:数据帧、标志帧、命令帧和确认帧。
ZigBee采用载波侦听多址/冲突(CSMA/CD)的信道接入方式和完全握手协议。
网络层(NWK)是位于MAC与应用层(APL)之间的一个协议层。网络层的任务是通过正确操作MAC层提供的功能来向应用层提供合适的服务接口。为了实现与应用层的通信,网络层定义了两个服务实体:数据服务实体(NLDE)和管理服务实体(NLME)。数据服务实体(NLDE)通过数据服务实体服务访问点(NLDE-SAP)来提供数据传输服务;管理服务实体(NLME)通过管理服务实体访问点(NLME-SAP)来提供管理服务。
在ZigBee协议中,网络层主要负责新建网络、接入网络、退出网络和网络报文的路由传输等功能。
根据设备所具有的通信能力,ZigBee网络中主要有两种无线设备,即全功能设备(Full-Function Device,FFD)和精简功能设备(Reduced-Function Device,RFD)。FFD之间及FFD和RFD之间都可以相互通信;但RFD只能与FFD通信,而不能与其他RFD通信。RFD主要用于简单的控制应用,传输的数据量较少,对传输资源和通信资源占用不多,可以采用相对廉价的实现方案,在网络结构中一般作为通信终端。FFD则需要功能相对较强的MCU,一般在网络结构中拥有网络控制和管理的功能。
从网络拓扑的角度来看,ZigBee设备主要有3种角色:网络协调者、网络路由器和网络终端设备。其中网络协调者主要负责网络的建立,以及网络的相关配置;路由器主要负责找寻、建立以及修复网络报文的路由信息,并负责转发网络报文;网络终端具有加入、退出网络的功能,并可以接收和发送网络报文,但终端设备不允许路由转发报文。通常协调者和路由器节点一般由FFD功能设备构成,终端设备由RFD设备组成。
ZigBee支持3种通信设备的网络拓扑,即星形(Star)网络、网状(Mesh)网络和簇状(Cluster Tree)网络。
Star网络是一种常用且适用于长期运行使用操作的网络;Mesh网络是一种高可靠性检测网络,它通过无线网络连接可提供多个数据通信通道,即它是一个高级别的冗余性网络,一旦设备数据通信发生故障,则存在另一个路径可供数据通信;Cluster Tree网络是Star/Mesh的混合型拓扑结构,结合了上述两种拓扑结构的优点。
网络初始化预备
Zigbee网络的建立是由网络协调器发起的,任何一个zigbee节点要组建一个网络必须要满足以下两点要求:
(1)节点是FFD节点,具备zigbee协调器的能力;
(2)节点还没有与其他网络连接,当节点已经与其他网络连接时,此节点只能作为该网络的子节点,因为一个zigbee网络中有且只有一个网络协调器。
FFD:Full FuncTIon Device 全功能节点
RFD:Reduced FuncTIonDevice 半功能节点
网络初始化流程
1、确定网络协调器:
首先判断节点是否是FFD节点,接着判断此FFD节点是否在其他网络里或者网络里是否已经存在协调器。通过主动扫描,发送一个信标请求命令(Beaconrequest command),然后设置一个扫描期限(T_scan_duraTIon),如果在扫描期限内都没有检测到信标,那么就认为FFD在其pos内没有协调器,那么此时就可以建立自己的zigbee网络,并且作为这个网络的协调器不断地产生信标并广播出去。
注意:一个网络里,有且只能有一个协调器(coordinator)。
2、进行信道扫描过程。
包括能量扫描和主动扫描两个过程:首先对指定的信道或者默认的信道进行能量检测,以避免可能的干扰。以递增的方式对所测量的能量自进行信道排序,抛弃那么些能量值超出了可允许能量水平的信道,选择可允许能量水平的信道并标注这些信道是可用信道。接着进行主动扫描,搜索节点通信半径内的网络信息。这些信息以信标帧的形式在网络中广播,节点通过主动信道扫描方式获得这些信标帧,然后根据这些信息,找到一个最好的、相对安静的信道,通过记录的结果,选择一个信道,该信道应存在最少的zigbee网络,最好是没有zigbee设备。在主动扫描期间,MAC层将丢弃PHY层数据服务接收到的除信标以外的所有帧。
3、设置网络ID。
找到合适的信道后,协调器将为网络选定一个网络标识符(PAN ID,取值《=0x3FFF),这个ID在所使用的信道中必须是唯一的,也不能和其他zigbee网络冲突,而且不能为广播地址0xFFFF(此地址为保留地址,不能使用)。PAN ID可以通过侦听其他网络的ID然后选择一个不会冲突的ID的方式来获取,也可以人为的指定扫描的信道后,来确定不和其他网络冲突的PAN ID。
在zigbee网络中有两种地址模式:扩展地址(64位)和短地址(16位),其中扩展地址由IEEE组织分配,用于唯一的设备标识;短地址用于本地网络中设备标识,在一个网络中,每个设备的短地址必须唯一,当节点加入网络时由其父节点分配并通过使用短地址来通信。对于协调器来说,短地址通常设定为0x0000。
上面步骤完成后,就成功初始化了zigbee网状网络,之后就等待其他节点的加入。节点入网时将选择范围内信号最强的父节点(包括协调器)加入网络,成功后将得到一个网络短地址并通过这个地址进行数据的发送和接收,网络拓扑关系和地址就会保存在各自的flash中。
4.节点通过协调器加入网络
当节点协调器确定之后,节点首先需要和协调器建立连接加入网络。
为了建立连接,FFD节点需要向协调器提出请求,协调器接收到节点的连接请求后根据情况决定是否允许其连接,然后对请求连接的节点做出响应,节点与协调器建立连接后,才能实现数据的收发。节点加入网络的具体流程可以分为下面的步骤:
查找网络协调器。
首先会主动扫描查找周围网络的协调器,如果在扫描期限内检测到信 标,那么将获得了协调器的有关信息,这时就向协调器发出连接请求。在选择合适的网络之后,上层将请求MAC层对物理层PHY和MAC层的phyCurrentChannel、macPANID等PIB属性进行相应的设置。如果没有检测到,间隔一段时间后,节点重新发起扫描。
发送关联请求命令(Associaterequest command)。
节点将关联请求命令发送给协调器,协调器收到后立即回复一个确认帧(ACK),同时向它的上层发送连接指示原语,表示已经收到节点的连接请求。但是这并不意味着已经建立连接,只表示协调器已经收到节点的连接请求。当协调器的mac层的上层接收到连接指示原语后,将根据自己的资源情况(存储空间和能量)决定是否同意此节点的加入请求,然后给节点的mac层发送响应。
等待协调器处理。
当节点收到协调器加入关联请求命令的ACK后,节点mac将等待一段时间,接受协调器的连接响应。在预定的时间内,如果接收到连接响应,它将这个响应向它的上层通告。而协调器给节点的mac层发送响应时会设置一个等待响应时间(T_ResponseWaitTIme)来等待协调器对其加入请求命令的处理,若协调器的资源足够,协调器会给节点分配一个16位的短地址,并产生包含新地址和连接成功状态的连接响应命令,则此节点将成功的和协调器建立连接并可以开始通信。若协调器资源不够,待加入的节点将重新发送请求信息,直接入网成功。
发送数据请求命令。
如果协调器在响应时间内同意节点加入,那么将产生关联响应命令(Associateresponse command)并存储这个命令。当响应时间过后,节点发送数据请求命令(Datarequest command)给协调器,协调器收到后立即回复ACK,然后将存储的关联响应命令发给节点。如果在响应时间到后,协调器还没有决定是否同意节点加入,那么节点将试图从协调器的信标帧中提取关联响应命令,成功的话就可以入网成功,否则重新发送请求信息直到入网成功。
回复。
节点收到关联响应命令后,立即向协调器回复一个确认帧(ACK),以确认接收到连接响应命令,此时节点将保存协调器的短地址和扩展地址,并且节点的MLME向上层发送连接确认原语,通告关联加入成功的信息。
5.节点通过已有节点加入网络
当靠近协调器的FFD节点和协调器关联成功后,处于这个网络范围内的其他节点就以这些FFD节点作为父节点加入网络了,具体加入网络有两种方式,一种是通过关联(associate)方式,就是待加入的节点发起加入网络;另一种是直接(direct)方式,就是待加入的节点具体加入到那个节点下,作为该节点的子节点。其中关联方式是zigbee网络中新节点加入网络的主要途径。
对于一个节点来说只有没有加入过网络的才能进行加入网络。在这些节点中,有些是曾经加入过网络中,但是却与它的父节点失去联系(这样的被称为孤儿节点),而有些则是新节点。当是孤儿节点时,在它的相邻表中存有原父节点的信息,于是它可以直接给原父节点发送加入网络的请求信息。如果父节点有能力同意它加入,于是直接告诉它的以前被分配的网络地址,它便入网成功;如果此时它原来的父节点的网络中,子节点数已达到最大值,也就是说网络地址已经分配满,父节点便无法批准它加入,它只能以新节点身份重新寻找并加入网络。
而对于新节点来说,他首先会在预先设定的一个或多个信道上通过主动或被动扫描周围它可以找到的网络,寻找有能力批准自己加入网络的父节点,并把可以找到的父节点的资料存入自己的相邻表。存入相邻表的父节点的资料包括zigbee协议的版本、协议栈的规范、PAN ID和可以加入的信息。在相邻表中所有的父节点中选择一个深度最小的,并对其发出请求信息,如果出现相同最小深度的两个以上的父节点,那么随机选取一个发送请求。如果相邻表中没有合适的父节点的信息,那么表示入网失败,终止过程。如果发出的请求被批准,那么父节点同时会分配一个16位的网络地址,此时入网成功,子节点可以开始通信。如果请求失败,那么重新查找相邻表,继续发送请求信息,直到加入网络。
应用层提供高级协议管理功能,使用应用层协议来管理协议栈,主要根据具体应用由用户开发,维持器件的功能属性,发现该器件工作空间中其他器件的工作,根据服务和需求使多个器件之间进行通信。
在无线通信技术上,ZigBee采用免冲突多载波信道接入(CSMA-CA)方式,有效地避免了无线电载波之间的冲突,此外,为保证传输数据的可靠性,建立了完整的应答通信协议。
(1)低功耗:在低功耗待机状态下,两节五号干电池可以使用6~24个月,甚至更长,从而免去了充电或者频繁更换电池的麻烦。这是zigbee的突出优勢,特别适用于无线传感器网络。相比较而言,蓝牙能工作数周,WIFI仅可工作数小时。
(2)低成本:通过大幅简化协议(不到蓝牙的l/10),降低了对通信控制器的要求,按预测分析,以8051的8位微控制器测算,全功能的主节点需要32KB代码,子功能节点仅需4KB代码,而且ZigBee免协议专利费。
(3)数据传输速率低:ZigBee工作在20~250kbps的较低速率,它分别提供250kbps(2·4GHZ)、40kbPs(9l5MHz)和20kbps(868MHz)的原始数据吞吐率,满足低速率传输数据的应用需求。
(4)短时延:ZigBee的响应速度快,一般从休眠转入工作状态只需15ms,节点接入网络只需30ms,节点连接进入网络只需30ms,进一步节省了电能。相比较,蓝牙需要3~10 s、WiFi需要3 s。
(5)网络容量大:一个星型结构的Zigbee网络最多可以容纳254个从设备和一个主设备,一个区域内可以同时存在最多100个ZigBee网络,而且网络组成灵活。
(6)有效范围小:有效覆盖范围在10~75m之间,具体依据实际发射功率的大小和各种不同的应用模式而定,基本上能够覆盖普通的家庭或办公室环境。在增加RF发射功率后,亦可增加到1~3km。如果通过路由和节点间通信的接力,传输距离将可以更远。
(7)可靠:采取了碰撞避免策略,同时为需要固定带宽的通信业务预留了专用时隙,避开了发送数据的竞争和冲突。MAC层采用了完全确认的数据传输模式,每个发送的数据包都必须等待接收方的确认信息。如果传输过程中出现问题可以进行重发。
(8)安全:ZigBee提供了基于循环冗余校验(CRC)的数据包完整性检查功能,支持鉴权和认证,采用了AES-128的加密算法,各个应用可以灵活确定其安全属性。