PCI Class Code 解释

起因

最近用hwinfo 查看我们设计的PCIe 设备时,发现被计算机归类为RS232串口设备,非常疑惑,与是查阅资料学习了一下计算机归类设备的依据。发现是我们设置的PCI CLASS CODE不合适导致的

PCI Express (PCIe) Class Code

PCI Express (PCIe) Class Code 是一种标识符,用于在PCI和PCI Express设备中分类不同的设备类型。在PCI配置空间中,Class Code是一个16位的字段,分为三部分:Base Class、Subclass、Programming Interface,各占8位、8位和8位,共同定义了设备的类别和子类别,以及特定的编程接口或功能。

结构组成:
Base Class (基础类别): 占8位,定义了设备大类,如存储控制器、网络控制器、显示控制器等。基础类别代码帮助操作系统和驱动程序识别设备属于哪一大类。

Subclass (子类别): 同样占8位,进一步细化基础类别,指出设备在大类别下的具体用途或类型。例如,在显示控制器的基础类别下,子类别可以进一步区分是VGA控制器还是3D加速卡。

Programming Interface (编程接口): 最后8位,提供了关于设备如何编程或其接口特性的额外信息。这部分可以非常具体,指明设备遵循的特定标准或协议。

例子:
例如,一个典型的显卡可能具有以下Class Code:
Base Class: 0x03,表示这是一个显示控制器。
Subclass: 0x00,进一步说明是VGA兼容的控制器。
Programming Interface: 可能是0x00,表示标准的VGA兼容接口。
作用:
Class Code对操作系统非常重要,因为它允许OS自动识别并加载合适的驱动程序,而无需用户手动干预。当系统枚举PCIe设备时,会读取这些Class Codes,并根据这些信息来决定如何处理和配置设备。

PCI Express (PCIe) Class Code 是用来标识设备类型的编号系统,下面列举了一些常见的PCIe Base Class, Subclass, 以及 Programming Interface 的代码示例。请注意,这份表格并不全面,实际的编码范围更广,但可以为您提供一个大致的概念:

常见的Base Class Codes:

Base Class Code Description
0x00 Unclassified
0x01 Mass Storage Controller
0x02 Network Controller
0x03 Display Controller
0x04 Multimedia Device
0x05 Memory Controller
0x06 Bridge Device
0x07 Simple Communication Controller
0x08 Base System Peripheral
0x09 Input Device
0x0A Docking Stations
0x0B Processors
0x0C Serial Bus Controller
0x0D Wireless Controller
0x0E Intelligent I/O Controller
0x0F Satellite Communication Controller
0x10 Encryption/Decryption Controller
0x11 Data Acquisition and Signal Processing Control

示例Subclass and Programming Interface:

对于Display Controllers (Base Class 0x03):

Subclass Description Example Programming Interface
0x00 VGA Compatible Controller 0x00
0x01 XGA Controller -
0x02 3D Controller 0x00 (DirectX 9.0)
0x03 Video Controller 0x00
0x80-0xFF Other Varies

对于Network Controllers (Base Class 0x02):

Subclass Description Example Programming Interface
0x00 Ethernet Controller 0x00 (Ethernet)
0x01 Token Ring Controller 0x00
0x02 FDDI Controller 0x00
0x03 ATM Controller 0x00
0x04 ISDN Controller 0x00
0x80-0xFF Other Varies

请注意,上述代码仅涵盖了部分常见类别和子类别,每个类别和子类别下可能有多种编程接口。具体设备的Class Code信息应当参考设备制造商的文档或使用如lspci(Linux环境下)之类的工具直接查询硬件。

详细CLASS CODE请参考PCI SIG规范,并选择适合自己的CLASS CODE

https://pcisig.com/sites/default/files/files/PCI_Code-ID_r_1_12__v9_Jan_2020.pdf

subclass 示例

posted @ 2024-06-24 16:09  Hello-FPGA  阅读(367)  评论(0编辑  收藏  举报