历史上的今天
返回首页

历史上的今天

今天是:2024年09月03日(星期二)

正在发生

2020年09月03日 | 基于CSMA/CA的MAC协议设计实现

2020-09-03 来源:elecfans

基于CSMA/CA的MAC协议的优势在于其简单和健壮性,适用于分布式网络,每个节点无需维持和动态更新周围相邻节点的状态信息,可以独自决定何时接入信道,只要上层有数据需要传输,MAC层就会对信道进行竞争,因此该协议的应用也相当广泛。嵌入式技术的发展对MAC协议的实现也提供了很好的技术支撑。本文搭建了一种基于ARM和FPGA相结合的嵌入式开发平台,并在此基础上设计与实现了基于CSMA/CA的MAC协议。由于ARM和FPGA本身就是可重构器件,同时将FPGA中的一些协议参数由ARM来设置,通过修改ARM的代码就可以实现对FPGA中协议功能的调整,方便快捷,不再需要重新生成比特文件下载,有利于MAC协议可重构的实现。


1 协议功能描述

1.1 报文结构

本设计实现的是基于CSMA/CA的MAC协议的基本访问模式,节点之间的通信只有数据帧(DATA)和应答确认帧(ACK)。图1给出了报文结构,其中ACK没有净数据部分。由于考虑的是一跳范围的无线通信,没有中继节点等,因此只有源节点号和目的节点号。

基于CSMA/CA的MAC协议设计实现

1.2 组网设计

本文设计的MAC协议除了满足基本的的物理载波侦听和虚拟载波侦听相结合检测信道忙闲的机制外,还包括帧间间隔、随机退避、应答确认和重传机制。


有数据要发送的节点会首先监听媒介,若为忙则继续等待,若空闲的时间超过或者等于DIFS或者EIFS则会进入退避进程。在执行退避进程过程中,节点将随机产生一个退避时间来设置退避定时器,同时继续监听媒介,若空闲时间达到了一个时隙时间,则退避定时器减去一个时隙时间,如果在期间媒介变为了忙,退避进程将挂起,直到媒介空闲时间再次达到DIFS或者EIFS后才会接着继续进行退避进程。当退避定时器变为0时,节点才允许开始发送数据,同时也会启动超时重传机制,如果在规定的时间内没有收到所希望的ACK,则会重传数据帧,当节点重传的次数超过了重传门限将会丢弃该数据帧,或者超过了数据帧最长允许的发送时间,也会丢弃该数据帧;当节点收到ACK时,就会开始准备下一次数据的发送。


接收节点收到正确且是发送给本节点的数据帧将会立刻回复源节点ACK。如果节点没有收到正确的数据帧,则将使用EIFS;如果收到正确的数据帧,但是不是给本节点的,节点将解析出持续时间,更新NAV,将信道视为已被占用。


1.3 功能划分

本设计充分利用ARM灵活便捷的优势,用来实现随机退避算法和协议参数的管理,如重传次数,帧间间隔的设置等。随机退避算法采用的是第i次退避就在2i个时隙中随机地选出一个值作为节点需要退避的值。协议参数的设置由ARM来完成,主要是考虑到FPGA不利于参数的修改,这样也可以增强协议的可重构性。而FPGA以其卓越的实时信号处理优点,用于管理MAC帧的收发控制等。

2 协议设计

MAC层的工作状态主要是由物理载波侦听和虚拟载波侦听共同决定的(即:MAC_flag=CS_flag or NAV_flag),当两者都显示为空闲时,MAC层才会进入发送数据帧状态。同时该协议也需要时钟计数参与其中,IFS_TIme是每个节点在进入退避进程前需要等待的时间,实现帧间间隔的功能;Backoff_TIme是每个节点在退避进程中退避的时间;NAV_TIme是没有在通信的节点预留信道的时间。这三个时间也关系着整个协议所处的状态。图2给出了具体的实现流程图,具体实现过程步骤如下:

基于CSMA/CA的MAC协议设计实现

(1)若MAC_flag为false时,表明信道空闲,此时进入(2);若MAC_flag为true,则说明现在信道已被占用,此时不管节点已经处于什么状态都会进入第七步,除了正在发送数据的节点,由于正在发送的节点是不可能监听信道的,而且也无法接收其他节点的数据,载波侦听机制在这种状态下是失效的,因此不会出现正在发送数据的节点从发送状态突然变为接收状态。

(2)执行帧间间隔进程,递减IFS_TIme大小,直到为0就进入(3)。IFS_time的初始值为DIFS。

(3)退避进程。退避时间的大小主要是由ARM提供,当节点经历了一个时隙时间,退避时隙数减1,但当节点没有完全经历一个时隙时间,退避时隙数就不会变化。退避进程结束后就会进入(4)。

(4)判断发送类型,设计中发送类型Tx_tpye的初始值为1。若Tx_tpye为0,则为节点发送ACK,根据接收到的数据帧中的源/目的节点号以及序列号等组装回复发送节点ACK,并初始化IFS_time和Backoff_time以备节点发送数据帧使用,同时设置NAV_flag为true,更新NAV_time的值,继续虚拟载波侦听,避免出现发送ACK的节点会优先占用信道的情况;若Tx_tpye不为0,则表明节点可以开始发送数据帧,转入(5)。

