PCI接口扩展卡的快速开发方案

发布者:buzzedy最新更新时间:2012-05-05 来源: dzsc关键字:PCI总线  PLX9052  设备驱动程序  Windriver 手机看文章 扫描二维码
随时随地手机看文章

随着计算机和控制技术的不断发展,很多工程人员都选用PC机作为控制系统的操作平台。为了能够和外部设备通信,PC机上提供了外置的USB、串口、并口及内置的ISA、PCI等接口。PCI总线接口速度快,系统占用率低,有完备的即插即用(PnP)管理体制,是目前计算机插卡式外设总线的事实标准。

笔者设计了一块PCI总线多功能CAN通信I/O卡,可以完成数字量I/O、CAN总线通信的功能。本文将根据笔者的实际经验,介绍PCI接口扩展卡的软硬件设计流程和一种快速开发方案。

1 PCI总线简介

PCI总线标准由PCISIG(PCI Special Interest Group)制定,该组织的成员有Intel、IBM、DEC等公司。目前PC机中使用的PCI总线标准主要以PCI2.0为主,其频率为33MHz,字宽为32bit,电源电压为5V。新版的PCI标准向下兼容,并支持66MHz时钟,字宽为64bit,电压为3.3V。

PCI总线是一种时分复用的双向应答总线,传输发起方称为主设备,接收方称为从设备。主设备用RFAME信号指示,从设备拉低它的DEVSEL线来表示响应传输请求。PCI总线的数据传输以帧为单位,每次传输由一个地址周期(Address Phase)和多个数据周期(Data Phase)组成,如图1所示。AD0~AD31首先给出本次传输的首地址,后面紧跟一个或多个32位(4字节)宽的数据,多个数据的地址自动递增。在地址周期,C/BE0~C/BE3这四根线的不同组合指示出在AD0~AD31上将要进行何种类型的操作,如C/BE0~C/BE3=0110表示存储器读,C/BE0~C/BE3=0011表示I/O写。在数据周期,C/BE0~BE3对应AD0~AD31上四个字节的使能。IRDY和TRDY分别表示主设备准备好和从设备准备好。在传输过程中,只有IRDY和TRDY同时有效,传输才能继续;否则插入等待周期,用于在不同速度的设备之间协调工作。

计算机的接口卡一般会用到I/O端口、存储器空间、中断及DMA等计算机资源。传统ISA接口卡通过更改跳线来避免多块卡之间的资源冲突,PCI接口卡则摒弃了硬件跳线,由软件统筹分配资源,这被称为即插即用。为实现此功能,PCI协议除了可以对I/O空间、存储器空间读写外,还定义了对配置空间的读写(C/BE0~C/BE3=1010、1011)。所谓配置空间,是指映射到每块接口卡上的256字节的特殊功能寄存器。设计者事先在配置空间的指定位置写入需要申请使用的资源量,主板上电后,由PnP-Bios读取各卡的配置空间,对它们所需的资源进行统筹分配,再将分配结果写回对应的配置空间地址,完成自动配置。



2 PCI接口卡的硬件设计及调试

以笔者设计的PCI卡为例,使用SJA1000实现CAN总线通信功能,需要映射32字节的存储器空间和一个中断资源,在功能上属于PCI从设备(Target-only Device)。SJA1000的对外接口电路可以直接与Intel8051、8096及ISA总线连接,但是不能与PCI总线直接连接,因此需要设备用于逻辑转换的接口电路。[page]

PCI接口电路的设计一般有两类方法:一类是使用FPGA/CPLD等可编程器件开发逻辑转换电路。根据实现功能的多少,所需的等效门密度约为5000~15000门,可自行编程或者购买已有“软核”(IPCORE)的产品实现;另一类是使用标准接口芯片对PCI总线逻辑信号解码。第一种方法开发成本高、难度大、周期长、测试设备昂贵,但是批量生产成本很低,适合大规模全定制或半定制ASIC的生产。第二种方法相对简单、开发周期短、性价比合理,适合本方案采用。市场上的接口芯片供应商有PLX、AMCC、TI等公司。其中,PLX公司的接口芯片PLX9052价格便宜、供货渠道畅通、功能适用,因此这里选用PLX9052。

