Bootstrap

PLDM入门(七):FRU Data Format

一、PLDM FRU Record Data Format

字段顺序字段名称大小(字节)数据类型说明
1FRU Record Set Identifier2uint16标识FRU记录集的唯一值
2FRU Record Type1uint8指定FRU记录的类型
3Number of FRU Fields1uint8记录中包含的FRU字段总数
4Encoding Type for FRU Fields1uint8字段值的编码类型:
0=Unspecified, 1=ASCII, 2=UTF8, 3=UTF16, 4=UTF16-LE, 5=UTF16-BE
(6-255保留)
5+FRU Field #1 ~ #n可变TLV结构每个字段由以下三部分组成:
1. Type(1字节, uint8)
2. Length(1字节, uint8)
3. Value(长度由Length字段定义)

关键说明

  1. FRU字段结构
    1. 每个字段为TLV(Type-Length-Value)格式,具体类型、长度范围和值定义需参考表5(文档未提供表5内容,需结合标准文档完整版)。

    2. 编码类型(Encoding Type)
      影响字段值的解析方式,例如:

      • ASCII:单字节字符集
      • UTF16-LE/BE:小端/大端编码的Unicode
    3. 重复字段
      字段数量由Number of FRU Fields决定,每个字段按顺序排列(Type→Length→Value)

PLDM FRU 数据表格式(表3)

字段说明
FRU Record Data #1单个FRU记录数据块,格式遵循表2定义的TLV结构(包含类型、长度、值等字段)。
FRU Record Data #2第二个FRU记录数据块,结构与#1相同。
...重复的FRU记录数据块。
FRU Record Data #n第n个FRU记录数据块。

说明
整个FRU数据表由多个FRU记录数据块组成,每个数据块对应表2的结构(即包含FRU Record Set IdentifierRecord Type、字段数量、编码类型及具体字段的TLV数据)。


FRU 记录类型定义(表4)

Record Type描述用途
0Reserved保留,不可使用。
1General FRU Record通用FRU记录,字段类型由表5定义(如机箱类型、序列号等)。
2–253Reserved保留,不可使用。
254OEM FRU RecordOEM自定义记录,字段类型由表6定义(需包含厂商IANA和自定义字段)。
255Reserved保留,不可使用。

通用FRU记录字段类型(表5)

Field Type字段描述字段格式长度说明
0ReservedN/AN/A保留字段。
1Chassis TypeString1–255字节机箱类型(例如塔式、机架式等)。
2ModelString1–255字节设备型号。
3Part NumberString1–255字节部件号。
4Serial NumberString1–255字节序列号。
5ManufacturerString1–255字节制造商名称。
6Manufacture DateTimestamp10413字节生产日期(格式为DMTF Timestamp 104)。
7VendorString1–255字节供应商名称。
8NameString1–255字节设备名称。
9SKUString1–255字节库存单位编号。
10VersionString1–255字节版本号。
11Asset TagString1–255字节资产标签。
12DescriptionString1–255字节设备描述信息。
13Engineering Change LevelString1–255字节工程变更级别。
14Other InformationString1–255字节其他自定义信息。
15Vendor IANAuint324字节供应商的IANA企业号(用于OEM标识)。
16–255ReservedN/AN/A保留字段,不可使用。

OEM FRU记录字段类型(表6)

Field Type字段描述字段格式说明
0ReservedN/A保留字段。
1Vendor IANAuint32必填字段,表示OEM厂商的IANA企业号(用于唯一标识厂商)。
2–254OEM Specific Field TypesOEM自定义OEM可自定义字段类型和格式(例如字符串、整数等),需厂商自行定义规范。
255ReservedN/A保留字段。

示例应用

[FRU Record Set ID] [Record Type=1] [Num Fields=3] [Encoding=1 (ASCII)]
  → Field1 (Type=1, Length=5, Value="Rack")
  → Field2 (Type=4, Length=10, Value="SN12345678")
  → Field3 (Type=6, Length=13, Value="202309011200Z")

 Oem Fru

[FRU Record Set ID] [Record Type=254] [Num Fields=2] [Encoding=0 (Unspecified)]
  → Field1 (Type=1, Length=4, Value=0x00ABCDEF)  // Vendor IANA
  → Field2 (Type=2, Length=8, Value=0xA1B2C3D4)   // OEM自定义字段

二、PLDM Record Set/transfer 

1. FRU Record Set PDR(FRU记录集PDR)

  • 作用
    • 描述PLDM FRU记录集数据的特性(如存储位置、关联实体等)。
    • 帮助定位存储FRU记录集数据的终端(Terminus),以便访问这些数据。
    • 标识与FRU信息关联的特定实体(Entity)。
  • 规范来源:定义于DMTF标准文档DSP0248中,需结合该文档获取详细结构。

2. PLDM FRU数据传输表示(表7)

PLDM消息中的FRU数据由以下三部分组成:

字段描述
FRU Record Data一个或多个FRU记录数据块,格式遵循表2定义的TLV结构(包含类型、长度、值等)。
Pad(填充字节)0–3字节的填充,每个填充字节值为0x00,用于对齐数据。
FRUDataStructureIntegrityChecksum4字节的CRC-32校验和,用于验证数据完整性

