数据结构 - Identify Command (标识命令) 深入分析 (第249页)
NVME2.0协议解读 1 min read

数据结构 - Identify Command (标识命令) 深入分析 (第249页)

Blog Author

Identify Command (标识命令) 深入分析

在 NVM Express® Base Specification revision 2.0b 中,Identify 命令是用来返回描述 NVM 子系统、域、控制器或命名空间信息的数据缓冲区。该数据结构的大小为 4,096 字节,并通过几个特定字段来传递相关信息。

Identify 命令概述

Identify 命令通过以下字段返回所需的信息: - Data Pointer(数据指针):指向数据缓冲区的起始位置。 - Command Dword 10:控制器标识符(CNTID)和控制器或命名空间结构(CNS)。 - Command Dword 11:命令集标识符(CSI)和 CNS 特定标识符。 - Command Dword 14:UUID 索引(如果控制器支持选择 UUID)。

其余的命令特定字段被保留。

数据结构字段分析

Data Pointer (数据指针)

  • 字段描述
  • 数据指针 (DPTR):指向数据缓冲区的开始位置。它不能指向一个 PRP 列表,因为数据缓冲区不能跨越多个页面边界。

  • 应用:此字段允许 Identify 命令返回的 4,096 字节的数据缓冲区正确存储到内存中的指定位置。

Command Dword 10 (命令字 10)

  • Controller Identifier (CNTID)
  • 字段描述

    • CNTID:用于标识控制器,作为一些 Identify 操作的一部分。在某些 Identify 操作中,CNTID 是可选的。
    • 如何使用
    • 如果不需要使用 CNTID,则主机软件应将该字段清零(0h 为有效控制器标识符),控制器应忽略该字段。
    • 支持命名空间管理功能的控制器必须支持该字段。
  • Reserved (保留):字段 15:08 是保留字段。

  • Controller or Namespace Structure (CNS)

  • 字段描述:指定要返回给主机的控制器或命名空间结构。
  • 应用:该字段指示 Identify 命令返回的是控制器信息还是命名空间信息(具体的结构参见后续部分)。

Command Dword 11 (命令字 11)

  • Command Set Identifier (CSI)
  • 字段描述:对于使用需要 CSI 字段的 CNS 值的 Identify 命令,指定要使用的 I/O 命令集。
  • 如何使用:如果 CNS 值不需要使用 CSI,则此字段应清零。

  • CNS Specific Identifier

  • 字段描述:对于特定的 CNS 值,指定一个必需的标识符。
  • 应用:根据不同的 CNS 值,这个字段的含义不同。例如:
    • 对于 NVM Set List (04h),该字段指定 NVM Set 标识符(NVMSETID)。
    • 对于 Domain List (18h),该字段指定域标识符(DOMID)。
    • 对于 Endurance Group List (19h),该字段指定耐久组标识符(ENDGID)。

Command Dword 14 (命令字 14)

  • UUID Index
  • 字段描述:指定 UUID 索引(用于控制器支持 UUID 选择的情况)。
  • 如何使用:如果控制器支持 UUID 的选择,则此字段用于指定 UUID 索引。

总结:

Identify 命令是 NVM 子系统、控制器或命名空间的核心信息获取命令,通过多个字段传递控制器标识符、命名空间结构以及命令集标识符等重要信息。理解这些字段的作用和数据结构的详细定义对于开发和调试 NVMe 设备非常关键。