接口/总线/驱动
1 引言
随着计算机技术的飞速发展和普及,数据采集系统迅速得到了广泛的应用。数据采集系统性能的好坏主要取决于它的精度和速度。在保证精度的条件下,应用尽可能高的采样速度,以满足对信号的实时采集和实时处理;而要实现高速数据采集,不仅需要高性能的adc等设备,而且需要高速的数据传输。目前isa总线己经逐 渐退出了历史舞台,开发基于pci总线的数据采集卡己经是势在必行。
2 pci总线接口概述
pci总线的信号线包括32根地址数据复用线、仲裁、接口控制线、总线命令字节允许复用线和系统复位等。在进行基本的数据传输操作时,数据线先出现地址, 同时总线命令出现在c/be〔3:0〕上,设备根据这些命令判断所要进行的操作,在接下来的数据节拍中传输数据,如果传送或接收方没有准备好,那么就插入等待周期。pci总线的其它操作还有设备选择、配置周期和中断应答等。
pci总线协议复杂,需要在外部设备和pci总线之间增加一个接口电路。接口电路实现比较困难,目前实现pci接口的方法主要有:利用cpld或fpga 可编程逻辑器件和利用专门的pci接口芯片等多种方法实现。pci接口芯片具有设计简单、功能强大、可靠性好等特点,从而大大减少了开发人员的工作量。在 实际工作中我们综合各方面的因素,在本文选择了pci9054。
3 pci9054芯片
3.1 pci总线通用接口芯片简介
pci9054是plx公司生产的pci总线通用接口芯片,采用先进的plx数据管道结构技术,符合pciv2.1和v2.2规范;提供了两个独立的可编 程dma控制器;每个通道均支持块和分散/集中的dma方式;在pci总线端支持32位/33mh;本地端(local bus)可以编程实现8,16,32位的数据宽度;传输速率最高可达132mb/s;本地总线端时钟最高可达50mhz支持复用/非复用的32位地址数 据。pci9054的内部结构框图如图1所示。
图1 pci9054内部结构框图
由图1可知,pci9054提供了pci、eeprom、local总线三个接口。pci9054作为一种桥接芯片在pci总线和local总线之间提供 传递消息,既可以作为两个总线的主控设备去控制总线,也可以作为两个总线的目标设备去响应总线。
pci9054有6个零等待可编程fifo存储器(fifos)。它们分别完成pci发起读、写操作,pci目标读、写操作和dma读、写操作。由于 fifo存储器的存在,数据可以大量突发传输而不丢失。这样不仅满足实时性要求,同时可以根据用户的需要采用与pci时钟异步的本地频率。串形 eeprom(serial eeprom)是用来在开机时初始化配置内部寄存器的。内部寄存器(internal regi- sters)标识地址映射关系以及pci端和本地端工作状态。fifo和内部寄存器在计算机主机或者本地端都是统一编址的,用户可以从两端通过编程访问它 们的每一个字节。
3.2 数据传输模式
pci9054的数据传输模式灵活多样,包括直接主模式(pci master)、直接从模式(pci target)、dma模式。
数据传输模式的选择主要是要根据硬件设计者对硬件设计的需求而定的。当硬件设计者选择由pci发起控制的时候,则pci9054应该为pci的工作目标, 这时应选择pci 9054的工作方式为pci从模式。当硬件设计者选择本地端发起控制的时候,pci9054成为主控设备,而pci则成为pci9054的工作目标,这种 情况下应选择pci9054的工作方式为pci主模式。在数据进行dma传输时,pci9054对pci端和local端都是主控设备,本身具有dma控 制器完全可以脱离pc机进行dma控制,此时pci9054工作在dma传输模式。
3.3 本地总线工作方式
pci9054本地总线可工作在m,c,j三种模式。
m模式是专为motorola公司的mcu设计的工作模式。c模式下9054芯片通过片内逻辑控制将pci的地址线和数据线分开,很方便地为本地工作时序 提供各种工作方式,一般较广泛应用于系统设计中。j模式是一种没有local master的工作模式,它的好处是地址数据线没有分开,严格仿效pci总线的时序。pci9054的工作方式可利用模式选择引脚加以选择,对于 176pin-pqfp封装的9054芯片模式选择引脚为pin156(mode1)和pin 157(modeo)。只要将这两个脚接地便可选择了c模式;两个脚都接 则选择了m模式;pin156接地,pin157接则选择了j模式。
4 利用pci9054进行pci接口电路的设计
4.1 接口电路的硬件结构图如图2所示:
图2 硬件结构图
4.2 pci9054与pci bus接口
硬件接口电路的第一部分是9054与pci插槽间的连接信号线。这些信号包括地址数据复用信号ad[31:0],总线命令信号 c/be[3:0]和pci 协议控制信号par,frame#,irdy#,trdy#,stop#,idsel,devsel#等。电路连接中将彼此对应的信号线连接在一起即可。在pci总线信号中,除了rst#,inta#~intd#之外,其它所有信号都在时钟上升沿被采样。每个信号都有相对于时钟前沿的建立和保持时间。在此期间,不允许有信号跳动。该时间一过,信号的变化就无关紧要了。这种建立和保持时间对于不同的信号其情形是不同的。对于ad[31:0]、par和 idsel来说,只有在一定的时钟边沿上才有上述时间的要求。对于 lock#,irdy#,trdy#,frame#,devsel#,stop#,req#, gnt#,serr#和perr#这些信号在每个时钟前沿都有建立和保持时间。对于c/be[3:0]#在传输总线命令时,要在frame#第一次建立时 对应的时钟边沿上遵守建立和保持时间的关系。若传输字节使能信号时,要在完成一个地址期或数据期之后的每一个时钟边沿保证相应的建立和保持时间。
4.3 pci9054与eeprom接口
各种接口芯片都需要外接串行eeprom芯片来加载配置数据。对于串行eeprom芯片,需要根据接口芯片数据手册中给出的生产厂家及型号选择,这里选择 microchip technology公司的 93lc46b。pci9054提供4个管脚与串行eeprom相连接,它们分别是eedi,eedo,eesk, eecs,对应于93lc46b的di, d0, sk, cs这4个管脚,这4对管脚直接相连就可以。另外93lc46b的vcc管脚需要接+5v电源,gnd接地。因为需要对串行eeprom进行写操作,串行 eeprom应处于可编程而且非保护状态,所以pe接高电平而pre接低电平。93lc46的技术手册规定两个管脚上拉和下拉的电阻应为10k左右。
4.4 pci9054与local bus接口
硬件电路第三部分是pci 9054与local端连接。plx9054芯片local端用到的部分引脚信号描述如下。
lhold:申请使用本地总线,输出信号;lholda:对lhold应答,输入信号;ads:新的总线访问有效地址的开始,在总线访问 first clock设置时,输出信号: blast:表示为总线访问的last transfer,输出信号; lw/r:高电平表示读操作,低电平表示写操作,输出信号。la:地址线。ld:数据线。ready:表示总线上读数据有效或写数据完成,用以连接 plx9054等待状态产生器,输入信号。
4.5 寄存器配置
设计好接口电路后,硬件设计工作还只完成了一半。由于pci 9054是通用pci接口功能芯片,它的功能还不一定能够满足用户的需求,所以还要进行功能寄存器设置以使接口电路具有特定的功能。寄存器的配置包括 eeprom初始化、local功能寄存器和pci配置寄存器的配置。
(1) eeprom初始化
在计算机的加电自检期间,pci总线的rst#信号复位,plx9054内部寄存器的默认值作为回应。plx9054输出本地lreset#信号并检测串 行eeprom。如果串行eeprom中的前33个比特不全为1,那么plx9054确定串行eeprom非空,用户可通过向9054的寄存器cntrl 的29位写1来加载eeprom的内容到plx9054的内部寄存器;配置的信息(设备识别号、供应商代码号、local总线三个空间的大小以及三个空间的基址等)事先要利用编程器写入配置存储器中,也可以在p1xsdk中的plxmon下对eeprom进行配置。
(2) pci配置寄存器的配置
配置pci配置寄存器比较简单。主要是填写生产商id号、器件id号、类码子系统id号和子系统生产商id号。对于pci 9054,其生厂商id号为10b5,器件id号为9054,子系统号为9054,子系统id号为10b5,类码号为0680,表示其为桥设备中的其它桥 设备类。
(3) 本地配置寄存器的配置
对于本地配置寄存器的配置就是对本地地址空间及其本地总线属性的配置。这些配置要根据实际开发的硬件板卡的硬件资源进行配置。设备人员配置寄存器的任务就是要把某一段本地地址映射为pci地址,也就是当主机cpu要访问本地地址空间时,要知道其对应的pci总线地址。
4.6 驱动程序的开发
设备驱动程序提供链接到pci板卡的软件接口,文件扩展名为.sys的动态链接库。在windows98和windows2000中,设备驱动程序必须根 据windows驱动程序模型(wdm)设计。设备驱动程序的关键是如何完成硬件操作,基本功能是完成设备的初始化、对端口的读写操作、中断的设置和响应 及中断的调用,以及对内存的直接读写。本设计应用基于vc++的driverworks软件,只要在它的向导程序(driverwizard)指引下,根据硬件的具体情况设置必要参数就可以很方便地完成驱动程序的框架,最后根据具体的要求添加新的类对象和所需代码即可。
5 结束语
随着数字技术的发展,要求的数据传输速率将会越来越高。pci9054以其强大的功能,简单的用户接口,为pci总线接口的开发提供了一种简洁的方法,设计者只要设计本地总线接口控制电路,即可实现与pci总线的高速数据传输。
全部0条评论
快来发表一下你的评论吧 !