历史上的今天
返回首页

历史上的今天

今天是:2025年03月16日(星期日)

正在发生

2021年03月16日 | 一种基于ARM的IEEE802.11MAC协议IP核设计

2021-03-16 来源:eepw

引言


无线局域网被认为是下一代IT产业发展的是大推动之一,被IT业赋予了极大的希望。无线局域网802.11系列标准的MAC协议是一样的,只是在物理层上有差异,因此对802.11MAC协议的开发,不论是在802.11b流行的今天,还是802.11g可能会成为主流的将来,都是很有意义的。当然,ARM以其先进的体系结构已经成为嵌入式市场的RISC标准,因此基于ARM的IEEE802.11MAC协议的开发是很有现实意义的。 我们的开发流程如图1所示。 PC软件开发是指脱离硬件的嵌入式软件开发阶段。此阶段可以在各种IDE环境下进行开发,并进行软仿真来验证软件的逻辑正确性。然后将开发出来的PC软件结合硬件所需要的硬件相关代码向硬件平台进行移值调试。前两个阶段完成后就得到了开发的最终成品。


1 协议结构


IEEE802.11MAC协议的SDL描述可以分为以下几个功能模块,如图2所示。 *MAC数据服务模块:向LLC层提供MAC层的数据服务接口。



一种基于ARM的IEEE802.11MAC协议IP核设计



*MPDU生成模块:将MSDU(MMPDU)生成MPDU,并对MPDU分段、加密以及进行排队管理。 *协议控制模块:完成DCF、PCF下的各种协议控制功能,包括RTS/CTS、ACK、ATIM、CF-ACK等,并根据信道状态请求退避,在传送数据挫败后控制重传等。该模块还负责对所有接收到的MAC帧进行分类,按不同的类型送到不同的模块进行处理。 *发送模块:将MAC帧以字节流的形式发送到物理层,完成实际的发送过程。这个模块中要完成对整个发送帧产生CRC校验,向发送的beacon帧中加入时戳用来进行时间同步。这个模块还负责处理底层获得的当前信道的状态,完成协议要求的随机退避功能。 *接收模块:对从物理层接收到的帧进行CRC校验。如果正确接收的话,则进行地址过滤,丢弃目的地址不是自己的帧。如果数据是经过分段的话,还有进行数据分段的重装,然后将接收帧送往协议控制模块进行分类处理。同时,这个模块还要提取接收帧中的信道保留信息,结合信道上有无载波的状况综合判断信道的状态,并把信道的状态送往发送模块来协调退避功能的完成。 *MAC管理实体模块:是管理核心,完成所有的管理功能,包括扫描、入网、认证、解认证、关联、解关联、重新关联、beacon帧的发送、站点状态管理等功能。 *MAC管理服务模块:提供MAC管理接口,包括MIB库的管理,对MIB库的访问,并将管理接口传来的管理服务请求送到MLME模块进行实际处理,将结果返回给管理接口。


2 协议实现


IEEE802.11MAC协议的SDL流程中各模块之间的交互是通过信号的方式来完成的,模块之间通过交互信息来协调工作,并且完成各种MAC帧的结构之间的传递。我们将信号定义为Signal(PID,SID,Param)参数PID用来标准信号的目的模块,SID用来标志信号在目的模块中由哪个函数来处理,参数Param是一个指向存储区的指针,存储区里存放的是信号所要传递的信息。为了能使整个协议在信号的驱动下运行,需要由一个功能实体来完成信号的处理过程。这里采用的是一个循环队列来存放产生的信号,由主循环程序来不断检测队列中的信号,根据信号的PID和SID调用相应模块里的信号处理函数进行处理。 协议中还涉及大量的比较判断和定时操作,当比较成立或定时到期后,进入相应的处理程序。其实,我们可以认为当比较成立或时间到期产生相应的信号,然后由信号处理机制来完成后续的工作。我们所要做的只是定义一个比较队列和一个定时队列,比较操作加到比较队列中,定时操作加到定时队列中,由主循环检测这两个队列。当某个比较判断成立时或某个定时期时从相应的队列中取出,然后再以信号方式加入到信号队列中去。因此我们将比较操作和定时操作分别定义为: Compare(PID,SID,Param11,Param12,Param21,Param22,Param31,Param32); Timer(PID,SID,Time); PID、SID标志比较成立或定时到期时产生的信号,Paramil、Parami2(i=1,2,3)为比较操作中需要进行比较的几对数据。Time为定时操作中设定的定时值。 上面介绍的机制建构了协议框架,然后在这个框架基础上按照SDL流程编写相应的信号处理函数就要吧实现整个协议。 前期协议开发了验证逻辑上的正确性。我们在Microsoft Visual C++环境下进行开发并进行了软仿真,结果表明所开发的设计在逻辑上是正确可行的。



