NVMe架构与操作原理 - ✅ 一、关键术语详解(1.4.1) (第15页)
NVME2.0协议解读 1 min read

NVMe架构与操作原理 - ✅ 一、关键术语详解(1.4.1) (第15页)

Blog Author

你提供的是 《NVM Express® Base Specification, revision 2.0b》 第 1.4.1 节中的补充内容(关键字定义),以及第 1.4.2 节中关于数值表达与单位的约定。这部分内容虽然是「术语说明」和「格式规范」,但对深入理解整个规范如何书写、命令如何解析、参数如何定义是至关重要的。以下是本节的中文深入解读。


✅ 一、关键术语详解(1.4.1)

1.4.1.4 optional(可选)

“可选”意味着规范没有强制要求实现该功能,但如果选择实现,必须完全遵循规范所定义的方式。

📌 重点理解: - “可选” ≠ “自由发挥” - 如果实现了某个 optional 特性,就必须完全按照规范定义,否则会导致不兼容或错误。

1.4.1.5 R(保留字母缩写)

在图表或表格空间不足时,用 R 表示 “Reserved(保留)”。

1.4.1.6 reserved(保留)

指保留给将来标准扩展使用的比特、字节、字段等。其行为定义如下:

项目 说明
写入值 通常必须清零(0h),或按未来扩展定义的方式写入
控制器行为 接收时不要求检查 reserved 字段
若发送 reserved 编码值(opcode 等) 必须报告错误
若写入 reserved 属性字段 结果未定义,可能导致不可预期行为

📌 开发注意事项: - 不得私自使用 reserved 位; - 必须确保输出结构中 reserved 字段为 0; - 不要依赖 reserved 字段的任何行为或反馈。

1.4.1.7 shall(必须)

“必须实现的功能”。是强制性要求,不实现将导致不兼容或非符合规范。

🧩 例子:一个命令字段定义为 “shall be cleared to 0h”,意味着任何时候都不能设置该字段为非零值。

1.4.1.8 should(推荐)

表示存在灵活选择,但强烈建议采用某种方式。可理解为 “推荐最佳实践”。

🧩 通常用于性能优化或兼容性建议:如 “控制器 should 优化 LBA 块访问顺序”。


✅ 二、数值和单位约定(1.4.2)

基于 0 的编码(zero-based encoding)

一种编号方式,其中 0h 表示 值 11h 表示 值 2,依此类推。

📌 但:

本规范默认采用基于 1 的表示法(1-based),除非明确指出为 0-based。


尺寸单位格式说明(Figure 2)

十进制单位(Decimal) 二进制单位(Binary)
k(kilo) 10³ = 1,000 Ki(kibi) 2¹⁰ = 1,024
M(mega) 10⁶ Mi(mebi) 2²⁰
G(giga) 10⁹ Gi(gibi) 2³⁰
T(tera) 10¹² Ti(tebi) 2⁴⁰
P(peta) 10¹⁵ Pi(pebi) 2⁵⁰
E(exa) 10¹⁸ Ei(exbi) 2⁶⁰
Z(zetta) 10²¹ Zi(zebi) 2⁷⁰
Y(yotta) 10²⁴ Yi(yobi) 2⁸⁰

📌 单位换算在分析容量字段数据块大小字段时非常关键。 🧩 例如:Controller Memory Buffer Size(CMBSZ)字段中定义的是以 4KB 为单位的大小。


指数表示

使用 ^ 表示次方,比如:2^10 表示 1024(即 Ki),10^6 表示 1,000,000(即 M)。


ASCII 字符串的定义与规范

某些字段(如 Serial Number、Model Number、NQN 等)使用 ASCII 字符串表示,其规则如下:

项目 内容
允许字符范围 20h7Eh,即标准 ASCII 可显示字符(包括空格、字母、数字、标点)
左对齐 字符串从最低地址开始填充
空白填充 右侧使用 ASCII 空格 20h 补齐长度

🧩 例如: - "Copyright" 的存储为:43h 6Fh 70h 79h 72h 69h 67h 68h 74h(分别对应 C、o、p、y、r、i、g、h、t)。


✅ 总结重点知识点

术语 中文含义 重要备注
shall 必须实现 强制要求
should 推荐实现 强烈建议但非强制
may 可选实现 不影响兼容性
optional 可选功能 如果实现,则必须合规
reserved 保留字段 不可使用,需写 0h
ASCII 字符串 仅限 20h-7Eh 左对齐,右补空格
单位表达 Ki/Mi/Gi vs k/M/G 理解字段单位的关键

你是否希望我进一步配合你正在阅读的章节,将这些术语与具体的命令字段(比如 Identify 或 Set Features)一起分析?或者你对某个保留位、编码方式有更深入的疑问?我可以为你做更详细的字段级图解。