ZigBee 3.0理论教程-通用-1-02:协议架构


【配套源码文档软件硬件等资源,请移步技术交流群:拿破仑ZigBee(263671349)】
【所有相关IDESDK均可从群文件免费获取,也全都是免安装的,解压出来直接就能开始开发】

持续更新中,欢迎关注!

一、概述

下图阐述了协议体系结构。

物理层和MAC层由IEEE-802.15.4定义。

  • 物理层,这部分功能通常是由芯片或者硬件来实现,负责无线电收发管理,包括诸如调制/解调,信号强度检测等功能;
  • MAC层,一部分是由硬件来实现,一部分是由软件来实现,负责数据收发,重传、扫描,单跳通信。

网络层、APS子层和应用层这些功能,都是由ZigBee联盟来定义的。

  • 网络层,负责消息的路由,设备状态的维护,子节点管理等等;
  • 应用程序支持层(APS),在网络层和应用层之间,负责端到端的重传和确认;
  • 应用层,包括了一个ZDO(ZigBee设备管理对象(Endpoint 0),每个应用程序实例称为一个Endpoint)和用户应用(留给用户设计);
    另外,在APS层和网络层都有一些安全特性,包括数据的加密、校验等等,可用于保护网络免遭黑客攻击。

整个协议栈中,除了用户应用以外,其余的部分都是由平台供应商来实现,用户只需要专注在应用层的开发即可。

二、物理层

ZigBee在ISM频率上工作。通信信道定义如下:

ZigBee最常见的工作频率是2.4GHz。

2.1 调制

物理层还处理数据原始数据的发送和接收。PHY层在868/915 MHz频带中使用二进制相移键控(BPSK),并在2.4 GHz下使用偏移正交相移键控(O-QPSK)。信息通过直接序列扩频(DSSS)编码到载波上,DSSS是一种固有的鲁棒方法,可通过信号处理增益来提高多径性能和接收机灵敏度。请注意,2.4 GHz是全球ZigBee通信最常用的频段。唯一官方Sub GHz的支持是英国的Smart Energy。

2.2 输出功率

802.15.4是专为低功耗,低数据速率,低成本的网络设计的。这些通常称为PAN或个人局域网。它主要是为中小无线电范围的应用而设计,但是外接功率放大器也是可以的。在大多数国家中,允许获得大约+20 dBm的输出功率。在欧洲,最大发射功率被限制到+10 dBm左右。但是,这足以使您到达大约一到三公里的距离,这取决于您的链路预算,所使用的功率放大系数和/或所拥有的天线的类型。

2.3 数据速率

使用2.4 GHz直接序列扩频Phy或DSSS,原始比特率为250 kb / s。在实际应用中,通常只有理论速率的四分之一或五分之一。预期的吞吐率与56k波特调制解调器相当。单跳链路上每秒约52700 kb。放入多跳效果后,传播所需的时间会更长一些。

2.4 开阔场地的传输距离

对于2.4GHz的PHY,在视线可达的空间,传输距离大约可以达到2KM。这是在大部分地区的无线法规允许的范围内,经过放大发射功率来实现的。由于存在大量信道的缘故,你可以选择一个相对安静的信道来避免干扰,从而保证可靠的通信。如果你选择了一个嘈杂的信道,ZigBee的网络管理单元可以切换到一个新的信道,这就是被称为“frequency agility”的特性。工作在2.4GHz频段还有一个好处,因为这个频段在全球范围内都是可用的,这样可以让你的产品具有更广阔的应用空间。

2.5 总结

物理层的功能包括:

  • 物理无线和MAC层的接口
  • 无线电开/关控制(ZigBee硬件的收发是不能同时进行的)
  • 调制与解调
  • 信道选择
  • 链接质量估算,信号强度检测
  • 能量检测,功率调节

2.6 补充

ZigBee在2.4GHz的工作频率范围内,和2.4GHZ的WiFi的工作频率是有重叠的,WiFi的信道带宽通常是20MHz或者40MHz。

当WiFi和ZigBee在同一个空间内工作的时候,就可能会出现干扰。如何保证ZigBee和WiFi在狭小的空间内的共存,这对于ZigBee网关的设计会是一个极大的挑战。

三、媒体访问控制(MAC)层

MAC层的主要功能是确保可靠的单跳消息传递。以下是有关这些功能的更多详细信息。

