0 导言
依据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没有净数据部分。因为考虑的是一跳规模的无线通讯,没有中继节点等,因而只要源节点号和意图节点号。
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给出了详细的完结流程图,详细完结进程进程如下:
(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协议满意载波侦听机制、帧间距离、随机退避的功用要求。
3.2 数据传输进程
从图4中可以调查到节点发送第一个数据帧后,超时计数器开端计时,但在规则时刻内没有收到ACK,则重传数据帧,重传退避的时刻是从头赋值的,而且帧间距离不再是DIFS,而是EIFS;当节点接纳到正确的ACK后,开端发送新的数据帧。阐明晰所规划的MAC协议可以完结承认重传机制。
4 结语
在以ARM和FPGA为主的硬件结构上,规划与完结了依据CSMA/CA的MAC协议,该协议具有载波侦听机制、随机退避、承认重传等功用。通过仿真测验,验证了所规划MAC协议的可行性。