管理命令集与操作 - 第172页
NVME2.0协议解读 1 min read

管理命令集与操作 - 第172页

Blog Author

我们现在深入解读 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 BufferEventIdx 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 中如何封装?

欢迎继续提问,我可以按你的兴趣点展开进一步解读。你接下来想继续哪一部分呢?