具体实施方式
这里描述的是与对存储器进行监控和/或对存储器进行控制相关联的示例系统、方法和其它实施例。在一个实施例中,一种装置被配置为对存储器进行监控并且提供早期数据故障检测和预防。在一个示例中,存储器为快闪存储器。预防措施被采用来防止任何特定数据块的数据质量达到第一质量阈值。将会理解,该装置可以被实现为可以通过多种方式达到或满足阈值。例如,达到阈值可以在数据质量小于阈值、小于或等于阈值、大于阈值或者大于或等于阈值时发生。实施方式可以依赖于所选择的用于阈值的值以及所执行的比较类型。当然,可以使用其它实施方式。
将会理解,“达到阈值”指示数据块的数据的质量已经恶化到了预先指定的不希望的警告值或水平(例如,等于、超过或低于)。例如,用于表示数据块中的一个或多个比特的电压电平可能已经偏离非理想值。一种预防措施包括当块的数据质量达到第一质量阈值时对存储器进行重新编程。通过这样的方式,重新编程校正了数据质量并且因此防止了任何特定数据块的数据质量恶化到可能的故障点。另外,当数据质量达到第一质量阈值时,擦除和/或编程循环的数目被追踪并被与第二阈值相比较。当检测到擦除和编程循环达到第二质量阈值时,数据块被标记为坏块。
在一个实施例中,当数据块被标记为坏时,该块被重新定位到新位置。在其它实施例中,在擦除和编程循环达到第二质量阈值之前或之后,该数据块可以被标记为坏并且被移动。数据重新定位是在存储位置不能操作之前执行的。通过在存储位置发生故障之前重新定位数据块,可以防止存储位置的故障和/或数据块的丢失。
在另一实施例中,该装置被配置为在确定出块的数据质量达到第一阈值时对存储块进行重新编程。另外,在确定出块已经经历了达到擦除循环和编程循环的第二阈值数量的擦除和编程循环的数目时,该装置将存储该块的快闪存储位置标记为坏。在确定出该块已经达到擦除循环和编程循环的第二阈值数量时,该装置将该数据块移动到不同位置。
下面包括对所选的这里采用的术语的定义。定义包括落入术语的范围并且可以用于实施的组件的各种示例和/或形式。示例并不旨在进行限制。单种或多种形式的术语可以在定义范围内。
对“一个实施例”、“实施例”、“一个示例”、“示例”等等的提及表明如此描述的(一个或多个)实施例或(一个或多个)示例可以包括特定特征、结构、特性、性质、元件或限制,但是并不是每个实施例或示例都必须包括特定特征、结构、特性、性质、元件或限制。此外,重复使用短语“在一个实施例中”并不一定涉及同一实施例,虽然可以涉及同一实施例。
这里所使用的“计算机可读介质”涉及用于存储信号、指令和/或数据的介质。计算机可读介质可采取以下形式,包括但不限于非易失性介质和易失性介质。非易失性介质可以包括例如光盘、磁盘等。易失性介质可以包括例如半导体存储器、动态存储器等。计算机可读介质的普通形式可以包括但不限于软盘、柔性盘、硬盘、磁带、其它磁介质、专用集成电路(ASIC)、可编程逻辑设备、压缩盘(CD)、其它光介质、随机存取存储器(RAM)、只读存储器(ROM)、存储芯片或卡、存储棒以及计算机、处理器或其它电子设备可读的其它介质。
这里所使用的“逻辑”包括但不限于用于执行(一个或多个)功能或(一个或多个)动作和/或促使来自另一逻辑、方法和/或系统的功能或动作的硬件、固件、存储在机器中或在机器中执行的软件和/或它们的组合。逻辑可以包括软件控制的微处理器、分立逻辑(例如ASIC)、模拟电路、数字电路、编程的逻辑设备、包含指令的存储器设备等等。逻辑可以包括至少一个电路、一个或多个门电路(gate)、门电路的组合或其它电路组件。在描述了多个逻辑性逻辑的情况中,可以将多个逻辑性逻辑结合到一个物理逻辑中。类似地,在描述了单个逻辑性逻辑的情况中,可以将该单个逻辑性逻辑分布在多个物理逻辑间。
这里所使用的“块”包括但不限于作为一个实体被编程或被擦除的单元组。例如,块可涉及NAND快闪存储器设备中的物理页。替代地,块可以包括一组快闪存储器页。如本领域普通技术人员所理解的,块还可以对应于其它存储器组件、结构和/或存储器架构单元。
图1示出与对存储器105进行监控和控制相关联的装置100的一个实施例。装置100被配置为通过监控存储器的各个块的数据质量来防止例如快闪存储器105中的数据丢失。当检测到块的数据质量已经达到阈值时,存储块被怀疑正在变坏。在一个实施例中,当数据质量落到阈值以下(例如,达到或者超过阈值)时,数据质量将达到阈值。在响应中,装置100重写该块中的数据。
在另一实施例中,装置100还追踪应用于各个块的擦除循环和/或编程循环的数目。当确定出对块的擦除循环和编程循环的数目达到第二阈值时,该块被抢先标记为坏。在一个示例中,当对块的擦除循环和编程循环的数目达到或者超过第二阈值时,第二阈值被达到。此情形发生在存储位置实际不能操作之前。在一个实施例中,块状态表被维护以指示各个块的状态。块状态表中的与存储器的一个块对应的状态比特可以被设置为指示该块是坏的。抢先在故障发生之前将数据从坏块移到新位置降低了数据丢失的风险,因为在存储位置中发生实际故障之后,数据可能不能恢复。
在一个实施例中,装置100包括数据质量逻辑110,数据质量逻辑110对来自快闪存储器105的块的数据质量进行监控。数据质量逻辑110对可以存储不止一个数据比特的一组快闪存储单元进行监控。例如,一组存储单元可以形成存储器设备中的页。在一个实施例中,数据质量是对快闪存储器的页上的比特错误数目的计数。数据质量可以包括其它量度。例如,数据质量可以是对电容器组如何表示一组多层单元(MLC)中的相应的两比特值的指示。数据质量逻辑110不限于对存储器的页进行监控。例如,数据质量逻辑110可以被配置为测量存储器的块、存储器的库(bank ofmemory)或者存储器的页以及其它尺寸和构成的存储器的数据质量。在这些实施例中,数据质量以其它方式被测量。例如,可以通过确定对于存储在存储器的块中的编码后的数据有多少奇偶违犯(parity violation)被检测到来测量数据质量。
装置100包括用于对块进行重新编程的快闪重编程逻辑120。当确定出块的数据质量达到第一阈值时,该块被重新编程。在一个实施例中,第一阈值对应于存储器的块中可接受的错误数目。第一阈值还可以表示MLC组中的不可接受的比特值的数目。第一阈值还可以被设定为表示与数据质量有关的其它值。
在一个实施例中,当数据质量达到第一阈值时,重编程逻辑120被配置为对数据块重新编程。数据块可以被本地重新编程到同一初始块或者被重新编程到另一块。如果重编程逻辑120对数据块进行本地重新编程,则初始块被利用经过校正的回读数据而擦除和重新编程。如果重编程逻辑120将数据块重新编程到替代块,则可用块被装置100指派用来存储经过校正的数据,并且初始数据块被标记为无效。重编程逻辑120然后将数据块重新编程到不同的替代块。通过对初始块进行擦除和重新编程,初始存储块随后仍可被使用。
装置100包括数据重定位逻辑,该数据重定位逻辑用于将存储块的快闪存储位置标记为坏。当确定块已经达到擦除循环和/或编程循环的第二阈值数量时,该快闪存储位置被标记为坏(例如,不应再被使用)。第二阈值被设定用于指示块可能正在接近故障点。因此,“坏”的情形意味着在存储位置处已经发生了一定数目的循环,这被用于预测故障可能发生,但是该存储位置还没有故障并且仍然可操作。将快闪存储位置标记为坏可以防止数据丢失,因为在快闪存储位置不能操作之前,快闪存储位置被标记为坏。装置100被配置为控制快闪存储器,从而使得没有其它数据可以被写或被编程到标记为坏的快闪存储位置。将块标记为坏抢先在块实际发生故障并且块中的数据被丢失之前将块从操作中移除。
在一个实施例中,在数据质量逻辑110确定已经达到第一阈值时,装置100确定是否已经达到第二阈值。装置100至少部分地基于是否已经达到第二阈值来确定当前块是否需要被标记为坏。如果也已经达到第二阈值,则装置100将该块标记为坏。在该块被标记为坏之后,装置100将不使用该块。装置100将按照如下所述来校正该数据块中的错误。在错误被校正之后,数据重定位逻辑将该数据块从坏位置移动到不同位置。当已经达到第二阈值时,数据将被编程到另一新块。例如,不同存储位置可以在同一快闪存储器中或者在该快闪存储器的外部。如果还没有达到第二阈值,则重编程逻辑120可以在擦除该块然后利用同一数据块对该块重新编程之后将该数据块重新编程到同一块。替代地,如果没有达到第二阈值,则重定位逻辑和重编程逻辑120仍可以将数据编程到另一块。
在一个实施例中,装置100被配置为对快闪存储器中的比特错误进行校正。数据质量逻辑110将第一阈值设置成小于装置100能够校正的比特错误数目的整数值。例如,如果装置100能够校正5个错误(这依赖于所使用的错误校正算法),则第一阈值被设定成4、3、2或1。当数据质量达到第一阈值时,装置100对错误进行校正。装置100实施适当的错误校正算法。例如,装置100可以实施基于BCH(Bose-Chaudhuri-Hocquenghem)码的错误校正算法和/或低密度奇偶校验(LDPC)算法。在不同的实施例中,数据质量逻辑100、快闪重编程逻辑120以及数据重定位逻辑被配置为执行错误校正动作。
在另一实施例中,装置100检测存储器中的错误。例如,快闪重编程逻辑120响应于装置100检测到错误而确定块的数据质量是否已经达到第一阈值。当数据质量被确定已经达到第一阈值时,该块被重新编程。在一个实施例中,错误被校正,而无需对该块进行重新编程。
在另一实施例中,数据质量逻辑110周期性地监控快闪存储器的块的数据质量。例如,数据质量逻辑110响应于软件程序、硬件传感器和/或用户来监控快闪存储器的块的数据质量。数据质量逻辑110还可以被配置为响应于其它指示符、存储器的情形、触发事件等来监控块的数据质量。
在一些实施例中,装置100可以包括或者实施其它有用特征。例如,第一阈值和第二阈值可以是可编程的。在另一实施例中,装置100被定位在芯片中。芯片是制造在半导体材料上的微型化电子电路组。芯片可以是快闪存储器芯片。
图2示出对存储器进行监控和控制的装置200的另一实施例。装置200类似于图1的装置100,但是另外包括校正逻辑210。校正逻辑210被配置为对快闪存储器的块中的比特错误进行校正。校正逻辑210对存储器的页、存储器的块或者存储器的其它单元中的错误进行校正。如上所述并且在一个实施例中,通过BCH码、LDPC和/或其它合适的校正方法来校正错误。
装置200还包括数据质量逻辑220、快闪重编程逻辑230和数据重定位逻辑240,其中,数据质量逻辑220类似于图1的数据质量逻辑110,快闪重编程逻辑230类似于图1的快闪重编程逻辑120,数据重定位逻辑240用于如上所述地对快闪存储器的块的数据质量进行监控。例如,数据质量逻辑220可以确定快闪存储器中的比特错误的数目。
在一个实施例中,当数据质量逻辑220确定块的数据质量已经达到第一阈值时,快闪重编程逻辑230对该块进行重新编程。在一个实施例中,第一阈值被预先指定为小于校正逻辑220能够校正的比特错误的数目的值。第一阈值可以是对块的数据质量的指示。例如,达到第一阈值表明数据质量正在变坏(例如,数据可能具有错误或者存储块可能不能适当地操作)。如上所述,第一阈值可以是错误的数目、MLC比特值被表示得如何的指示以及表示可接受的数据质量水平的其它值。该数据块可以被本地重新编程到相同的初始块或者被重新编程到另一块。如果重编程逻辑230对数据块进行本地重新编程,则初始块被利用经过校正的回读数据而擦除和重新编程。如果重编程逻辑230将数据块重新编程到替代块,则可用块被重定位逻辑240指派用来存储经过校正的数据,并且初始数据块被标记为无效。经过校正的数据被重编程逻辑230编程到可用块。通过对初始块进行擦除和重新编程,初始存储块随后仍可被使用。
在一个实施例中,在数据质量逻辑220确定已经达到第一阈值之后,装置200确定是否已经达到第二阈值。第二阈值是预先指定的指示块几乎达到故障点的警告值或水平。装置200至少部分地基于是否已经达到第二阈值来确定当前块是否应被标记为“坏”。如果也已经达到第二阈值,则该装置将该块标记为“坏”。将块标记为坏抢先在块发生故障并且块中的数据被丢失之前将块从操作中移除。在块被标记为坏之后,装置200将不使用该块。装置200按照如上所述对数据块中的错误进行校正。在错误被校正之后,数据重定位逻辑240将数据块从坏位置移动到不同位置。当达到第二阈值时,数据将被编程到另一新块。例如,不同存储位置可以在同一快闪存储器中,或者可以在该快闪存储器的外部。如果还没有达到第二阈值,则重编程逻辑230可以在擦除该块并利用同一数据块对该块进行重新编程之后将该数据块重新编程到同一块。替代地,如果未达到第二阈值,则重定位逻辑240和重编程逻辑230仍可将数据编程到另一块。
图3示出与对存储器进行监控和对早期故障检测进行处理相关联的示例方法300。方法300通过对存储器的数据质量进行监控并且在存储器的区域被确定为不可靠并在故障发生前将数据块移动到新位置来改善存储器的可靠性。
在310,方法300确定与存储在快闪存储器中的存储区域相关联的第一数据质量。存储区域可以是存储器的块、存储器的库、存储器的线、存储器的页或者存储器的其它区域。第一数据质量可以是错误数目的指示、MLC比特值被表示得如何的指示以及可以表明存储区域的数据在存储器中被存储得如何的其它值。在另一实施例中,确定块310包括检测与存储区域中的数据相关联的一个或多个错误,然后至少部分地基于来自所检测的错误的信息(例如,数据错误的数目、错误的类型等)来确定第一数据质量。
在一个实施例中,310处的确定动作被周期性地执行。在另一实施例中,310处的确定动作由软件程序、硬件传感器或用户来启动。
方法300在320处确定第一数据质量是否已经达到第一阈值。在一个实施例中,第一阈值被设定成校正算法能够校正的比特数目的值。如果数据质量的错误数目没有达到第一阈值,则方法300结束,因为数据质量良好。在一个实施例中,方法300可以周期性地再次开始并且在310处确定第一数据质量。在一个实施例中,当确定数据质量已经达到第一阈值时,存储区域的数据被重新编程。即使还没有检测到数据错误,重新编程也改善了数据质量。
在330,作出有关存储区域中的数据是否可由快闪存储器校正的确定。如果在330处的确定为是,则在340处控制快闪存储器对数据进行校正。如果数据质量达到第一阈值并且数据是不可校正的,则方法300结束,因为数据是不可校正的。在一些实施例中,当数据质量达到第一阈值时,生成了数据是不可校正的报告并且该报告被发送给将采取适当动作的设备。在一些实施例中,快闪存储器基于校正算法来对由存储区域表示的数据进行校正。校正算法可以包括BCH算法、低密度奇偶校验(LDPC)算法和/或其它校正算法。在数据被校正后,方法300在350处将数据重新编程到存储区域。如上所述,数据可以被重新编程到之前的存储区域,或者被重新编程到不同存储区域。
在一个实施例中,方法300确定擦除循环和编程循环的数目是否达到了循环阈值。如果擦除循环和编程循环达到循环阈值,则快闪存储器的存储区域被标记为坏,并且存储区域中的数据被移动到不同位置。在一个实施例中,当存储位置被标记为坏时,报告被发送给将采取适当动作的设备。将块标记为坏抢先在块发生故障以及块中的数据丢失之前将该块从操作中移除。在块被标记为坏之后,数据块则不被使用。擦除循环和编程循环的阈值数量可以指示块几乎达到了故障点。
在不同实施例中,存储区域的数据被存储在快闪存储器中的第二存储位置或者被存储到快闪存储器外部的第二存储位置。在一个实施例中,当确定存储区域中的数据达到擦除循环和编程循环的阈值数量时,同一存储区域中的数据被重新编程。在一个实施例中,禁止了将来访问快闪存储器的被标记部分。
在一个实施例中,芯片被配置为执行方法300。芯片包括制造在半导体材料上的至少一个电子电路。在一个实施例中,芯片是快闪存储器芯片。在一个示例中,快闪存储器芯片是多层单元(multiple level cell,MLC)快闪存储器。
图4示出与对存储器进行监控相关联的示例方法400。方法400包括在410处确定校正阈值。校正阈值与快闪存储器中的错误校正逻辑相关联。校正阈值是小于错误校正逻辑能够校正的错误数目的正数。本领域技术人员将会理解,可以采用其它确定是否超过阈值的方法。错误校正逻辑能够通过BCH、ECC算法、LDPC算法或者其它合适算法来对错误进行校正。
方法400在420处确定第一数据质量。第一数据质量与存储在快闪存储器中的数据块相关联。第一数据质量可以是第一数据块中的错误数目。在其它实施例中,数据块可以是数据线、页存储器或者存储器的其它单元。在一个实施例中,响应于错误校正逻辑正在检测存储器的块中的错误而发生确定第一数据质量。
方法400在430处确定第一数据质量是否达到校正阈值。在440,作出数据块是否包含错误的确定。当确定第一数据质量达到校正阈值并且数据块包含错误时,在450处控制快闪存储器对数据块进行校正。
方法400在460处确定数据块是否已经达到擦除循环和编程循环的阈值数量。擦除循环和编程循环的阈值数量可以指示该块几乎达到故障点。当确定数据块达到擦除循环和编程循环的阈值数量时,在470处数据块被移动到不同位置。当达到擦除循环和编程循环的阈值数量时,数据将被编程到另一新块。例如,不同存储位置可以在同一快闪存储器中,或者在该快闪存储器的外部。如果没有达到第二阈值,则可以在擦除该块并利用同一数据块对该块进行编程之后将数据块重新编程到同一块。替代地,如果没有达到第二阈值,则数据块可以被重新编程到不同块。
在480处,数据块被标记为坏,并且报告被发送给将采取适当动作的设备。将块标记为坏抢先在块发生故障以及块中的数据丢失之前将该块从操作中移除。在块被标记为坏之后,该数据块不被使用。
应当理解,在一个实施例中,这里的方法可以被实现为嵌入和存储在计算机可读介质上的计算机可执行指令。当这些指令被机器(例如,处理器、设备)执行时,使得机器执行这里的方法及其等同物。方法还可以利用电路来实现。
图5示出用于对存储器进行控制以提供早期故障检测和控制的方法500的另一实施例。该方法将参考把数据存储在存储块中的存储器(例如,快闪存储器)来描述。当存储器中发生错误并且错误被校正时,方法500追踪并存储针对存储器中的各个存储块校正的错误数目(块510)。如果针对所选存储块校正的错误数目达到阈值(块520),则所选存储块被加标签以进行校正动作(块530)。加标签是在所选存储块不能操作之前被确定和执行的。这样,该方法形成了存储块将可能在不久的将来会发生故障的预测,即使其当前仍可操作。对于已被加标签以进行校正动作的存储块,存储在被加标签的存储块中的数据被移动或者另外被重新定位到新存储位置(块540)。存储器然后被控制以禁止随后使用被加标签的存储块,从而使得数据不被写入这些存储块,而只存储块稍后发生故障。按照这种方式,抢先预防动作被采取以降低因存储器故障而引起的数据丢失。
在另一实施例中,追踪和存储块510还包括追踪和存储应用到各个存储块的擦除循环和编程需努汉的数目。这与先前的描述类似。然后在530处至少部分地基于为所选存储块校正的错误数目和擦除循环和编程循环的数目来执行加标签。这些数目可以如上所述与阈值相比较。
在另一实施例中,维护有用于指示各个存储块的状态的块状态表。对所选块加标签以进行校正动作(块530)还包括在块状态表中设定用于所选块的状态。在块540处,块状态表可以被读,以识别哪些块已经被加标签并且校正动作被应用。
图6示出实施这里所描述的示例系统和方法及其等同物的计算设备的示例实施例。示例计算设备是计算机600,计算机600包括可通过总线640可操作地连接的处理器610、存储器620以及输入/输出端口630。在一个示例中,计算机600包括用于监控和访问存储器的存储器监控逻辑650。
存储器监控逻辑650提供用于监控存储器的手段(例如,硬件、存储的软件、固件)。存储器监控逻辑650可以实现为类似装置100和200和/或它们的特征的组合。例如,所实现的类似装置100和200的存储器逻辑可监控存储器620或者连接到总线640的其它存储器。存储器监控逻辑650可包括实现为例如ASIC或其它类型的电路的逻辑。
一般地描述计算机600的示例构成,处理器610可以是包括单微处理器、双微处理器和其它多处理器架构的各种处理器。存储器620可以包括易失性存储器和/或非易失性存储器。非易失性存储器可以包括例如只读存储器(ROM)、可编程只读存储器(PROM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、相变存储器(PCM)等。易失性存储器可以包括例如随机存取存储器(RAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)等。
盘660可以经由例如通过输入/输出接口(例如,卡、设备)670和输入/输出端口630可操作地连接到计算机600。盘660可以是例如磁盘驱动器、固态盘驱动器、软盘驱动器、磁带驱动器、Zip驱动器、快闪存储卡、存储棒等等。此外,盘660可以是压缩盘只读存储器(CD-ROM)驱动器、压缩盘可记录(CD-R)驱动器、压缩盘可重写(CD-RW)驱动器、数字视频盘只读存储器(DVD ROM)等。存储器620可以存储例如处理680和/或数据690。盘660和/或存储器620可以存储控制和分配计算机600的资源的操作系统。
总线640可以是单内部总线互连结构和/或其它总线或网状结构。虽然示出的是单总线,但是应当理解,计算机600可以使用其它总线(例如,周边部件互连扩展接口(peripheral component interconnect express,PCIE)、1394、通用串行总线(USB)、以太网)与各种设备、逻辑和周边设备通信。总线640可以是如下类型,例如包括存储器总线、存储器控制器、外围总线、外部总线、交叉开关和/或本地总线。
计算机600可以经由输入/输出(I/O)接口670与输入/输出设备交互,输入/输出(I/O)接口670包括存储器监控逻辑650和输入/输出端口630。输入/输出设备可以是例如键盘、麦克风、点选设备、照相机、视频卡、显示器、盘660、网络设备699等。输入/输出端口630可以包括例如串行端口、并行端口以及USB端口。
计算机600可以在网络环境中操作,并且因此可以经由I/O接口670和/或I/O端口630连接到网络设备699。通过网络设备699,计算机600可以与网络交互。通过网络,计算机600可以本地连接到远程计算机。计算机600可以与之交互的网络包括但不限于局域网(LAN)、无线局域网(WLAN)、广域网(WAN)和其它网络。
虽然通过描述示例描述了示例系统、方法等,并且虽然以相当多的细节描述了这些示例,但是本申请人的目的不在于将所附权利要求的范围限制或以任何方式限定为这些细节。当然,不可能为了描述这里所述的系统和方法而描述每个可能想到的组件和方法。因此,本发明不限于所示出和所描述的具体细节、代表性装置和说明性示例。因此,本申请旨在包括落入所附权利要求的范围内的替换、修改和变化。