我是靠谱客的博主 平淡糖豆,最近开发中收集的这篇文章主要介绍ZigBee 3.0理论教程-通用-1-04:协议与架构-媒体访问控制层(MAC)一、CSMA-CA二、确认三、MAC帧,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

源码文档软件硬件技术交流技术支持入口文末
【所有相关 IDESDK例程源码均可从群文件 免费获取免安装解压即用

 

持续更新中,欢迎关注!

 


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

一、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),即使在非常嘈杂的信道上每一个节点也可以成功地完成数据传输。

二、确认

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层也会有一个重传

三、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就会不对了,这个帧就会被丢弃掉了。

(注:任何相关问题,欢迎在文末技术交流QQ群中交流讨论。)


在这里插入图片描述

 

持续更新中,欢迎关注!

 

【所有相关 IDESDK例程源码均可从群文件 免费获取免安装解压即用
源码文档软件硬件技术交流技术支持入口文末

在这里插入图片描述

最后

以上就是平淡糖豆为你收集整理的ZigBee 3.0理论教程-通用-1-04:协议与架构-媒体访问控制层(MAC)一、CSMA-CA二、确认三、MAC帧的全部内容,希望文章能够帮你解决ZigBee 3.0理论教程-通用-1-04:协议与架构-媒体访问控制层(MAC)一、CSMA-CA二、确认三、MAC帧所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部