PCI Peripheral Component Interconnect 总线用于建立高性能低成本的局部总线,经过几代的发展,使得传输率从 132M/s 到 528 M/s。PCI 总线满足了低端桌面系统和高端局域网服务器的需求。PCI 总线组件和外接卡是处理器独立的。能有效地过渡到未来的处理器,以及与多处理器架构一起使用,多处理器架构也一样。PCI 总线的一个缺点是单总线最大可以驱动 10 个负载。
1. PCI总线的定义和历史背景
PCI(Peripheral Component Interconnect) 是一种用于计算机总线的标准接口,最早由英特尔公司推出。它被设计用于连接计算机的主板和外部设备之间,如显卡、网卡、声卡等,并提供高速的数据传输通路。
PCI总线的发展起源于上个世纪90年代初,当时计算机系统对于更高带宽和更快数据传输速率的需求逐渐增加。随着计算机性能的提升,传统的ISA总线已经无法满足高速数据传输的需求,因而推动了PCI总线的出现和发展
2. PCI总线的基本架构
PCI总线采用多总线桥(Multi-Bus Bridge)的设计思路,将计算机系统中的不同总线连接起来。它包含以下几个主要组成部分:
- 主机桥(Host Bridge):连接CPU和内存总线与PCI总线之间的数据传输。
- PCI槽(PCI Slots):用于插入各种外部设备的插槽,并与PCI总线进行连接。
- PCI设备(PCI Devices):外部设备,如显卡、网卡等,通过PCI插槽与计算机系统进行通信。
- PCI桥接器(PCI Bridges):用于连接不同PCI总线之间以及PCI总线与其他总线之间的数据传输。
3. PCI总线的工作原理
PCI总线的工作原理可以简单地描述为以下几个步骤:
- 初始化:计算机开机时,主机桥会对PCI总线上的所有设备进行初始化,并分配唯一的设备号。
- 数据传输:PCI总线支持并行传输,通过总线控制信号和地址信号实现数据的传输和控制。
- 中断机制:PCI总线提供中断信号,用于设备向主机发送中断请求。
- 总线控制和仲裁:PCI总线通过仲裁机制控制总线上各个设备的访问顺序和优先级。
4. PCI总线的特点
PCI总线具有以下几个特点:
- 高带宽:PCI总线支持32位或64位数据传输,最高带宽可达133MB/s。
- 热插拔:PCI总线支持热插拔功能,用户可以在计算机运行时插入或拔出PCI设备。
- 兼容性:PCI总线具有良好的兼容性,可以与不同厂商的设备进行通信。
- 易于扩展:通过PCI桥接器,可以将多个PCI总线连接起来,扩展系统的设备数量和性能。
5. PCI总线的应用领域
PCI总线广泛应用于各类计算机系统中,特别适合对带宽和速度要求较高的应用场景。以下是几个常见的应用领域:
- 图形处理:PCI总线被广泛用于连接显卡和图形加速器,提供高速的图形处理能力。
- 网络通信:PCI总线可以连接各种网络接口卡,用于实现高速网络通信。
- 视频采集:PCI总线可连接视频采集卡,用于实时采集和处理视频信号。
- 数据存储:PCI总线可连接高速硬盘控制器,实现快速的数据存储和检索。
配置空间
PCI 规范通过单独的配置地址空间为 PCI 总线上的每个设备(或目标)提供了完全由软件驱动的初始化和配置。所有 PCI 设备,除了主机总线桥,都需要为此提供 256 字节的配置寄存器。
PCI 设备先天是小端存储的,这意味着所有多字节字段在较低地址具有最低有效值。这需要一个大端处理器(比如 Power PC)来执行对 PCI 设备读写数据的正确字节交换,包括对配置地址空间的任何访问。
系统必须提供一种允许访问 PCI 配置空间的机制,因为大多数 CPU 没有这种机制。这个任务通常由 Host to PCI Bridge(主机桥) 执行。定义了两种不同的机制来允许软件生成所需的配置访问。配置机制 1 是首选方法,而机制 2 是为了向后兼容而提供的。这里只描述配置机制 1,因为它是未来将使用的唯一访问机制。
配置机制
使用了两个 32 位的 I/O位置,第一个位置 (0xCF8
) 被称为 PCI_CONF_ADDR
,第二个位置 (0xCFC
) 被称为 PCI_CONF_DATA
。 PCI_CONF_ADDR
指定需要访问的配置地址,而对 PCI_CONF_DATA
的访问将实际生成配置访问,并将数据传输到 PCI_CONF_DATA
寄存器或从 PCI_CONF_DATA
寄存器得到数据。
PCI 设备结构
PCI 规范定义了 256 字节配置空间寄存器的组织,并为该空间引入了一个特定的模板。图 2 和 3 显示了 256 字节配置空间的布局。所有 PCI 兼容设备必须支持 供应商ID、设备ID、命令和状态、修订ID、类代码 和 报头类型 字段。其他寄存器的实现是可选的,这取决于设备的功能。
-
Device ID(设备 ID):
标识特定的设备,有效的 ID 由供应商分配
-
Vendor ID(供应商 ID):
标识设备的制造商。有效的 ID 是由 PCI-SIG 分配的,以确保唯一性,
0xFFFF
是一个无效的值,将在读取不存在设备的配置空间寄存器时返回 -
状态寄存器
用于记录 PCI 总线相关事件的状态信息
-
命令寄存器
提供对设备生成和响应 PCI 周期的能力的控制。所有设备都支持的唯一功能是,当向该寄存器写入 0 时,除配置空间访问外,都断开设备与 PCI 总线的所有访问连接(见下文)
-
Class Code (类型码):
一种只读寄存器,它指定设备执行的功能类型
-
Subclass (子类型):
用于指定设备执行的特定功能
-
Prog IF (Programming Interface Byte 编程接口字节)
一种只读寄存器,它指定设备具有的寄存器级编程接口(如果有的话)
-
Revision ID (修订 ID):
为特定设备指定修订标识符。有效的id由供应商分配。
-
BIST (built-in self test 内置自检)
表示该状态并允许控制设备 BIST
-
Header Type (头类型)
标识从字节 0x10 开始的头的其余部分的布局,还指定设备是否具有多个功能。其中 0x0 指通用设备,0x1 指 PCI - PCI 桥,0x2 指 CardBus 桥
如果设置了该寄存器的第 7 位,则设备具有多种功能,否则为单一功能设备
-
Latency Timer (延迟计时器)
以 PCI 总线时钟为单位指定延迟计时器
-
Cache Line Size (缓存线大小)
指定系统缓存行大小,以 32 位为单位。设备可以限制其支持的缓存先大小的数量,如果将不支持的值写入该字段,设备的行为将像写入值为 0 一样
-
CardBus CIS 指针
指向卡信息结构,由 CardBus 和 PCI 之间共享硅的设备使用
-
中断线
指定设备的中断引脚连接到系统中断控制器的哪个输入,并且由任何使用中断引脚的设备实现。对于 x86 架构,这个寄存器对应于 PIC IRQ 编号0-15(而不是I/O APIC IRQ编号),0xFF 的值定义没有连接
-
中断引脚
指定设备使用的中断引脚。其中:
- 0x1 是 INTA#
- 0x2 是 INTB#
- 0x3 是 INTC#
- 0x4 是 INTD#
- 0x0 表示设备没有使用中断引脚
-
最大延迟时间
只读寄存器,指定设备需要访问 PCI 总线的频率(以 1/4 微秒为单位)
-
Min Grant
只读寄存器,指定设备需要的突发周期长度,单位为 1/4 微秒(假设时钟频率为 33 MHz)
-
功能指针
指向一个由设备实现的新功能链表的指针(即该函数配置空间的偏移量)。如果状态寄存器(能力列表位)的第 4 位设置为 1,则使用。底部的两位是保留的,并且应该在指针被用来访问配置空间之前被屏蔽。
基址寄存器 Base Address Registers (BAR)
基址寄存器(BAR) 可以用来保存设备使用的内存地址,或端口地址的偏移量。通常,内存地址 BAR 需要位于物理 RAM 中,而 I/O 空间 BAR 可以驻留在任何内存地址(甚至超出物理内存)。要区分它们,可以检查最低位的值。下面的表格描述了两种类型的 BAR:
内存空间 BAR 布局
位 | 英文 | 描述 |
---|---|---|
0 | Always 0 | 常为0 |
1 ~ 2 | Type | 类型 |
3 | Prefetchable | |
4 ~ 31 | 16 Byte Aligned Base Address | 16字节对齐基址 |
I/O 空间 BAR 布局
位 | 英文 | 描述 |
---|---|---|
0 | Always 1 | 常为 1 |
1 | Reserved | 保留 |
2 ~ 31 | 4-Byte Aligned Base Address | 4字节对齐基址 |
Memory Space BAR Layout 的 Type 字段指定基本寄存器的大小,以及它在内存中的映射位置:
标签:配置,总线,PCI,寄存器,ID,设备 From: https://www.cnblogs.com/imreW/p/17815446.html