📢 声明:
- 🥭 作者主页:【MangoPapa的CSDN主页】。
- ⚠️ 本文首发于CSDN,转载或引用请注明出处【点击查看原文】。
- ⚠️ 本文为非盈利性质,目的为 个人学习记录 及 知识分享。因个人能力受限,存在协议解读不正确的可能。若您参考本文进行产品设计或进行其他事项并造成了不良后果,本人不承担相关法律责任。
- ⚠️ 若本文所采用图片或相关引用侵犯了您的合法权益,请联系我进行删除。
- 😄 欢迎大家指出文章错误,欢迎同行与我交流 ~
- 📧 邮箱:mangopapa@yeah.net
文章目录
|
✨ 1. VPD是什么?
Vital Product Data (VPD),顾名思义,重要产品数据。VPD记录了FRU(Feild Replaceable Unit,现场可替换单元)设备的部件号、序列号等信息,可以唯一标志系统的软件、硬件,也可以存放系统微指令。VPD提供了一种存储设备性能或故障等信息的机制,软件可以将PCIe设备的性能参数或故障信息回填到VPD中,方便设备使用或调试。VPD通常存放在EEPROM中,当然其他掉电不掉数据的存储设备也可以。
VPD机制是一种可选的机制,PCIe卡是否支持VPD具体依赖于厂商。从系统层面看,VPD机制的目的是提供或收集系统软硬件等的信息,便于系统所有者或管理员在必要的时候进直接取用。
|
✨ 2. VPD组成
2.1 VPD Tag
VPD数据类型有两种:Small Resource 和 Large Resource,其格式分别如表1和表2所示。
Offset | Description |
---|---|
byte0 - bit [7] | 固定值 0b,Small Resource类型, |
byte0 - bit [6:3] | Small Item名称 |
byte0 - bit [2:0] | VPD 长度,单位byte |
bytes 1-n | 真实的VPD信息 |
Offset | Description |
---|---|
byte0 - bit [7] | 固定值 1b,Large Resource类型 |
byte0 - bit [6:0] | Large Item名称 |
byte1 | data itm长度的低8bit |
byte2 | data item长度的高8bit |
bytes 3-n | data item |
VPD数据是按照Tag分段的,一般由四段组成,按照先后顺序分别为:
- VPD起始Tag(02h),Large Resource类型,标志VPD开始,并提供设备的产品名称;
- VPD-R Tag(10h),Large Resource类型,其后为只读类型的关键字信息(一笔或多笔),只读类型关键字信息不可通过软件改写,即便对这些地址的数据进行写覆盖,也不会对该区域数据有任何影响;
- VPD-W(11h),Large Resource类型,其后为可读写关键字信息(一笔或多笔),即其后关键字信息是软件可修改的,常用来存放实时的设备性能参数或错误码等信息;
- VPD结束Tag(0fh),Small Resource类型,标志VPD的结束,软件在读到End Tag后不必再往后继续读了。
⚠️注意:以上Tag值在使用过程中需要根据 PLUG-PLAY-ISA-1.0a 规范进行转换。
2.2 VPD关键字
2.2.1 VPD关键字格式
如上所述,VPD包含了多组关键字信息,一组关键字信息格式(图1)如下:
关键字名称由2B ASCII字符构成,只有PCI-SIG有资格可以定义关键字名称字段,除此以外不允许其他任何个人或组织自行定义VPD关键字名称。
关键字长度
指示该关键字数据的byte长度。
关键字数据
存放关键字,通用为ASCII字符。
除非另有说明,关键字名称和关键字数据字段均为ASCII字符。这样有一个好处,就是适用面广,不同厂家的计算机都能够支持这种ASCII字符。
举个关键字的例子(表3),某VPD存储了设备序列号,那么其关键字为ASCII符号“SN”,长度为8,数据即序列号为ASCII符“0000194”。
Byte | 0 | 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 |
---|---|---|---|---|---|---|---|---|---|---|---|
Hex (h) | 53 | 4e | 08 | 30 | 30 | 30 | 30 | 30 | 31 | 39 | 34 |
ASCII符 | S | N | - | 0 | 0 | 0 | 0 | 0 | 1 | 9 | 4 |
Description | 关键字为‘SN’ | 长度8B | 关键字数据为“00000194” |
2.2.2 VPD关键字分类
VPD关键字按照可读写属性可以分为只读关键字信息和可读写关键字信息。
(1) 只读关键字
只读关键字记录了设备部件号、序列号等信息,是不可修改的。迄今为止,PCI-SIG定义的只读关键字有如下几类(表4):
关键字 | 名称 | 解释 |
---|---|---|
PN | Part Number,部件号 | 部件号是配置空间头标中Device ID的补充 |
EC | Engineering Change Level of the Add-in Card | 插入卡的工程变更等级 |
FG | Fabric Geography | 预留给PICMG(PCI工业计算机制造商组织) |
LC | Location | 预留给PICMG |
MN | Manufacture ID | 厂商号,Vendor ID的扩展 |
PG | PCI Geography | 预留给PICMG |
SN | Serial Number | 序列号,唯一确定一张插入卡 |
TR | Thermal Reporting | 这个关键字用以汇报PCIe卡的四个参数:AFI Level, MaxTherm, Dtherm 和 MaxAmbient。参数具体意义请参考PCIe CEM Spec |
Vx | Vendor Specific | Vendor指定的item,‘V’是固定的,x可以为0-9或A-Z |
CP | Extended Capability | 扩展能力,允许在VPD内定义新的扩展能力 |
RV | Checksum & Reserved | 该item第一byte为校验和,其余bytes预留 |
(2)可读写关键字
可读写关键字记录了设备的性能参数、错误码或其他设备关键信息,是软件可读写的。目前定义的几类可读写VPD关键字如下(表5):
关键字 | 名称 | 解释 |
---|---|---|
Vx | Vendor指定关键字 | ‘V’字符固定,x可为0-9或A-Z |
Yx | 系统指定关键字 | ‘Y’字符固定,x可为0-9或A-Z |
YA | 资产标签标识符 | 系统指定,系统管理员指定资产标签 |
RW | 剩余可读写空间 | 用以指明未使用的读写空间 |
2.3 完整的VPD举例
Offset | Item Value |
---|---|
0 | Large Resource Type ID String Tag (02h) 82h “Product Name” |
1 | Length 0021h |
3 | Data “ABCD Super-Fast Widget Controller” |
36 | Large Resource Type VPD-R Tag (10h) 90h |
37 | Length 0059h |
39 | VPD Keyword “PN” |
41 | Length 08h |
42 | Data “6181682A” |
50 | VPD Keyword “EC” |
52 | Length 0Ah |
53 | Data “4950262536” |
63 | VPD Keyword “SN” |
65 | Length 08h |
66 | Data “00000194” |
74 | VPD Keyword “MN” |
76 | Length 04h |
77 | Data “1037” |
81 | VPD Keyword “RV” |
83 | Length 2Ch |
84 | Data Checksum |
85 | Data Reserved (00h) |
128 | Large Resource Type VPD-W Tag (11h) 91h |
129 | Length 007Ch |
131 | VPD Keyword “V1” |
133 | Length 05h |
134 | Data “65A01” |
139 | VPD Keyword “Y1” |
141 | Length 0Dh |
142 | Data “Error Code 26” |
155 | VPD Keyword “RW” |
157 | Length 61h |
158 | Data Reserved (00h) |
255 | Small Resource Type End Tag (0Fh) 78h |
|
✨ 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数据。
|
✨ 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读写失败,造成不可预测的后果。
|
📚 参考
- PCI Express Base Specification Revision 5.0 Version 1.0 (22 May 2019)
- 怎么读取PCIe设备的VPD信息?
|
🔥 精选往期 PCIe 协议系列文章🔥
- 【最新技术早知道】PCIe Gen5 还没用上,Gen6 就来了?PCIe 6.0 系列文章之:《PCIe 6.0,到底 6 在哪?》
- 【PCIe 协议】听说你做 PCIe 很多年,还不知道 PCIe Hierarchy ID 是什么 ???
- PCIe原子操作(Atomic Operation)
- PCIe事务排序(Transaction Ordering)
- PCIe地址转换服务(ATS)详解
- PCIe访问控制服务(ACS)
- PCIe锁定事务(Locked Transactions)介绍
- PCIe组播介绍(Multicast Operations)
- PCIe TLP Prefix & PASID TLP Prefix介绍
- PCIe ARI (Alternative Routing-ID Interpretation)介绍
- PCIe TPH (TLP Processing Hints) 介绍
- PCIe RN (Readiness Notification)介绍
- PCIe EA (Enhanced Allocation) 介绍
⬆️ 返回顶部 ⬆️