3.1 CSMA-CA

在同一个空间内,如果多个无线节点同时发送信号,就会互相在空间中形成干扰,导致数据变形,CSMA-CA机制就是用于避免这种情况。简单来说就是一个listen before talk的机制,发之前先听一下。听的目的,就是判断一下当前这个信道上有没有别人在用这个信道。

  • 如果没有,那么我就发;
  • 如果由,那么我就等一等,等到信道空闲了,我再发。

假设有一个节点正在listen,他将根据接收到的信号的RSSI来做出判断

如果在当前环境里,我能接收到的信号强度小于一个门限,比如小于-75 dBm,我就认为这个信道上没有人在发送,那我就可以开始发送了,

如果听到有一个节点正在发送,但是因为他发的信号强度比较小,那么我仍然检测不到他的信号。这个时候我能听到的信号强度还是小于这个门限的,所以我还是可以继续发送。因为两者之间隔得比较远,两个限号之间碰不到。

假如有一个节点离我很近,他在发信号。我听的时候,我能够检测到他的信号强度大于这个门限,那这时候我就不能发送了。我就需要等一等,然后过一段时间我再来听一下,看看能不能发送了,

802.15.4允许多个网络位于同一通道上。因此,需要采取某种方式来避免来自不同网络的数据包在空中碰撞而造成通信错误。MAC子层使用CSMA-CA(Carrier Sense Multiple Access/Collision Avoidance)控制对无线电的访问。避免碰撞是通过CCA(Clear Channel Assessment)完成的。

  • 在发送之前,每个节点必须检查电波是否可以正常发送(RSSI低于CCA阈值)。
  • 如果是(RSSI低于CCA阈值),则节点应继续进行并在进行少量随机退避后进行传输。
  • 如果CCA没有通过(RSSI高于CCA阈值),则该节点应等待多个退避周期,然后才能再次尝试该过程。

随机退避允许多个节点交错传输,因此它们总是可以在某个时间点找到干净的无线空间来作数据传输。尽管比特率很低,因为数据包比较小(128 bytes),即使在非常嘈杂的信道上每一个节点也可以成功地完成数据传输。

3.2 确认

MAC层还为节点提供了一种方法,该方法可通过确认得知节点已成功接收到1跳单播传输,并且已通过验证CRC保留了所传输消息的完整性。
多跳传输应在每个跳上进行确认。节点执行CCA检查并发送消息后,它会等待MAC确认。如果未收到消息,则该节点应尝试多次重发该消息,直到其最终成功或最大的重试次数已用尽。

MAC层的每一帧都是需要确认的,实际上是在中间的每一跳都要去做这样的确认的。比如网络中的节点A,需要给节点D发送一个报文,这个通信通常是在应用层进行的,也就是A的应用层要发一个包到D的应用层,因为A和D隔得比较远,中间需要经过几个中间节点,这种情况下数据报文的传输过程:

  • 首先,应用层发一个包交给网络层,然后交给MAC层,最后通过物理层发出去。
  • 中间节点B收到之后,会立马发一个MAC层的Ack表示已经收到了
  • 节点B的网络层收到这个包之后发现目的地址不是自己,就把这个包转给下一跳(节点C),
  • 后续节点都会执行和B一样的流程,直到转到目的地。
  • 当这个包到达目的节点之后,在节点D的APS层收到之后,会最终给一个端到端的一个Ack给原始节点A

由此可见,在MAC层是逐跳的确认,在APS层是端到端的确认。

如果说节点A发给节点B的时候,MAC层发现没有收到这个MAC层的确认,就需要在MAC去重传。

如果最终发现一段时间之后,没有收到目的节点给它发APS Ack,最终在APS层也会有一个重传

3.3 MAC帧

下图演示了MAC帧格式(ZigBee的帧格式):

前面的Preamble、SPD和PHY header这些字段都是在物理层由硬件添加的。其中PHY header(物理层头部)是一个字节,这个字节的最高bit预留做其他的用途,剩余的7个bit用于表示这个MAC帧的长度,最多能够表示的长度是127。也就是MAC层最大的帧长度是127个字节。