一种基于ARM的IEEE802.11MAC协议IP核设计



3 协议向ARM平台的移植


我们所使用的ARM硬件平台ARM anywhere II采用的是三星公司的ARM芯片S3C4510B。S3C4510B是采用ARM7TDMI核的高性价比RISC微控制器,特别适用于网络应用系统。 我们开发了一个软件模块PHY来模拟物理层收敛过程子层(PLCP),对于物理介质依赖子层(PMD)我们没有实现。这并不影响MAC协议的开发。LLC 层的数据通过PC串口发送到ARM平台来模拟,数据经过MAC处理后送到PLCP子层,然后由PLCP子层直接发送。数据发送通过ARM的通用I/O来实现,发送速率由S3C4510B的定时器来控制。 在将802.11MAC协议向ARM平台的移植方案中,有一部分代码的执行是依赖于ARM平台的。这部分代码的移植工作需要特别注意,包括以下几个方面: ①定时器。协议中要求的随机退避过程需要底层周期性的送slot来进行,这个周期性 slot需要用定时器来实现。协议中的网络分析矢量NAV需要用定时器来实现,以判断NAV的状态。协议中定义的几种帧间隔IFS(SIFS、DIFS、 PIFS、EIFS)也需要利用定时器来实现。 ②外部中断。802.11MAC协议中一个重要部分就是载波监听。当信道状态变化时(由忙到闲,由闲到忙)都要给负责监听信道状态的模块一个指示(CCA),指示当前的信道状态。这个过程可以由S3C4510B ARM芯片的外部中断来很好地实现。由于S3C4510B ARM芯片可以对中断检测方式进行配置,可以将中断检测方式配置为上升沿和下降沿均触发中断,这些就能很好地模块协议的中物理载波监听(CS)。 ③I/O。模拟PLCP子层的数据收发,一共用到8个I/O端口,一次发送8位。在发送数据时,还使用了一个I/O端口作为发送指示。这个I/O端口通过信道模拟器连接到其它节点的用来监听信道状态的外部中断引脚上。 ④UART。我们用UART来实现PC和ARM的通信。一些管理命令,例如扫描、入网、认证、关联、解认证、解关联,节点的配置信息例如MAC地址等都可以从串口来发送给ARM。另外,所有发送的数据都会通过串口传送给ARM进行发送,所有接收到的数据将通过串口回传给PC。 ⑤以太网控制器。以太网控制器在AP中是比较有用的。由于AP之间是通过有线的骨干网(backbone)来进行连接的,从而组成了分布式系统(DS),以太网控制器已经集成了IEEE802.11接口,就为实现这个有线的backbone提供了便利。


4 硬件仿真环境


图3中,IEEE802.11MAC协议和PLCP子层模拟模块都都在ARM平台上,串口通信程序运行在PC上。它和ARM的UART进行通信用于模拟 LLC层数据服务和上层的管理服务,同时它还可以显示节点的运行状态和当前的网络状态。 下面介绍一下我们使用的简易信道模拟器的原理。信道模拟器对应每个节点(ARM平台)有一套接口,其中有8个I/O用于数据传输。由于无线信道是开放式的,一个节点发送时其它节点都能收到,因此在信道模拟器中每个节点的8个I/O是两两相通的,这样就能保证一个节点发送时其它节点都能收到。另外,由于要模拟信道上的载波监听过程,我们用到了ARM上的外部中断用做载波监听位(CS),然后用一个I/O发送指示(TR)。这样,信道模拟器上要维持任何一个节点的CS位,都与其它节点的TR有一定的逻辑关系,例如,当一个节点发送时,将其TR置为0(0表示信道变忙,ARM引脚初始电平为高电平1),则这个 0应该立即能反映到其它节点的CS位上从而产生中断,其它节点都会知道信道变忙而开始从信道接收数据。同时,当节点发送完毕后将TR置为1,其它节点就会产生中断并且检测到CS位为1从而知道信道变闲,接收结束。 实际的信道模拟支持两个基本服务区(BSS)组成的分布式系统(DS),每个BBS内支持1个AP和2个普通节点。这内部的逻辑关系用可编程逻辑器件实现。


