【如何快速通过Class Code确认设备类型 】

本文详细解释了PCIe标准中的ClassCode结构,包括BaseClass、SubClass和ProgrammingInterface的作用,以及它们如何共同确定设备类型和功能。通过实例分析,展示了如何通过ClassCode识别设备如NVMeSSD。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.前言

在PCIe标准中,Class Code是一个用于标识连接到PCIe总线上设备的类型的字段。它由三个部分组成:Base Class、Sub Class和Programming Interface。

1.1 Base Class(基本类别)

这是最高级别的分类,用于指示设备的一般类别(比如显示控制器、网络控制器等)。
在这里插入图片描述

1.1.1 部分Base Class 说明

00h: Device was built before Class Code definitions were finalized
这表示设备是在PCI Class Codes被最终确定之前制造的,因此不会有特定的类别信息。

01h: Mass storage controller
大容量存储控制器,包括硬盘控制器、固态硬盘控制器、光盘驱动控制器、RAID控制器等。

02h: Network controller
网络控制器,如以太网卡、无线网卡、蓝牙适配器等。

03h: Display controller
显示控制器,包括图形处理单元(GPU)、视频适配器等。

04h: Multimedia device
多媒体设备,例如声卡、视频采集卡等。

05h: Memory controller
内存控制器,负责管理系统内存(RAM)的设备。

06h: Bridge device
桥接设备,用于连接不同的计算机总线或数据总线。例如,北桥和南桥芯片、PCI到PCI桥、PCI到PCIe桥等。

07h: Simple communication controllers
简单通信控制器,包括串行和并行端口、多媒体卡等。

1.2 Sub Class(子类别)

在Base Class的基础上提供更具体的设备类型信息。它进一步细分了设备属于基本类别中的哪一种具体类型。
在这里插入图片描述

1.3 Programming Interface(编程接口):这是最具体的分类层级,它提供关于设备支持哪种接口或有哪些特定功能的信息。

在这里插入图片描述

Class Code通常以16进制的形式表示,分成三个字节。每个字节对应一个以上提到的部分:

第一个字节(最低位字节):Programming Interface
第二个字节:Sub Class
第三个字节(最高位字节):Base Class
例如,如果一个PCIe设备的完整Class Code为0x030200,可以分解如下:
Base Class: 0x03,表示这是一个显示控制器(Display Controller)。
Sub Class: 0x02,表示这是一个3D加速器(通常是指图形处理单元或GPU)。
Programming Interface: 0x00,表示采用的是标准的编程接口。
Base Class和Sub Class的组合通常就足够识别设备的主要类型和功能。Programming Interface提供更详细的信息,特别是当有多种编程模式或操作模式可供选择时。
操作系统和驱动程序使用Class Code来确定如何与PCIe设备进行交互,例如,它可以帮助操作系统找到和加载合适的驱动程序。

1.4 例如当前系统下的SSD设备,我们可以通过setpci来读取这个设备的class code,在pcie协议规范里class code register 偏移是0x9,并且是占3个字节。

在这里插入图片描述

在这里插入图片描述
读取的class code 为010802,对应协议里就是Base Class=01, Sub-Class=08, Programming Interface=02,所以根据class code这个设备就是一个NVME设备。
在这里插入图片描述

PCI-SIG(PCI Special Interest Group,负责制定PCI标准的行业组织)提供了一个详细的Class Code列表,用于标准化设备类型的识别。开发人员和制造商通常会根据这个列表来设置他们的设备Class Code,以确保与操作系统和其他硬件的兼容性,有需要class code对照表的自取。
通过百度网盘分享的文件:PCI_Code…pdf
链接:https://pan.baidu.com/s/1RCEFCM3JcBVU6szRYV-fIg
提取码:Pcie

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏天Aileft

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值