PCI/PCIe Error?设备总线?Bus?
目录
一、设备总线是什么?
二、并行总线 vs. 串行总线
三、网络设备 PCIE 报错?
配置寄存器
bus/device/function
操作系统枚举
一、设备总线是什么?
PCI(Peripheral Component Interconnect)是一种并行总线标准,用于将各种硬件设备(如显卡、网卡、声卡等)连接到计算机主板上。它最初由英特尔在1992年制定,并被广泛应用于台式机和工作站中。
PCI Express(Peripheral Component Interconnect Express),缩写为 PCIe 或 PCI-E,是一种高速串行计算机扩展总线标准,取代了旧的 PCI、PCI-X 和 AGP 总线标准。它是个人电脑图形卡 、 采集卡 、 声卡 、 硬盘驱动器主机适配器 、SSD、Wi-Fi 和以太网硬件连接的通用主板接口。PCIe 标准的最新修订版为 I/O 虚拟化提供了硬件支持。
与旧标准相比,PCIe 有许多改进:
- 更高的最大系统总线吞吐量
- 更低的 I/O 引脚数
- 更小的物理占用空间
- 更好的总线设备性能扩展
- 更详细的错误检测和报告机制
- 原生热插拔功能。
二、并行总线 vs. 串行总线
并行通信通道和串行通信通道之间的基本区别在于物理层用于传输比特的电导体数量。并行通信意味着不止一个这样的?导体。
例如,一个 8 位并行通道将同时传输 8 位(或一个字节 ),而串行通道将按顺序传输这些相同的位,一次一个。
如果两个 channel 都以相同的 clock speed 运行,则 parallel channel 将快 8 倍。
三、网络设备 PCIE 报错?
配置寄存器
PCI 设备有一组寄存器称为配置空间,PCI Express 为设备引入了扩展的配置空间。
配置空间寄存器与内存(memory)位置相互映射。设备驱动程序和诊断软件必须有权访问配置空间。
- 操作系统通常使用 API 来允许访问设备配置空间(永远推荐);
- 当作系统没有定义访问方法或内存映射配置空间请求的 API 时,驱动程序或诊断软件需要以与操作系统的底层访问规则兼容的方式访问配置空间。
bus/device/function
PCI Local Bus 相对于其他 I/O 体系结构的主要改进之一是其配置机制。
除常规的内存映射和 I/O 端口空间外,总线上的每个设备功能都有一个配置空间,长度为 256 字节,可通过寄存器的 8 位 PCI 总线号、5 位器件号和 3 位功能号(通常称为 BDF 或 B/D/F,缩写自 bus/device/function)进行寻址。
每个 PCI 最多承载 256 条总线,每条总线最多有 32 个设备,每个总线支持 8 种功能。单个 PCI 扩展卡即可以作为设备响应,并且必须至少实现 0 号功能。
配置空间的前 64 字节是标准化的,其余部分供应商定义。可以在剩余的 192 字节 PCI 配置空间中定义一个功能列表。每个功能都有一个字节来描述它是什么功能,还有一个字节来指向下一个功能。其他字节的数量取决于功能 ID。如果正在使用功能,则在 Status 寄存器中置位。
操作系统枚举
要对 PCI 设备进行寻址,必须通过将其映射到系统的 I/O 端口地址空间或内存映射地址空间来启用它。系统的固件(例如 BIOS)或作系统对基址寄存器进行编程,以通过将配置命令写入 PCI 控制器来通知设备其资源配置。由于所有 PCI 设备在系统重置时都处于非活动状态,因此不会为它们分配任何地址,操作系统或设备驱动程序可以通过这些地址与它们进行通信。BIOS 或操作系统通过 PCI 控制器使用每插槽或每设备 IDSEL(初始化设备选择)信号,在地理上寻址 PCI 设备(例如,第一个 PCI 插槽、第二个 PCI 插槽、第三个 PCI 插槽或主板上的集成 PCI 设备等)。
当计算机开机时,PCI 总线和设备必须由 BIOS 或操作系统枚举 。通过尝试访问每个总线、设备和功能的 PCI 配置空间寄存器来执行总线枚举。请注意,与 VID 和 DID 不同,Device Number 只是该总线上 device 的 sequential number。此外,在检测到新网桥后,将定义新的总线编号,并在设备编号 0 处重新开始设备枚举。
- 如果未收到来自设备功能 #0 的响应, 则总线主控器将执行中止并返回一个全位开启值(十六进制中的 FFFFFFFF),这是一个无效的 VID/DID 值,因此 BIOS 或作系统可以判断指定的 B/D/F 不存在。在这种情况下,不需要读取其余函数数字 (1-7),因为它们也不存在。
- 当成功读取供应商 ID 寄存器的指定 B/D/F 组合时,系统固件或操作系统会知道它存在; 它将所有 1 写入其 BAR,并以编码形式读回设备请求的内存大小。该设计意味着所有地址空间大小都是 2 的幂,并且自然对齐。
BIOS 或系统会将内存映射地址和 I/O 端口地址编程到器件的 BAR 配置寄存器中。只要系统保持开启状态,这些地址就一直有效。关闭电源后,这些设置将丢失,下次重新打开系统电源时将重复该过程。