发新话题
打印

PCI总线的配置周期

PCI总线的配置周期


PCI总线的配置周期 3 M; {" \  `2 U# ]' C& q
    为了实现参数的自动配置,每个PCI设备必须提供由256个字节配置寄存器构成的配置空间。在操作系统启动时或在PCI设备刚接入时PCI总线驱动程序要访问这些寄存器,以便对其初始化,并装入相应的设备驱动程序,使其变为可用状态。配置寄存器是即插即用的硬件基础。 # Q7 ^& a) a6 f
1.PCI总线配置访问   p  k9 t1 l% F
    在PCI设备的存储器访问或:I/O访问中,每个设备都对地址进行译码。然而,CPU却不能对配置空间直接寻址。对配置空间的寻址需采用如下的步骤: : {; v2 r: S9 q" |: w4 c5 s8 h
    ①片选:由IDSEL来选择PCI设备,也就是将IDSEL引脚作为“芯片选择”信号。 5 |6 z; Q$ p0 u6 y* Q
    ②设备选择:在地址有效期间AD[1~0]=00,选择设备作为配置命令的目标设备。 # U* L, u. C, |7 A
    ③片内选择:通过AD[7~2]确定64个双字寄存器之一,通过字节允许信号确定访问该双字寄存器的哪几个字节寄存器。
; Y: _% }* E% v3 i4 s    配置命令也支持猝发方式访问。
- @, h! u" j6 j7 P6 M    上面的步骤中涉及到IDSEL信号。该信号通常由系统控制逻辑驱动。在配置访问中,由于没有使用高端的2l位地址线,因此,有时也可以将其和高21位地址线中的某一位相连(如何用高21位地址线来决定IDSEL还没有公认的或标准的方法)。
1 x7 B& B$ V% O( V" _    为支持系统中存在多条PCI总线,PCI总线规范定义了两种类型的配置访问,其格式如图9.9所示,它表明了在配置访问时地址相位AD线的信息的含义。
- Q' y, }- H& I4 G% n, ?& M! A5 f" f/ Q# s( t

5 e8 b2 b% Z5 w7 w) O% h7 U
$ l& T: J5 b9 o$ o3 r5 K5 k# B: I9 A, W; m
3 g# p# {) N, X9 |  C7 \, U
    用AD[1~0]线上的值来区分类型0或类型1的配置访问,取值00表示0类配置访问,0l表示l类配置访问。类型0的配置访问用于选择当前正在操作的PCI总线上的设备。类型l配置访问用于对别的PCI总线提出配置请求。
) G0 _$ Z& y9 L8 \, C    对这两种配置访问,寄存器编号域和功能编号域的含义相同,总线编号和设备编号域只用于类型1的配置访问,保留域被目标设备忽略。 ; t  ]' k/ J8 [( W
    总线编号用于选择系统中最多256条总线中的一条。设备编号用于选择指定总线上最多32个设备中的一个,但如果采用IDSEL与一条AD线相连的方法,则只能选择到21个设备。功能编号用于从指定的多功能设备中选择最多八种功能中的一种功能。寄存器编号用于从设备的配置空间中选择一个双字寄存器。
& \" K* g( Q- L: x4 H    2.配置周期的产生
& y8 ?8 p) j- S, \" c* n# f) h# y    在PCI应用系统中,必须提供用软件产生PCI配置周期的机制。这种机制一般放置于主桥路中。PCI总线规范只对PC-AT兼容的系统规定了产生配置周期的机制,而对其他系统未做规定。对于PC-AT兼容机,PCI总线规范定义了两种截然不同的机制,即配置机制1#和配置机制2#。要求优先考虑并实现配置机制1#,配置机制2#的设立是为了做到向后兼容。 8 a. D# N' i/ \# G/ n9 r) q
    (1)配置机制1# - L; ^5 w4 J0 F
    这种机制使用两个双字I/O地址。第一个双字地址是0CF8H,是一个可读/写寄存器,命名为CONFIG-ADDRESS寄存器。第二个双字地址是0CFCH,命名为CONFIG-DATA寄存器。对配置空间的操作是通过写一个值到设备的CONFIG-ADDRESS寄存器,在此之后如果对CONFIG—DATA寄存器进行读或写操作,桥就会将CONFIG-ADDRESS寄存器中的值转换成PCI总线上所要求的配置周期,即自动产生配置读或配置写周期。 & r( c" L" b' R( t
    C0NFIG-ADDRESS寄存器为32位,其格式如图9.10所示。
0 Q( S' d/ S+ n. t& z* n" o5 P' ?) ~. u; Z4 q
' h7 I/ e. Y) O- E( X6 e4 x

0 }- N" ?" H! Y$ I3 h, k' S
0 |  m& X/ `8 e2 l5 K- x, Y$ @# H$ F2 m
    该寄存器的格式与上述访问配置中的1类配置访问基本对应。位30~24为保留位,只能读且读出值为全0。通过位23~16在系统中选择一条指定总线。位15~11用来在指定的总线上选择一个设备。位10~8用来从指定的多功能设备中选择一种功能。通过位7~2,从设备的配置空间中选择一个双字寄存器,即一次就选择4个字节配置寄存器,但通过来自处理器的字节允许信号可以确定任何一个字节配置寄存器。位1和位0为保留位,读出值为00。最高位为允许位,决定是否允许把对CONFIG-DATA的访问转变成PCI总线上的配置访问。当该位为l时,表示允许,反之表示禁止。
1 U$ Q. n/ G  a( ^    无论何时,主桥路只要检测到对CONFIG-ADDRESS寄存器的写操作,该桥路就把写人数据存入到自己内部的CONFIG-ADDRESS寄存器。在对CONFIG-ADDRESS寄存器读时,桥路将返回CONFIG-ADDRESS寄存器中的数据。
# n% J) a7 J2 O8 A  o) Q    当桥电路发现针对CONFIG-DATA的访问命令时,检查CONFIG-ADDRESS寄存器中的允许位和总线编号域。如果允许位为1,同时总线编号与该桥路或任何在桥路之后的总线编号相符时,则该桥路进行一次配置周期的转换。
7 S- a! ?3 ]6 H4 z    与上述PCI配置访问类型相对应,配置周期的转换也有两种类型:第一种为0类,此类转换用于被寻址的设备位于主桥路所连接的PCI总线上的情况。第二种为l类,当设备位于桥路后面的另一条总线上时采用该类转换。 - \0 L( e" t1 j2 ]# U
    图9.11表示了0类配置周期在桥路上的转换情况。桥电路对设备编号域进行译码并在适当的II)SEL线上建立信号,从而在PCI总线上完成一次配置访问。从图中可以看出发送到PCI总线的地址线上各部分信   



点击图标进入精品网摘收藏 欢迎大家加入网络收藏夹

TOP

发新话题