《PCI接口扩展卡的快速开发方案.docx》由会员分享,可在线阅读,更多相关《PCI接口扩展卡的快速开发方案.docx(12页珍藏版)》请在优知文库上搜索。
1、PCl接口扩展卡的快速开发方案摘要:介绍了PCl总线扩展卡的设计思路和方法,并结合个多功能CAN通信I/O卡的设计实例,介绍rPCI总线扩展卡的软硬件设计流程,给出了一套快速可行的解决方案。关键词:PCI总线P1.X9052设备驱动程序Windriver随着计算机和限制技术的不断发展,许多工程人员都选用PC机作为限制系统的操作平台。为r能够和外部设备通信,PC机上供应r外置的USB、串口、井口与内置的ISA、PCl等接口。PCI总线接口速度快,系统占用率低,有完备的即插即用(PnP)管理体制,是H前计算机插卡式外设总线的事实标准。笔者设计了块PCI总线多功能CAN通信I/O卡,可以完成数字最I
2、/O、CAN总线通信的功能。本文将依据笔者的实际阅历,介绍PCI接口扩展卡的软硬件设计流程和种快速开发方案。1PCI总线简介PCI总线标准由PClSlG(PCISpecialInterestGroup)制定,该组织的成员彳Inte1、IBM、DEC等公司。目前PC机中运用的PCl总线标准主要以PCl2.0为主,其频率为33MHz,字宽为32bit,电源电压为5V。新版的PCl标准向下兼容,并支持66MHZ时钟,字宽为64bit,电压为3.3V。PCl总线是一种时分复用的双向应答总线,传输发起方称为主设备,接收方称为从设备。主设备用RFAME信号指示,从设备拉低它的DEVSE1.线来表示响应传输
3、恳求。PCl总线的数据传输以帧为单位,每次传输由个地址周期(AddressPhase)和多个数据周期(DataPhase)组成,如图1所示。D0-D31首先给出本次传输的首地址,后面紧跟个或多个32位(4字节)宽的数据,多个数据的地址自动递增。在地址周期,CBE0CBE3这四根线的不同组合指示出在AD0-AD31上耨要进行何种类型的操作,如CBE0-CBE3=0110表示存储器读,CBE0CBE3=0011表示I/O写。在数据周期,C/BE0BE3对应AD0AD31上四个字节的使能。IRDY和TRDY分别表示主设备打算好和从设备打算好。在传输过程中,只有IRDY和TRDY同时方效,传输才能接着
4、;否则插入等待周期,用于在不同速度的设备之间协调工作。计算机的接口卡般会用到I/O端口、存储器空间、中断与DMA等计算机资源。传统ISA接口卡通过更改跳线来避开多块卡之间的资源冲突,PCl接口K则摒弃了硬件跳线,由软件统筹安排资源,这被称为即插即用。为实现此功能,PCl协议除了可以对I/O空间、存储器空间读写外,还定义了对配置空间的读写(C/BEOCBE3=1010101Do所谓配置空间,是指映射到每块接口卡上的256字节的特别功能寄存器。设计者事先在配置空间的指定位置写入须要申请运用的资源他,主板上电后,由PnP-BiOS读取各卡的配置空间,对它们所需的资源进行统筹安排,再将安排结果写回对应
5、的配置空间地址,完成自动配置。图2P1.X9052接口K芨料枢用2PCl接口k的硬件设计与调试以笔者设计的PCl卡为例,运用SJA100O实现CAN总线通信功能,须要映射32字节的存储器空间和一个中断资源,在功能上属于PCl从设备(Target-onlyDEVICE)。皂JAU的对外接口电路可以干脆与InteI8051、8096与ISA总线连接,但是不能与PCl总线干脆连接,因此须要设备用于逻辑转换的接口电路.PCl接口电路的设计般有两类方法:类是运用FPGA/CP1.D等可编程器件开发逻辑转换电路。依据实现功能的多少,所需的等效门密度约为500015000门,可自行编程或者购买已有“软核”(
6、IPCORE)的产品实现;另一类是运用标准接口芯片对PCI总线逻辑信号解码。第种方法开发成本高、难度大、周期长、测试设备昂贵,但是批及生产成本很低,适合大规模全定制或半定制ASlC的生产。其次种方法相对简洁、开发周期短、性价比合理,适合本方案采纳。市场上的接口芯片供应商有P1.X、AMCC、Tl等公司。其中,P1.X公司的接口芯片P1.X9052价格便宜、供货渠道畅通、功能适用,因此这里选用E1.X9052o采纳EI丛幺生2的接口卡在逻辑上可分成三个功能模块:PCl接口部分、EEPROM部分和局部总线部分,如图2所示。P1.X9052供应完备的PCI从设备支持,PCl接口部分的47根信号线可以
7、干脆与PCl连接器(俗称金手指)连接。PCl连接器上彳了两根特别的引线PRSNT1#和PRSNT2#,它们不参力IlPCl协议操作,只用来告知主板该卡消耗的电功率。P1.X9052将PCI总、线上的操作转换为对局部总线的操作,即通过1.ADO1.AD7、RD、WR、CS等对SJAlOOo的寄存器进行访问。举例来说,假如系统上电后安排给本卡的存储器地址空间为F68。0000F680OOlF,那么当系统通过PCl总线访问这个区域时,P1.X9052会应答,并将其转换为局部地址OXOooo0x00】F,对应于SJAIO皿的32个内部寄存器.另外,P1.X9052自身也有一些内部寄存器,它们被自动映射
8、到另一片内存区域,可通过Pel总线干脆访问。P1.X9052供应三种类型的局部总线信号:标准ISA模式、复用模式和H星用模式,其中复用模式和SJAlOOo的接口最吻合.此模式的信号和805ICPU输出的信号基本相同,可以干脆与SJA100o与其它类似接口的芯片相连,只是片选信号不再须要外部地址译码电路,而是由P1.X9052内部逻辑完成。局部总线的时钟可以与PCI时钟异步,山有源晶振供应。限制信号1.HO1.D接地表示局部总线无需申请等待周期。1.INTil是中断申请线,接有上拉电阻,确保无中断时停程在空闲状态。USEROUSER4是可编程1/。引脚,USER0、1设备为输入,USER2、3设
9、置为输出,由P1.X9052的内部寄存器限制,实现数字I/O功能:SJAloOO和82C250构成CAN总线接口电路,最高可支持IMHZ的通信速率。EEPRoM部分用干初始化P1.X9052的寄存器,在系统上电后读取。P1.X9052的EECS、EED0、EEDhEESK引脚分别与串行型PROM931.C46的对应引脚相连,其中EEDO引脚加有上拉电阻,使得在未安装EEPRoM时,EEDo始终保持高电平状态,P1.X9052仍旧能够以缺省设置运行。以下对内个主要寄存器的设备进行说明。VendQrID和DEVlCEID:生产厂商代号和芯片代号。VendorID由生产商向PClSIG申请,DEVI
10、CElD由生产商自行制定。P1.X公司的VendorID为10B5,P1.X9052的DEVlCElD为9050,故设为10B59050oClassCode:表示PCl卡属于哪种类型,如多媒体卡、显卡等。本设计中将其定为OOOO0680,表示PCl桥(PClBRIDGE)设备。1.ocalAddressSpace0Range:设为FFFFFFEO,表示申请32字节的存储器空间。1.ocalAddressSpace01.ocalBaseAddreSS(remap)设为00000001,表示将PCl总线上的地址转换为局部总线地址OXOOOo0x001FoChipSE1.ECT0BaseAddreS
11、S:设为OoOo0011,表示在局部总线地址为OXoOooOxOOIF时,局部总线的片选信号有效,用于苴JA100O的片选。InterruptCOntrOl/Status:设为OoOO0041,表示中断使能,响应1.lNTi上的中断申请。CNTR1.:设为00600C80,表示USER0、USERl引脚用于输入,USER2、USER3引脚用于输出,初始值分别为0、1,PCl数据传输等待超时长度为12个时钟周期。依据PCI标准和P1.X9052的说明文档,PCI连接器上全部的VCC、Vi/o5V电源连接到起,全部的GND端连接到起,在尽可能旅近i5y(吨2电源引脚的地方放置高频去辆电容。PCI总
12、线的时钟频率为33MHz,不恰当的布线会导致信号线之间的延时关系混乱,因此PCI协议对布线做了严格的规定,要求主时钟PC1.C1.K线的长度为2.5英寸,误差应小于0英寸,其它引线短于15英寸,举荐运用四层板。设计中可以参考市面上的声K和网K-布线实例,如考虑成本等因素,也可只运用两层板,双面覆桐接地C经试验验证该卡能够稳定工作。图3用WindriVer开发的驱动程序结构3PCl接口k驱:动程序与软件设计在DOS环境下,操作系统对应用程序开放全部权限,开发人员可以运用汇编指令、BloS函数等任何方法操作硬件资源,此处不再多述。在WindOWS系统中,为避开因不当的硬件操作而导致系统崩渍,应用程
13、序不再具有干脆的硬件访问权,假如要操作硬件,必需借助设备驱动程序。现有的WindOWS系列操作系统产品众多,所运用的设备驱动程序结构也有所不同。其中,VxD型驳动程序最占龙,适用于Win3x、Win95、Win98等操作系统;WinNT型驱动程序只适用于WinNT4x以下版本的操作系统;WDM型骐动程序是WinNT型共动程序的升级版,适用于Win98、Win2000.WinXP等操作系统,是今后几年的应用主流。Microsoft为设备驱动程序的编写供应了一些工具,如WindOWSDEVICEDriversKit(简称DDK),它包含了驱动开发所需的各种类型的定义和内核函数库。假如干脆运用发所需
14、的各种类型的定义和内核函数库.假如干脆运用DDK,开发者须要了解整个系统体系结构和WDM规范,熟谙上千个DDK函数的功能和运用场合。用这些方法编制的驱动程序有很高的运行效率,但是开发难度大,测试流程繁助,一般用于有肯定研发和生产需求的单位。为减轻开发者的负担,许多第三方厂商供应了协助软件。如NUmega公司的DriVerStUdi。软件,它将DDK函数侬据逻辑功能组织,把许多常用功能封装成类,建立了一个基于C+语言的而向对象的编程环境。开发者面对的不再是上千个困难凌乱的DDK函数,而是逻辑清楚的类库,大大降低了开发难度和开发周期,获得了广泛的应用。对于速度要求不高、实时性要求不严的场合,JUn
15、go公司的WindriVer软件供应了一种更加快速简洁的解决方案。它内置一个名为WdpnPsys的通用核心态WDM变动程序,将一些基本的操作如存储读写、I/O端口读写、中断服务、DMA操作等进行了封装,开发者只需编写一个外壳程序来调用这个驱动程序,开发者只需编写一个外壳程序来调用这个盟:动程序,就可以对硬件设备操作,如图3所示,图中灰色的部分表示Windriver已经供应。WindriVer供应的驱动程序经过充分优化,功能完备,在通用性和高效性之间做了很好的F衡。另外,WindriVer特地为P1.X公司的芯片开发了软件包,因此特别适合在本方案中运用。WindriVer启动后,会自动发觉计算机上的全部即插即用设备,如图4所示。其中mPCI:P1.XPCI9050TargetPCIInterfaceChiP”即指本卡。点击,Generate.INFfile”按钮可以生成INF文件,系统用它供应的信息安装Wdpnp.sysot4Btrawu.rwZCmlrUrl*11T2k4mctvb411wsmnsmju11W05E1OVUMMSVTraMYCI7ISAW4rlv,*r图4Windriver启动界面为便利在用户态驱动代码中操作SJ为OOo和P1.X9052的寄存器,可以运用WindriVer为已映射的存储器地址命名,如图5所示,图中CANR表示中断寄存器,CAN_CR表示寄存器,等