【PCIe 总线及设备入门学习专栏 4.1 -- PCI 总线的地址空间分配】
文章目录
- Overview
本文转自:https://blog.chinaaet.com/justlxy/p/5100053219
Overview
PCI 总线具有32位数据/地址复用总线,所以其存储地址空间为 232=4GB。也就是PCI上的所有设备共同映射到这4GB上,每个PCI设备占用唯一的一段PCI地址,以便于PCI总线统一寻址。每个PCI设备通过PCI寄存器中的基地址寄存器来指定映射的首地址。
如下图所示:
注:需要注意的是PCI的地址空间和x86系统中的FSB并不是对等的,而是具有一定的映射关系。
PCI 体系结构中,一共支持三种地址空间:
- Memory Address Space
- I/O Address Space
- Configuration Address Space。
其中x86处理器可以直接访问的只有 Memory Address Space 和 I/O Address Space。而访问 Configuration Address Space 则需要通过索引 IO 寄存器来完成。
注:在PCIe中,则引入了一种新的 Configuration Address Space 访问方式:将其直接映射到了 Memory Address Space 当中。
如上图所示:
- 最左边的即为
Memory Address Space
,其中包括了多个 PCI Memory、AGP Video(显卡)Memory以及Extended Memory、Boot ROM等。 - 中间的为
I/O Address Space
,需要注意的是,虽然PCI支持32位的地址,但是由于x86的CPU只支持16位的I/O空间,这就限制了PCI的I/O Address Space最大只有64KB。 - 最右边的则为
Configuration Address Space
,由于每一个PCI设备最多支持8种功能(Function),每一条PCI总线最多支持32个设备,而每一个PCI总线系统最多又支持 256 个子总线(通过PCI桥)。因此,总的 Configuration Address Space 的大小为:256 Bytes/function x 8 functions/device x 32 devices/bus x 256 buses/system = 16MB
。
如图中所示,Configuration Address Space 所使用的 IO 寄存器范围为 0xCF8-0xCFF
。其中 0xCF8-0xCFB
为端口地址,0xCFC-0xCFF
为配置数据。