PCI9054 提供了3 种物理总线接口:PCI 总线接口、LOCAL总线接口及串行EPROM 接口.PCI 总线接口是PCI9054和PCI 插槽间的连接信号线,包括地址数据复用信号AD[31:0] ,总线命令信号C/BE[3:0] # 和PCI 协议控制信号PAR ,FRAME # ,IRDY # ,TRDY # ,STOP# ,IDSEL ,PERR# 和SERR# .串行EPROM 接口是PCI9054 与EEPROM 的连线.这里有4 根信号线:EESK ,EEDO ,EEDI ,EECS ,串行EEPROM 的数据通过烧写编程的方式,也可以通过本地CPU 直接编程的方式来完成初始化.LOCAL 总线接口是PCI9054 与应用电路的连接.主要包括LA 地址总线、LD 数据总线、LW/R读写信号、BLAST # 、READY # 、ADS # .
1.3 系统软件设计
测试仪功能的实现是靠软硬件结合的方式加以实现的,总体上是在主机软件控制下,软硬件协调一致地完成测试功能.该测试仪软件共分为2 部分,即主机测试软件和设备驱动程序.下面分别予以介绍.主机测试软件是整个测试仪实现测试功能的用户软件,采用面向对象的编程工具C ++ Builder 编写,当数据采集卡通过PCI 插槽插入主机后,打开测试仪电源,主机操作系统将自动加载相应驱动程序,数据采集卡成为主机认可的设备.此时主机与该设备(数据采集卡)建立了通信联系,用户通过应用程序就可以与该设备进行通信.
Windows 环境下常见的驱动程序有以下3 种:VXD 、KMD和WDM .WDM (Win32 Driver Model) ,是Microsoft 公司力推的全新的驱动程序模式,它的运行平台是Windows 98/Me/2000 操作系统,WDM 模式正逐渐成为驱动程序的主流.目前,编写驱动程序比较流行的开发环境有:DDK 系列(Microsoft 公司) 、DriverStudio (NuMega 公司) 和Windriver(WinRiver system 公司) .Windriver 是一个新兴的开发工具,它的特点是使用简单、直观,不需要开发者对硬件知识有较深的理解即可编程.
在Windriver 环境下常采用系统提供的API 函数来写驱动程序,一般PCI 驱动程序分成初始化部分,对硬件资源的访问和具体调用3 个部分.其中后2 个部分对于不同的PCI硬件是基本一致的,其驱动程序的不同只是在于初始化阶段对不同PCI 卡上的不同的硬件资源的锁定,所以我们只是修改接口芯片的生产商ID 号,器件ID 号和相应的寄存器的值就可以将其移植为其他的PCI 硬件的驱动程序.设备驱动程序的基本框架结构:
1) 打开WinDriver 设备;
2) 查找要访问的PCI 设备;
3) 枚举该设备的资源:内存、I/O 、中断;
4) 锁定该设备的资源只能为我们所用,不能被其他程序访问;
5) 访问卡上的资源;
6) 解锁资源,将占用的资源释放掉;
7) 关闭WinDriver 设备.
2 PCI9054 使用中应注意的问题
2.1 引脚PRSNT1 和PRSNT2 的配置
在PCI 金手指上有2 个特殊的引脚PRSNT1 ,PRSNT2 ,它是与PCI 连接器本身相关的,它的用途有2个,其一,用来表明槽位上实际存在1 块板;其二,表明该板的最大功耗.具体如表1 所示.
由上表可知,PRSNT1 ,PRSNT2 引脚必须至少有一个接地,根据功耗要求选择接地方式.
2.2 模式选择引脚MODE0 和MODE1 的配置
如果都下拉,是C 模式,即LOCAL 端的地址线和数据线是分开的;如果MODE0 上拉,MODE1 下拉,则是J 模式,即LOCAL 端的地址线和数据线复用.通常采用的是C 模式,可以降低开发难度.
2.3 EEPROM 的EEDI/EEDO 引脚的配置
有这样3 种情况:① 当不安装EEPROM 时,该引脚一定要下拉,用1 kΩ 的下拉电阻即可.此时启动后9054 会按默认的值进行配置;② 当安装空白的EEPROM 时,该引脚需要上拉;③ 当安装烧录好的EEPROM 时,该引脚需要上拉.这里解释一下:卡设计好后,如果没有配置好EEPROM的值,也可以测试卡的硬件,按A 或B 步骤,把卡插在PC的PCI 插槽上,如果硬件设计没有问题,是可以找到卡的.所以设计的时候应将此引脚设计成上下拉,根据需要装上拉或下拉电阻.这可以避免只能等配置好EEPROM 的值后才能测试卡的硬件设计正确与否[6] .
2.4 存储器和I/O 操作
通常PCI 扩展板应该有配置空间、存储器空间和I/O空间3 类资源.空间配置是必需的,根据设计需要,后两种资源可以只包含其中之一.PCI9054 有S0 和S1 两个配置空间,两个配置空间都可以配置成存储器空间和I/O 空间,存储器空间和I/O 空间的配置既有相同之处,也有很大的区别.其相同点为两者都以字节为单位进行空间配置.不同之处有:
1) 存储器空间支持0 ~ 4GB 的空间配置和映射,而I/O空间只支持0 ~256 字节的空间配置和映射;
2) 存储器空间支持8位、16位和32 位总线位宽配置和操作,而I/O 空间只支持32位总线位宽配置和操作;
3) 存储器空间支持单一周期和突发模式读写操作,而I/O 空间只支持单一周期读写操作;
4) 在编写设备驱动程序时,存储器空间用程序指针进行访问,I/O 空间则用专用的函数进行访问.
如果不清楚存储器空间和I/O 空间的异同步,有可能配错相应的寄存器.当计算机重新启动时,很有可能会启动不起来.除此之外,值得注意的是:在配置存储器空间和I/O 空间时,不要将两种硬件资源配置到相同的空间,导致空间重叠,使驱动程序产生误操作.
3 结束语
介绍了运用专用芯片开发PCI 总线系统的过程,并利用相关理论开发了一个基于PCI 总路线的数据采集卡,并说明了PCI9054 的使用方法及设计中应注意的问题,虽然系统相对比较简单,却体现了PCI 总线系统开发的一般步骤,对于PCI 总线系统的开发具有一定的参考意义.