一条PCI总线会挂接各种各样的PCI设备,而每一个PCI设备在PCI总线下具有唯一的设备号。系统软件通过总线号和设备号定位一个PCI设备之后,才能访问这个PCI设备的配置寄存器。值得注意的是,系统软件使用“地址寻址方式”访问PCI设备的存储器和I/O地址空间,这与访问配置空间使用的“ID寻址方式”不同。
PCI设备在系统中的存储器地址空间、I/O地址空间和配置空间的寻址方式有所不同,这些区别主要体现在寻址范围、访问方式和使用场景上。
1. 存储器地址空间(Memory Space):
-
寻址范围:
- 存储器地址空间通常是连续的内存地址范围,可以访问到PCI设备的内部存储器和寄存器。
- PCI设备的存储器地址空间范围通常由BAR(Base Address Register,基址寄存器)寄存器指定,BAR寄存器的值确定了设备内存空间的基地址和大小。
-
访问方式:
- 访问存储器地址空间类似于访问主机内存,使用内存读写指令(如load/store指令)。
- 系统软件通过将地址发送到PCI设备的地址总线,并读取或写入数据来访问设备的存储器空间。
-
使用场景:
- 适合用于需要高带宽和大数据传输量的场景,如DMA(直接内存访问)操作和数据缓冲区访问。
2. I/O地址空间(I/O Space):
-
寻址范围:
- I/O地址空间用于访问PCI设备的特定I/O端口和寄存器,这些端口是设备控制和状态监控的接口。
- PCI设备的I/O地址空间范围由PCI配置空间中的特定寄存器指定,通常是一个或多个8位或16位端口。
-
访问方式:
- 访问I/O地址空间需要使用专用的I/O读写指令(in/out指令),这些指令通过指定端口号来读取或写入设备的状态和控制信息。
-
使用场景:
- 适合用于需要实时响应和独立控制的场景,如中断控制、设备状态查询和命令控制。
3. 配置空间(Configuration Space):
-
寻址方式:
- PCI设备的配置空间是通过PCI总线上的特定地址空间进行访问的,不同于存储器和I/O地址空间的访问方式。
- 配置空间的寻址是通过配置地址寄存器(CONFIG_ADDRESS)来实现的,该寄存器的高位用于指定总线号、设备号和功能号,低位用于指定寄存器号(Register Number)。
-
访问方式:
- 访问配置空间是为了读取和配置PCI设备的各种属性和寄存器,包括设备ID、命令寄存器、BAR寄存器、中断信息等。
- 访问方式使用特定的配置读写指令,这些指令将配置地址寄存器(CONFIG_ADDRESS)和数据寄存器(CONFIG_DATA)结合使用,通过PCI总线传输配置信息。
-
使用场景:
- 用于初始化和配置PCI设备,设定设备属性、中断路由、BAR寄存器设置等,是系统软件进行PCI设备管理和控制的关键接口。
总结:
PCI设备的存储器地址空间、I/O地址空间和配置空间在系统中扮演着不同的角色和功能,它们的寻址方式、访问方式和使用场景各有特点。理解这些地址空间的区别和使用方法对于正确配置和管理PCI设备至关重要,能够有效地提升系统性能和稳定性。