采用PLX9052的接口卡在逻辑上可分成三个功能模块:PCI接口部分、EEPROM部分和局部总线部分,如图2所示。

PLX9052提供完备的PCI从设备支持,PCI接口部分的47根信号线可以直接与PCI连接器(俗称金手指)连接。PCI连接器上有两根特殊的引线PRSNT1#和PRSNT2#,它们不参与PCI协议操作,只用来告知主板该卡消耗的电功率。

PLX9052将PCI总线上的操作转换为对局部总线的操作,即通过LAD0~LAD7、RD、WR、CS等对SJA1000的寄存器进行访问。举例来说,如果系统上电后分配给本卡的存储器地址空间为F680 0000~F680 001F,那么当系统通过PCI总线访问这个区域时,PLX9052会应答,并将其转换为局部地址0x0000~0x001F,对应于SJA1000的32个内部寄存器。另外,PLX9052自身也有一些内部寄存器,它们被自动映射到另一片内存区域,可通过PCI总线直接访问。

PLX9052提供三种类型的局部总线信号:标准ISA模式、复用模式和非复用模式,其中复用模式和SJA1000的接口最吻合。此模式的信号和8051CPU输出的信号基本相同,可以直接与SJA1000及其它类似接口的芯片相连,只是片选信号不再需要外部地址译码电路,而是由PLX9052内部逻辑完成。

局部总线的时钟可以与PCI时钟异步,由有源晶振提供。控制信号LHOLD接地表示局部总线无需申请等待周期。LINTi1是中断申请线,接有上拉电阻,确保无中断时停靠在空闲状态。USER0~USER4是可编程I/O引脚,USER0、1设备为输入,USER2、3设置为输出,由PLX9052的内部寄存器控制,实现数字I/O功能。SJA1000和82C250构成CAN总线接口电路,最高可支持1MHz的通信速率。

EEPROM部分用于初始化PLX9052的寄存器,在系统上电后读取。PLX9052的EECS、EEDO、EEDI、EESK引脚分别与串行EEPROM 93LC46的对应引脚相连,其中EEDO引脚加有上拉电阻,使得在未安装EEPROM时,EEDO始终保持高电平状态,PLX9052仍然能够以缺省设置运行。以下对内个主要寄存器的设备进行说明。

VendorID和DeviceID:生产厂商代号和芯片代号。VendorID由生产商向PCISIG申请,DeviceID由生产商自行制定。PLX公司的VendorID为10B5,PLX9052的DeviceID为9050,故设为10B5 9050。

ClassCode:表示PCI卡属于哪种类型,如多媒体卡、显卡等。本设计中将其定为0000 0680,表示PCI桥(PCI Bridge)设备。

Local Address Space 0 Range:设为FFFF FFE0,表示申请32字节的存储器空间。

Local Address Space 0 Local Base Address(remap)设为0000 0001,表示将PCI总线上的地址转换为局部总线地址0x0000~0x001F。

Chip Select 0 Base Address:设为0000 0011,表示在局部总线地址为0x0000~0x001F时,局部总线的片选信号有效,用于SJA1000的片选。

Interrupt Control/Status:设为0000 0041,表示中断使能,响应LINTi上的中断申请。

CNTRL:设为0060 0C80,表示USER0、USER1引脚用于输入,USER2、USER3引脚用于输出,初始值分别为0、1,PCI数据传输等待超时长度为12个时钟周期。

