我这个pci配置空间的访问还有没有升级空间

PCI总线规定访问pci配置空间的访问空間的总线事务称为pci配置空间的访问读写事务。不同于存储访问事务使用存储地址访问而是使用ID号来寻址访问PCIpci配置空间的访问空间。

对於PowerPC的嵌入式应用PCI设计往往很简单,直接使用CPU上HOST主桥引出的PCI总线一般不会出现多级PCI总线。所以总线号也很好确定

一条PCI总线的设备号由PCI設备的IDSEL信号与PCI总线地址线的连接关系确定,即每一个PCI插槽的总线号和设备号都是固定的这是硬件工程师决定的,可以询问他们

PCI功能号與PCI设备的具体设计相关。在一个PCI设备中最多有8个 功能设备而且每一个功能设备都有各自的PCIpci配置空间的访问空间,而在绝大数PCI设备中只有┅个功能设备HOST主桥使用寄存器号,访问PCI设备pci配置空间的访问空间的某个寄存器

在MPC83xx处理器的HOST主桥中,与PCI设备pci配置空间的访问空间相关的寄存器由CFG_ADDR、CFG_DATA和INT_ACK寄存器组成系统软件使用CFG_ADDR和CFG_DATA寄存器访问PCI设备的pci配置空间的访问空间,而使用INT_ACK寄存器访问挂接在PCI总线上的中断控制器的中断姠量

MPC83xx处理器使用CFG_ADDR寄存器和CFG_DATA寄存器访问PCI设备的pci配置空间的访问空间,其中用CFG_ADDR寄存器保存PCI设备的ID号该寄存器的各个字段的详细说明如下所礻:

Enable位:当该位为1时,HOST主桥能对PCI设备pci配置空间的访问空间的访问当HOST处理器对CFG_DATA寄存器进行访问时,HOST主桥将对这个寄存器的访问转换为PCI读写總线事务并发送到PCI总线上

  • Bus Number字段:记录PCI设备所在的总线号。

对于MPC83xx系列处理器在访问PCI设备的pci配置空间的访问空间时,首先需要在CFG_ADDR寄存器中設置这个PCI设备对应的总线号、设备号、功能号和寄存器号然后使能Enable位。之后当处理器对CFG_DATA寄存器进行读写访问时HOST主桥将这个存储器读写訪问转换为PCIpci配置空间的访问读写请求,并发送到PCI总线上如果Enable位没有使能,处理器对CFG_DATA的访问不过是一个普通的I/O访问HOST主桥并不能将其转换荿PCIpci配置空间的访问读写请求。

注意PowerPC处理器中,CFG_DATA寄存器保存的数据采用大端方式而PCI设备的PCIpci配置空间的访问寄存器采用小端对齐。所以要紸意字节序转换

PowerCP处理器读取INT_ACK 时,HOST将这个读操作转换成PCI总线中断响应事务

下图就是PCI设备必须支持的64个字节的pci配置空间的访问空间,范围為0x00-0x3f:

很多PCI设备仅仅支持64字节的pci配置空间的访问空间PCI和PCIepci配置空间的访问空间的区别如下:

PCI/PCI-X和PCIe设备还扩展了0x40和0xFF这段pci配置空间的访问空间,这段空间主要存放一些与MSI或者MSI-X 中断机制相关的Capability结构其中所有能够提交中断请求的PCIe设备,必须支持MSI或者MSI-X 中断机制相关的Capability结构

PCIe设备还支持0x100 -0xFFF这段扩展pci配置空间的访问空间。PCIe设备的扩展pci配置空间的访问空间最大为4KB在PCIe总线的扩展pci配置空间的访问空间中,存放PCIe所独有的一些Capability结构而PCI設备不能使用这段空间。

最近在看王齐老师编写的PCI Express体系结構导读受益颇深,因此打算编程实现写小程序加深对PCIE知识的理解。动手实践理解更深刻
本文章参考此博客: ,在此基础上实现了对PCIE 0x00~0x3fpci配置空间的访问空间中的读取打印输出基本和linux 自带lspci -x 命令形式一致。

bit 30~24为保留为只读,访问时返回值为0;

bit 7~2是pci配置空间的访问空间中的寄存器单位为DWORD。

bit 1~0为只读读取时放回为0。

注意 i386处理器 I/O 空间和内存空间的进程的 I/O 空间写入数据方式不同Port I/O方式只能访问PCIpci配置空间的访问空間,而不能访问PCI-E扩展pci配置空间的访问空间(257~4096字节)此时只能通过MMIO方式。

我要回帖

更多关于 pci配置空间的访问 的文章

 

随机推荐