PCIe VPD (Vital Product Data) 介绍


🔥点击查看精选 PCIe 系列文章🔥


📢 声明

  • 🥭 作者主页:【MangoPapa的CSDN主页】。
  • ⚠️ 本文首发于CSDN,转载或引用请注明出处【点击查看原文】。
  • ⚠️ 本文为非盈利性质,目的为 个人学习记录知识分享。因个人能力受限,存在协议解读不正确的可能。若您参考本文进行产品设计或进行其他事项并造成了不良后果,本人不承担相关法律责任。
  • ⚠️ 若本文所采用图片或相关引用侵犯了您的合法权益,请联系我进行删除。
  • 😄 欢迎大家指出文章错误,欢迎同行与我交流 ~
  • 📧 邮箱:mangopapa@yeah.net


— VPD是什么? —

✨ 1. VPD是什么?

  Vital Product Data (VPD),顾名思义,重要产品数据。VPD记录了FRU(Feild Replaceable Unit,现场可替换单元)设备的部件号、序列号等信息,可以唯一标志系统的软件、硬件,也可以存放系统微指令。VPD提供了一种存储设备性能或故障等信息的机制,软件可以将PCIe设备的性能参数或故障信息回填到VPD中,方便设备使用或调试。VPD通常存放在EEPROM中,当然其他掉电不掉数据的存储设备也可以。

  VPD机制是一种可选的机制,PCIe卡是否支持VPD具体依赖于厂商。从系统层面看,VPD机制的目的是提供或收集系统软硬件等的信息,便于系统所有者或管理员在必要的时候进直接取用。



— 2. VPD组成 —

✨ 2. VPD组成

2.1 VPD Tag

  VPD数据类型有两种:Small Resource 和 Large Resource,其格式分别如表1和表2所示。

表1 Small Resource Data类型定义
OffsetDescription
byte0 - bit [7]固定值 0b,Small Resource类型,
byte0 - bit [6:3]Small Item名称
byte0 - bit [2:0]VPD 长度,单位byte
bytes 1-n真实的VPD信息
表2 Large Resource Data类型定义
OffsetDescription
byte0 - bit [7]固定值 1b,Large Resource类型
byte0 - bit [6:0]Large Item名称
byte1data itm长度的低8bit
byte2data item长度的高8bit
bytes 3-ndata item

  VPD数据是按照Tag分段的,一般由四段组成,按照先后顺序分别为:

  1. VPD起始Tag(02h),Large Resource类型,标志VPD开始,并提供设备的产品名称;
  2. VPD-R Tag(10h),Large Resource类型,其后为只读类型的关键字信息(一笔或多笔),只读类型关键字信息不可通过软件改写,即便对这些地址的数据进行写覆盖,也不会对该区域数据有任何影响;
  3. VPD-W(11h),Large Resource类型,其后为可读写关键字信息(一笔或多笔),即其后关键字信息是软件可修改的,常用来存放实时的设备性能参数或错误码等信息;
  4. VPD结束Tag(0fh),Small Resource类型,标志VPD的结束,软件在读到End Tag后不必再往后继续读了。

  ⚠️注意以上Tag值在使用过程中需要根据 PLUG-PLAY-ISA-1.0a 规范进行转换。


2.2 VPD关键字

2.2.1 VPD关键字格式

  如上所述,VPD包含了多组关键字信息,一组关键字信息格式(图1)如下:

关键字信息 = 2B关键字名称 + 1B关键字长度 + nB关键字数据

图1 VPD Format

图1 VPD Format

  关键字名称由2B ASCII字符构成,只有PCI-SIG有资格可以定义关键字名称字段,除此以外不允许其他任何个人或组织自行定义VPD关键字名称。

  关键字长度指示该关键字数据的byte长度。

  关键字数据存放关键字,通用为ASCII字符。

  除非另有说明,关键字名称和关键字数据字段均为ASCII字符。这样有一个好处,就是适用面广,不同厂家的计算机都能够支持这种ASCII字符。

  举个关键字的例子(表3),某VPD存储了设备序列号,那么其关键字为ASCII符号“SN”,长度为8,数据即序列号为ASCII符“0000194”。

表3 VPD关键字格式举例
Byte0123467891011
Hex (h)534e083030303030313934
ASCII符SN-00000194
Description关键字为‘SN’长度8B关键字数据为“00000194”

2.2.2 VPD关键字分类

  VPD关键字按照可读写属性可以分为只读关键字信息和可读写关键字信息。


(1) 只读关键字

  只读关键字记录了设备部件号、序列号等信息,是不可修改的。迄今为止,PCI-SIG定义的只读关键字有如下几类(表4):

