访问PCIe配置空间using Intel Chipsets

本文详细介绍了如何使用Intel Chipsets访问PCIe配置空间,包括传统的CF8h/CFCh方法和内存映射方法。针对4K的配置空间,内存映射方法解决了CF8h/CFCh无法访问全部空间的问题。内容涵盖计算内存地址的公式以及对32位系统的影响,并提供了C语言转换代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

访问PCIe配置空间using Intel Chipsets

 

     目前用于访问PCIe配置空间寄存器的方法需要追溯到原始的PCI规范。为了发起PCI总线配置周期,Intel实现的PCI规范使用IO空间的CF8h和CFCh来分别作为索引和数据寄存器,这种方法可以访问所有PCI设备的255 bytes配置寄存器。Intel Chipsets目前仍然支持这种访问PCI配置空间的方法。

    PCIe规范在PCI规范的基础上,将配置空间扩展到4K bytes,至于为什么扩展到4K,具体可以参考PCIe规范,这些功能都需要配置空间。原来的CF8/CFC方法仍然可以访问所有PCIe设备配置空间的头255 bytes,但是该方法访问不了剩下的(4K-255)配置空间。怎么办呢?Intel提供了另外一种PCIe配置空间访问方法。Intel Chipset通过将配置空间映射到内存地址空间,PCIe配置空间可以像对映射范围内的内存进行read/write一样来访问了。这种映射是由北桥芯片来完成的,但是不同芯片的映射方式也是不同的。

1、CF8h/CFCH Method

    Intel Chipsets使用IO空间的CF8h/CFCh地址来访问PCI设备的配置寄存器,该方法同样可以访问PCIe设备的头255配置寄存器。

    为了对已知PCI设备发起一个PCI总线配置周期,软件必须执行以下步骤:

  1. PCI设备的总线号必须被填写到IO地址CF8h的[23:16] bits

  2. PCI设备的设备号必须被填写到IO地址CF8h的[15:11] bits

  3. PCI设备的功能号必须被填写到IO地址CF8h的[10:8] bits

  4. 需要访问的寄存器双字地址必须被填写到IO地址CF8h的[7:2] bits

  5. CF8h的最高位为配置位,该位必须设置为1

  6. 对于写操作,将设备的特定信息组合成一个双字(4bytes)后,写到CFCh地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值