TripTheWorld

PCIe总线何去何从? 实际的需求催生了技术的变革。 PCIe就像是计算机王国里的一场“交通革命”,它替代了PCI成为计算机领域主要的互联总线。那么它的发展趋势如何?让我们一步一步揭开它神秘的面纱。欢迎关注微信公众号“硬件工程师宝典”,获取更多资讯。

PCIe从入门到精通之十三:PCIe设备Vender ID, Device ID, Subsystem Vendor ID, Subsystem ID的区别

0
阅读(69)

0,引言

在上一篇文章《PCIe从入门到精通之十二:PCIe设备的配置空间详解2》中,我们介绍了PCIe配置空间前0x3F个寄存器(header)以及Type0和Type1的不同部分。在这一篇文章中我们继续介绍PCIe配置空间中PCIe设备Vender ID, Device ID, Subsystem Vendor ID, Subsystem ID的区别。

所有PCIe主题的文章都会收录在《深入浅出聊PCIe》合集里,欢迎评阅。

需要下载PCIe学习资料标准的朋友(pdf格式),请关注本微信公众号“硬件工程师宝典”,在对话框内回复“PCIe”,将获取标准下载链接。

一, PCIe device四个ID 

PCIe Type0设备(Endpoint)使用一套多级的ID系统来唯一标识硬件,这有助于操作系统正确识别设备、加载相应的驱动程序以及区分不同制造商或同一制造商的不同产品。入下图所示,这四个主要的ID分别是:

71.png


66.png

 1. Vendor ID (供应商ID)

·        定义: 一个16位的标识符,由PCI SIG (PCI Special Interest Group) 分配给每个PCI/PCIe芯片制造商。

查询网址:https://pcisig.com/membership/member-companies

·        用途: 唯一标识芯片的原始制造商。无论该制造商生产什么类型的PCIe芯片,其Vendor ID都是固定的。

·        例子:

o   Intel: 0x8086

o   NVIDIA: 0x10DE

o   AMD: 0x1002

·        作用: 操作系统和驱动程序首先通过Vendor ID来确定芯片的生产商,这是芯片识别的第一步。

2. Device ID (设备ID)

·        定义: 一个16位的标识符,由芯片的原始制造商(由Vendor ID标识)为其生产的每种特定芯片类型分配。

查询网址:http://pci-ids.ucw.cz/

·        用途: 唯一标识特定供应商生产的某种特定型号或功能的产品。

·        例子:

o   Intel (Vendor ID 0x8086) 的某个特定网卡芯片可能有 Device ID 0x15BB。

o   NVIDIA (Vendor ID 0x10DE) 的某个特定GPU芯片可能有 Device ID 0x1C81。

·        作用: 与Vendor ID结合使用,Vendor ID:Device ID 组合可以唯一标识一个特定的芯片或功能单元。驱动程序通常会根据这个组合来加载。



3. Subsystem Vendor ID (子系统供应商ID)

·        定义: 一个16位的标识符,与主芯片的Vendor ID相同,由PCI SIG分配。但它用于标识制造或销售包含主PCIe芯片的完整板卡(子系统)的制造商。

·        用途: 当一个芯片制造商(由Vendor ID和Device ID标识)将其芯片销售给其他板卡制造商,由这些板卡制造商集成到自己的产品中时,Subsystem Vendor ID就用来标识这个最终的板卡制造商。

·        例子: 如果NVIDIA (Vendor ID 0x10DE) 生产了一个GPU芯片 (Device ID 0x1C81),然后华硕 (ASUS) 购买这个芯片并制造了一张显卡。那么这张显卡的:

o   Vendor ID: 0x10DE (NVIDIA)

o   Device ID: 0x1C81 (NVIDIA的某个GPU型号)

o   Subsystem Vendor ID: 0x1043 (华硕的Vendor ID)

·        作用: 区分使用相同主芯片但由不同板卡制造商生产的设备。这对于驱动程序来说很重要,因为即使主芯片相同,不同板卡制造商可能会有不同的BIOS、散热解决方案、接口布局或附加功能,可能需要特定的驱动版本或配置。

4. Subsystem ID (子系统ID)

