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