1.3 PCI总线的存储器读写总线事务
总线的基本任务是实现数据传送,将一组数据从一个设备传送到另一个设备,当然总线
也可以将一个设备的数据广播到多个设备。在处理器系统中,这些数据传送都要依赖一定的
规则,PCI 总线并不例外。
PCI 总线使用单端并行数据线,采用地址译码方式进行数据传递,而采用 ID 译码方式
进行配置信息的传递。其中地址译码方式使用地址信号,而 ID 译码方式使用 PCI 设备的 ID
号,包括 Bus Number、Device Number、Function Number 和 Register Number。下文将以
图1 1中的处理器系统为例,简要介绍 PCI 总线支持的总线事务及其传送方式。
如表1 2所示,PCI 总线支持多种总线事务。而本节重点介绍存储器读写总线事务,I/O
读写总线事务,并在第2.4节详细介绍配置读写总线事务。值得注意的是,PCI 设备只有在
系统软件初始化配置空间之后,才能够被其他主设备访问。
当 PCI 设备的配置空间被初始化之后,该设备在当前的 PCI 总线树上将拥有一个独立的
PCI 总线地址空间,即 BAR((Base Address Register)寄存器所描述的空间,有关 BAR 寄存
器的详细说明见第2.3.2节。
处理器与 PCI 设备进行数据交换,或者 PCI 设备之间进行存储器数据交换时,都将通过
PCI 总线地址完成。而 PCI 设备与主存储器进行 DMA 操作时,使用的也是 PCI 总线域的地址,
而不是存储器域的地址,此时 HOST 主桥将完成 PCI 总线地址到存储器域地址的转换,不同
的 HOST 主桥进行地址转换时使用的方法并不相同。
PCI 总线的配置读写总线事务与 HOST 主桥与 PCI 桥相关,因此读者需要了解 HOST 主桥
和 PCI 桥的详细实现机制之后,才能深入理解这部分内容。本篇将在第2.4节详细介绍这些
内容。在下文中,我们假定所使用的 PCI 设备的配置空间已经被系统软件初始化。
PCI 总线支持以下几类存储器读写总线事务。
(1) HOST 处理器对 PCI 设备的 BAR 空间进行数据读写,BAR 空间可以使用存储器或
者 I/O 译码方式。HOST 处理器使用 PCI 总线的存储器读写总线事务和 I/O 读写总
线事务访问 PCI 设备的 BAR 空间。
(2) PCI 设备之间的数据传递。在 PCI 总线上的两个设备可以直接通信,如一个 PCI
设备可以访问另外一个设备的 BAR 空间。不过这种数据传递在 PC 处理器系统中,
较少使用。
(3) PCI 设备对主存储器进行读写,即 DMA 读写操作。DMA 读写操作在所有处理器
系统中都较为常用,也是 PCI 总线数据传送的重点所在。在多数情况下,DMA 读写
操作结束后将伴随着中断的产生。PCI 设备可以使用 INTA#、INTB#、INTC#和 INTD#
信号提交中断请求,也可以使用 MSI 机制提交中断请求。
1.3.1 PCI总线事务的时序
PCI 总线使用第1.2节所述的信号进行数据和配置信息的传递,一个 PCI 总线事务的基
1