数据结构读取与响应格式 - 页码129
NVMe-MI 1 min read

数据结构读取与响应格式 - 页码129

Blog Author

深入分析 SES ReceiveSES Send 命令


🧩 SES Receive 命令

用途

SES Receive 命令 用于检索 SES 状态类型的诊断页面。该命令会返回 SES 状态诊断页面,它的内容是基于指定的 Page Code (PCODE) 字段来决定的。

数据结构

该命令使用 NVMe Management Dword 0 和 1 字段。具体格式如下:

NVMe Management Dword 0 格式(见 Figure 123):

字节范围 字段 说明
31:08 Reserved 保留字段
07:00 Page Code (PCODE) 指定要检索的 SES 状态类型诊断页面

NVMe Management Dword 1 格式(见 Figure 124):

字节范围 字段 说明
31:16 Reserved 保留字段
15:00 Allocation Length (ALENGTH) 指定最大响应数据长度,限制返回的 SES 诊断页面大小

响应数据

Response Data Length (RDL) 字段包含响应数据的长度,或者如果响应数据被写入到 Management Endpoint Buffer 中,则为传输的字节数。

命令流程

  1. Page Code (PCODE) 字段指定要检索的 SES 状态诊断页面。
  2. Allocation Length (ALENGTH) 字段定义了 Response Data 的最大长度,若响应数据超出该长度,则会被截断。
  3. 如果 PCODE 字段指定了一个无效的页面代码,或者页面类型不被支持,Invalid Parameter Error Response 会被返回,指示错误字段。
  4. 如果出现错误,SES Receive 命令会返回 Error Response,并可能与 SES-4sense keysadditional sense codes 对应。
  5. 如果命令通过 out-of-band 机制 支持,且响应数据大小超过一个 NVMe-MI 消息所能承载的最大大小,Management Endpoint Buffer 将用于存储超出大小的数据。

特殊情况

  • 当请求的 SES 状态页面的大小超过响应允许的最大大小时,数据将被截断。
  • 如果请求的 PCODE 字段指向了一个不支持的或保留的值,则返回 Invalid Parameter Error Response

🧩 SES Send 命令

用途

SES Send 命令 用于将 SES 控制类型的诊断页面 发送到 SES Enclosure Service Process(SES 封装服务进程)。该命令将 Request Data 中的 SES 控制类型页面 传输至指定的接收方。

数据结构

  • SES Receive 命令不同,SES Send 命令指定的是 SES 控制类型诊断页面,并传输该页面的数据。
  • PCODE 字段在此命令中表示要发送的 SES 控制类型诊断页面 的页面代码,而非 SES 状态页面

命令流程

  1. SES Send 命令通过 Request Data 字段将 SES 控制类型页面 传输至接收端。
  2. SES 控制类型页面PCODE 字段指定了要传输的页面类型。
  3. 传输完成后,返回 Success Response

总结:

命令 用途 数据结构 关键字段
SES Receive 检索 SES 状态类型的诊断页面 NVMe Dword 0 和 1 PCODE, ALENGTH
SES Send 发送 SES 控制类型的诊断页面 Request Data PCODE

SES Receive 用于获取诊断页面,支持 out-of-band 传输,且能够处理大于最大消息大小的数据;SES Send 则用于将 SES 控制类型页面 传输给接收方。

如果您需要更深入的技术讨论或有其他命令分析需求,欢迎随时提问!