管理命令集 - ✅ 一、Get Features 命令的作用 (第182页)
我们现在深入分析 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 = 04hSEL = 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)”,我可以为你整理出来。你想要哪一份?