用于管理型非易失性存储器的地址映射的体系结构 相关申请
本申请要求 2008 年 12 月 23 日提交的美国临时专利申请 No.61/140,436 以及 2009 年 11 月 6 日提交的美国专利申请 No.12/614,369 的优先权益, 其每个申请通过引用被整体 结合于此。
技术领域
本主题一般涉及对管理型 (managed) 非易失性存储器的访问和管理。 背景技术 闪存是一种电可擦除可编程只读存储器 (EEPROM)。 由于闪存是非易失性的并且是 相对密集的, 因此它们被用来在手持式计算机、 移动电话、 数字相机、 便携式音乐播放器以 及其它存储方案 ( 例如磁盘 ) 不适合的许多其它设备中存储文件和其它永久对象。
NAND 是一种可像诸如硬盘或存储卡之类的块器件 (block device) 那样来访问的 闪存。典型块大小是 512 字节的 32 页, 其每个块大小是 16KB 的块大小。每块由多页组成。 典型的页大小是 512 字节。与每页相关联的是用于存储检错和纠错校验和的多个字节 ( 例 如, 12-16 字节 )。读取和编程逐页地来执行, 擦除逐块地来执行, 并且块中的数据仅可被顺 序地写入。 NAND 依赖于纠错码 (ECC) 来补偿在常规器件操作期间可能翻转 (flip) 的比特。 当执行擦除或编程操作时, NAND 器件可以检测到未能进行编程或擦除的块并且在坏块映射 关系中将这些块标记为坏的。数据可被写入不同的好块, 并且坏块映射关系被更新。
管理型 NAND 器件组合原始的 NAND 与存储器控制器, 来处理纠错和检错以及 NAND 存储器的存储器管理功能。在球栅阵列 (BGA) 封装件或支持标准化处理器接口的其它集 成电路 (IC) 封装件, 例如多媒体存储卡 (MMC) 和安全数字 (SD) 卡中, 可商业获得管理型 NAND。管理型 NAND 器件可以包括可利用一个或多个芯片选择信号来访问的多个 NAND 器件 或管芯。芯片选择是在数电中用来从连接到同一总线的数个芯片中选择一个芯片的控制 线。芯片选择通常是大多数 IC 封装件上的、 将器件上的输入管脚与该器件内的内部电路相 连的命令管脚。当使芯片选择管脚保持在非活动状态时, 芯片或器件忽视其输入管脚上的 状态改变。当使芯片选择管脚保持在活动状态时, 该芯片或器件就像其是该总线上的唯一 芯片那样来作出响应。
开放 NAND 闪存接口工作组 (ONFI) 已开发出了用于 NAND 闪存芯片的低层接口, 以 允许来自不同厂商的遵从器件之间的互操作性。ONFI 规范版本 1.0 规定了 : 用于 TSOP-48, WSOP-48, LGA-52 和 BGA-63 封装件中的 NAND 闪存的标准物理接口 (pin-out, 接脚 ) ; 用于 读取、 写入和擦除 NAND 闪存芯片的标准命令集 ; 以及用于自我标识的机制。ONFI 规范版本 2.0 支持双通道接口, 其中奇数芯片选择 ( 也称为芯片使能或 “CE” ) 连接到通道 1 并且偶 数 CE 连接到通道 2。物理接口对于整个封装件来说将具有不多于 8 个 CE。
虽然 ONFI 规范允许互操作性, 但是当前的 ONFI 规范未充分利用管理型 NAND 方 案。
发明内容 所公开的体系结构使用地址映射来将主机接口上的块地址映射到非易失性存储 器 (NVM) 器件的内部块地址。块地址被映射到用于选择由该块地址标识的同时可寻址单元 (CAU) 的内部芯片选择。所公开的体系结构支持用于读、 写、 擦除和获取状态操作的一般性 非易失性存储器命令。该体系结构还支持用于支持平衡利用多 CAU 体系结构的读写操作的 扩展命令集。
附图说明
图 1 是包括被耦合到管理型 NVM 封装件的主机处理器的示例存储器系统的框图。 图 2A 图示出了实现图 2A 的地址映射的管理型 NVM 封装件的示例地址映射。 图 2B 是图 1 的示例 NVM 封装件的框图。 图 2C 图示出了用于图 1 的管理型 NVM 封装件的示例地址映射方案。 图 2D 图示出了包括坏块替换的图 2C 的地址映射方案。 图 3 是使用带有地址的读命令的示例操作的流程图。 图 4 是使用带有地址的写命令的示例操作的流程图。 图 5 是使用带有地址的擦除命令的示例操作的流程图。 图 6A-6B 是使用 StrideRead( 跨度读 ) 命令的示例操作的流程图。 图 7 是使用 StrideWrite( 跨度写 ) 命令的示例操作的流程图。 图 8 图示出了图 1 的 NVM 封装件中的命令队列的使用。 图 9 是用于将命令记录在图 8 所示的命令队列中的示例处理的流程图。具体实施方式
存储器系统概述
图 1 是示例存储器系统 100 的框图, 包括耦合到管理型 NVM 封装件 104( 即, 管理 型 NAND 封装件 ) 的主机处理器 102。NVM 封装件 104 可以是 BGA 封装件或其它 IC 封装件, 包括多个 NVM 器件 108( 例如, 多个原始 NAND 器件 )。存储器系统 100 可被用在多种设备 中, 包括但不限于 : 手持式计算机、 移动电话、 数字相机、 便携式音乐播放器、 玩具、 拇指驱动 器、 电子邮件设备以及希望或需要非易失性存储器的任何其它设备。 如这里所使用的, 原始 NVM 是由外部主机处理器管理的存储器件或封装件, 并且管理型 NVM 是包括诸如纠错、 耗损 均衡 (wear leveling)、 坏块管理等之类的至少一个内部存储器管理功能的存储器件或封 装件。
在一些实现方式中, NVM 封装件 104 可以包括用于利用内部芯片选择信号通过内 部通道来访问和管理 NVM 器件 108 的控制器 106。内部通道是控制器 106 与 NVM 器件 108 之间的数据路径。控制器 106 可以执行存储器管理功能 ( 例如, 耗损均衡、 坏块管理 ) 并且 可以包括用于检测并纠正数据错误 ( 例如, 翻转的比特 ) 的纠错 (ECC) 引擎 110。在一些实 现方式中, ECC 引擎 110 可被实现为控制器 106 中的硬件组件或者由控制器 106 执行的软 件组件。在一些实现方式中, ECC 引擎 110 可以位于 NVM 器件 108 中。高效地管理数据吞 吐量的流水线管理模块 112 可以被包括。在一些实现方式中, 主机处理器 102 和 NVM 封装件 104 可以通过主机可见的通信 通道 ( “主机通道” ) 来传输信息 ( 例如, 控制命令、 地址、 数据 )。主机通道可以支持标准接 口, 例如原始 NAND 接口或双通道接口, 如在 ONFI 规范版本 2.0 中所述的。主机处理器 102 还可以提供主机芯片使能 (CE) 信号。主机 CE 是主机处理器 102 可见的以用来选择主机通 道。
在示例存储器系统 100 中, NVM 封装件 104 支持 CE 隐藏。CE 隐藏允许单个主机 CE 被用于 NVM 封装件 104 中的各个内部通道, 从而减少支持 NVM 封装件 104 的接口所需的信号 数目。如参考图 2A 所述的, 可利用地址空间和地址映射来将存储器访问 (memory access) 映射到内部通道和 NVM 器件 108。可以利用由控制器 106 生成的内部 CE 信号来使能各个 NVM 器件 108。
示例地址映射
图 2A 图示出了管理型 NVM 的示例地址映射关系。控制器 106 将在主机通道上接 收的块地址映射到 NVM 器件 108 内部的具体块地址。为了辅助地址映射, 控制器 106 向主 机处理器 102 提供几何参数, 包括但不限于 : 管芯大小、 块大小、 页大小、 元数据大小 (MDS)、 行程 (run) 和跨度 (stride)。 行程和跨度参数使得主机处理器 102 能够生成页地址的高效序列。行程参数标识 出 NVM 封装件 104 中当前利用主机 CE 和地址映射可同时寻址的 CAU 的数目。CAU 可以是 可从单个主机通道访问的、 可与另一 CAU 同时被写入或读取的 NVM 器件 108 的一部分。CAU 还可以是整个 NVM 器件 108。跨度参数标识出 CAU 内的用于特定于厂商的操作命令的块的 数目。
在图 2A 所示的示例块映射中, NVM 封装件 104 具有行程 2( 即, 两个 CAU) 和跨度 4( 即, 每个 CAU 4 块 ), 允许主机处理器 102 生成 8 个块的切片 (slice) : b0, b1, b2, b3, b4, b5, b6, b7。因此, 切片是行程乘以跨度合计出的块的集合。可以基于所需要的应用或存储 器体系结构来制造具有不同行程和跨度值的 NVM 封装件。 注意, 块标识符已在图 2A 和图 2B 中用斜体字标出, 以从视觉上区分属于不同 CAU 的块。
MDS 参数标识出允许用于元数据的与每个页大小相关联的字节数目。页大小是非 易失性存储器的页面的数据区域。完美页大小 (Perfect Page Size, PPS) 是字节数目, 该 字节数目等于页大小加上 MDS。原始页大小 (Raw Page Size, RPS) 是非易失性存储器的物 理页的大小。
实现地址映射的示例 NVM 封装件
图 2B 是实现图 2A 的地址映射的图 1 的示例管理型 NVM 封装件 104 的框图。NVM 封装件 104 可以包括主机接口, 其具有主机通道、 命令锁存使能 (CLE) 输入、 地址锁存使能 (ALE) 输入、 芯片使能 (CE) 输入和准备就绪 / 忙碌 (R/B) 输入。主机接口可以包括更多或 更少的输入。在此示例中, 主机接口接收来自主机处理器 102 的逻辑地址。逻辑地址可以 包括表示这样的字段 [ 块地址页地址偏移 ] 的比特, 其是典型的 NVM 寻址。
在一些实现方式中, 控制器 106 从主机同道读取逻辑地址, 并且利用图 2A 的地址 映射将块地址映射到具体内部块地址。例如, 如果逻辑地址是 [0, 0, 0], 则块地址是 0。块
地址被映射为针对 NVM 器件 108a 的内部芯片选择块地址、 页地址和偏移形成了用来从所选 CAU 访问数据的 PPS 的物理地址。在此示例中, 与包括 NVM 器件 108b 的一部分的CAU 202 相比, 本 CAU 包括整个物理 NVM 器件 108a。因此, 块地址执行两个功能 : 1) 通过将 块地址的比特映射到针对 CAU 或 NVM 器件的内部 CE 来辅助选择物理 NVM 器件内的 CAU, 或 者物理 NVM 器件 ; 2) 用于提供物理地址来访问所选 CAU 或 NVM 器件中的块。
在此示例中, 偶数块被映射到 NVM 器件 108a 并且奇数块被映射到 NVM 器件 108b 中 的 CAU 202。当控制器 106 检测到偶数编号块地址时, 控制器 106 激活针对 NVM 器件 108a 的内部芯片使能 并且当控制器 106 检测到奇数编号的块地址时, 控制器 106 激活针对 NVM 器件 108b 的内部芯片使能 CE1。该地址映射方案可被扩展为管理型 NVM 封装件中的任 意所希望数目的 CAU 和 / 或 NVM 器件。在一些实现方式中, 块地址的最高有效位可被用来 选择内部 CE, 并且其余块地址比特或者整个块地址可被与页地址和偏移组合成物理地址, 来访问块以执行操作。 在一些实现方式中, 为了选择要激活的内部 CE, 译码逻辑可被添加到 NVM 封装件或控制器 106 以对块地址译码。
上述地址映射方案的优点在于 NVM 封装件 104 的主机接口可被简化 ( 减少了管 脚数 ) 并且仍然支持用于读、 写、 擦除和获取状态操作的一般性原始 NVM 命令 ( 例如, 原始 NAND 命令 )。另外, 经扩展命令可被用来平衡利用多 CAU 体系结构。与用于传统的原始 NVM 体系结构 ( 例如, 原始 NAND 体系结构 ) 的交错命令类似, NVM 封装件 104 支持同时读写操 作。
在一些实现方式中, 引擎 110 对数据执行纠错并且通过主机接口向主机处理器发 送状态。该状态向主机处理器通知操作是否失败, 从而允许主机处理器调节块地址以访问 不同 CAU 或 NVM 器件。例如, 如果响应于特定 CAU 上的操作而发生了大量错误, 则主机处理 器可以修改块地址来避免激活针对有缺陷 NVM 器件的内部 CE。
图 2C 图示出了用于图 1 的管理型 NVM 封装件 104 的示例地址映射方案。具体地, 映射可被用于包括多个管芯的管理型 NAND 器件, 其中, 每个管芯可以潜在地包括多个平面 (plane)。在一些实现方式中, 地址映射对同时可寻址单元 (Concurrently Addressable Unit, CAU) 进行操作。CAU 是可从单个主机通道访问的物理存储装置的一部分, 其可与 NVM 封装件中的其它 CAU 同时地或者并行地被读取、 编程或擦除。 CAU 例如可以是单个平面或单 个管芯。CAU 大小是 CAU 中可擦除块的数目。
将利用示例存储器体系结构来描述映射。对于该示例体系结构, 块大小被定义为 可擦除块中的页的数目。在一些实现方式中, 对于每 4 千字节的数据, 有 16 字节的元数据 可用。其它存储器体系结构也可以。例如, 元数据可被分配有更多或更少的字节。 图 2C 所示的地址映射方案允许使用用于读 / 编程 / 擦除 NAND 块的原始 NAND 协 议以及使得能够优化性能的其它命令。 NVM 封装件 104 包括用于管理 NAND 的数据可靠性的 ECC 引擎 ( 例如, ECC 引擎 110)。因此, 主机控制器 102 不需要包括 ECC 引擎 110 或者为了 可靠性以其他方式处理数据。
NVM 封装件 104 将 CAU 定义为可与其它 CAU 同时或并行地被访问 ( 例如, 将数据从 NAND 存储器单元移到内部寄存器 ) 的区域。在此示例体系结构中, 假设所有 CAU 包括相同 数目的块。在其它实现方式中, CAU 可以具有不同数目的块。下面的表 I 描述了用于访问 CAU 中的页的示例行地址格式。
表 I- 示例行地址格式
8102326154 A CN 102326167 R[X+Y:X+Y+Z-1] CAU
说明书R[0:X-1] 页5/13 页R[X:X+Y-1] 块参考表 I, 示例 n 比特 ( 例如, 24 比特 ) 行地址可以以下面的格式被呈现给 NAND 器件中的控制器 : [CAU : 块: 页 ]。CAU 是表示管芯或平面的编号 ( 例如, 整数 )。块 (Block) 是由 CAU 编号所标识的 CAU 中的块偏移, 并且页 (Page) 是由该块 (Block) 标识的块中的页 偏移。例如, 在每块有 128 页、 每个 CAU 有 8192 块并且有 6 个 CAU 的器件中 : X 将为 7(27 = 128), Y 将为 13(213 = 8192), 并且 Z 将为 3(22 < 6 < 23)。
图 2C 所示的示例 NVM 封装件 104 包括两个 NAND 管芯 204a、 204b, 并且每个管芯具 有两个平面。例如, 管芯 204a 包括平面 206a、 206b。并且, 管芯 204b 包括平面 206c、 206d。 在此示例中, 每个平面是一个 CAU 并且每个 CAU 具有 2048 个多级单元 (MLC) 块, 每块有 128 页。编程和擦除操作可以在一跨度的块 ( 来自每个 CAU 的块 ) 上执行。跨度被定义为各自 来自不同 CAU 的块的阵列。在所示示例中, “跨度 0” 定义了来自 CAU 0-3 中的每个 CAU 的 块 0, “跨度 1” 定义了来自 CAU0-3 中的每个 CAU 的块 1, “跨度 2” 定义了来自 CAU 0-3 中的 每个 CAU 的块 2, 等等。
该 NVM 封装件包括 NVM 控制器 202, NVM 控制器 202 通过控制总线 208 和地址 / 数 据总线 210 与 CAU 通信。在操作期间, NVM 控制器 202 从主机控制器 ( 未示出 ) 接收命令, 并且作为对命令的响应, 断言控制总线 208 上的控制信号和地址 / 数据总线 210 上的地址 或数据, 以对一个或多个 CAU 执行操作 ( 例如, 读、 编程或擦除操作 )。在一些实现方式中, 该命令包括具有 [CAU : 块: 页 ] 形式的行地址, 如参考图 2C 描述的。
图 2D 图示出了包括坏块替换的图 2C 的地址映射方案。在此示例中, 跨度地址已 由主机控制器 102 发出用于具有三个 CAU 的 NVM 封装件 104, 其中, CAU 之一在跨度块偏移 中保存了坏块。 “跨度 4” 地址将正常地访问 CAU0 : 块 4, CAU1 : 块 4 和 CAU2 : 块 4。在此示 例中, 然而, 坏块 CAU1 : 块 4 被 CAU1 : 块 2000 替换。
示例命令集
NVM 封装件 104 能够支持透明模式。透明模式使得能够在不用 ECC 的情况下访问 存储器阵列并且可被用来评估控制器 106 的性能。 NVM 封装件 104 还支持用于读、 写和获取 状态操作的一般性原始 NVM 命令。表 1-3 描述了示例读、 写和提交 (Commit) 操作。对于传 统的原始 NVM, NVM 器件在写命令被发出之前应当准备就绪。如参考表 4 描述的, 可以利用 状态读取操作来确定准备就绪。
表 1- 示例读操作
表 2- 示例写操作 ( 写模式 )
表 3- 示例写操作 ( 提交模式 )
表 4- 示例状态读取操作
除 了 上 述 操 作 以 外, 控 制 器 106 可 以 支 持 各 种 其 它 命 令。 页 参 数 读 取 (Page Parameter Read) 命令从 NVM 封装件 104 返回几何参数。几何参数的一些示例包括但不限 于: 管芯大小、 块大小、 页大小、 MDS、 行程和跨度。中止 (Abort) 命令使得控制器 106 监视 当前操作并且停止进程中的后续跨度操作。重置 (Reset) 命令停止当前操作, 使得正被改 变的存储器单元的内容无效。控制器 106 中的命令寄存器被清除以准备用于下一命令。读 ID(Read ID) 命令返回产品标识。读时序 (Read Timing) 命令返回用于写和擦除命令的建立、 保持和延迟时间。读器件参数 (Read Device Parameter) 命令返回 NVM 封装件 104 的 具体标识, 包括规范支持、 器件版本和固件版本。
在下面的表 5 中描述了示例命令集。
表 5- 示例命令集
功能 页读取 带有地址的页读取 跨度读取 页写入 带有地址的页写入 跨度写入 块擦除 带有地址的块擦除 读状态 带有地址的读状态 读取比特翻转计数器 读 ID 读时序 读器件参数 重置 中止
1st 集合 00h 07h 09h----09h 80h 87h 89h----89h 60h 67h 70h 77h 72h 90h 91h 92h FFh 99h 2nd 集合 30h 37h 39h 10h 17h 19h D0h D7h -示例读、 写和擦除操作
为了平衡利用 NVM 封装件 104 中的多 CAU 体系结构, NVM 封装件 104 可以利用扩展 命令集来支持对所有或数个 CAU 的访问。NVM 封装件 104 可以支持下面的扩展命令, 其中, 所有地址被对齐到 PPS : 带有地址的读、 带有地址的写、 带有地址的擦除以及带有地址的状 态。图 3-7 指示出了在哪里可能发生跨越 CAU 的交错。交错可能发生的点 ( 称为 “交错点 “) 用圆圈指示。由于每个操作的开始点和结束点各自是交错点, 因此每个操作的开始点和 结束点分别表现为白圆圈和交叉线阴影圆圈, 并且交错可能发生的所有中间点用条纹阴影圆圈来指示。图 3-7 假设 NVM 封装件处于一系列操作之后的完全准备就绪状态。
图 3 是使用带有地址的读命令的示例操作 300 的流程图。 在步骤 302, 主机处理器 向 NVM 封装件发出带有地址的读命令。在步骤 304, 主机处理器执行对地址状态序列的等 待, 直到 NVM 封装件提供指示地址已准备好被读取的状态为止。在步骤 306, 主机处理器向 NVM 封装件发出带有地址的确认命令。在步骤 308, NVM 封装件中的控制器通过主机通道将 PPS 字节的数据传送给主机处理器。利用 ECC 引擎 ( 例如, ECC 引擎 110) 向 NVM 封装件中 的字节应用纠错。在此示例带有地址的读命令操作中, 交错点可能出现在该操作的开始和 结束处以及该操作的中间步骤 302 和 304、 中间步骤 304 和 306 之间。
针对跨越两个 CAU( 行程= 2 并且跨度= 1) 的单页的示例带有地址的读命令操作 可以为如下 :
( 读 )[ 块 0 页 0]
( 读 )[ 块 1 页 0]
(GetPageStatus)[ 块 0 页 0]W4R{ 数据 + 元数据 }
(GetPageStatus)[ 块 1 页 0]W4R{ 数据 + 元数据 }
图 4 是使用带有地址的写命令的示例操作 400 的流程图。 在步骤 402, 主机处理器 发出带有地址的写命令。 在步骤 404, 主机处理器通过主机通道向 NVM 封装件中的控制器传 送 PPS 字节的数据。利用 ECC 引擎向这些字节应用纠错。在步骤 406, 主机处理器将带有地 址的提交命令发出给与该地址相对应的存储器阵列, 该带有地址的提交命令提交去往 CAU 的未提交的写入。任何相应的 ECC 校正子也被提交。在步骤 408, 主机处理器执行对带有地 址的状态序列的等待, 直到 NVM 封装件提供了指示数据已被写入该地址的状态为止。在此 示例带有地址的写命令操作中, 交错点可以出现在该操作的开始和结束处以及该操作的中 间点 406 和 408 之间。
针对跨越两个 CAU( 行程= 2 并且跨度= 1) 的单页的示例带有地址的写命令操作 可以为如下 :
(StrideWrite)[ 块 0 页 0]< 数据 + 元数据 >
(StrideWrite)[ 块 1 页 0]< 数据 + 元数据 >
(GetPageStatus)[ 块 0 页 0]W4R{ 状态 }
(GetPageStatus)[ 块 1 页 0]W4R{ 状态 }
( 提交 )[ 块 0 页 0]
( 提交 )[ 块 1 页 0]
图 5 是使用带有地址的擦除命令的实例操作 500 的流程图。 在步骤 502, 主机处理 器发出带有地址的擦除命令。在步骤 504, 主机处理器执行对带有地址的状态的等待, 直到 NVM 封装件提供了指示该地址准备好被擦除的状态为止。在此示例带有地址的擦除命令的 操作中, 交错点可以出现在该操作的开始和结束处以及该操作的中间步骤 502 和 504 之间。
示例跨度操作
为了平衡利用特定于厂商的命令, NVM 封装件支持 CAU 内的多种页操作。具体地, NVM 封装件支持 StrideRead( 跨度读 ) 和 StrideWrite( 跨度写 ) 命令。
图 6A 和 6B 是使用带有地址的 StrideRead 命令的示例操作 600 的流程图。参考 图 6A 的步骤 602, 给定 NVM 器件跨度中的块数 S 和将要读取的每块的页数 N, 将要读取的剩余页数 P 可被设置为等于 S 和 N 之积。在步骤 604, 主机处理器通过将计数器 I 设置为等 于零来启动下一跨度。在步骤 606, P 被与 S 相比较。如果 P = 0, 则操作 600 结束。如果 P > S, , 则在步骤 608 中, 主机处理器发出带有地址的 StrideRead 命令。如果 P ≤ S, 则在 步骤 610 中, 主机处理器发出带有地址的 LastStrideRead 命令。
在步骤 612, 计数器 I 被递增 1。在步骤 614, 将 I 与 S 比较。如果 I < S, 则操作 600 返回步骤 606。如果 I = S, 则操作 600 开始该跨度中的页的传送, 如参考图 6B 所述的。
参考图 6B 中的步骤 616, 计数器 T 被设为等于零。在步骤 618, 主机处理器执行 对带有地址的状态序列的等待, 直到 NVM 封装件提供了指示该地址准备好被读取的状态为 止。在步骤 620, 主机处理器发出带有地址的确认命令。在步骤 622, NVM 封装件将 PPS 字 节的数据传送给主机处理器。在步骤 624, 计数器 T 被递增 1。在步骤 626, 计数器 T 被与 S 相比较。如果 T < S, 则操作 600 返回步骤 618。如果 T = S, 则在步骤 628 中, 将要读取的 剩余页数 P 被减少 S, 并且操作 600 返回步骤 604。
跨越两个 CAU 和四个跨度 ( 行程= 2 并且跨度= 4) 而延展的八页的示例带有地 址的 StrideRead 的操作可以为如下 :
(StrideRead)[ 块 0 页 0] (StrideRead)[ 块 1 页 0]
(StrideRead)[ 块 2 页 0]
(StrideRead)[ 块 3 页 0]
(StrideRead)[ 块 4 页 0]
(StrideRead)[ 块 5 页 0]
(LastStrideRead)[ 块 6 页 0]
(LastStrideRead)[ 块 7 页 0]
(GetPageStatus)[ 块 0 页 0]W4R{ 数据 + 元数据 }
(GetPageStatus)[ 块 1 页 0]W4R{ 数据 + 元数据 }
(GetPageStatus)[ 块 2 页 0]W4R{ 数据 + 元数据 }
(GetPageStatus)[ 块 3 页 0]W4R{ 数据 + 元数据 }
(GetPageStatus)[ 块 4 页 0]W4R{ 数据 + 元数据 }
(GetPageStatus)[ 块 5 页 0]W4R{ 数据 + 元数据 }
(GetPageStatus)[ 块 6 页 0]W4R{ 数据 + 元数据 }
(GetPageStatus)[ 块 7 页 0]W4R{ 数据 + 元数据 }
图 7 是使用带有地址的 StrideWrite 命令的示例操作 700 的流程图。参考步骤 702, 给定 NVM 器件跨度中的块数 S 和将要写的每块的页数 N, 将要写的剩余页数 P 可被设置 为等于 S 和 N 之积。在步骤 704, 主机处理器比较 P 与 S。如果 P = 0, 则操作 700 结束。如 果 P > S, , 则在步骤 706 中, 主机处理器发出带有地址的 StrideWrite 命令。如果 P ≤ S, 则在步骤 708 中, 主机处理器发出带有地址的 LastStrideWrite 命令。
在步骤 710, 主机处理器将 PPS 字节的数据传送给 NVM 封装件。 在步骤 712, 主机处 理器发出带有地址的确认命令来将写提交给存储器阵列。 在步骤 714, 主机处理器执行对带 有地址的状态的等待, 直到 NVM 封装件提供了指示数据已被提交给存储器的状态为止。在 步骤 716, 要写的剩余页数被递减 1, 并且操作 700 返回步骤 704。
跨越两个 CAU 和四个跨度 ( 行程= 2 并且跨度= 4) 而延展的八页的示例带有地 址的 StrideWrite 的操作可以为如下 :
(StrideWrite)[ 块 0 页 0]< 数据 + 元数据 >
(StrideWrite)[ 块 1 页 0]< 数据 + 元数据 >
(GetPageStatus)[ 块 0 页 0]W4R{ 状态 }
(StrideWrite)[ 块 2 页 0]< 数据 + 元数据 >
(GetPageStatus)[ 块 1 页 0]W4R{ 状态 }
(StrideWrite)[ 块 3 页 0]< 数据 + 元数据 >
(GetPageStatus)[ 块 2 页 0]W4R{ 状态 }
(StrideWrite)[ 块 4 页 0]< 数据 + 元数据 >
(GetPageStatus)[ 块 3 页 0]W4R{ 状态 }
(StrideWrite)[ 块 5 页 0]< 数据 + 元数据 >
(GetPageStatus)[ 块 4 页 0]W4R{ 状态 }
(LastStrideWrite)[ 块 6 页 1]< 数据 + 元数据 >
(GetPageStatus)[ 块 5 页 0]W4R{ 状态 } (LastStrideWrite)[ 块 7 页 1]< 数据 + 元数据 >
(GetPageStatus)[ 块 6 页 0]W4R{ 状态 }
(GetPageStatus)[ 块 7 页 0]W4R{ 状态 }
示例队列配置
图 8 图示出了 NVM 封装件中的命令队列的使用。在一些实现方式中, NVM 封装件 800 可以包括可由控制器 802 访问的一个或多个队列 804。该队列可以是 FIFO 队列。主机 控制器接收的命令可被存储在队列 804 中。在所示示例中, 有三个队列。每个队列分别用 于读命令、 编程命令和擦除命令。响应于触发事件, 控制器 802 可以将一个或多个命令记录 在队列 804 的一个或多个中, 以优化存储器操作期间的性能。例如, 一种触发事件可以是 : 如果队列 ( 和缓冲器 ) 中的顶部项去往正忙于另一操作的平面或 CAU 的话。
图 9 是用于将命令记录在图 8 所示的命令队列中的示例处理 900 的流程图。在一 些实现方式中, 处理 900 通过从主机控制器接收命令而开始 (902)。 这些命令用于非易失性 存储器上的启动操作。 命令被存储在一个或多个队列中 (904)。 例如, 三个单独队列可以存 储读命令、 编程命令和擦除命令。由控制器响应于触发事件而将命令记录在非易失性存储 器件中 (906)。
虽然本说明书包含许多细节, 但这些细节不应被解释为是对作为权利要求的内容 的范围或者可能要求保护的内容的范围的限制, 而是对特定实施例特有的特征的描述。本 说明书中在分离的实施例的上下文中描述的某些特征也可以相组合地在单个实施例中实 现。反之, 在单个实施例的上下文中描述的各个特征也可以分别在多个实施例中实现或者 以任何合适的子组合方式来实现。此外, 虽然上面可能将特征描述为以某些组合的方式起 作用并且甚至最初要求如此这样被保护, 但是来自要求保护的组合的一个或多个特征在一 些情况下可从该组合被去除, 并且要求保护的组合可被引向子组合或者子组合的变更。
类似地, 虽然以特定顺序描述了附图中的操作, 然而这不应被理解为要求这些操 作以所示出的特定顺序或者依次地被执行, 或者所有示出的操作要被执行以获得所希望的
结果。在某些状况下, 多任务和并行处理可以是有益的。此外, 上述实施例中各个系统组件 的分离不应被理解为在所有实施例中都要求这样的分离, 并且应当明白, 所描述的程序组 件和系统通常可以一起集成在单个软件产品中或者被封装到多个软件产品中。
如此, 已描述了特定实施例。其它实施例也在以下权利要求的范围之内。