(5)发送数据帧前首先判断是否超过最大允许发送的时间,若超过了就丢弃该数据帧,将IFS_time设置为EIFS,Backof_time初始化,超时计时器停止;若没有超过最大允许发送时间,则节点正式发送数据帧,并启动单次超时计时,发送完毕后就等待ACK,此时进入(6)。

(6)在等待ACK到来的同时判断是否超时单次允许发送的时间,若超过了,则重传次数递加;然后判断是否超过重传门限,如果超过了门限,则丢弃该数据帧;如果没有超过,则将IFS_time设置为EIFS,而且还需要ARM的随机退避算法根据重传次数重新给一个退避时隙数,同时修改数据帧中的重传位以便接收节点识别。

(7)保存当前退避进程中的Backoff_time和刚刚结束的帧间间隔的大小IFS_time,接收MAC帧并解析其中相关的数据,为后续的组装ACK做准备,然后进入(8),同时将NAV_flag设置为true,保证MAC层能处理完数据。

(8)校验接收到的MAC帧是否正确,若不正确,则将IFS_time设置为EIFS,NAV_flag设置为false,NAV_time设置为0,这样节点就进入执行帧间间隔进程。若校验正确,则进入(9)。

(9)将FPGA解析出来的目的节点号与本节点的比较,判断是否是发送给本节点的。如果不是发送给本节点的,那么就再比较本节点现在的NAV_time值是否大于接收到的MAC帧内的NAV,若大于则本节点继续按照现有的NAV_time值执行下去;若小于接收到的MAC帧内的NAV,则使用MAC帧内的NAV来更新本节点的NAV_time值,然后以最新的NAV_time值递减下去直到为0,虚拟载波侦听显示空闲。但是在执行NAV_time递减过程中随时都有可能收到新MAC帧,而且也不是发送给本节点的,照样要执行本步骤,并不是等到NAV_time变为0后再更新。如果是发送给本节点的,则会进入(10)。

(10)若节点接收到的是数据帧。即Rx_type为1,FPGA将接收到的数据帧上传ARM;同时将IFS_time更新为SIFS,Backoff_time设置为0,这样使得接收到数据帧到发送ACK之间的时间间隔为SIFS,并将Tx_tpye设置为0,NAV_flag变为false,进入(2),开始准备发送ACK。如果Rx_type为0,则节点接收到的是ACK,说明一次数据收发过程结束,节点将初始化相关参数,计时停止等,FPGA释放空间,表明该数据帧已发送成功。


3 仿真验证

基于CSMA/CA的MAC协议的实现关键在于各个节点对各种情况的处理,因此对一个节点协议功能的仿真验证也能说明设计的正确性。本设计中FPGA部分的设计是重点,所以使用ModelSim进行仿真观察节点FPGA的处理过程。


3.1 信道竞争过程

基于CSMA/CA的MAC协议中各个节点也不知道自身周围的节点情况,因此节点竞争信道时随时都可能检测到信道已被占用。图3给出了节点在退避过程中检测到物理载波侦听变为忙,立刻停止退避进程,将此时的退避时隙数挂起,即退避时隙数保留为31。待到信道重新空闲超过帧间间隔DIFS后,将以保留的退避时隙数继续进行退避进程,变为0后开始发送数据帧。在图中还可以看到节点收到正确的ACK后,更新NAV的过程。从仿真图的执行流程可以说明所设计的MAC协议满足载波侦听机制、帧间间隔、随机退避的功能要求。

基于CSMA/CA的MAC协议设计实现

3.2 数据传输过程

从图4中可以观察到节点发送第一个数据帧后,超时计数器开始计时,但在规定时间内没有收到ACK,则重传数据帧,重传退避的时间是重新赋值的,并且帧间间隔不再是DIFS,而是EIFS;当节点接收到正确的ACK后,开始发送新的数据帧。说明了所设计的MAC协议能够实现确认重传机制。


4 结语

在以ARM和FPGA为主的硬件结构上,设计与实现了基于CSMA/CA的MAC协议,该协议具有载波侦听机制、随机退避、确认重传等功能。经过仿真测试,验证了所设计MAC协议的可行性。

推荐阅读

史海拾趣

eLED.com Corp公司的发展小趣事

作为一家有影响力的企业,eLED.com Corp始终关注社会责任的履行。公司积极参与各类公益活动,关注教育、环保和扶贫等领域。通过捐款捐物、志愿服务等方式,eLED.com Corp为社会做出了积极的贡献。此外,公司还注重员工培训和福利待遇的提升,努力为员工创造一个良好的工作环境和发展空间。通过这些举措的实施,eLED.com Corp不仅赢得了社会的广泛赞誉和支持,还为企业的发展注入了新的动力。

ALCOA公司的发展小趣事

