第4章 消息服务模型与控制原语 - 页码73
NVMe-MI 1 min read

第4章 消息服务模型与控制原语 - 页码73

Blog Author

非常好!我们继续深入分析 NVMe-MI 2.0 规范第 74 页的内容,即:

Figure 55:NVMe-MI Receive 命令的 Request 消息如何映射到 NVMe Admin Command SQE 的表格表示


✅ 一、Figure 55 表格结构概览

该表格是对前页 Figure 54 图解结构的精确文字化:逐字段对照 NVMe-MI Request Message 字段Admin SQE(提交队列项)字段 的映射关系。


✅ 二、字段映射详解(文字对照)

🔹 NVMe-MI Request → SQE 对照表

NVMe-MI Request 字段 映射到 SQE 描述
❌ n/a CDW0 (03:00) 无映射,使用标准 NVMe Admin Command 格式字段
❌ n/a NSID (07:04) 不适用于 MI,主机需填 0h
❌ n/a MPTR (23:08) 不使用
❌ n/a DPTR (39:24) 用于接收 Response Data,指向主机准备的内存区域
NMH (03:00) CDW10 (43:40) 消息头字段(类型、IC 位等)映射至 CDW10(小端序)
Opcode (04) CDW11 Byte 0 (47) 操作码(如 Get, Read, List 等)映射至 CDW11 的低字节
Reserved (05~07) CDW11 Bytes 1~3 保留字段填入剩余 3 字节
Mgmt Dword 0 (08~11) CDW12 (51:48) NVMe-MI 管理指令参数
Mgmt Dword 1 (12~15) CDW13 (55:52) NVMe-MI 管理指令参数
❌ n/a CDW14 / CDW15 (59~63) 保留字段,无映射使用
❌ Request Data (16~N-1) ❌ n/a Receive 命令不包含 Request Data
❌ MIC (N+3:N) ❌ n/a 带内机制不使用 MIC

🧠 映射关键理解点:

  1. DPTR 指针有效:Receive 命令的实际响应数据将写入 DPTR 所指的主机缓冲区中。
  2. Request Data 字段无效:Receive 不是发送命令,不需要 Request Payload。
  3. MIC 不参与:带内机制中整个 MI 通信过程中均不使用 MIC 校验。
  4. Opcode/NMH/NMDx 等字段依然重要,用于指定请求的是哪个 MI 命令及其参数。

✅ 三、实战场景举例:读取结构体列表(Get Data Structure List)

☑️ SQE 构建流程如下:

SQE 字段 填入内容
CDW10 填入 NMH(包含消息类型、IC 等)
CDW11 Byte 0: Opcode = 0x01(例如:Get Data Structure)
Byte 1-3: Reserved
CDW12/13 设置 NMD0/NMD1 参数(如结构体 ID = 0x01
DPTR 指向主机缓冲区(接收响应结构体内容)
NSID 设置为 0h
CDW14/15 保留位,清 0 即可

📌 总结对照表(核心字段)

NVMe-MI Request 字段 对应 SQE 字段 说明
NMH (0–3) CDW10 消息头
OPC (4) CDW11[0] 管理命令操作码
NMD0/NMD1 (8–15) CDW12/13 参数
Response Data DPTR 指向 将从控制器填充到主机缓冲区
MIC 不使用

🧠 理解差异:Receive vs Send 字段结构重点对比

对比项 NVMe-MI Send NVMe-MI Receive
包含 Request Data ✅ 是 ❌ 否
需准备接收 Buffer ❌ 否(除非有 Response) ✅ 是(必需
使用 DPTR 接收端可能忽略 ✅ 控制器写回数据
MIC 字段作用 ❌ 无效 ❌ 无效

下一页 Figure 56 将会解释 Receive 响应如何映射至 NVMe CQE(即 Completion Queue Entry),也就是 Controller 如何返回数据与状态码。是否继续?我可以继续帮你逐字段解析。也可以为你绘制整个 带内 NVMe-MI 通信过程的完整交互图(Sequence Diagram),帮助记忆。