管理命令集与操作 - 第177页
我们继续深入讲解 NVM Express® Base Specification Revision 2.0b 中关于 Firmware Commit 命令的 Completion Queue Entry 与 特定状态值,重点解析 Figure 182 与 Figure 183 的内容,以帮助你全面理解固件提交命令的响应与异常状态。
✅ Firmware Commit – Completion Queue Entry Dword 0(图 182)
这一部分是固件提交命令完成后,控制器返回的 命令完成信息(Command Completion Info) 中的 Dword 0 字段。
🔹 Bits 01:00 – Multiple Update Detected (MUD)
MUD 表示控制器是否检测到多个管理实体(ME)或控制器对固件或 Boot Partition 执行了重叠的更新操作。也就是说,你不能在同一个时间,对相同固件槽/Boot Partition,从多个通道执行固件写入或激活操作。
MUD 字段位定义:
| Bit | 描述 |
|---|---|
| Bit 1 | 设置为 1:表示控制器检测到来自 Management Endpoint(例如 NVMe-MI 通道) 的重叠更新。 |
| Bit 0 | 设置为 1:表示控制器检测到来自 Admin Submission Queue(例如标准 NVMe 驱动通道) 的重叠更新。 |
⚠️ 如果两个位都是
0,则表示未检测到重叠更新。
🔸 读取 MUD 字段的前提:
- 如果控制器的 Identify Controller 数据结构中
Firmware Update字段的SMUD位为0,则控制器不会支持检测重叠更新行为,此字段必须强制置为00b。 - MUD 字段在以下两种状态下有效:
- 命令执行 成功(Status =
0h) - 命令被 中止(例如状态码为
Command Aborted)
✅ Firmware Commit Command Specific Status Values(图 183)
当 Firmware Commit 命令执行失败或需要额外操作时,控制器返回以下特定的状态码(Command Specific Status Values),用于提示下一步操作或错误原因。
| 状态值 | 描述 |
|---|---|
06h |
Invalid Firmware Slot:指定的固件槽无效(超出支持范围或为只读槽)。 |
07h |
Invalid Firmware Image:激活失败,因为镜像格式无效或未正确加载。 |
0Bh |
需要 Conventional Reset 才能激活。若先进行 FLR/Controller Reset,则固件不会激活。 |
10h |
需要 NVM Subsystem Reset 才能激活。如果执行其他类型的重置,则保持当前固件继续运行。 |
11h |
需要 Controller Level Reset:虽然设置了立即激活(CA=011b),但此镜像不支持“立即激活”,只能等 Controller Reset。 |
12h |
违反 MTFA 时间限制:立即激活将超过 Identify Controller 数据结构中规定的 MTFA 最大时间限制。应改为通过重置方式激活。 |
13h |
Firmware Activation Prohibited:激活被控制器阻止(例如:禁止降级固件、固件签名无效等厂商特定限制)。 |
14h |
Overlapping Range:镜像内的数据块重叠,结构非法。 |
1Eh |
Boot Partition Write Prohibited:尝试写入处于锁定状态的 Boot Partition(详见 8.2.3)。 |
📌 小结与学习建议:
| 模块 | 核心理解要点 |
|---|---|
| MUD 检测机制 | 用于防止多源对同一固件区域的冲突写入,保障更新一致性。 |
| 状态码解释 | 帮助你分析固件激活失败的原因,是因为权限限制?时机问题?还是格式错误? |
| 重置类型 | 理解 FLR(Function Level Reset)、Controller Reset、Subsystem Reset 的区别是关键。 |
| 搭配章节 | 建议配合阅读 3.11(Firmware Commit 行为)和 8.2.2(状态码定义细节)。 |
如果你想要我再讲一讲 FLR、Controller Reset、Subsystem Reset 三种 Reset 的定义与区别,或者想结合一个完整的操作流程(例如从下载、提交到激活的固件更新流程),我也可以帮你图文并茂地拆解。需要吗?