三、PLDM FRU Record cmd

 

1. PLDM FRU数据传输命令概览(表8)

命令名称命令代码要求等级说明对应章节
GetFRURecordTableMetadata0x01Mandatory获取FRU记录表的元数据(版本、最大容量、总长度、记录数、校验和等)。9.2.2
GetFRURecordTable0x02Mandatory分块获取完整的FRU记录表数据。9.2.3
SetFRURecordTable0x03Conditional设置FRU记录表数据(仅在支持写入时可用)。9.2.4
GetFRURecordByOption0x04Optional按条件查询特定FRU记录(可选实现)。9.2.5

2. GetFRURecordTableMetadata 命令(表9)

请求格式

无请求数据(空请求)。

响应格式
字节偏移字段名称数据类型说明
0CompletionCodeenum8完成码
0x00: 成功
0x83: 无FRU数据表元数据(错误)
1FRUDATAMajorVersionuint8FRU数据规范的主版本(当前为0x01)。
2FRUDATAMinorVersionuint8FRU数据规范的次版本(当前为0x00)。
3–6FRUTableMaximumSizeuint32FRU表的最大容量(字节):
0x00000000: 不支持写入(Set命令无效)
0xFFFFFFFF: 未知
7–10FRUTableLengthuint32FRU表当前总长度(字节)。
11–12TotalRecordSetIdentifiersuint16表中所有记录集的唯一标识符总数。
13–14TotalRecordsuint16表中所有FRU记录的总数。
15–18FRUDataStructureTableIntegrityChecksumuint32FRU表的CRC-32校验和(不包含填充字节)。

3. GetFRURecordTable 命令(表10)

请求格式
字节偏移字段名称数据类型说明
0–3DataTransferHandleuint32数据传输句柄,用于标识当前传输块。
4TransferOperationFlagenum8传输操作标志
0x00 (GetNextPart): 获取下一块数据
0x01 (GetFirstPart): 从头开始获取
响应格式
字节偏移字段名称数据类型说明
0CompletionCodeenum8完成码
0x00: 成功
0x80: 无效句柄
0x81: 无效操作标志
0x85: FRU表不可用
1–4NextDataTransferHandleuint32下一块数据的传输句柄(用于连续分块传输)。
5TransferFlagenum8传输标志
0x01 (Start): 首块数据
0x02 (Middle): 中间块
0x04 (End): 末尾块
0x05 (StartAndEnd): 单块传输
6+PortionOfFRURecordTable可变长度FRU记录表的分块数据(格式遵循表3定义)。

4. SetFRURecordTable 命令(表11)

作用

通过分块传输方式写入FRU记录表数据(需终端支持写入操作)。


请求格式
字节偏移字段名称数据类型说明
0–3DataTransferHandleuint32数据传输句柄,用于标识当前传输块(若TransferFlagStartStartAndEnd,此字段被忽略)。
4TransferFlagenum8传输标志
0x01 (Start): 首块数据
0x02 (Middle): 中间块
0x04 (End): 末尾块
0x05 (StartAndEnd): 单块传输
5+PortionOfFRURecordTable可变长度FRU记录表的分块数据(格式遵循表7,包含填充和CRC-32校验和)。

响应格式
字节偏移字段名称数据类型说明
0CompletionCodeenum8完成码
0x00: 成功
0x80: 无效句柄
0x82: 无效传输标志
0x84: 数据完整性校验失败
1–4NextDataTransferHandleuint32下一块数据的传输句柄(用于连续分块传输)。

5. GetFRURecordByOption 命令(表12)

作用

通过条件过滤(记录句柄、类型、字段类型等)分块获取FRU记录数据(可选功能)。


请求格式
字节偏移字段名称数据类型说明
0–3DataTransferHandleuint32数据传输句柄,用于标识当前传输块(若TransferOperationFlag=GetFirstPart,此字段被忽略)。
4–5FRUTableHandleuint16FRU数据记录句柄,用于标识目标记录集(范围:0x0000–0xFFFF)。
6–7RecordSetIdentifieruint16记录集标识符
0x0000: 所有记录集
0x0001–0xFFFF: 指定记录集
8RecordTypeuint8记录类型
0x00: 所有类型
0x01–0xFF: 指定类型(如0x01为通用记录)
9FieldTypeuint8字段类型
0x00: 所有字段类型
0x01–0xFF: 指定字段类型(需与RecordType配合使用)
10TransferOperationFlagenum8传输操作标志
0x00 (GetNextPart): 获取下一块数据
0x01 (GetFirstPart): 从头开始获取

响应格式
字节偏移字段名称数据类型说明
0CompletionCodeenum8完成码
0x00: 成功
0x80: 无效句柄
0x81: 无效操作标志
0x85: FRU表不可用
1–4NextDataTransferHandleuint32下一块数据的传输句柄(用于连续分块传输)。
5TransferFlagenum8传输标志
0x01 (Start): 首块数据
0x02 (Middle): 中间块
0x04 (End): 末尾块
0x05 (StartAndEnd): 单块传输
6+FRUDataStructureData可变长度符合条件的FRU记录数据块(格式遵循表7)。

 

;