数据结构 - Identify Command (标识命令) 深入分析 (第249页)
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为有效控制器标识符),控制器应忽略该字段。 - 支持命名空间管理功能的控制器必须支持该字段。
- CNTID:用于标识控制器,作为一些
-
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 设备非常关键。