PCI总线进阶(二)

本文详细介绍了PCI总线配置空间的结构、重要寄存器及其作用,包括Device ID、Vendor ID、Status和Command寄存器。还阐述了PCI配置空间的访问流程,包括I/O方式和通过寄存器访问,以及设备识别和枚举过程。此外,讨论了HOST访问PCI设备的两种方式——Posted和Non-Posted,并解析了PCI总线配置的Type 00h和Type 01h请求类型。
摘要由CSDN通过智能技术生成

PCI总线进阶(二)

一、PCI配置空间简介

PCI具有三个相互独立的物理地址空间:总线物理地址空间、I/O设备地址空间和配置空间。其中配置空间是PCI总线所特有的一个物理地址空间,它存在的意义是:在系统加电自检的时候,BIOS检测PCI总线上挂载的PCI设备的时候,由于不同厂家、不同设备的驱动的差异性导致其具有不同的配置性,而系统需要对这些PCI设备进行统一配置,这就使得配置空间必须存在了,这样就可以实现设备参数的自动配置,达到即插即用的要求。

PCI总线规范定义的配置空间的总长度为256字节的长度,其中包含64字节的配置空间头,配置头的格式都是一样的,配置头的主要功能是用来识别设备、定义主机访问PCI卡的方式(I/O访问还是存储器访问)、配置中断信息。剩下的192个字节称为本地配置空间,主要定义PCI卡上局部总线的特性、本地空间基地址及范围等。


表1 配置空间头信息

       根据上表的配置空间头的信息,看一下比较重要的几个寄存器:

Device ID和Vendor ID是PCI设备的设备号和产商号,系统是通过这两个找到设备驱动的,地址空间是00h-03h。

Status:状态寄存器。记录设备状态。

Command:命令寄存器。负责设备控制。

Revision ID:版本ID号。

Class Code:类代码,用于标志PCI设备用途的。共三字节,分别是类代码、子类代码、编程接口。类代码不仅用于区分设备类型,还是编程接口的规范,这就是为什么会有通用驱动程序。地址空间处于09h-0Bh处,它是一段只读的代码。

BIST:内自建测试。

Header Type:头部类型。主要用于PCI scan的,减小桌面显示的延迟。地址空间是0Eh。这是一个8Byte 的寄存器,其中的第七位为0时,是single单功能设备;bit7为1时,是multi多功能设备。

Latency Timer:等待计时器。

CacheLine Size:缓存线大小。

IRQ Line:IRQ编号。使用APIC(高级可编程中断控制器),它支持管理24个中断,不同的中断号申请好之后进行相应的中断处理。
     IRQ Pin:中断引脚。PCI有4个中断引脚,该寄存器表明该设备连接的是哪个引脚。

Cardbus CIS Pointer:CIS卡总线指针。

Subsystem ID:子系统ID号。

Subsystem Vendor ID子系统版本号。

Base Address Register:基址寄存器。这是32位寄存器,如果从这个位置读出的值最低位是1,代表IO地址,否则代表内存地址。系统加电后,引导程序通过向基址寄存器写入全1,并重新读回,如果认为最低位为0,整个地址可以分成高位的全“1”部分,和低位的全“0”部分。引导程序可以判断出全“0”部分是PCI设备自己寻址空间,因而可以确定板卡需要资源的大小,并给它分配一块空闲的I/O或内存空间,并把分配地址的首地址写回到基址寄存器。驱动程序可以通过读这个基址寄存器取得基地址,再加上设备的偏移地址就可以访问这个设备的寄存器了。

                      

                                                                                   内存空间访问基地址寄存器                                                      I/O方式访问基址寄存器

                                                                

Expansion ROM Base Address:扩展基地址保留。寄存器格式如下:


Capabilities Pointer:能力指针。

Interrupt Line:中断线寄存器,它是一个8位寄存器,用来报告中断的连接情况,它是一个可读写的寄存器,凡是使用中断引脚的设备必须对它进行设置,设备驱动程序和操作系统可以利用这个信息来确定中断向量。该寄存器的值要受系统体系的支配。对于X86体系结构,该寄存器的值和标准8259配置中的IRQ编号(0~15)相对应。255表示没有连接到任何中断控制器,15~255之间的值为保留。

二、PCI配置空间访问的流程

PCI总线内部配置空间的访问方式有两种。

一种是I/O方式访问。通过I/O方式访问的配置空间可通过两个访问寄存器,CONFIG_ADDRESS寄存器(PCI配置空间地址)和CONFIG_DATA寄存器(PCI配置空间数据)。这两个寄存器在PC中分别对应着CF8h和CFCh端口,并且是32位端口,即读写要用的32为IN和OUT汇编指令。

每个PCI设备可应用三个信息进行定位,即BusNumber、Device Number和Function Number。另外,PCI配置空间一共是256个字节,被分割成64个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值