近年来,随着环保意识的提高,ALCOA积极推动可持续发展和环保倡议。公司致力于减少生产过程中的能源消耗和废弃物排放,同时也在研发更环保的铝材和生产工艺。这些努力不仅提升了公司的社会形象,也为其在电子行业中的长期发展奠定了坚实的基础。

以上五个故事,只是ALCOA公司发展历程中的一部分。然而,这些故事足以展现出这家公司在电子行业中的卓越成就和持续创新的精神。

EDI [Electronic devices inc.]公司的发展小趣事

在1950年代,Eclipse Magnetics公司决定将他们的磁铁涂上红色,并与马蹄形标志和公司颜色相匹配。这个简单的改变在当时看似微不足道,但却成为了一个重要的转折点。红色磁铁不仅提升了产品的视觉吸引力,还增强了品牌识别度。随着红色磁铁的广泛应用,Eclipse Magnetics开始逐渐在电子行业中崭露头角。

CONTRINEX公司的发展小趣事

面对海洋环境的独特挑战,Contrinex推出了海洋系列传感器。这些传感器采用全金属技术,外壳材质为V4A/AISI 316L不锈钢,防护等级高达IP68/IP69K,能够抵御恶劣的海洋环境。同时,该系列传感器还具备卓越的EMC防护性能,能够满足各种海洋应用需求。这一创新产品的推出,进一步巩固了Contrinex在传感器行业的领先地位。

Hamamatsu公司的发展小趣事

除了上述重要事件外,Contrinex还一直致力于产品创新和技术研发。多年来,公司不断推出新型传感器产品,如防磁防焊型电感式传感器、扩展型纤细型安全光幕等,以满足不同客户的需求。同时,Contrinex还积极与OEM和系统集成商合作,共同开发定制化解决方案,为客户提供更加全面和专业的服务。

这些故事只是Contrinex在电子行业发展历程中的一部分。作为一个不断追求卓越和创新的企业,Contrinex将继续致力于为客户提供高品质、高精度的传感器产品和解决方案,推动电子行业的持续发展。

台湾美丽微(FMS)公司的发展小趣事

2013年,FTDI推出了最新的嵌入式视频引擎(EVE)技术产品。这项技术将高度先进的图形控制器、显示器、音频和触摸功能集成到单一芯片中,为智能显示器的实施提供了高效、便捷的解决方案。这一创新不仅提升了FTDI在嵌入式系统领域的竞争力,也为公司在智能家居、工业自动化等多个领域的市场拓展提供了有力支持。

问答坊 | AI 解惑

基于最新款飞思卡尔片子(MC9S08AC32)的实际应用代码

如题所说. 对于想使用这款飞思卡尔芯片,MC9S08AC32,FLASH有32K的同志位来说,我认为这个片子做得不错了,你们可以试着尝试一下,飞思卡尔是俺使用过的代码中,我觉得相对来说,抗干扰性较强的一款片子. 这里有一些代码,可以帮你迅速入门,迅速走入开发.…

查看全部问答>

id卡读卡器ps2口怎么读不出卡号啊??也是和键盘输入一样的读卡器

id卡读卡器ps2口怎么读不出卡号啊??也是和键盘输入一样的读卡器…

查看全部问答>

8255求救 引脚电平变化无法读取

8255引脚电平变化无法读取 #define PA8255 (*((unsigned char xdata *)0x1fff))//总线地址 #define PB8255 (*((unsigned char xdata *)0x3fff))//总线地址用16位表示 p0是低八位 p2是高八位    #define PC8255 (*((unsigned char xdat ...…

查看全部问答>

PNG图片旋转任意角度

WinCE5.0下有什么好的方法实现啊?…

查看全部问答>

导出的SDK要安装在VS2005的哪个目录下????

如题。   我自己定制了一个PB,编译好了后,把SDK导出了,但是这个SDK是要安装在VS2005的安装目录下吗??(我用的开发 工具是VS2005,但是是第一次使用)安装完了SDK,在启动VS2005,新建工程时,需要对它进行选择吗????…

查看全部问答>

c语言程序问题

#include<reg52.h>#define uchar unsigned char#define uint unsigned int sbit lcden=P2^7;sbit lcdrs=P2^6;sbit lcdrw=P3^6;uchar count,shi,fen ,miao;uchar code table[]=\"   2009-5-16\";uchar code table1[]=\"   0 ...…

查看全部问答>

坛子里有使用ZUKEN CR5000的软件的么?

如题,欢迎使用的公司和个人跟贴,这款软件好像满偏门的,是么?…

查看全部问答>

Getting Started with the MSP430 LaunchPad_Student Guide and Lab Manual

内容和大课堂的内容差不多,只不过是英文的。 大家看看!…

查看全部问答>

AD器件大全

本帖最后由 paulhyde 于 2014-9-15 03:16 编辑 AD芯片大全,及其基本性能指标。供大家比赛参考!!    …

查看全部问答>

Sate210/Sate210-F uboot 学习专用帖

S5PV210 uboot 启动分析 https://bbs.eeworld.com.cn/forum ... 2682&fromuid=478717 (出处: 电子工程世界-论坛) …

查看全部问答>