管理命令集 - 1. Directive Receive 命令 (第174页)
NVME2.0协议解读 1 min read

管理命令集 - 1. Directive Receive 命令 (第174页)

Blog Author

在深入分析 NVM Express® Base Specification, revision 2.0b 中的 Directive ReceiveDirective Send 命令时,我们需要特别关注命令格式和执行过程中的各个字段,下面将逐步讲解这些命令的具体细节和操作逻辑:

1. Directive Receive 命令

命令描述:

Directive Receive 命令用于接收从控制器传输的数据缓冲区。命令格式包括以下几个关键部分:

  • Data Pointer (DPTR):指定数据缓冲区的起始位置。该字段标识数据结构的起始地址,确保数据可以正确地接收和存储。
  • Command Dword 10
  • Number of Dwords (NUMD):此字段指定要传输的数据字(Dwords)的数量。其值是以 0 为基础的,即从 0 开始计数。如果传输的字数少于数据结构的实际大小,则仅传输该部分数据。如果指定的字数大于数据结构的大小,则只传输数据结构的完整内容,不会额外传输其他数据。

  • Command Dword 11

  • Directive Specific (DSPEC):该字段的解释取决于 Directive Type。它指定与指令类型相关的特定操作参数。
  • Directive Type (DTYPE):指定指令类型,确定该命令的操作方式和数据传输的处理逻辑。具体指令类型参见第 8.7 节。
  • Directive Operation (DOPER):指定要执行的指令操作,解释该字段的方式依赖于 Directive Type

命令完成:

  • Directive Receive 命令完成时,控制器将在 Admin 完成队列 中发布一个完成队列条目,表示命令的执行状态。
  • 返回的命令特定状态值取决于 Directive Type,具体的状态值可以在第 8.7 节中找到。

命令特定状态值:

  • 20hNamespace is Write Protected。在命名空间被写保护的情况下,执行该命令会被禁止。相关详细内容可以参见第 8.12 节。

2. Directive Send 命令

命令描述:

Directive Send 命令用于将数据缓冲区(通常依赖于 Directive Type)发送到控制器。它的格式与 Directive Receive 命令类似,但方向相反:数据从主机发送到控制器。

  • Data Pointer (DPTR):指定数据缓冲区的起始位置,确保数据能够正确传输给控制器。
  • Command Dword 10 和 Command Dword 11:这些字段与 Directive Receive 命令相同,具体定义如下:
  • Command Dword 10Number of Dwords (NUMD),指定要传输的字数,类似于接收命令中的 NUMD 字段。
  • Command Dword 11:包括 Directive Specific (DSPEC)Directive Type (DTYPE)Directive Operation (DOPER),这些字段定义了指令类型和操作,具体解析方式也在第 8.7 节中详细描述。

命令完成:

  • Directive Send 命令完成后,控制器将在 Admin 完成队列 中发布一个完成队列条目,表示命令执行的状态。

总结:

  • Directive ReceiveDirective Send 命令的共同点在于,它们都依赖于 Directive TypeDirective Operation 来决定数据的传输方式和数据内容的处理。
  • Directive Receive 用于从控制器接收数据,而 Directive Send 则是将数据从主机发送到控制器。两者的差异主要体现在数据的流向及命令执行时的细节处理。
  • 命令的执行状态:无论是接收还是发送指令,控制器在命令完成后都会提供一个状态码,指示命令是否成功执行,或者是否存在问题(例如,命名空间被写保护)。

通过理解这些字段及其含义,您可以更好地掌握如何使用这两个命令进行数据的接收和发送,同时确保命令在执行过程中能够遵循协议中的约束条件。