管理命令集 - 📘 一、Directive Send 指令结构解析(参考 Figure 179 & 180) (第175页)
NVME2.0协议解读 1 min read

管理命令集 - 📘 一、Directive Send 指令结构解析(参考 Figure 179 & 180) (第175页)

Blog Author

我们来逐段深入剖析并用中文解释理解你提供的这段协议内容,帮助你全面掌握 NVM Express® Base Specification, revision 2.0b 中的 Directive Send 指令结构Firmware Commit 固件提交命令


📘 一、Directive Send 指令结构解析(参考 Figure 179 & 180)

这条指令用于向控制器发送指令类(Directive)扩展操作,例如流指令(Stream Directive)等。该命令的一些字段对不同类型的指令具有不同的意义。


🔹 Figure 179: Command Dword 10

位段 字段名 说明
31:00 NUMD (Number of Dwords) 指定要传输的数据数量,单位为Dword(4字节)
注意这是一个 从0开始的数值,例如:
NUMD=0 → 传输1个Dword;NUMD=3 → 传输4个Dword。

🔹 Figure 180: Command Dword 11

位段 字段名 含义
31:16 DSPEC (Directive Specific) 指令类型相关的特定字段,其含义取决于 DTYPE 的值,详细定义在 §8.7。
15:08 DTYPE (Directive Type) 指定指令类型。例如:流指令(Stream Directive)就是某个类型。可参考 Figure 416 查看所有类型。
07:00 DOPER (Directive Operation) 指定操作类型,例如启用/禁用指令、执行特定控制等。具体含义同样依赖 DTYPE 类型。

✅ 小结:

Directive Send 是一个高度可扩展的命令框架,通过三个字段(DTYPE, DOPER, DSPEC)配合 NUMD 来定义要执行的扩展控制操作,主要用于新特性或厂商自定义指令。


📘 二、Firmware Commit 指令解析(§5.12)

这条指令用于:

  • 提交(激活)已下载的固件镜像(Firmware Image)
  • 操作 Boot Partition(引导分区)

🔹 固件镜像(Firmware Image)是什么?

固件镜像(FW image)是包含设备运行逻辑的软件映像,通常存放在非易失性存储中。可以理解为设备的“小操作系统”。

  • 更新 FW image 意味着升级设备行为,如修复 bug、新增功能、优化性能等。
  • 升级过程通常是两步:
    ① 使用 Firmware Image Download 命令上传镜像
    ② 使用 Firmware Commit 命令确认生效(写入特定的槽位)

🔹 Figure 181: Firmware Commit – Command Dword 10

位段 字段名 含义
31 BPID (Boot Partition ID) 指定要操作的 Boot Partition(引导分区)编号,
如果 Commit Action 是涉及 Boot Partition 的,就要设置这个字段
30:06 Reserved 保留,必须写0

🔹 固件槽位与激活逻辑

  • 控制器具有多个固件槽位(Firmware Slot),用于存储多个版本的固件。
  • 控制器当前运行的是其中一个槽位中的固件,其他槽位的固件可以被激活替换。
  • 可通过 Identify Controller 指令查询当前版本;
  • 可通过 Firmware Slot Information log page 查询哪些槽中有固件。

⚠️ 注意:兼容性问题

如果新固件中发生了重大变化(比如 UUID List 格式不兼容),并且 Commit Action 设置为自动激活(011b),则控制器必须终止指令,并返回特定状态码:

Firmware Activation Requires Conventional Reset

🔹 Boot Partition 是什么?

Boot Partition(引导分区)是专门为某些控制器设计的非易失性区域,用于引导初始化或者应急启动。

  • 默认是锁定状态(locked),需要解锁后才能写入;
  • 可用 Firmware Commit 标记其为“激活”或“替换”目标;
  • 有助于构建具备高可靠性的固件升级机制(如 A/B 分区启动)。

📎 Boot 分区与固件升级的关系

  • Boot Partition 可看作是一种固件存储方式的一部分;
  • 某些平台使用 Boot Partition 来存储关键启动代码或安全固件版本;
  • 在固件提交过程中,可通过 BPID 指定要更新的 Boot 分区;
  • 和固件槽位机制不同,它更多用于嵌入式/高可靠性启动场景。

✅ 总结:

概念 说明
FW image 固件的映像文件,是控制器运行的核心程序
Firmware Slot 控制器用于存储多个固件版本的槽位
Firmware Commit 确认并激活已上传固件的命令,可选定槽位或 Boot 分区
Boot Partition 专门用于存储引导代码的非易失性分区,可通过 Firmware Commit 管理

如果你想,我还可以帮你绘制一张图解说明整个固件更新与 Boot 分区操作的流程图,用来复习或教学演示。需要我做一个吗?