·        定义: 一个16位的标识符,由子系统供应商(由Subsystem Vendor ID标识)为其生产的每种特定板卡型号分配。

·        用途: 唯一标识特定子系统供应商生产的特定型号的板卡。

·        例子: 延续上面的例子,华硕 (Subsystem Vendor ID 0x1043) 可能会为使用NVIDIA 0x1C81 GPU的某个特定型号显卡分配一个 Subsystem ID,例如 0x8670。

·        作用: 与Subsystem Vendor ID结合使用,Subsystem Vendor ID:Subsystem ID 组合可以唯一标识一个完整的PCIe板卡产品。这允许驱动程序针对特定板卡的具体特性进行优化或提供支持。




区别总结

72.png

简而言之:

·        Vendor ID:Device ID 标识的是核心芯片是什么,由芯片设计公司提供。

·        Subsystem Vendor ID:Subsystem ID 标识的是最终产品板卡是什么,由板卡生产商提供。

这种分层标识系统允许硬件和软件生态系统更精确地识别和管理PCIe设备,尤其是在芯片被多个第三方集成到不同产品中的情况下。

二,总结和实战

1.  总结

总而言之,Vender ID和Device ID表示的是芯片的信息;Subsystem Vendor ID和Subsystem ID表示的是板子制造商的信息。

所有的ID对应信息可以在PCI-SIG提供的汇总表中查询的到。

https://pci-ids.ucw.cz/v2.2/pci.ids

2.  Linux下如何查看这四个PCIe ID

下图是PCIe Spec中给出的这四个ID在寄存器中的位置。

66.png

下图是从一个实际系统中读出的值:

67.png

注:原图来源于网络,作了适当的修改。

 ·        图中,VID=8086,众所周知这个VID是给英特尔的;DID=9C43,这是一个8 Series LPC Controller,在PCI-SIG的汇总表查询如下图示;

68.png

·        图中,Sub VID=17aa,这是一个ThinkServer, Sub DID=3978是它家的一个板子。

 3.  Windows下如何查看这四个PCIe ID

通过设备管理器 (Device Manager)

这是最常用且直接的方法,适用于大多数设备。

步骤:

1)   右键点击“此电脑”(或“我的电脑”),选择“管理”。

2)   在左侧导航栏中,选择“设备管理器”。

3)   找到您想要查看的设备。设备通常按类型分类(例如,“显示适配器”、“网络适配器”、“通用串行总线控制器”等)。

4)   右键点击该设备,然后选择“属性”。

5)   在“属性”窗口中,切换到“详细信息”选项卡。

6)   在“属性”下拉菜单中,选择“硬件 ID”(Hardware IDs)。

7)   在“值”框中,您会看到类似 PCI\VEN_XXXX&DEV_YYYY&SUBSYS_ZZZZZZZZ&REV_WW 的字符串。

·        VEN_XXXX 中的 XXXX 就是 VID (Vendor ID)。

·        DEV_YYYY 中的 YYYY 就是 DID (Device ID)。

·        SUBSYS_ZZZZZZZZ 中的 ZZZZZZZZ 通常包含 Subsystem Device ID 和 Subsystem Vendor ID。前四位是 Subsystem Device ID,后四位是 Subsystem Vendor ID。例如,如果显示 SUBSYS_813910EC,则 8139 是 Subsystem Device ID,10EC 是 Subsystem Vendor ID。

·        对于某些设备,特别是USB设备,您可能会看到 USB\VID_XXXX&PID_YYYY 的格式,其中 PID 即为 Device ID。

 

三,抛砖引玉

在这一章中我们介绍了PCIe设备Vender ID, Device ID, Subsystem Vendor ID, Subsystem ID的区别。那么PCIe配置空间的header里(前0x3F)其它寄存器的具体读出的值是什么呢?

敬请关注下一篇:PCIe从入门到精通之十四:PCIe设备的配置空间header详解实战

四,参考文献:

需要以下参考文献(PCIe标准)的朋友,请关注本微信公众号“硬件工程师宝典”,在对话框内回复“PCIe”,将获取标准下载链接。

15_baidu_file.png

百度网盘分享的文件