什么是MAC协议 [基于ARM平台的MAC协议IP核设计]

基于ARM平台的MAC协议IP核设计

基于ARM平台的MAC协议IP核设计 关键词:IEEE802.11 MAC协议 ARM平台 无线局域网 引言 无线局域网被认为是下一代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层的数据服务接口。

*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++环境下 进行开发并进行了软仿真,结果表明所开发的设计在逻辑上是正确可行的。

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接口来提供协议的可移植性。另外,继 续优化代码,提高代码效率,提高实时性与可靠性,以更适合于嵌入式应用环境 也将是我们下一步的目标。