PCI9052接口芯片的配置及驱动程序开发

如果把pc机作为控制系统的操作平台,pci总线作为一种先进的高性能32/64位局部总线正迅速取代原来的isa总线的主导地位,以用于高速外设,并成为微型计算机系统的主流系统,因而也成为工程开发人员用于工业控制的首选。为了缩短开发周期,一般都采用专用的接口器件。本文就是采用plx公司的pci9052来把pci总线上的操作转换为对局部总线的操作,同时通过双口ram实现和下位机的存储转接。针对一般pci总线开发时由于软硬件分离使开发的软硬件不能很好结合的现象,本文结合实例介绍了应用程序并给出了如何通过driverstudio开发的pci设备驱动程序来访问pci设备卡硬件资源的具体程序。

1 pci的配置空间及其配置

pci总线支持存储器地址空间、i/o地址空间和配置空间等三个物理空间。其中,配置空间是pci总线所特有的一个空间,pci总线能实现即插即用的功能,正是通过它特有的配置空间来实现的。pci配置空间的大小为256字节,分为头标区和设备有关区。直接影响设备特性的配置寄存器在头标区,其他部分则因设备而异。pci总线的配置空间通常与pci接口芯片相关。该配置空间包括一系列的pci配置寄存器。本文采用的pci9052芯片的配置寄存器分为pci配置寄存器和局部配置寄存器,二者都可以由pci总线和串行eeprom访问。

在pci配置寄存器中的设备id、制造商id、版本号、首区类代码、类别代码、指令寄存器和状态寄存器等寄存器在所有的pci设备中都必须实现,具体设置可参考文献[1]。通常情况下,操作系统可使用这些寄存器的内容来决定该pci设备的加载其驱动程序。

pci总线最重要的功能之一是通过基地址寄存器和局部配置寄存器在地址空间重定位pci设备。系统上电时,通过上层应用软件能判断系统中存在那些设备,并建立协调的地址映射。所以,基地址寄存器和局部配置寄存器是实现驱动程序的关键。

pci配置寄存器提供有6个基地址寄存器(base0~base5)这些基地址都是系统中的物理地址,其中base0和base1是用来访问局部配置寄存器的基地址,base0是映射到内存的基地址,base1是映射到i/o的基地址,可用于通过内存和i/o来访问局部配置寄存器。这两个基地址可固定用于pci9052芯片的寄存器操作。

通过base2~base5四个空间最多可以访问局部端所接的4个芯片,实现4个局部地址空间(局部空间0~3)的pci总线访问。pci总线对局部端所接芯片的局部地址映射是通过4个寄存器组(pci基地址寄存器,局部范围寄存器,局部基地址寄存器,局部总线区域描述符)来实现的。这个组定义了每个空间以及相应局部空间的特性。它们将局部端的芯片通过局部端地址(在局部配置寄存器中设置)翻译成pci总线地址,也就是将本地的芯片映射到系统的内存或i/o口。而片选信号寄存器则是用来选定这些局部端所接的芯片的。这样,用程序操作这一段内存(或i/o)实际上就是对本地芯片的操作。其映射关系如图1所示。这些寄存器的内容必须在芯片复位时通过串行e2prom进行加载,而正确配置e2prom的内容则是使用pci9052的关键。

本设计选取las0(local address space 0)来访问局部端的双口ram芯片中的2 kb寻址空间,与其有关的寄存器有四个:las0范围寄存器、las0局部基址寄存器、las0局部总线区域描述符和片选0基址寄存器。las0范围寄存器规定了地址空间的大小。由于需要2 kb的内存空间,而计算机预留了32 kb空间(即8000h),所以其寄存器值为0xffff8000h,而类型则是不可预取的;las0局部基地址寄存器定义了设备卡资源上所占用的基地址,它的最终目的是将这个基地址重新映射到pci地址空间。由于基地址必须是32kb的整数倍,因此,为方便起见,可以将基地址定为00000000h,又由于位0为空间使能位,所以,寄存器的值为00000001h;las0局部总线区域描述符用来定义地址空间0的具体工作特性。

该总线采用16位总线宽度,工作方式定义为不使能突发和不预取,因此,该寄存器的数值初步确定为4043a1c0h,最终的值则需要不断测试才能确定;片选0基址寄存器使用pci9052的cs0#作为双口ram的片选信号,cs0#片选信号的起始地址和地址范围由片选0基址寄存器设置,局部总线的容量是2 kb,第11位为1,基地址是该范围的16倍,一般将倍数放置在范围位之后,所以寄存器值设置为0xo008401。当从局部空间0基址开始的2 kb空间范围落在cs0基地址寄存器所设置的范围内,cs0端有效,这种方式可减少地址译码得到的片选逻辑。

用plx9052可将pci总线上的操作转换为对局部总线的操作,即通过lad0~lad7、rd、wr、cs等对局部端芯片访问。如果系统分配给本卡的存储空间为ffff0000h~ffff7ffffh。那么,当系统通过pci总线访问这个区域时,plx9052就会应答,并将其转换为局部地址0x0000h~0x07ffh,另外,plx9052自身也有一些内部寄存器,它们被自动映射到另一片内存区域,可通过pci总线直接访问。

pci9052提供了两种类型

  • PCI9052接口芯片的配置及驱动程序开发已关闭评论
    A+
发布日期:2019年07月02日  所属分类:参考设计