第3章 物理层与MCTP传输 - 页码49
NVMe-MI 1 min read

第3章 物理层与MCTP传输 - 页码49

Blog Author

我们继续深入分析 NVMe-MI 2.0 规范第 50 页的内容,这部分继续列出了更多响应消息状态码(Response Message Status Values),并介绍了通用错误响应格式(Generic Error Response)。我将逐条帮你解读并总结核心要点。


✅ Figure 29 补充状态码详解(继续)

这些状态码都属于“错误响应(Error Response)”,除最后部分提到的厂商自定义状态码(Vendor Specific)。


🚫 08h – Unable to Abort

Abort Control Primitive 无法中止命令消息。

  • 原本打算用“Abort 控制原语”中止某个进行中的命令,但失败了。
  • 表示系统可能已开始执行或状态不允许中止。

09h ~ 1Fh – Reserved

预留状态码,不得使用。


⚠️ 20h – VPD Updates Exceeded

VPD(Vital Product Data)更新次数超过允许范围。

  • 一般用于限制固件/硬件配置信息的写入次数(如 EEPROM 受限)。
  • 如果尝试次数超过硬件设计限制,会返回此错误。

📴 21h – PCIe Inaccessible

PCIe 功能当前不可用。

  • 可能由于系统状态、低功耗模式或硬件异常,导致 NVMe 子系统当前无法访问 PCIe 层。

🧼 22h – Buffer Cleared Due to Sanitize

由于擦除(Sanitize)操作,管理端点缓冲区已被清零。

  • 如果你尝试读取被“清零”的管理缓冲区,会得到此响应。
  • 参考第 4.2.3 节对管理端点缓冲区的描述。

🏠 23h – Enclosure Services Failure

Enclosure(机箱)服务进程出现未知故障。

  • 表示系统底层的“机箱管理服务”出现不可识别错误。

📡 24h – Enclosure Services Transfer Failure

与机箱服务通信失败。

  • 表示系统尝试与机箱服务进程通信时,传输失败。

💥 25h – Enclosure Failure

检测到不可恢复的机箱故障。

  • 比如电源、风扇、传感器等关键硬件出现重大故障。

26h – Enclosure Services Transfer Refused

因格式无效或出错,被拒绝通信。

  • 表示机箱服务进程或 NVM 子系统主动拒绝了通信请求。

27h – Unsupported Enclosure Function

向 Simple Subenclosure 发送不支持的 SES 命令。

  • SES(SCSI Enclosure Services)命令不适用于该类型机箱结构。

🔄 28h – Enclosure Services Unavailable

机箱服务暂时不可用,未来可能恢复。

  • 一般表示临时性错误,比如初始化未完成或加载失败。

⚠️ 29h – Enclosure Degraded

检测到非致命的机箱故障。

  • 例如风扇速度偏低、温度异常等软性问题,提示维护但不阻断操作。

🧯 2Ah – Sanitize In Progress

擦除(Sanitize)过程中,禁止执行请求。

  • 指定命令当前因“擦除操作”在进行中而被阻止。
  • 相关操作定义见第 6.4 节。

2Bh ~ DFh – Reserved

为未来规范保留。


🏭 E0h ~ FFh – Vendor Specific(厂商自定义)

这些状态码由厂商定义,可能用于特定的硬件特性或诊断扩展。


✅ 通用错误响应格式(Generic Error Response)

Generic Error Response is used when no additional info is provided beyond the status.

当错误发生,但不打算返回额外诊断信息时,就使用这种“简化”格式。也就是说,它只包含状态码和头部信息,其它字段为保留。


📦 Generic Error Response 结构(Figure 30)

结构如下:

+--------------------------+
| Byte 0~3   Header (含 Status、NMIMT、IC、CSI) |
+--------------------------+
| Byte 4     Status        |
+--------------------------+
| Byte 5~7   Reserved      |
+--------------------------+
| Byte 8~(N) Optional MIC  |
+--------------------------+

核心字段说明:

字节 字段 说明
0-3 Header 含消息类型、IC位、CSI位、NVMe-MI类型等
4 Status 错误码(例如:02h 内部错误)
5-7 Reserved 不使用(保留)
8+ MIC 若 IC 位为 1,则包含完整性校验

🔍 总结与建议学习路径

分类 响应码 说明
成功 00h 命令成功完成
等待 01h 正在处理中,稍后返回结果
错误 02h~2Ah 多种错误状态,包括中止失败、VPD超限、PCIe不可访问、机箱相关故障等
厂商自定义 E0h~FFh 厂商扩展
通用错误响应 任意错误码 + 保留字节 没有额外错误详情的简化响应格式

如果你希望我帮你画出这些状态码的分类图表,或者讲讲这些状态码如何在实际 NVMe-MI 通信中出现(比如通过哪条命令触发),我可以继续扩展。你想接下来继续哪部分?