PCIe配置与VPD管理 - 页码161
NVMe-MI 1 min read

PCIe配置与VPD管理 - 页码161

Blog Author

深入分析:NVM Express® Management Interface Specification, Revision 2.0

1. I2C 读取操作与 FRU 信息设备

I2C 读取(如图 168 所示)在管理控制器与 NVMe 存储设备的 FRU 信息设备 之间传输数据。图示展示了如何通过 I2C 协议读取 FRU 信息设备中的数据。以下是关键点:

  • 起始与结束
  • I2C 读取操作从 Start 信号开始,并通过 ACK (确认)信号确认接收。数据的读取过程通过 ACKNACK 来实现。
  • 读取数据后,通过 Stop 信号结束通信。

  • 命令偏移量(Command Offset)

  • 管理控制器提供 命令偏移量,并指定要读取的 FRU 信息设备中的特定位置。命令偏移量的有效位数取决于 最大 FRU 信息设备大小
  • 偏移量以字节为单位,并按 I2C 读取的每个字节增加。当读取到 FRU 信息设备的最后一个字节时,内部偏移量 会清零(即回滚到 0h)。

  • 数据更新与清除

  • 内部偏移量 在设备开机时被清零。每次通过 SMBus 重置时,偏移量也会清零。
  • 在读取 最大 FRU 信息大小 的数据时,偏移量会按要求递增,直到读取完整设备数据。

2. VPD 公共头部(Common Header)

VPD 公共头部 是描述 VPD 结构的关键部分,它包含了若干字段,用于定义 VPD 中其他区域的偏移量。这些字段如图 169 所示,解释了如何根据偏移量定位不同的信息区块:

  • 字段说明
  • IPMI 格式版本号(IPMIVER):指示 IPMI 格式的版本号。
  • 内部使用区域起始偏移(IUAOFF):该字段表示 内部使用区域 的起始偏移量,以 8 字节为单位。若该字段为 0h,则表示该区域不存在。
  • 机箱信息区起始偏移(CIAOFF)板卡信息区起始偏移(BIAOFF)产品信息区起始偏移(PIAOFF):这些字段类似地指示各个信息区的起始位置,值为 0h 表示该区域不存在。
  • 多记录信息区起始偏移(MRIOFF):指示 多记录信息区 的偏移,若该区域不存在,则该字段为 0h。

3. 解析与存储 VPD 数据

  • VPD 数据格式
  • 每个 NVMe 存储设备的 FRU 信息设备 大小在 256 字节至 65,536 字节之间,存储着 VPD 数据。VPD 的内容包括多个可选和必须的区域,这些区域存储了设备的详细信息,如产品信息、机箱信息、板卡信息等。

  • 数据存储和更新

  • FRU 信息设备 是存储 VPD 数据的物理设备,管理控制器可以通过 VPD 读取命令(VPD Read)访问这些数据,并且可以使用 VPD 写入命令(VPD Write)来更新这些信息。

4. SMBus/I2C 与 I3C 模式的区别

  • SMBus/I2C 访问:在 SMBus 模式下,FRU 信息设备 可以通过 I2C 读取访问。当数据更新时,可以通过 I2C 写入更新 FRU 数据。但是,这种方式并不支持直接的 I2C 写入操作。
  • I3C 模式下的限制:在 I3C 模式下,FRU 信息设备无法通过 I2C 读取访问,此时 VPD 读取命令被用作访问机制。

总结

  1. I2C 读取与 FRU 信息设备:管理控制器通过 I2C 协议与 FRU 信息设备进行通信,读取其存储的数据。每次读取后,偏移量递增,直到读取完所有数据。该过程的灵活性取决于最大 FRU 信息设备的大小。

  2. VPD 公共头部:VPD 的组织结构通过公共头部定义了各个数据区域的偏移量。这些数据区域包括产品信息、机箱信息、板卡信息等,能够有效地描述设备的各类详细信息。

  3. SMBus/I2C 与 I3C 模式:在不同的总线模式下,VPD 的读取和更新有不同的访问机制。SMBus/I2C 模式下支持读取,而 I3C 模式下无法直接通过 I2C 读取,必须通过 VPD 读取命令来访问。

这些细节帮助开发者和硬件设计人员理解如何高效地管理和访问 NVMe 存储设备的 VPD 信息,从而确保设备在不同电源状态下的稳定运行。