PCI总线配置空间_vxworks驱动学习中。。。。。。_百度空间

1.PCI总线配置空间的组织
     PCI总线配置空间是容量为256字节并具有特定记录结构的一个地址空间,该空间分为头标区和设备相关区两部分。在每个区中,设备只设置必须的和与之相关的寄存器。一个设备的配置空间不仅在系统自举时可以访问,在其他时间也可以访问。
     头标区的长度为64字节,偏移地址从00H到3FH,该区中的各个域用来识别各自不同的设备,并使设备能以一般的方法控制。每个设备都必须按照该区的格式和规定进行设置。而配置空间的其余192字节可以因设备而异。
     系统软件可能需要扫描PCI总线,以便确定总线上实际连接的设备。为此,配置软件读取每个PCI槽位上的设备供应商识别代码。如果所读取的位置上不存在设备,则主桥必须准确无误地报道出来。OFFFH是一个非法的设备供应商识别码。如果设备不存在,则主桥可以通过返回一个二进制全为“l”的值来作为设备配置空间寄存器的读出值。
     如图9.12所示为配置空间头标区的布局情况。头标区又分为两部分:前16个字节的定义在各种类型的设备中都一样;而其余48个字节可以根据设备支持的基本功能情况进行不同的安排。位于偏移地址OEH处的头标类型域规定了头标区安排是何种类型。目前,只有一种头标类型定义(00H),其具体安排图9.12所示。将来的修改版本可能要为特殊的功能而定义其他的头标类型。



     所有PCI设备都必须支持开发商识别、设备识别、命令和状态域,而其他寄存器可以当做保留来处理,视设备的功能而定。如果一个设备支持的功能是某个寄存器所管辖的,则它必须设置此寄存器,且要符合规定的位置和功能。配置空间头标区内各个寄存器的功能将在下节进行说明。
2.配置空间头标区寄存器的功能
通过系统配置软件,可以进行PCI总线的系统配置。进行配置时,是通过配置空间头标区中的寄存器来实现的,这些寄存器的具体格式与具体的设备有关,但必须遵守一些共同的规则。
     1)设备识别
     在头标区有五个域用于识别设备,所有的PCI设备必须设置这些域(看是pci设备啊!是设备,记住了。。。,配置软件利用它们能够确定系统中可用的PCI总线设备,所有这些寄存器都是只读寄存器。
     (1)开发商识别域(Vendor ID)
     该域用以标明设备的制造者。一个有效的开发商标识由PCI SIG组织(PCI总线规范的制订机构)来分配,以保证它的惟一性。该域为0FFFFH时属无效值。
     (2)设备识别域(Device ID)
     该域用以标明特定的设备,具体代码由开发商来分配。
     (3)修改识别域(Revision ID)     
     该域用来指定一个设备特有的修改识别代码,其值由开发商来选定,该值可以为0。可以将该域看作是设备识别域的扩展。
   (4)头标类型域(Header Type)
   该域有两个作用:一是表示配置空间内字节10H~3FH的布局类型,二是指出设备是否具有多种功能。该域的位7为0表示相应的设备为单功能设备,反之为多功能设备。位6~位0指出字节10H~3FH的布局情况。目前,只有一个编码00H对应如图9.12中的布局,其他编码均属保留。
   (5)分类代码域(Class Code)
   分类代码寄存器为只读寄存器,用来标识设备的总体功能和特定的寄存器级编程接口。该寄存器分为三段,每段占一个字节。高位字节在0BH处,是一个基本分类代码,对设备的功能进行粗略的分类(如02H表示网络控制器、03H表示显示控制器等)。中间字节在0AH处,它对设备的功能给予更xx、更详细的分类。低位字节在09H处,用来标识一个特定的寄存器级编程接口(如果存在),以使与设备无关的软件可以与设备交互作用。
     2)设备控制
     头标区中的命令寄存器可为发出和响应PCI总线命令提供粗略的控制。这是一个16位的寄存器,位15~10为保留位,其余每一位对应一种控制。例如,位0用来控制对I/O空间的访问,当它为0时,禁止设备响应对I/O空间的访问;为1时,则允许设备响应对I/O空间的访问。再如位2用来控制设备得到PcI总线控制权的能力:该位为0时,禁止设备发出PCI访问;为1时,则表示允许设备作为总线的控制者(即主设备)。
   3)设备状态指示
   状态寄存器用于记录PCI:总线有关操作的状态信息,如奇偶校验错、系统错等。
   4)中断引脚寄存器的功能
     该寄存器的值表示设备(设备功能)使用了哪条中断线。其值为1时表示使用INTA#为2时对应INTB#,而3和4分别对应于INTC#和INTD#。如果设备(设备功能)没有使用中断线,则必须将该寄存器清0。该寄存器为只读寄存器。
     5)MIN-GNT和MAX-LAT寄存器的功能
     这两个寄存器都是只读寄存器,用来指定设备对延迟计时器(Latency timer)的设定值,单位为(1/4)μs。如果它们的值为0,则表明设备对延迟计时器没有特殊的要求。最小允许寄存器MIN-GNT用于指定设备需要多长的突发传输时间;{zd0}延迟寄存器MAX-LAT可反映设备对PCI总线进行访问的频繁程度。
     6)基地址寄存器的功能
     基地址寄存器提供O空间的机制。操作系统在管理系统之前要判断系统中有多少存储器以及系统中的I/0设备需要有多少地址空间,根据这些判断,启动软件自动配置系统的存储空间和I/0空间,利用基地址寄存器可将I/0空间控制器映射到正确的位置,实现设备无关管理。
     在PCI的所有基地址寄存器中,位0是只读的,用于决定是存储器空间还是I/O空间。该位为O,表示映射到存储器空间;否则映射到I/O空间。
   映射到I/O空间的基地址寄存器总是32位,其中位0恒为1(由硬件实现),位1为保留位,其余各位用来把设备映射到I/0空间。
     映射到存储空间的基地址寄存器可以是32位,也可以是64位。其中位0也要用硬件方法使其恒为0。而位2和位1用来表示映射类型:00表示基地址寄存器宽32位,可以映射到32位空间的任何位置;Ol表示映射基地址寄存器宽32位,但只能映射到32位空间的低1 MB范围内;10表示基地址寄存器宽64位,可以映射到64位表示的存储器空间的任何位置;11为保留编码。
     在配置空间中,从偏移地址10H开始,为基址寄存器分配了6个双字单元的位置。{dy}个基址寄存器总是在10H处,第二个基址寄存器要根据{dy}个的长度来决定它的偏移地址,可能是14H或18H。依此类推,后面的基址寄存器的偏移地址都要由前面寄存器的大小来决定。设备根据需要设置基址寄存器的类型及个数。
     7)扩展ROM基址寄存器的功能
     该寄存器位于配置空间偏移量30H处,是为有扩展ROM的插入模块(即有扩展ROM的PCI总线板卡)设计的。用双字来表示扩展ROM的基地址。高2l位是扩展ROM的基地址,以2 KB为边界。位lO~1为保留位。位0是扩展ROM允许位,该位为0,表示该设备的扩展ROM地址空问不可用;为1,则表示允许使用该寄存器的高21位作为扩展ROM的基地址。 了一种为设备指定存储空间和I/



郑重声明:资讯 【PCI总线配置空间_vxworks驱动学习中。。。。。。_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——