队列模型 - 📘 一、命令特定错误状态码(SCT = 1h) (第112页)
我们继续深入分析 NVM Express® Base Specification, revision 2.0b 第 101 页,本页主要介绍了与 命令特定错误(Command Specific Errors) 相关的状态码。这些状态码是针对特定命令操作码(opcode)而定义的错误类型,涉及到 管理员命令、命名空间管理、固件操作 等方面。
📘 一、命令特定错误状态码(SCT = 1h)
✅ 状态码清单(00h 到 2Ah)
| 代码 | 名称 | 描述 |
|---|---|---|
00h |
Completion Queue Invalid | 完成队列无效:发生在创建 I/O 提交队列时,队列配置错误或不匹配。 |
01h |
Invalid Queue Identifier | 无效的队列标识符:通常发生在创建、删除 I/O 提交队列或完成队列时,标识符不合法。 |
02h |
Invalid Queue Size | 无效的队列大小:在创建队列时,队列的大小不符合要求。 |
03h |
Abort Command Limit Exceeded | 超过中止命令限制:当执行中止命令时,中止命令次数超出了限制。 |
05h |
Asynchronous Event Request Limit Exceeded | 异步事件请求超限:发生在发送异步事件请求时,超过了允许的最大次数。 |
06h |
Invalid Firmware Slot | 无效的固件插槽:固件提交过程中,指定了无效的固件插槽。 |
07h |
Invalid Firmware Image | 无效的固件镜像:固件提交过程中,固件镜像无效。 |
08h |
Invalid Interrupt Vector | 无效的中断向量:创建 I/O 完成队列时,提供了无效的中断向量。 |
09h |
Invalid Log Page | 无效的日志页:请求日志页时,提供了无效的日志页。 |
0Ah |
Invalid Format | 无效的格式:执行格式化操作时,格式不合法。 |
0Bh |
Firmware Activation Requires Conventional Reset | 固件激活需要常规重置:执行固件提交时,需要执行常规重置才能激活固件。 |
0Ch |
Invalid Queue Deletion | 无效的队列删除:删除 I/O 完成队列时,队列删除请求无效。 |
0Dh |
Feature Identifier Not Saveable | 功能标识符不可保存:在设置功能时,某个功能标识符不可保存。 |
0Eh |
Feature Not Changeable | 功能不可更改:某个功能在运行时不可修改。 |
0Fh |
Feature Not Namespace Specific | 功能不属于命名空间特定功能:该功能不适用于命名空间操作。 |
10h |
Firmware Activation Requires NVM Subsystem Reset | 固件激活需要 NVM 子系统重置:执行固件提交时,需要对子系统进行重置。 |
11h |
Firmware Activation Requires Controller Level Reset | 固件激活需要控制器级别重置:执行固件提交时,需要对控制器进行重置。 |
12h |
Firmware Activation Requires Maximum Time Violation | 固件激活要求超时:固件提交过程超出了最大时间限制。 |
13h |
Firmware Activation Prohibited | 禁止固件激活:固件提交操作被禁止。 |
14h |
Overlapping Range | 范围重叠:固件提交、固件镜像下载或设置功能时,指定的范围重叠。 |
15h |
Namespace Insufficient Capacity | 命名空间容量不足:创建命名空间时,存储空间不足。 |
16h |
Namespace Identifier Unavailable | 命名空间标识符不可用:请求的命名空间标识符不可用。 |
18h |
Namespace Already Attached | 命名空间已经附加:尝试将已附加的命名空间重新附加。 |
19h |
Namespace Is Private | 命名空间是私有的:该命名空间已被锁定为私有,无法进一步操作。 |
1Ah |
Namespace Not Attached | 命名空间未附加:请求的命名空间未附加到系统中。 |
1Bh |
Thin Provisioning Not Supported | 不支持精简配置:系统不支持精简配置的命名空间管理。 |
1Ch |
Controller List Invalid | 无效的控制器列表:尝试附加命名空间时,控制器列表无效。 |
1Dh |
Device Self-test In Progress | 设备自检进行中:设备正在进行自检,无法执行其他命令。 |
1Eh |
Boot Partition Write Prohibited | 禁止写入启动分区:固件提交时,禁止写入启动分区。 |
1Fh |
Invalid Controller Identifier | 无效的控制器标识符:虚拟化管理时,控制器标识符无效。 |
20h |
Invalid Secondary Controller State | 无效的二级控制器状态:虚拟化管理时,二级控制器状态无效。 |
21h |
Invalid Number of Controller Resources | 无效的控制器资源数:虚拟化管理时,控制器资源数不合法。 |
22h |
Invalid Resource Identifier | 无效的资源标识符:虚拟化管理时,资源标识符无效。 |
23h |
Sanitize Prohibited While Persistent Memory Region is Enabled | 当持久内存区域启用时,禁止执行消毒操作。 |
24h |
ANA Group Identifier Invalid | ANA 组标识符无效:命名空间管理时,ANA 组标识符无效。 |
25h |
ANA Attach Failed | ANA 附加失败:命名空间附加时,ANA 组附加失败。 |
26h |
Insufficient Capacity | 容量不足:管理命名空间时,容量不足以进行操作。 |
27h |
Namespace Attachment Limit Exceeded | 超出命名空间附加限制:命名空间附加操作超过最大限制。 |
28h |
Prohibition of Command Execution Not Supported | 不支持命令执行禁止:执行命令时不支持禁止执行的操作。 |
29h |
I/O Command Set Not Supported | 不支持 I/O 命令集:不支持请求的 I/O 命令集。 |
2Ah |
I/O Command Set Not Enabled | I/O 命令集未启用:请求的 I/O 命令集未在控制器上启用。 |
🧩 三、状态码解析
1️⃣ 24h – Admin Command Media Not Ready
- 原因:管理员命令需要访问存储媒体,但媒体尚未准备好,通常发生在控制器启动时,且不在 Controller Ready Independent of Media 模式下。
2️⃣ 80h – LBA Out of Range
- 原因:逻辑块地址(LBA)超出范围,尝试访问不在存储设备有效区域内的地址。
3️⃣ 81h – Capacity Exceeded
- 原因:命名空间的使用已超出最大容量,常见于写入操作超出设备容量时。
4️⃣ 82h – Namespace Not Ready
- 原因:命名空间未准备好,无法进行访问,可能是初始化未完成或设备问题。
5️⃣ 83h – Reservation Conflict
- 原因:访问命名空间时,发现与现有的预定操作发生冲突,导致命令中止。
🧠 总结与核心要点
这些状态码主要用于 命令特定错误,针对不同操作码(如固件提交、命名空间管理等)提供具体的错误反馈。理解这些状态码可以帮助在遇到命令执行失败时,快速定位问题并采取相应的恢复措施。
如果你对某个具体状态码或命令集的应用场景感兴趣,或者希望了解如何在实际开发中处理这些错误,欢迎随时提出!