管理命令集 - 我们现在进入 第 173 页 内容的深入分析,涵盖两大部分: (第184页)
我们现在进入 第 173 页 内容的深入分析,涵盖两大部分:
✅ 一、【Get Features 命令 – Select = 11b 时的 Completion Queue 返回格式】
图 195:当 SEL=011b(Supported Capabilities)时,Dword 0 的返回字段
📌 Figure 195:Completion Queue Entry Dword 0(SEL=11b)
当你使用 Get Features 命令,并将 Select 字段设置为 011b(即请求该 Feature 的“支持能力”),控制器不会返回 Feature 的实际值,而是在 Completion Queue 的 Dword 0 中返回该 Feature 的支持特性属性,如下:
| Bits | 字段名 | 含义 |
|---|---|---|
| 31:3 | Reserved | 保留位 |
| Bit 2 | Changeable | 若为 1,表示该 Feature 可被主机修改(即可通过 Set Features 改变)若为 0,表示此值为只读 |
| Bit 1 | NS Specific | 若为 1,该 Feature 是 Namespace Specific,设置作用于单一命名空间(NS)若为 0,设置作用于整个控制器(Controller-wide) |
| Bit 0 | Saveable | 若为 1,则该 Feature 支持保存(即通过 Set Features + Save 位可将值持久化)若为 0,则只能临时修改,控制器重启或 Reset 后恢复默认值 |
✅ 小结举例:
- 例子 1:
Get Features请求 Arbitration,返回 Dword 0 的最低三位为011b: -
表示该 Arbitration 特性:
- ✅ 可被保存(Saveable)
- ✅ 控制器范围有效(不是 namespace specific)
- ❌ 不可动态修改(不可 Changeable)
-
例子 2: 如果最低三位为
101b: - ✅ Saveable
- ❌ 非 NS Specific
- ✅ Changeable(支持动态修改)
✅ 二、【Get Log Page 命令字段结构 & 行为详解】
下一部分进入 Get Log Page 命令,及其字段和控制行为解释
📌 命令目的:
通过 Get Log Page 命令,主机可以从控制器读取标准或厂商定义的日志页数据,例如:
- SMART / Health 信息
- 错误日志
- Asynchronous Event Records(AER)
- Command Effects 日志等
✅ 命令涉及字段:
- Data Pointer(图 196):数据缓冲区指针
- Dword 10 – NUMDL + RAE(图 197)
- 以及 Command Dword 11~14(定义略后)
📌 图 196:Data Pointer
| Bits | 字段 | 描述 |
|---|---|---|
| 127:00 | Data Pointer (DPTR) | 指向主机内存中的数据接收缓冲区,定义见图 87 |
📌 图 197:Command Dword 10 字段详解
| Bits | 字段 | 描述 |
|---|---|---|
| 31:16 | NUMDL(Number of Dwords Lower) | 返回日志页数据的 Dword 数量的低 16 位(0-based) |
| 15 | RAE(Retain Asynchronous Event) | 控制是否保留 AER(异步事件记录) |
🔹 RAE(Bit 15)解释:
| 值 | 含义 |
|---|---|
0 |
读取后清除事件:相关的 AER 被清除(默认行为),下一次同样的事件会再次触发 AER |
1 |
保留事件状态:控制器保留 AER 事件,不会清除,可用于轮询式日志采集而不丢失信息 |
✅ 建议:对于非异步日志页(如错误日志),应将 RAE 设为
0;
对于异步日志(如 AER 日志页),可根据策略设为1保留或0清除
✅ 三、额外协议细节说明
🔸 支持 Offset 类型:
若控制器支持 Log Page Offset 功能(通过 Identify Controller 的 Log Page Attributes 字段表示),则可支持以下两种 Offset 模式:
| Offset Type 值 | 含义 | 适用条件 |
|---|---|---|
0 |
Byte Offset | 所有日志页均需支持 |
1 |
Index Offset | 仅当该日志页在 LID Supported 表中标记 IOS=1 才允许 |
⚠️ 若你对某日志页设置 Offset Type =
1(Index 模式),但该日志页不支持 IOS,则命令将失败,状态码为:
Invalid Field in Command
✅ 学习与使用建议总结:
| 模块 | 建议 |
|---|---|
| Get Features SEL=11b | 学会通过 Dword 0 分析某个 Feature 是否支持“保存/修改/命名空间特定设置” |
| Get Log Page | 掌握日志页访问时 RAE 使用场景、NUMDL 含义、Offset 使用限制 |
| 错误处理 | 注意 Offset Type 使用前需先查询日志页支持性(Figure 204:LID Supported and Effects) |
| 配套学习 | 交叉参考 Identify Controller 中的 Log Page Attributes 字段,判断是否支持扩展数据访问模式 |
如果你需要我帮你画一个:
- Get Features 命令支持属性返回位(Saveable / Changeable / NS Specific)示意图
- 或者 Get Log Page 的完整字段结构图 + Offset 支持逻辑图
我可以立刻整理为图文帮助你一目了然。要不要来一张?