在MAC header中有一个2个字节的Frame control字段,该字段的0~2位会标识出这个帧的类型,主要有4种类型的帧:

  • Beacon,信标,用于扫描网络
  • Data,数据,用于从更高层传输数据
  • ACK,确认
  • MAC Command,MAC层的命令,包括设备入网时使用的一些命令,比如MAC Association这些命令。

在每个MAC帧的末尾,有两个字节的CRC用于验证数据包的完整性。无线信号在空中传播容易受到干扰,导致某些比特变化了,这个时候CRC就会不对了,这个帧就会被丢弃掉了。

四、网络层

在这里,我们将介绍ZigBee网络的一些基本概念,包括:

  • 设备类型
  • 网络地址
    • PAN ID
    • 扩展 PAN ID
  • 设备地址
    • 节点编号
    • Eui64

4.1 设备类型

IEEE-802.15.4定义了两种设备类型:

  • FFD, 全功能设备,能够执行IEEE 802.15.4标准中描述的所有职责,并且可以在网络中担任任何角色。
  • RFD, 剪裁功能设备,功能有限。

注意: RFD设备的处理能力和内存大小通常小于FFD设备。

在ZigBee中,存在三种设备类型:

  • 协调器,Coordinator,他是负责创建网路的,所以他是第一个成员,所以他的地址是0x0000;
  • 路由设备,Router,可以路由消息,作为网络的中间节点来转发消息;
  • 终端设备,End Device,包括睡眠终端设备和非睡眠终端设备。作为网络的边缘节点,必须有一个parent,必须附着在一个router或者coordinator上面。不能转发消息,不能做路由用,不能做中间节点用。
设备类型 创建网络 路由 供电方式 作父节点
协调器 主电源 网络中只有一个,且节点ID始终为0
路由设备 主电源
终端设备 主电源或电池 必须有父节点

Coordinator对比Router,除了可以创建网络之外,其余功能是一样的。

每个设备入网后,都会广播发出一个Announce报文,通知所有的设备,我加入这个网络了。

4.2 网络地址

马鞍山虽然是一个地名,但不是一个精确的地名。据统计,中国可能有二十几个地方叫马鞍山。

对应到ZigBee网络也会有同样的问题。ZigBee使用PAN ID和扩展的PAN ID来识别网络。

马鞍山就类似于PAN ID,Extended PAN ID就类似一个全地名,比如说安徽省马鞍山市

ZigBee是一个低速率的通信技术,本身最大的数据传输速率就只有250Kbps,并且在实际传输的时候有MAC层头部、网络层头部,还有各种安全控制的字段等等,导致的后果就是真正有效的数据载荷占比比较低。这种情况下,如果每次通信仍然使用这个64 bit的PAN ID,就会导致有效载荷占比进一步降低。所以大部分时候的通信都是使用16 bit的PAN ID来标识目的网络,可以改善这种情况。仅在回复节点扫描请求入网的Beacon Request的Beacon报文中,或是进行PAN ID更新时,才会在报文中使用扩展的PAN ID。

4.2.1 PAN ID

PAN,又称个人区域网络,通过其PAN ID与其他网络分开。这是同一PAN中所有节点将共享的16位标识符。因此,这与以太网世界中的子网掩码类似,因为您通常只与本地网络内的设备通信,在这种情况下为PAN。该标识符放置在每个传出数据包中的低层MAC层标头中,它使接收该数据包的设备可以过滤出与他们的网络无关的消息。 他们可以将其与自己的PAN ID进行比较,并确定这是来自自己网络中某人的消息,还是来自恰好在此信道上的其他网络中的某人的消息,因此无需尝试解码或解密。

0xFFFF这个PANID用于广播,那么所有网络都能收得到。

PAN ID由协调器在网络创建时随机生成,或者在创建网络的时候由用户指定。因为PAN ID是一个网络与另一个网络之间的区别因素,所以它应该是随机的以确保其唯一性。建议您为PAN ID选择一个随机的16位值,以防止您的网络与该区域中碰巧存在的任何其他网络重合。

现在,如果您碰巧选择了另一个网络已经使用的PAN ID,该怎么办?或者,如果您确实选择了一个与任何其他网络都没有冲突的随机PAN ID,但后来又有另一个网络与您的网络重叠,该怎么办?如果曾经发生过PAN ID冲突,则协议栈实际上可以检测到这种冲突并可以自动更新其PAN ID,并通知其网络中的所有节点都移至新的PAN ID,以便每个节点可以继续与原始网络中的节点进行通信,并排除冲突网络上的任何节点。如果PAN ID冲突,我们需要使用扩展的PAN ID来区分网络。

