管理命令集 - ✅ 一、Get Features 命令的作用 (第182页)
NVME2.0协议解读 1 min read

管理命令集 - ✅ 一、Get Features 命令的作用 (第182页)

Blog Author

我们现在深入分析 NVM Express® Base Specification Revision 2.0b 第 171 页的内容,重点讲解 Get Features 命令 的结构、字段定义及使用方法,帮助你彻底理解这一命令的机制。


✅ 一、Get Features 命令的作用

Get Features 命令用于从控制器读取某个特性(Feature)的当前值、默认值、已保存值或支持的能力范围,是主机查询控制器状态和配置能力的重要手段之一。


✅ 二、命令字段结构详细解析


📌 1. Data Pointer(DPTR) – 图 191

Bits 字段 描述
127:00 Data Pointer 指向特性返回数据的缓冲区地址(如果该 Feature 返回结构化数据)
若该 Feature 不返回结构体,则本字段被忽略。

👉 定义与 PRP / SGL 结构相关(见图 87)


📌 2. Command Dword 10 – 图 192

Bits 字段 描述
31:11 Reserved 保留位
10:08 Select (SEL) 指定要获取的属性值类型:
SEL 值 含义
000b 当前值(Current)
001b 默认值(Default)
010b 已保存值(Saved)
如果控制器不支持保存,视为请求默认值
011b 支持的能力(Supported Capabilities)
100b ~ 111b 保留值,不可用

🔸 详见 Section 5.15.1 & 4.2 — 不同 SEL 返回内容可能结构不同。
🔸 是否支持 Saved/Supported 取决于 Identify Controller 数据结构中 Optional NVM Command Support 的 bit4。


Bits 字段 描述
07:00 Feature Identifier (FID) 指定要查询的 Feature 编号(见图 194)。

🔸 可指定标准 Feature(如 Arbitration、Power Management),或厂商特定 Feature(Vendor Specific FID)


📌 3. Command Dword 14 – 图 193:UUID Index(仅用于某些 Vendor Specific Features)

Bits 字段 描述
31:07 Reserved 保留位
06:00 UUID Index 若控制器支持“按 UUID 区分 Vendor Feature”,则用于指定 UUID 索引值(见图 477)

⚠️ 注意:只有当控制器和特定 Feature 都支持 UUID 分化时,该字段才生效。


✅ 三、Get Features 可用 Feature Identifier(部分展示,图 194)

Feature Identifier(FID) 描述 属性格式定义位置
01h Arbitration(仲裁机制) Section 5.27.1.1
02h Power Management(电源管理) Section 5.27.1.2
04h Temperature Threshold(温度阈值) Section 5.27.1.3
06h Volatile Write Cache(易失写缓存) Section 5.27.1.4

❗ 完整 Feature ID 表见图 194,部分是 标准特性,部分是 厂商特定特性(Vendor Specific)


✅ 四、示例用法解析

🎯 示例:主机获取当前仲裁机制配置

  • FID = 01h(Arbitration)
  • SEL = 000b(Current)
  • Data Pointer 指向缓冲区,控制器返回仲裁机制配置结构

🎯 示例:获取支持的温度阈值范围

  • FID = 04h
  • SEL = 011b(Supported Capabilities)

✅ 五、兼容性与默认行为总结

条件 控制器行为
请求 Saved 值但控制器不支持保存 返回默认值(SEL=001b 的行为)
请求 UUID Index,但不支持 UUID 分化 忽略 Dword 14,返回默认值
使用保留值(如 SEL = 100b) 命令被拒绝,返回 Invalid Field in Command

✅ 六、学习建议与可视化补充

模块 建议
FID 类型 建议结合图 194 建立完整的 Feature ID 索引表,理解哪些可以返回结构体数据,哪些仅为单值返回
SEL 模式理解 理解 Current / Default / Saved / Supported 各自的语义与控制器支持条件
UUID 支持 若涉及厂商特性,需结合 UUID Index 与 Section 8.25 深入阅读
适配 Identify Controller 可交叉阅读 Identify Controller 的 Optional NVM Command Support 字段,判断支持度

如果你需要我帮你画一个 Get Features 命令的交互流程图(带 DPTR、SEL、FID、UUID Index 的关系图),或者想要一份“完整 Feature ID 一览表(标准 + Vendor)”,我可以为你整理出来。你想要哪一份?