根据PCI标准和PLX9052的说明文档,PCI连接器上所有的VCC、Vi/o 5V电源连接到一起,所有的GND端连接到一起,在尽可能靠近PLX9052电源引脚的地方放置高频去耦电容。PCI总线的时钟频率为33MHz,不恰当的布线会导致信号线之间的延时关系混乱,因此PCI协议对布线做了严格的规定,要求主时钟PCI_CLK线的长度为2.5英寸,误差应小于0.1英寸,其它引线短于1.5英寸,推荐使用四层板。设计中可以参考市面上的声卡和网卡布线实例,如考虑成本等因素,也可只使用两层板,双面覆铜接地。经实验验证该卡能够稳定工作。

3 PCI接口卡驱动程序及软件设计

在DOS环境下,操作系统对应用程序开放所有权限,开发人员可以使用汇编指令、BIOS函数等任何方法操作硬件资源,此处不再多述。

在Windows系统中,为避免因不当的硬件操作而导致系统崩溃,应用程序不再具有直接的硬件访问权,如果要操作硬件,必须借助设备驱动程序。现有的Windows系列操作系统产品众多,所使用的设备驱动程序结构也有所不同。其中,VxD型驱动程序最古龙,适用于Win3.x、Win95、Win98等操作系统;WinNT型驱动程序只适用于WinNT4.x以下版本的操作系统;WDM型驱动程序是WinNT型驱动程序的升级版,适用于Win98、Win2000、WinXP等操作系统,是今后几年的应用主流。

Microsoft为设备驱动程序的编写提供了一些工具,如Windows Device Drivers Kit(简称DDK),它包含了驱动开发所需的各种类型的定义和内核函数库。如果直接使用发所需的各种类型的定义和内核函数库。如果直接使用DDK,开发者需要了解整个系统体系结构和WDM规范,熟谙上千个DDK函数的功能和使用场合。用这些方法编制的驱动程序有很高的运行效率,但是开发难度大,测试流程繁琐,一般用于有一定研发和生产需求的单位。[page]

为减轻开发者的负担,很多第三方厂商提供了辅助软件。如Numega公司的DriverStudio软件,它将DDK函数按照逻辑功能组织,把很多常用功能封装成类,建立了一个基于C++语言的而向对象的编程环境。开发者面对的不再是上千个复杂凌乱的DDK函数,而是逻辑清晰的类库,大大降低了开发难度和开发周期,获得了广泛的应用。

对于速度要求不高、实时性要求不严的场合,Jungo公司的Windriver软件提供了一种更加快速简洁的解决方案。它内置一个名为Wdpnp.sys的通用核心态WDM驱动程序,将一些基本的操作如存储读写、I/O端口读写、中断服务、DMA操作等进行了封装,开发者只需编写一个外壳程序来调用这个驱动程序,开发者只需编写一个外壳程序来调用这个驱动程序,就可以对硬件设备操作,如图3所示,图中灰色的部分表示Windriver已经提供。

Windriver提供的驱动程序经过充分优化,功能完备,在通用性和高效性之间做了很好的平衡。另外,Windriver专门为PLX公司的芯片开发了软件包,因此非常适合在本方案中使用。

Windriver启动后,会自动发现计算机上的所有即插即用设备,如图4所示。其中“PCI:PLX PCI 9050 Target PCI Interface Chip”即指本卡。点击“Generate.INF file”按钮可以生成INF文件,系统用它提供的信息安装Wdpnp.sys。

为方便在用户态驱动代码中操作SJA1000和PLX9052的寄存器,可以使用Windriver为已映射的存储器地址命名,如图5所示,图中CAN_IR表示中断寄存器,CAN_CR表示寄存器,等等。

Windriver的核心态驱动程序内置了中断服务函数,它的作用有两个:一是发送硬件清中断指令,用户在初始化阶段告知Windriver如何清中断(一般是对板卡上的某个寄存器进行读写),由核心驱动程序自动完成。二是通知应用程序有中断到来,回调用户程序的中断响应函数。

用Windriver可以生成一个基于C语言的应用程序函数库,用户通过这些库函数控制内核驱动程序。现以笔者编制的程序为例进行介绍,工程文件名取为CAN01。

在初始化阶段,先使用WD_Open()打开驱动程序,再用CAN01_Open()设置驱动程序工作参数,生成一个CAN01实例,最后用CAN01_IntEnable()设置用户态中断响应函数。

