PCIe VPD (Vital Product Data) 介绍

简介: PCIe VPD (Vital Product Data) 介绍

✨ 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所示。


表1 Small Resource Data类型定义  


image.png


表2 Large Resource Data类型定义


image.png



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关键字名称 + 1B关键字长度 + nB关键字数据

66309db993c54e87a6500590196ecc57.png


图1 VPD Format



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


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


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


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


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


表3 VPD关键字格式举例  

image.png


2.2.2 VPD关键字分类


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


(1) 只读关键字


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


表4 只读关键字  

image.png


(2)可读写关键字


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


表5 可读写关键字

image.png


2.3 完整的VPD举例

image.png

image.png

image.png




✨ 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数据。


ba7b268d356d4ba48213f7a014b4018e.png

图2 VPD Capability Structure  

5596c6e6ff6240d09b5b778002ffeedc.png

图3 VPD Address Register  

00e57b2bed16421d95a05410a824137b.png

图4 VPD Data Register  




✨ 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信息?



目录
相关文章
NR PDSCH(六) DL data operation
NR中,网络端会根据UE业务动态的调整BWP,进而改变频域资源范围;不同的BWP会配置CORESET/Searchspace确定不同的时频域资源,让UE在对应的资源上进行盲检接收DCI;通过DCI获得调度信息后,再去PDSCH对应的时域资源和频域资源上 decode data。
一文了解USB Type-C
现在的USB Type-C已经被广泛使用,移动设备基本都是使用Type-C。它主要是用于快充和作为音频接口。最近欧盟还要求电子设备统一使用Type-C接口,来防止浪费。接下来我们来简单了解这个接口。
|
芯片 C++ 异构计算
DDR的Controller、Channel、Chip、Rank、Bank、Row、Column、Sided
DDR的Controller、Channel、Chip、Rank、Bank、Row、Column、Sided
2430 0
DDR的Controller、Channel、Chip、Rank、Bank、Row、Column、Sided
NotImplementedError: Invalid CAN Bus Type - None
NotImplementedError: Invalid CAN Bus Type - None
|
Web App开发
PCIe TLP Prefix & PASID TLP Prefix介绍
PCIe TLP Prefix & PASID TLP Prefix介绍
1998 0
PCIe TLP Prefix & PASID TLP Prefix介绍
|
数据安全/隐私保护
PCIe ARI (Alternative Routing-ID Interpretation)介绍
PCIe ARI (Alternative Routing-ID Interpretation)介绍
1983 0
PCIe ARI (Alternative Routing-ID Interpretation)介绍
|
存储 人工智能
1009. Product of Polynomials (25)
#include using namespace std; int main(int argc, const char * argv[]) { double a[1001] = {0}, b[1001] = ...
801 0