第3章 物理层与MCTP传输 - 页码49
我们继续深入分析 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 通信中出现(比如通过哪条命令触发),我可以继续扩展。你想接下来继续哪部分?