高级特性 - ✅ 6.5 Property Get Command Response(属性读取返回) (第340页)
NVME2.0协议解读 1 min read

高级特性 - ✅ 6.5 Property Get Command Response(属性读取返回) (第340页)

Blog Author

我们继续深入分析 NVM Express® Base Specification 2.0b6.5 Property Get 命令的 Response6.6 Property Set 命令。本节是 Fabric 传输下主机与控制器在初始化过程中的核心步骤之一。


✅ 6.5 Property Get Command Response(属性读取返回)


📤 响应数据结构 – Figure 387

当主机提交 Property Get 命令成功后,控制器会返回以下结构:

字节范围 字段 说明
03:00(4字节) VALUE 如果读取的是 4 Byte 属性,此字段存储值(常用于读取如 CAP、VS、CSTS 等寄存器)
07:04 Reserved 如果是 4 字节读取,则这部分保留
如果是 8 字节属性(如 CAP),则完整使用 07:00
09:08 SQHD Submission Queue Head Pointer,指示该命令关联的 SQ 的当前 head
11:10 Reserved 保留
13:12 CID 返回的命令 ID,用于主机与提交命令匹配
15:14 STS 返回命令状态(如成功、字段错误等)

🧪 举例说明:

主机使用 Property Get 命令想读取控制器的 CAP(能力寄存器,8 字节),则:

  • 设置 ATTRIB[2:0] = 001b(8 字节)
  • 设置 OFST = 0h
  • 控制器返回:
  • VALUE[07:00] = CAP 的 8 字节值
  • CID 返回对应命令 ID
  • STS = 0 表示成功

🛠 6.6 Property Set Command(属性设置命令)


📌 功能描述:

主机使用 Property Set 命令向控制器写入指定寄存器值(例如配置控制器寄存器 CC)。

  • 属性及偏移的解释同 §3.1.3。
  • 允许写入 4 字节或 8 字节寄存器(比如:CC 是 4 字节,CAP 不允许写)

🧾 命令结构 – Figure 388

字节范围 字段 描述
00 OPC 固定 7Fh(Fabrics 命令)
01 Reserved 保留
03:02 CID 命令标识符
04 FCTYPE 固定 00h,表示 Property Set
39:05 Reserved 保留
40 ATTRIB 设置属性大小:
000b → 4 bytes
001b → 8 bytes
43:41 Reserved 保留
47:44 OFST 要设置的属性偏移量(单位为 Byte)
55:48 VALUE 要写入的值。如果是 4 字节,则 51:48 有效,55:52 保留
63:56 Reserved 保留

🔄 响应结构 – Figure 389

字节范围 字段 说明
07:00 Reserved 保留(无返回值)
09:08 SQHD Submission Queue Head 指针
11:10 Reserved 保留
13:12 CID 被完成的命令 ID
15:14 STS 状态码:0 成功,其他值表示错误

💡 实战示例 – 设置控制器使能 (CC.EN)

我们希望通过 Property Set 启动控制器:

操作
设置目标寄存器偏移 OFST 14h(即 CC 控制寄存器)
设置值 VALUE 例如 00000001h(只置位 EN 位)
ATTRIB 000b(写入 4 字节)

📌 总结对比

命令 FCTYPE 用途 属性 数据方向 对应作用
Property Get 04h 读属性 MMIO寄存器 Controller → Host 查询状态
Property Set 00h 写属性 MMIO寄存器 Host → Controller 修改控制寄存器(如配置控制器、启动)

如果你需要我帮你整理出:

  • 所有寄存器(属性)的偏移速查表(§3.1.3)
  • Fabric 初始化流程图(包括 Property Set/Connect 等顺序)
  • 不同状态码(如 Connect Invalid Parameters)的解释
  • 或者你想搭建 NVMe-oF 环境进行实验

我都可以为你继续解读和辅助准备。需要的话,我们可以从 §6.7 开始分析 Authentication Send 实际的命令流与安全协议机制。你想继续往哪一部分深入?