在退出应用程序前,先清除所有未处理的中断,释放分配的内存,再用CAN01_Close()删除CAN01,最后使用WD_Close()关闭驱动程序。

对SJA1000和PLX9052的寄存器的操作通过两个函数完成,可以实现CAN总线通信和数字量I/O等功能:

读操作CAN01_ReadByte(),

写操作CAN01_WriteByte()。

本文根据笔者的实验经验,介绍了开发PCI总线扩展卡的软硬件流程,给出了一套快速可行的解决方案。该方案电路简单、调试方便、编程高效、可以使技术人员迅速掌握PCI总线的开发技术,从而设计符合个性要求的多功能扩展卡。

关键字:PCI总线  PLX9052  设备驱动程序  Windriver 引用地址:PCI接口扩展卡的快速开发方案

上一篇:人机界面中的LCD控制驱动与接口设计
下一篇:用LatticeXP FPGA 桥接吉比特媒体独立接口

推荐阅读最新更新时间:2024-05-02 22:02

基于PCI软“核”的PCI总线接口设计与实现
PCI总线是通过主桥电路挂接在Host CPU上的局部总线,典型的PCI局部总线系统结构如图1所示。PCI的外部设备既可以作为PCI总线目标设备(Slave),实现基本的传送要求,也可以作为PCI总线的主控设备(Master),访问其他PCI总线设备及系统的其他资源。用户在实际应用中可以根据实际需求来设计设备的功能。 由于PCI总线规范 定义了严格的电气特性和时序要求,因而开发基于PCI总线的接口卡有一定的难度。它要求在接口卡和终端设备之间有一个总线接口控制器,以解码PCI总线线范并完成数据传送,这需要开发人员对PCI总线规范有深刻的理解并具有较高的计算机开水平。开发PCI接口大体有两种方式:使用专用的PCI接口芯片和可编程器
[嵌入式]
一种基于PCI总线的反射内存卡设计
1 引言   对实时传输, 传统的以太网络由于传输协议开销的不确定性, 很难满足实时网络的要求, 实时网络是一种应用于高实时性要求的专用网络通信技术, 一般采用基于高速网络的共享存储器技术实现。除了具有严格传输确定性和可预测性外, 还具有传输速度高、通讯协议简单、软硬件平台适应性强、可靠的传输纠错能力、支持中断信号的传输等特点。鉴于以上原因, 设计一款反射内存卡, 写入一个节点的内存的数据可以通过网络硬件传输到其它所有的节点。    2 硬件设计   反射内存卡系统的总体框图如图1 所示, 主要由5部分组成:FPGA、PCI 接口、SDRAM、数据编解码电路、光纤收发电路。   其中,FPGA 内部包含SDRAM控制器和F
[工业控制]
一种基于<font color='red'>PCI总线</font>的反射内存卡设计
PCI总线接口芯片CH361及其应用
  1 主要特点   CH361是一个简便易用的PCI总线通用接口芯片.该器件在本地端提供了通用的8 位数据总线.由于其支持I/O 端口映射和扩展ROM 映射,因而可广泛应用于制作低成本的基于PCI总线的计算机板卡,或者用于将原先基于ISA 总线的板卡移植到PCI总线上.   CH361的主要特点如下:   ● 带有通用8位主动并行接口:包括8位数据、16位地址、I/O读和写以及存储器读和写;   ● 可以设定PCI设备的设备标识(Vendor ID,Device ID,Class Code 等);   ● 支持长度达240字节的I/O端口;   ● 允许本地硬件地址实现专用I/O端口,可直接移植ISA