5 移植过程中的注意事项


PHY软件模块模拟PLCP子层,负责完成要求的载波监听和数据收发时的定时控制。这些功能都是采用中断方式实现的,因此要求代码执行速率要快。这里使用汇编语言开发来提供代码的执行效率。 为了获得较高的代码执行速率和快速的中断响应,要求所有协议代码和中断服务程序都在SDRAM中执行。这就涉及到在设计ARM的初始化代码时要正确配置相应的存储区控制寄存器,并且完成代码的搬移和地址的重映射。 图3 ARM的初始化代码包括: *定义入口点(entry point)。 *定义异常向量表,用来处理各种CPU异常,其中包括中断。 *配置SDRAM和Flash的地址范围、时序等参数,以使这些存储器能正常工作。 *代码搬移。程序代码一般应从Flash调入SDRAM中运行,以提高系统的运行速度。同时,系统及用户堆栈、运行数据也都放在SDRAM中。 *对SDRAM进行地址重映射,从初始时地址空间的高端搬移到0x0开始的位置。 *初始化堆栈。 *初始化存储区。 *根据需要改变处理器工作模式。 *开中断。 *到C程序代码入口点开始执行。 另外,移植过程中还要考虑的一个问题是内存分配的问题。嵌入式系统中对内存的分配,一般来说要求快速可靠并且有效,实际上就是在采用静态分配内存还是动态分配存的问题。如果系统要求对实时性要求高并且不能容忍分配失败,这时就需要采用静态分配内存。采用静态分配一个不可避免的问题就是系统失去了灵活性,必须在设计阶段就预先估计所需要的内存并对其作出分配,并且要考虑到所有可能的情况。我们在移植过程中,考虑到实时生和可靠性是我们的主要目标,并且我们的 ARM平台具有较大的存储区,因而采用了静态分配的方式。


结语


目前,嵌入式协议开发已经非常普通,本文只是根据作者的实际经验,介绍了嵌入式802.11MAC协议开发的基本过程。目前开发的协议已经在ARM平台上成功运行,并且性能良好。现在所使用的ARM平台是没有操作系统支持的,所移植的协议硬件依赖性太大,下一步我们将在有操作系统的ARM平台上进行协议移植,通过全长操作系统提供的API接口来提供协议的可移植性。另外,继续优化代码,提高代码效率,提高实时性与可靠性,以更适合于嵌入式应用环境也将是我们下一步的目标。


推荐阅读

史海拾趣

Concord Semiconductor Corp公司的发展小趣事

为了进一步提升市场竞争力,Concord Semiconductor Corp积极寻求与其他企业的战略合作。通过与全球领先的电子设备制造商建立长期合作关系,公司成功将其产品打入国际市场,实现了业务的快速增长。同时,公司还与多家研究机构展开技术合作,共同研发新型半导体材料和技术,为公司的长远发展提供了有力支撑。

Dynex公司的发展小趣事

Concord Semiconductor Corp深知人才是企业发展的根本。因此,公司高度重视人才培养和引进工作。公司建立了一套完善的人才培养机制,通过内部培训、外部引进等方式,不断提升员工的技能水平和综合素质。同时,公司还积极营造良好的工作氛围和企业文化,吸引更多优秀人才加入。这些人才的加入为公司的持续发展提供了有力保障。

EDSYN公司的发展小趣事

为了帮助客户更便捷地将设备连接到物联网,Econais与Xively展开了合作。通过这一合作,Econais的WiSmart Wi-Fi用户可以无缝连接到Xively云,为工业、商业和住宅市场带来了创新的医疗保健、智能能源、无线音频控制和监控产品。这种一站式的物联网解决方案大大加快了物联网产品的上市时间,同时也降低了产品的开发成本。

Hitachi (Renesas )公司的发展小趣事

2014年,Econais宣布推出新一代IEEE802.11b/g/n Wi-Fi模块——EC19D01。这款模块是物联网领域的一次重大突破,它采用了系统级封装(SiP)技术,实现了世界上最小、最容易集成和最低待机功耗的Wi-Fi模块。EC19D01的推出,进一步巩固了Econais在超低功耗物联网微型Wi-Fi模块领域的领先地位。

Analogic Corporation公司的发展小趣事

Econais公司自创立之初,就致力于研发超低功耗(ULP)的无线模块。随着物联网(IoT)和机器对机器(M2M)通信技术的兴起,市场对低功耗嵌入式模块的需求日益增长。Econais工程师团队凭借几十年的行业经验,成功研发出了一系列超低功耗Wi-Fi模块,这些模块不仅性能卓越,而且易于集成,为各种物联网应用提供了强大的技术支持。

