数据结构 - 1. CNS(Controller or Namespace Structure)字段及其影响 (第250页)
NVME2.0协议解读 1 min read

数据结构 - 1. CNS(Controller or Namespace Structure)字段及其影响 (第250页)

Blog Author

在《NVM Express® Base Specification, revision 2.0b》文档中,第5章涉及了Identify命令的使用以及数据结构的返回和字段解析。根据提供的内容,这里有几个关键的要点和步骤,帮助我们更好地理解该协议的要求和处理方式:

1. CNS(Controller or Namespace Structure)字段及其影响

  • CNS字段的作用:Identify命令的返回数据结构与CNS字段密切相关。根据CNS值,控制器会返回相应的Controller或Namespace数据结构。如果返回的数据结构中的条目不足,则返回的未使用部分将被零填充。
  • 无效CNS值:如果控制器不支持指定的CNS值,控制器将终止命令并返回“Invalid Field in Command”的状态码。
  • CNS字段的历史变化:在1.0版本中,CNS字段为1位,在1.1版本中扩展为2位。主机软件应确保只对符合相应版本要求的控制器发出正确的CNS值。向1.0版本控制器发送1.1版本的CNS值,或反之,可能导致未定义的结果。

2. Identify命令的CNS值和数据结构

文中列出了不同CNS值对应的数据结构,这些数据结构包含了对命令处理的特定要求: - 00h: 返回指定NSID的Identify Namespace数据结构,或者返回NVM命令集的公共命名空间能力。此项为必选(M)。 - 01h: 返回控制器的Identify Controller数据结构。此项为必选(M)。 - 02h: 返回活动命名空间ID列表。此项为必选(M)。 - 03h: 返回指定NSID的命名空间识别描述符列表。此项为必选(M)。 - 05h: 针对指定的I/O命令集,返回特定的Identify Namespace数据结构。此项为必选(M)。 - 06h: 针对指定的I/O命令集,返回控制器的Identify Controller数据结构。此项为必选(M)。 - 07h: 返回与指定I/O命令集关联的活动命名空间ID列表。此项为必选(M)。

:上面列出的CNS值会返回不同的数据结构,例如Namespace信息或Controller信息。这些数据结构可以根据不同的命令集或控制器配置而有所不同。

3. 控制器和命名空间的管理

  • 其他的CNS值用于管理命名空间和控制器的分配、状态以及控制器间的关联。例如,10h表示分配的命名空间ID列表,11h表示指定分配NSID的Identify Namespace数据结构,等等。

4. 字段规范和状态管理

  • 数据结构中的“Y”和“N”标志表明哪些字段在指定的CNS值下是必须返回的(M)或可选的(O)。有些字段根据不同的CNS值返回与否,也需要特别注意命令集之间的支持矩阵。

5. 注意事项

  • 主机软件兼容性:在发送Identify命令时,主机软件必须确保命令和CNS值与控制器的版本兼容。尤其是控制器版本与CNS字段的不同可能会导致未定义的行为,甚至命令失败。

总结

在使用Identify命令时,CNS字段的设定会直接影响返回数据的结构和内容。理解不同CNS值与控制器、命名空间之间的关系对于协议的正确实现至关重要。确保CNS值符合控制器的版本要求,并且命令能根据需要返回正确的结构,是正确执行协议的关键。