PCIe的内存地址空间、I/O地址空间和配置地址空间

PCIe的内存地址空间、I/O地址空间和配置地址空间

pci设备与其它接口的设备(如i2c设备)最大的不同是存在内存地址空间和配置地址空间,本文分析一下它们的用途。

首先区分一下IO空间和内存空间
cpu会访问的设备一般有内存和外设寄存器,如下图所示。x86架构采用独立编址将内存操作与外设IO操作分开了才有了内存空间和IO空间的区分。x86平台cpu内部对内存和外设寄存器访问的指令也是不同的。arm等其他平台都采用统一编址,不区分内存和外设的访问,我个人觉得这才是合理的。
IO空间:访问外部设备寄存器的地址区域,x86平台为64k
内存空间:访问内存的地址空间,32位平台为4G

PCIe的内存地址空间、I/O地址空间和配置地址空间_第1张图片

pci设备的内存空间是怎么回事呢
常见的设备都只提供寄存器供cpu访问,对于低速外设这样的模式是足够的。但是对于需要大量、高速数据交互的外设就需要引入外设内存空间了。在网卡、显卡这样的pci高速外设中不仅有寄存器还有了一块内存

pci设备的配置空间和IO空间有什么区别呢
现在我们知道外设内存空间的大概用途了,那配置空间和IO空间不都是外设的寄存器吗,怎么还弄两个名字呢,它们有什么区别呢?
IO空间就和i2c设备的寄存器空间一样,用来获取外设状态、配置外设。

你可能感兴趣的:(linux驱动由浅入深系列)