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 示例