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

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

Blog Author

我们现在深入分析 NVM Express® Base Specification Revision 2.0b 中关于 Firmware Image Download 命令的执行细节,特别聚焦于:

  • 多片(chunked)固件镜像的构造方式
  • Dword OffsetNumber of Dwords 的使用方法
  • 固件切片的顺序要求
  • 与 Boot Partition 更新的区别
  • 命令字段结构(Data Pointer、Dword 10 & 11)

✅ 什么是 Firmware Image 的分段下载?

NVMe 固件镜像可能较大,无法通过单个命令下载,因此通过多次 Firmware Image Download 命令,分片下载整个镜像。每个命令只负责镜像的一部分


✅ 核心字段说明

📌 1. Command Dword 10 – Number of Dwords (NUMD)

  • 位置: Command Dword 10 → Bits 31:00
  • 功能: 表示此次命令下载的 Dword 数量(一个 Dword = 4 字节)。
  • 注意: 这是一个 0-based 值,也就是说:
  • NUMD = 0 → 实际传输 1 个 Dword(4 字节)
  • NUMD = 3 → 实际传输 4 个 Dword(16 字节)

  • 对齐要求: 必须满足 FWUG 字段定义的 对齐与粒度要求(例如:必须 4KB 对齐),否则命令会因字段无效而失败,返回状态码 Invalid Field in Command


📌 2. Command Dword 11 – Offset (OFST)

  • 位置: Command Dword 11 → Bits 31:00
  • 功能: 表示本次传输的数据块在整个固件镜像中的 偏移量(以 Dword 为单位)
  • 例子:
  • 若第一块固件,OFST = 0h,表示从头开始写。
  • 第二块若长度为 0x100(实际传输 0x101 个 Dword),则下一个块应从 OFST = 0x101 开始。

  • 同样要满足 FWUG 字段的对齐要求(参见 Figure 275)。


📌 3. Data Pointer(DPTR)

  • 位置: 位于 PRP 或 SGL(数据指针)结构中
  • 功能: 表示从主机内存中 获取固件片段数据的位置
  • 参照: Figure 87 中详细定义了 DPTR 如何传输数据

✅ 切片下载原则与限制

操作要点 描述
顺序要求 对于普通固件镜像(非 Boot Partition),可以乱序提交各个切片(offset 可跳跃)
Boot Partition 更新 Boot Partition 时,必须按顺序提交切片
⚠️ 不能重叠范围 两个命令的 Offset 和 NUMD 区间不能有交集,否则控制器会返回 Overlapping Range 错误
⚠️ 不能交叉更新 Host 不应并行执行多个固件/Boot Partition 的更新任务。请确保一次只更新一个镜像。

✅ 固件下载后的行为规则

  • Firmware Image Download 命令 不会自动激活固件
  • 下载完成后,必须发送 Firmware Commit 命令 才能提交该镜像
  • 一旦 Commit 完成,再发送另一个 Download 命令时:
  • 控制器将丢弃前一个镜像剩余未提交的部分(如果有)
  • 如果在下载与提交之间发生 Reset,控制器也会自动清空未提交的固件段

🔍 实用举例

设想你要下载一个总共 8KB 固件镜像(2048 Dwords),你可以分 2 次下载:

下载第一个 4KB:

  • NUMD = 1023(1024 Dwords)
  • OFST = 0
  • Data Pointer 指向固件镜像的前 4KB

下载第二个 4KB:

  • NUMD = 1023
  • OFST = 1024
  • Data Pointer 指向固件镜像的后 4KB

提交后,发送 Firmware Commit (CA = 001b) 激活于下次 Reset。


✅ 图示结构回顾:

✅ 图 184:Data Pointer

  • 指向主机内存中固件数据的地址

✅ 图 185:Command Dword 10

Bit 字段 描述
31:00 NUMD 此次下载的数据长度(以 Dword 为单位)

✅ 图 186:Command Dword 11

Bit 字段 描述
31:00 OFST 数据段相对于固件开头的偏移(以 Dword 为单位)

如果你需要我画一个流程图,展示多个 Firmware Image Download 命令如何组合完整镜像,我可以马上帮你画出来。也可以一起分析 Figure 275 中的 FWUG 字段结构与其对齐限制。你感兴趣吗?