4.2.2 扩展 PAN ID

扩展PAN ID是PAN中所有节点都知道的另一个网络标识符。

正常的短16位PAN ID由于简短,在空中传输的所有数据包中都有包含,但64位扩展PAN ID很少通过空中传输。扩展的PAN ID对于每个PAN也是唯一的,当16位PAN ID不足以始终将一个网络与另一个网络区分开时,它基本上用作备份标准。例如,当发生PAN ID冲突并且您要通知网络中的所有设备更新PAN ID时,将网络与冲突的网络区分开的方式是,网络中的这些设备都共享相同的扩展PAN ID。扩展PAN ID极不可能发生冲突,因为与短PAN ID中的16位相比,它具有64位。

扩展的PAN ID由协调器在网络创建时随机生成。

这也是允许您选择网络的有用因素。如果您尝试加入一个网络而不是创建一个网络,那么您可能想知道如何判断哪些网络可用。网络之间可区分的方式不仅在PAN ID中,而且在扩展的PAN ID中。您可能想做一些特别的事情,决定只使用扩展PAN ID的特定子集,以便您可以将网络与其他网络区分开来,但不要太限制自己,因为您限制得越多您发生冲突的可能性就越大,并且如果您的扩展PAN ID曾经发生冲突,您实际上无能为力。它有点像WiFi SSID,不同之处在于WiFi网络之间的SSID可以相同,而ZigBee不同网络间的扩展PAN ID则不能相同。

4.3 节点地址

除了其网络范围的标准外,一个节点还通过其单独的节点地址与另一个节点区分开。

节点具有短地址和长地址。长地址是IEEE分配的MAC地址或EUI-64,称为IEEE地址或MAC地址。它是一个全球唯一的64位地址,这意味着世界上没有两个基于IEEE的无线电设备具有相同的EUI-64。通常在制造时分配。芯片在出厂之前,它们会被分配(IEEE会给芯片厂商分配不同的地址范围),并且它们永远不会改变。它用来区分不同的无线设备。但是因为64位是相对比较大的数据量,所以这个长地址不是经常通过空中发送的。

在大多数情况下,为了提供通信的效率,更短的16位地址是通过无线方式使用的。这被称为Short ID或Node ID,在网络中是唯一的,类似于以太网世界中的IP地址。它是在节点进入网络时由他的父节点分配的,并且在该网络内应该是唯一的。可能有两个网络,每个网络都有一个具有相同节点ID的节点,但是因为它们位于不同的PAN中,所以没有关系。

请注意,短地址有可能会发生变化,因为有可能会产生冲突。两个节点在进入网络时可能选择了相同的随机节点ID。如果发生这种情况,就像PAN ID方案一样,有一种解决冲突的方法。当节点注意到冲突时,基于EUI-64信息作为后备,它们可以商定新地址。因此,如果需要,节点可以根据冲突在运行时更改地址。

五、应用层

在应用层中,可以通过实现多个Endpoint将物理设备拆分为多个逻辑设备。

5.1 Endpoint

每个Endpoint代表一个逻辑设备。例如,如果我们有一个带有6个插座的智能插座适配器。我们可以使用6个Endpoint来实现它,以便我们可以分别打开/关闭每个插座。

Endpoint ID是一个8位的值,范围从0到255。

  • Endpoint 0保留给ZigBee设备对象,主要用于管理目的。
  • 用户应用程序可以使用Endpoint 1至239。
  • Endpoint 240到254保留用于特殊应用。像ZigBee Green Power一样,使用专用Endpoint 242。
  • Endpoint 255用于广播,所有的Endpoint都能收到。

应用层的通信模型实际上是通信双方Endpoint之间的通信,一侧的Endpoint作为Client,另一侧的Endpoint作为Server。Client和Server之间通信的内容和格式,是由Cluster来定义的。

 

持续更新中,欢迎关注!

 

【所有相关IDESDK均可从群文件免费获取,也全都是免安装的,解压出来直接就能开始开发】
【配套源码文档软件硬件等资源,请移步技术交流群:拿破仑ZigBee(263671349)】

文章作者: 拿破仑940911
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 拿破仑940911 !
评论
  目录