高级特性 - ✅ 6.5 Property Get Command Response(属性读取返回) (第340页)
我们继续深入分析 NVM Express® Base Specification 2.0b 中 6.5 Property Get 命令的 Response 和 6.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返回对应命令 IDSTS = 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 bytes001b → 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 实际的命令流与安全协议机制。你想继续往哪一部分深入?