[嵌入式]
单片机与CPCI总线的脉冲信号检测系统的工作方法简述
引言 在工业控制领域,通常有大量的脉冲信号用于控制其他设备或部件的开关或者工作状态切换。这些脉冲信号除了常规计算机系统采用的+5 V接口电平外,还有+12 V、+30 V,乃至更高幅度的接口电平,通常为功率型电流驱动信号。本文提出了一种两级测试系统的设计思路,给出了在较宽的范围内兼容不同接口电平的脉冲信号检测系统的设计方案,采用标准CPCI总线接口设计,具有良好的兼容性和扩展性,适用于产品功能测试或系统集成测试。 1 测试系统架构 如图1所示,测试系统采用二级(主控机、下位机)结构设计,由主控计算机(即主控机)、测试客户机(即下位机)、局域网、电缆及运行于各设备中的测试软件共同构成。主控计算机属主控机一级,控制测试客户机,测
[单片机]
单片机与C<font color='red'>PCI总线</font>的脉冲信号检测系统的工作方法简述
USB总线数据采集设备驱动程序的设计
  0 引言   随着计算机应用技术的发展,虚拟仪器、自动测试系统、自动控制等领域,均越来越多的应用计算机来进行数据处理。USB总线标准的提出,解决了计算机传统I/O接口通用性差、不易扩展、易受计算机插槽数量、地址和中断资源的限制等缺点,使计算机在测控领域的重要性与日俱增,也使USB总线在数采测控业界备受关注,并在各种测控设备中迅速发展,但专用的USB设备不能像鼠标、键盘等HID类设备一样使用Windows系统提供的标准驱动程序,而是需要开发专用的驱动程序。开发驱动程序与开发Windows应用程序完全不同,驱动程序以系统的内核模式运行,任何细小的错误都可能引起操作系统的崩溃。因此,专用设备驱动程序开发的复杂性,成为了USB总线
[嵌入式]
基于CPCI总线CPU主控模块的设计与实现
  在一些特定的条件(如恶劣环境、军事应用环境条件)下应用的计算机比普通商用计算机一般在以下方面有更高、更严的要求:气候、机械和电磁环境适应性好,可靠性、可用性、可维修性好,可操作性、人机交互性能,体积小、重量轻、功耗低,可扩展性、升级方便和使用周期长。有时在一些应用场合还会有一些特定要求,如对用户接口种类和数量的要求等。   在很难找到满足特定要求的商用计算机,即使利用成熟商用计算机进行后天加固也难以满足特定要求的情况下,为此需自行研制满足特定要求的加固计算机。这里介绍加固计算机基于CPCI总线CPU主控模块的设计方案。   Compact PCI(简称CPCI)总线是“PCI总线工业计算机制造商组织”推出的一种工业计算机总线
[嵌入式]
基于CPCI总线多DSP系统的高速主机接口设计
    在现代通信、雷达和声纳系统中,随着实时处理要求的不断提高,对数字信号处理系统也提出了更高的要求。板载多片高性能的DSP芯片,配合大容量的SDRAM,可以很好地满足上述要求,并且已经成为了数字信号处理系统发展的趋势。采用CPCI总线集成系统,可以方便主机进行调试,控制和管理DSP系统。系统中的主机接口可以使主机通过CPCI总线访问板上的DSP和SDRAM芯片,这是多DSP系统设计的关键点之一。     不同于以往简单地使用一个CPLD进行粘合逻辑设计,本文提出了一种基于双状态机+Cache,预存预取的主机接口设计结构。在主机接口中设立了一个Cache,降低了CPCI总线与板上DSP和SDRAM芯片的耦合度,并且设计了两个
[嵌入式]
CompactPCI总线工控机技术的现状与应用
摘要: 计算机及其芯片技术的发展和推广应用,推动PCI总线规范成为事实上的标准总线,也使CompactPCI总线成为未来工控机的主流总线。CompactPCI总线工控机和其它总线工控机将并存一定的时间占领各自的市场。 关键词: PICMG PCI总线 CompactPCI总线 VME总线 PXI总线 2002年3月13日,中国计算机行业学会PICMG/P.R.C.在信息产业部电子六所召开了2002年首次年会。从事CompactPCI(以下简称CPCI)总线工控机研究与设计工作
[传感技术]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved