当前位置:文档之家› 接口技术-基于MPC860 PCMCIA的双以太网接口驱动设计

接口技术-基于MPC860 PCMCIA的双以太网接口驱动设计

基于MPC860 PCMCIA的双以太网接口驱动设计(华中科技大学)郝东,杜旭摘要:MPC860芯片因其强大的通信处理能力和多种协议的支持而被广泛应用于通信领域。

但其内部模块仅支持一个10/100M自适应以太网口,限制了应用。

本文提出了一种基于其PCMCIA接口扩展的双100M以太网接口的方案,分析了相关驱动程序设计的关键问题。

关键词:嵌入式系统,MPC860,PCMCIA, Linux设备驱动中图分类号:TP302.1 文献标识码: A 国家十五科技攻关计划:2001BA205A08-09The Driver Design Of Dual Ethernet Ports Based OnMPC860 PCMCIA InterfaceHAO Dong,DU XuAbstract: Due to the strong ability of communication processing and support to many protocols, MPC860 is widely used in communication area. But it can only provide one 10/100Madaptable Ethernet interface directly by its internal modules, which limits its application.This paper gives out a solution based on the PCMCIA interface of MPC860 and analyzes key problems of the related driver design.Key words:Embedded System,MPC860,PCMCIA,Linux Device Driver1.引言MPC860是互联网络和数据通信及控制领域使用较多、性能相当优越的嵌入式微处理器,其内部集成的CPM (Communication Processor Module) 能完成UART、HDLC、Ethernet 等多种协议的通信控制和处理。

然而当应用系统需要两个以上的10M/100M自适应以太网口时, 仅靠片内的通信控制模块便不能满足需求,这是因为:MPC860内部仅有FEC(Fast Ethernet Controller)能实现一个10/100M自适应以太网口,而SCC(Serial Communication Controller)仅支持10M以太网。

为了达到应用要求,可以通过MPC860的双PCMCIA接口扩展出两个10/100M自适应以太网口。

本文基于这种双PCMCIA扩展以太网口的硬件结构分析了相关驱动程序设计中的关键问题。

2.电路分析和设计应用中我们选用了ASIX公司的AX88790芯片。

AX88790芯片内部集成了10/100M MAC (Media Access Control) 控制器、PHY(Physical Layer Device)和收发器,符合IEEE802.3 / IEEE802.3u标准,提供兼容PCMCIA 2.1+规范的PCMCIA接口,完全满足我们的应用需求。

注:x为A/B对应第A/B路PCMCIA接口;DIR为缓冲方向控制信号,/OE1,/OE2分别为高字节,低字节输出使能信号,G1,G2,OC,G为使能或片选输入信号图 1 扩展以太网口的硬件结构在MPC860的PCMCIA读写控制信号中, /IORD、/IOWR、/OE、/WE和/REG信号由两个PCMCIA接口所共用,而/CE1,/CE2信号为每个接口分别一组, PCMCIA数据信号和地址信号则均由CPU数据线和地址线提供。

另外,MPC860又为每个接口独立读写添加了两个使能信号:地址锁存使能信号/ALE和缓冲输出使能信号/POE。

当CPU读写的物理地址落在映射到某个PCMCIA接口的地址区间时,所属PCMCIA接口(A/B)便输出该物理地址到CPU地址线,控制公用的 /IORD、/IOWR、/OE、/WE和/REG信号,并通过仅有效对应接口的/POE(A/B),/ALE(A/B),/CE1(A/B),/CE2(A/B)将两个接口隔离,从而完成两个接口的独立访问。

据此我们设计出如图 1的电路结构。

适配器的PCMCIA状态输入信号/CD1, /CD2,/VS1,/VS2是每接口各一组,用于对应接口的PC卡的检测和识别。

由于我们的应用目的是通过PCMCIA接口扩展两个10/100M以太网口,并非设计PCMCIA插槽,故将/CD1, /CD2信号长期置于有效状态。

另外为了表示AX88790的电源键值为3.3V,我们有效/VS1,而/VS2不连接(No Connection)。

其它状态输入信号则上拉至3.3V置于无效状态(见图 1)。

3. 驱动程序设计为了安全、高效的管理和使用PCMCIA设备,PCMCIA规范定义了如图 2所示的系统软件结构,其中SS(Socket Services)提供对PCMCIA适配器的底层配置服务,CS(Card Services)负责向客户驱动提供与适配器无关的服务,将从SS收到的事件通知客户驱动,而具体客户驱动则通过CS服务完成具体PCMCIA设备功能的驱动。

我们应用中所采用的Linux-2.4.5为了支持PCMCIA设备,根据PCMCIA规范实现了CS层,并提供了相关接口。

基于上述软件环境,我们将实现MPC860 PCMCIA 主机适配器的SS驱动层和利用配置芯片并控制其以太网功能的AX88790客户驱动程序。

图 2 PCMCIA软件系统结构3.1 MPC860 PCMCIA适配器SS驱动程序设计主机适配器驱动程序是AX88790客户驱动程序访问AX88790芯片的基础,它向CS层提供标准的SS。

Linux为SS定义了函数接口原型并组织在结构pccard_operations中。

对我们的主机适配器驱动程序,该数据结构有如下实现:static struct pccard_operations m8xx_services= {:m8xx_inquire_socket, get_status:m8xx_get_status, inquire_socketset_socket:m8xx_set_socket,set_io_map:m8xx_set_io_map,};set_mem_map:m8xx_set_mem_map,根据SS标准,设计中需要解决的问题主要包括以下四个方面:(1)CPU总线地址窗口和PCMCIA地址窗口的映射PCMCIA芯片地址空间分Memory和I/O两种。

PCMCIA芯片对Memory空间不设置基址寄存器而直接译码,故PCMCIA芯片的Memory地址输入和片内目标地址相同。

又由于主机适配器对落在某个PCMCIA映射窗口的总线地址会直接驱动到地址线上,所以PCMCIA Memory空间地址,对应的总线地址都应和片内目标地址相同,而不允许动态分配。

故总线地址窗口和PCMCIA Memory地址窗口的映射关系是静态的,每个Memory窗口大小应按最大地址线根数26配置为64M(2的26次幂),其起始地址应与64M对齐。

我们在4G的总线地址区间中分配0x70000000到0x80000000 256M的连续区间分作四个64M 窗口,取前2个分配给A接口, 后2个分配给B接口,仅通过m8xx_set_mem_map()向CS提供Memory空间窗口属性和映射开关的控制。

因为PCMCIA芯片I/O基址寄存器的存在,用于映射到I/O空间的系统地址可以由CS 动态分配,只要保证大小在规范限定的64K以内即可。

m8xx_set_io_map()向CS提供I/O空间映射服务。

(2)PCMCIA接口信号的控制和管理我们通过设置PGCR寄存器控制PCMCIA接口信号,完成CS对接口的控制命令。

PGCR寄存器的相应位控制RESET信号和/POE信号的电平状态。

例如:if(state->flags & SS_RESET)M8XX_PGCRX(_slot_) |= M8XX_PGCRX_CXRESET; //有效_slot_号socket RESET信号elseM8XX_PGCRX(_slot_) &= ~M8XX_PGCRX_CXRESET; //有效_slot_号socket RESET信号是根据命令SS_RESET对RESET的电平设置。

为接口/IREQ信号产生的中断请求分配中断号时,我们考虑到共享中断会引入中断延时而降低驱动性能,因此专门分配7和9使每个接口独占一个中断向量。

相应设置PGCR 的IREQLVL后,主机适配器在接口的/IREQ有效时便向处理器核心提交相应的中断请求。

在m8xx_services结构中,m8xx_set_socket()提供接口信号的控制和管理服务。

(3)接口状态的查询和对状态变化的响应我们通过读取PIPR寄存器查询状态输入信号,并将状态信息提供给CS。

在主机适配器的PCMCIA状态输入信号中,我们固定了/CD1, /CD2,/VS1,/VS2信号的连接,其状态将不会改变。

AX88790没有实现PRR (Pin Replace Register) ,因而也无需管理/STSCHG信号的变化。

可见基于我们的电路结构不会产生状态信号的改变,更无需处理。

在m8xx_services结构中,m8xx_get_status()提供接口状态的查询服务和对状态变化的响应。

(4)主机适配器接口特性查询结合上面的讨论,我们对CS的特性查询返回下面的信息结构:static socket_cap_t capabilitiesX= { //X 代表A或B插槽features: SS_CAP_PCCARD|SS_CAP_MEM_ALIGN|SS_CAP_STATIC_MAP,//静态存储映射irq_mask:0xffff, //可支持1至16的中断号,但若pci_irq 非0则仅支持pci_irq map_size: 0x1000, //存储窗口最小映射单位为4K字节pci_irq: A接口为9,B接口为7 //分配A接口9号中断,B接口7号中断 } 模块加载时,我们通过register_ss_entry()将m8xx_services向CS注册,接着CS通过函数指针调用m8xx_inquire_socket()查询并获得capabilitiesX接口特性信息,从而建立起CS和PCMCIA主机适配器驱动程序间的桥梁,使CS能正确高效的通过SS配置管理主机控制器。

相关主题