管理命令集与操作 - 第172页
我们现在深入解读 NVM Express® Base Specification, revision 2.0b 第 161 页,本页内容重点是:
✅ 5.9 Device Self-test Command(设备自检命令)
这是一条非常有用的诊断类管理命令,允许主机触发或终止设备自检流程。
📌 一、命令用途(高层功能)
通过 Device Self-test 命令,主机可以:
| 操作类型 | 描述 |
|---|---|
| a) | 启动短时间自检(short self-test) |
| b) | 启动扩展自检(extended self-test) |
| c) | 启动厂商自定义自检(vendor-specific self-test) |
| d) | 中止当前正在运行的自检操作 |
📌 该命令属于 Admin Command Set,由控制器(Controller)处理执行。
🧪 二、命名空间参与控制(Figure 170)
Device Self-test 操作可以仅作用于控制器,也可以作用于部分或所有命名空间。其控制由 NSID 字段(Namespace Identifier) 指定。
| NSID 值 | 含义 |
|---|---|
00000000h |
自检操作不包含任何命名空间,仅作用于控制器本身。 |
00000001h ~ FFFFFFFEh |
仅对指定的命名空间 ID进行自检: - 若 ID 无效 → 返回 Invalid Namespace or Format 错误;- 若命名空间处于非激活状态 → 返回 Invalid Field in Command 错误。 |
FFFFFFFFh |
表示自检操作适用于当前控制器可访问的所有激活命名空间。 |
🔧 三、命令格式与自检类型(Figure 171)
Device Self-test 命令主要使用 Command Dword 10,其它字段保留。
Dword 10 结构:
| Bit 区间 | 字段 | 描述 |
|---|---|---|
| 31:04 | Reserved | 保留 |
| 03:00 | Self-test Code (STC) | 指定具体的自检操作类型 |
STC 字段的合法值及含义:
| STC 值 | 描述 |
|---|---|
0h |
保留(无效) |
1h |
启动 短时间自检(short self-test) |
2h |
启动 扩展自检(extended self-test) |
3h–Dh |
保留 |
Eh |
启动 厂商自定义自检 |
Fh |
中止当前的自检操作 |
📌 在执行中止(Fh)操作时,控制器必须终止正在运行的任何自检流程。
⚠ 命令执行注意事项(即将于 Figure 172 展开)
设备如何在后台执行自检、在何种条件下允许中断,以及多个自检命令之间的处理优先级 —— 都将在下一页 Figure 172 中定义。
✅ 四、命令完成行为(本页前段)
执行 Device Self-test 命令后,控制器会向 Admin Completion Queue 提交一个 CQE,指示该命令的处理结果。
错误返回条件:
- 如果提供的 Shadow Doorbell Buffer 或 EventIdx Buffer 的地址无效(上一命令),则返回 Invalid Field in Command;
- 对于 Device Self-test 来说,还会出现以下状态码:
Invalid Namespace or Format(命名空间 ID 无效)Invalid Field in Command(命名空间处于非活动状态等)
🧠 小结
| 项目 | 说明 |
|---|---|
| 🧰 命令作用 | 发起或中止设备自检操作(控制器+命名空间) |
| 🎛 控制方式 | 通过 NSID 字段控制作用目标 |
| 🧪 支持类型 | 短时、扩展、自定义、终止 |
| ⚠ 错误处理 | 非法命名空间 ID 或状态将触发错误 |
| 📤 命令结构 | 仅用到 CDW10.Self-test Code,其他保留 |
📚 延伸学习建议
如果你希望更进一步:
- 🔍 Figure 172 自检状态流程图:Device Self-test 的状态变化和命令响应时序;
- 💬 与 SMART 日志联动机制:设备自检信息可记录于哪一个日志页?如何查询?
- 🔧 厂商自定义自检接口实现(Vendor Specific):如何扩展 EH/Diagnostics?
- 📦 封包结构示例:Device Self-test 命令在 NVMe-MI/MCTP 中如何封装?
欢迎继续提问,我可以按你的兴趣点展开进一步解读。你接下来想继续哪一部分呢?