NVMe架构与操作原理 - ✅ 一、关键术语详解(1.4.1) (第15页)
你提供的是 《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表示 值 1,1h表示 值 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 字符串表示,其规则如下:
| 项目 | 内容 |
|---|---|
| 允许字符范围 | 20h 到 7Eh,即标准 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)一起分析?或者你对某个保留位、编码方式有更深入的疑问?我可以为你做更详细的字段级图解。