命名空间管理 - 📌 Set Features 和 Get Features 细节解析 (第149页)
我们继续深入分析 《NVM Express® Base Specification, revision 2.0b》第138页,本部分内容涵盖了 Set Features 和 Get Features 命令中与 NSID(命名空间标识符) 和 特性值保存机制 相关的内容,以及如何处理不支持的 Feature Identifiers。此外,还讨论了 PCI Vendor ID、PCI Subsystem Vendor ID、Serial Number、Model Number 等标识符的格式和布局。我们将逐一解读这些内容。
📌 Set Features 和 Get Features 细节解析
✅ 特性标识符与命名空间相关设置
- NSID 字段的使用:NSID 字段用于指示特性值是否与 特定命名空间 相关。
- 如果 MDS 位 在 Identify Controller 数据结构 中设置为
1,则特性值不适用于命名空间; - 如果 MDS 位 为
0,特性值应用于 所有命名空间。
✅ Set Features 命令与 Get Features 命令的错误处理
- 如果 NSID 设置为无效值,Set Features 和 Get Features 命令将返回 Invalid Field in Command 错误。
示例:不同 NSID 设置时的行为
- NSID =
0h或FFFFFFFFh: - Set Features 设置控制器级特性;
-
Get Features 返回控制器级别的当前值。
-
NSID 为有效的命名空间标识符:
- Set Features 设置该命名空间的特性;
- Get Features 返回该命名空间的当前值。
✅ 特性标识符的保存与选择
- 控制器支持 Save 字段 和 Select 字段,使得命名空间特性可以按命名空间单独保存。
- 如果 Feature Identifier 不被支持,控制器将返回 Invalid Field in Command 错误。
📑 标识符格式和布局(4.3节)
✅ PCI Vendor ID(VID)与 PCI Subsystem Vendor ID(SSVID)
- VID 和 SSVID 是由 PCI SIG 分配的唯一标识符,用于区分不同的 供应商 和 子系统。
- VID 是一个 16 位数,采用小端格式表示。
- SSVID 是一个 16 位数,同样采用小端格式表示。
示例:
| 字节 | 00 | 01 | 02 | 03 |
|---|---|---|---|---|
| 值 | CDh | ABh | 34h | 12h |
- 示例解释:
- VID = ABCDh
- SSVID = 1234h
✅ Serial Number(SN)与 Model Number(MN)
- SN(序列号) 和 MN(型号) 在 Identify Controller 数据结构 中定义,为 ASCII 字符串,由厂商分配。
- SN 和 MN 都是 大端格式。
示例:
| 字节 | 04 | 05 | 06 | 23至07 | 24 | 25 | 63至26 |
|---|---|---|---|---|---|---|---|
| 值 | 53h ('S') | 4Eh ('N') | 31h ('1') | 20h (' ') | 4Dh ('M') | 32h ('2') | 20h (' ') |
- 示例解释:
- SN = “SN1”
- MN = “M2”
✅ IEEE OUI Identifier(IEEE)
- IEEE OUI(组织唯一标识符) 是由 IEEE 注册管理机构 分配的,用于唯一标识组织。它在 Identify Controller 数据结构 中以小端格式表示。
示例:
| 字节 | 75 | 74 | 73 |
|---|---|---|---|
| 值 | XXh | XXh | XXh |
📋 总结与要点
| 项目 | 说明 |
|---|---|
| Set Features 和 Get Features 命令 | 允许设置和获取控制器及命名空间的特性值。特性可针对控制器或命名空间,支持保存、恢复机制。 |
| NSID 字段的应用 | NSID 指定特性应用范围:全局控制器级或命名空间级。 |
| 命名空间特性值的保存与恢复 | 控制器支持将命名空间特性保存为“保存值”,并在 Controller Reset 后恢复。 |
| 错误处理 | 不支持的特性标识符将导致 Invalid Field in Command 错误,命名空间标识符无效时会中止命令。 |
| PCI 标识符(VID 和 SSVID) | PCI Vendor ID 和 Subsystem Vendor ID 分别用于标识供应商和子系统,采用小端格式。 |
| 序列号与型号 | SN 和 MN 是由厂商分配的 ASCII 字符串,用于标识设备。 |
| IEEE OUI | 由 IEEE 注册管理机构分配的组织标识符,通常用于网络设备的唯一标识。 |
🎯 教学建议
- 掌握命名空间与控制器级特性管理:区分命名空间级与控制器级特性的差异,有助于优化命令使用和配置。
- 注意错误处理:理解 Set Features 和 Get Features 中关于 NSID 和 Feature Identifiers 的错误处理规则,帮助排查实际应用中的问题。
- 标识符的正确使用:确保使用合适的标识符(如 VID、SN)进行设备管理,避免混淆。
如果你希望我进一步深入解析 特性设置命令的详细应用示例,或者对 标识符字段的实际应用 进行代码级别的解读,请随时告诉我!