表4 只读关键字
关键字名称解释
PNPart Number,部件号部件号是配置空间头标中Device ID的补充
ECEngineering Change Level of the Add-in Card插入卡的工程变更等级
FGFabric Geography预留给PICMG(PCI工业计算机制造商组织)
LCLocation预留给PICMG
MNManufacture ID厂商号,Vendor ID的扩展
PGPCI Geography预留给PICMG
SNSerial Number序列号,唯一确定一张插入卡
TRThermal Reporting这个关键字用以汇报PCIe卡的四个参数:AFI Level, MaxTherm, Dtherm 和 MaxAmbient。参数具体意义请参考PCIe CEM Spec
VxVendor SpecificVendor指定的item,‘V’是固定的,x可以为0-9或A-Z
CPExtended Capability扩展能力,允许在VPD内定义新的扩展能力
RVChecksum & Reserved该item第一byte为校验和,其余bytes预留

(2)可读写关键字

  可读写关键字记录了设备的性能参数、错误码或其他设备关键信息,是软件可读写的。目前定义的几类可读写VPD关键字如下(表5):

表5 可读写关键字
关键字名称解释
VxVendor指定关键字‘V’字符固定,x可为0-9或A-Z
Yx系统指定关键字‘Y’字符固定,x可为0-9或A-Z
YA资产标签标识符系统指定,系统管理员指定资产标签
RW剩余可读写空间用以指明未使用的读写空间

2.3 完整的VPD举例

OffsetItem Value
0Large Resource Type ID String Tag (02h) 82h “Product Name”
1Length 0021h
3Data “ABCD Super-Fast Widget Controller”
36Large Resource Type VPD-R Tag (10h) 90h
37Length 0059h
39VPD Keyword “PN”
41Length 08h
42Data “6181682A”
50VPD Keyword “EC”
52Length 0Ah
53Data “4950262536”
63VPD Keyword “SN”
65Length 08h
66Data “00000194”
74VPD Keyword “MN”
76Length 04h
77Data “1037”
81VPD Keyword “RV”
83Length 2Ch
84Data Checksum
85Data Reserved (00h)
128Large Resource Type VPD-W Tag (11h) 91h
129Length 007Ch
131VPD Keyword “V1”
133Length 05h
134Data “65A01”
139VPD Keyword “Y1”
141Length 0Dh
142Data “Error Code 26”
155VPD Keyword “RW”
157Length 61h
158Data Reserved (00h)
255Small Resource Type End Tag (0Fh) 78h

— 3. VPD能力结构 —

✨ 3. VPD能力结构

  只有EEPROM等存储设备存储VPD是不够的,还需要相关PCIe组件实现VPD能力结构。PCIe VPD能力结构如图2所示,其中较为关键的有VPD Address Register和Message Address。

  • VPD Address Register(图3),VPD地址寄存器,其中F字段为VPD读写标志位,0->read,1->write;VPD Address字段用以指明存放VPD信息的地址。
  • VPD Data Register(图4),VPD数据寄存器,用以存放从VPD设备读回的VPD数据 或 待存放到VPD设备的VPD数据。

图2 VPD Capability Structure

图2 VPD Capability Structure

图3 VPD Address Register

图3 VPD Address Register

图4 VPD Data Register

图4 VPD Data Register


— 4. VPD访问机制 —

✨ 4. VPD访问机制

4.1 读VPD

  • 1️⃣ 发送单笔写请求VPD地址寄存器,其中VPD地址寄存器F位置零(表示开始读),然后填入要读取的APD首地址Addr;
  • 2️⃣ 硬件读取VPD存储设备指定地址,待该笔VPD数据(2DW)读取完毕并存放到VPD Data寄存器后,VPD地址寄存器F位被硬件置一(一次读完成);
  • 3️⃣ 软件监测到F位置一(一次读完成)后读取读取VPD Data;
  • 4️⃣ 地址Addr+4,重复1~3,直到读取完整APD信息(检测到VPD End Tag )。

4.2 写VPD

  • 1️⃣ 写VPD数据(长度1DW)到VPD Data寄存器
  • 2️⃣ VPD地址寄存器F位置一(表示开始写),然后填入VPD数据要存放的地址(例如EEPROM地址Addr);
  • 3️⃣ 硬件发送VPD数据到指定地址,并把VPD地址寄存器F位置零(一笔写完成);
    4️⃣ 地址Addr+4,填写到VPD数据寄存器中的VPD数据后移2DW,重复1~3,直到写完整APD信息。

⚠️注意如果硬件启动一次VPD读写(2DW)过程中,软件再次读写了VPD地址或数据,新的数据有可能会覆盖掉待发出的旧数据,导致VPD读写失败,造成不可预测的后果。



— 参考 —

📚 参考

  1. PCI Express Base Specification Revision 5.0 Version 1.0 (22 May 2019)
  2. 怎么读取PCIe设备的VPD信息?


— END —

🔥 精选往期 PCIe 协议系列文章🔥


⬆️ 返回顶部 ⬆️

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

MangoPapa

请作者喝瓶可乐吧

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

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

打赏作者

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

抵扣说明:

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

余额充值