PCIe的内存地址空间、I/O地址空间和配置地址空间
pci设备与其它接口的设备(如i2c设备)最大的不同是存在内存地址空间和配置地址空间,本文分析一下它们的用途。
首先区分一下IO空间和内存空间
cpu会访问的设备一般有内存和外设寄存器,如下图所示。x86架构采用独立编址将内存操作与外设IO操作分开了才有了内存空间和IO空间的区分。x86平台cpu内部对内存和外设寄存器访问的指令也是不同的。arm等其他平台都采用统一编址,不区分内存和外设的访问,我个人觉得这才是合理的。
IO空间:访问外部设备寄存器的地址区域,x86平台为64k
内存空间:访问内存的地址空间,32位平台为4G
pci设备的内存空间是怎么回事呢
常见的设备都只提供寄存器供cpu访问,对于低速外设这样的模式是足够的。但是对于需要大量、高速数据交互的外设就需要引入外设内存空间了。在网卡、显卡这样的pci高速外设中不仅有寄存器还有了一块内存。