Etron公司的发展小趣事

1991年,台湾的电子行业正蓬勃发展,钰创科技(Etron)在这一时期应运而生,创始人凭借对市场敏锐的洞察力,决定专注于利基型缓冲记忆体产品与系统晶片的设计与生产。初创时期,公司面临着技术、资金和市场等多重挑战。然而,钰创科技凭借其团队的技术实力和创新精神,成功开发出了一系列具有竞争力的产品,逐渐在市场上崭露头角。

问答坊 | AI 解惑

简化的6通道串行通讯板怎么设计?

以下设计题中,主CPU芯片均采用ATMega128L-8AU,供电电源为12V DC。 1. ATMega128L的工作电源为2.7V~5.5V DC,因此需要为CPU设计一个合适的电源系统,请使用LM2576-ADJ设计一个三端稳压电路,输出5V DC/3A供整个设计使用,需要设计电源指示灯 ...…

查看全部问答>

乔布斯你凭什么这么牛?

最近IT业的人没有不知道iPhone 4的信号门,为此展开的口水战也屡见于各大媒体。“信号门”本不是什么好事,对于其他公司甚至可能是灭顶之灾,但苹果有个乔布斯,信号门不仅乔布斯出尽风头,出现在各大媒体头版头条,iPhone 4手机的销售也好像丝毫没 ...…

查看全部问答>

MTK6225 手机开发板(含源代码)

MTK6225 手机开发板(含源代码) 有诚意者请联系 Qq:296662705 硬件特性: 1、 CPU:mtk6225 2、 TFLASH 卡接口 3、 176X220 2.6寸TFT LCD,最高支持320*240*16的TFT LCD 4、 4线触摸屏接口 5、 双声道音频输出 6、 一个Camera 130万像素 ...…

查看全部问答>

嵌入式设备里,添加java游戏,如何支持Java?

因为手头的开发板是mips32+linux,嵌入式设备里,想添加java游戏,应该移植哪种JVM比较好,比较快,比较容易?据说kaffe是一个不错的JVM,有没有移植过的朋友,可以参考指点的,谢谢!…

查看全部问答>

问问linux、嵌入式行业的开发人员

总说linux开发或者linux下的嵌入式开发,尽管在网上能搜罗到不少相关的信息,但总归没有一个清晰的概念和界定。 究竟在实际工作中是哪些东西的开发?分为哪几种?需要什么知识? 注:小弟我现在做java,由于对底层的偏爱,想转底层开发,学习 ...…

查看全部问答>

有北京的朋友和我一起买扬创s3c2440的板子吗 ?

有北京的朋友和我一起买扬创s3c2440的板子吗 http://www.yctek.com/shop/view_47.html 团够就可以便宜的。有意思的朋友可以留言。我看了。比这个价格还要便宜好几百呢。人越多他们说越便宜。…

查看全部问答>

3.3V转5V,大家在实践中都用什么芯片

3.3V转5V,大家在实践中都用什么芯片?…

查看全部问答>

Xilinx FPGA & MATLAB SYSTEM GENERATOR FIR COMPILOR 调通了

基于MATLAB SYSTEM GENERATOR 的FIR滤波器终于调通了,模型如下: 参数如下:   输出波形如下图所示: 上图中,第一个波形是待滤波的波形,第二个是FIR数字滤波器的输出波形,第三个是MATLAB自带的滤波器。   然而,上述结果 ...…

查看全部问答>

IAR中跑的好好的,换到MDK中就会莫名其妙的进Fault中断,请各位帮忙看看!

下面的程序在IAR中用的好好的,但是自己有点吹毛求疵了,还是习惯用MDK,所以就转到MDK下用,程序什么的都不变,只是把对应的driverlab.a文件换成了对应的driverlib.lib文件,build没有问题,下载进去也没问题,前面的串口输出也没问题,但程序一跑 ...…

查看全部问答>

任务栈空间检测机制(rtos使用者必看)

目前绝大部分的rtos都是没有基于mmu或者mpu来运行的,也就是说没有内存保护机制。在没有内存保护机制的前提下,最揪人心的莫过于任务栈空间的溢出了,任务栈空间的溢出随时就像一颗定时炸弹等着引爆,使用者浑身不自在。有没有100%的任务栈空间溢出 ...…

查看全部问答>