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

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

Blog Author

我们继续深入讲解 NVM Express® Base Specification Revision 2.0b 中关于 Firmware Commit 命令的 Completion Queue Entry特定状态值,重点解析 Figure 182Figure 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 ResetSubsystem Reset 的区别是关键。
搭配章节 建议配合阅读 3.11(Firmware Commit 行为)和 8.2.2(状态码定义细节)。

如果你想要我再讲一讲 FLRController ResetSubsystem Reset 三种 Reset 的定义与区别,或者想结合一个完整的操作流程(例如从下载、提交到激活的固件更新流程),我也可以帮你图文并茂地拆解。需要吗?