专利名称:非易失性存储器的数据刷新的制作方法
技术领域:
本发明涉及非易失性存储器技术。
背景技术:
半导体存储器由于用于各种电子设备中而变得更为流行。例如,非易失性半导体存储器用于个人导航设备、蜂窝电话、数码相机、个人数字助理、移动计算设备、非移动计算设备和其它设备中。电可擦除可编程只读存储器(EEPROM)和闪速存储器是其中最流行的非易失性半导体存储器。EEPROM和闪速存储器两者皆利用位于半导体衬底中的沟道区域之上并与之隔离的浮置栅极。该浮置栅极和沟道区域位于源区与漏区之间。控制栅极设在浮置栅极之上且与之隔离。晶体管的阈值电压受浮置栅极上保持的电荷量控制。也就是说,在晶体管导通以允许其源极与漏极之间传导之前必须施加至控制栅极的电压的最小值受浮置栅极上的电荷水平控制。在对EEPROM或闪速存储器设备如NAND闪速存储器设备编程时,通常对控制栅极施加编程电压且将比特线接地。来自沟道的电子被注入浮置栅极中。当电子在浮置栅极中累积时,浮置栅极变为带负电且存储器单元的阈值电压升高,使得存储器单元处于被编程状态。在题为“Source Side Self Boosting Technique for Non-Volatile Memory”的第 6,859,397 号美国专利、题为 “Detecting Over Programmed Memory” 的第 6,917,542 号美国专利和题为“Programming Non-Volatile Memory”的第6,888,758号美国专利中具有更多关于编程的信息,所引用的这三个专利通过引用而全部并入本文。在很多情况下,编程电压作为一系列脉冲(称为编程脉冲)施加至控制栅极,这些脉冲的幅值随着每个脉冲而增加。在编程脉冲之间,执行一个或多个验证操作的集合,以确定处于编程中的一个或多个存储器单元是否已达到其目标电平。如果存储器单元已达到其目标电平,则对该存储器单元停止编程。如果存储器单元未达到其目标电平,则对该存储器单元继续编程。一些EEPROM和闪速存储器设备具有用于存储两个电荷范围的浮置栅极,因此,该存储器单元可在两个状态(被擦除状态和被编程状态)之间被进行编程/擦除。有时将这样的存储器设备称为二进制存储器设备。通过标识多个不同的有效阈值电压(Vt)分布(或数据状态),多状态存储器设备关于每个存储器单元存储多个数据比特。每个不同的Vt分布对应于关于存储器设备中所编码的数据比特集合的预定值。例如,存储两个数据比特的存储器单元使用四个有效Vt分布。存储三个数据比特的存储器单元使用八个有效Vt分布。在非易失性存储器元件已被编程后,重要的是能够高度可靠地读回其编程状态。 但是,由于多种因素,包括噪声以及设备往往随着时间而趋向于电中性,所以感测到的编程状态有时可能与预期的编程状态不同。应当注意,诸如温度等环境因素会影响编程状态变化的速率。例如,暴露于高温下可能导致存储器单元很快变为电中性。
因此,在读取非易失性存储器时可能遇到错误的或遭破坏的数据比特。通常,采用某种形式的检错和纠错算法(“纠错算法”)来检验和纠正遭破坏的数据比特。一种常用的纠错算法是在写入过程中存储附加的奇偶校验位来将一组数据比特的奇偶性设置为所需的逻辑电平。附加的奇偶校验位有时称为纠错码(ECC)。在读取过程中,纠错算法通过计算该组数据比特的奇偶性来对奇偶校验位解码以检测遭破坏的数据。该纠错算法纠正未遭严重破坏的数据。在一些实现中,遭破坏的数据越多,纠错算法用于纠正数据的时间越久。为防止数据遭破坏,可刷新存储器单元中的数据,这使该数据恢复到期望的阈值电压。存储器单元块中数据的刷新往往通过以下实现读取该数据,纠正由纠错算法检测到的错误,以及将该数据写入到不同的块中,这作为包括损耗均衡在内的方案的一部分。但是,如果需要的话,数据可被写入相同的块中。然而,数据刷新太过频繁会使存储器单元负担过重。而且,数据刷新可能干扰用户自身对存储器的访问。因此,一方面,如果数据刷新的频率不够,则数据可能丢失或者由于纠错算法需花更长时间来纠正数据而可能导致存储器访问缓慢。另一方面,如果数据刷新太频繁,则存储器设备可能负担太重或者用户存储器访问可能受阻。而且,在存储器设备可能受到不同的环境条件(例如大范围的温度)时,确定何时刷新数据尤其具有挑战性。例如,存储器设备可能嵌入个人导航设备中,该导航设备可能留在停靠的汽车中。在夏日,车内温度可能上升至极高的温度。在另一方面,存储器设备可能经过很长的一段时间而没有被置于高温下。因此,非常难以预计环境条件例如温度会对数据保持起的作用。
发明内容
本发明公开的技术用于刷新非易失性存储器设备中的数据,该刷新足够频繁,足以克服错误的或遭破坏的数据比特,但不会太频繁而干扰存储器存取或导致存储器单元负担过重。该技术非常适合可能被置于各种环境条件(如大范围的温度)下的存储器设备。一个实施例包括基于设备中第一组非易失性存储器元件中的数据的条件,确定执行对该第一组非易失性存储器元件中所存储数据的刷新;根据相对于最近一次对所述第一组非易失性存储器元件进行了编程的时间于何时对该设备中的第二组非易失性存储器元件进行了最近一次编程,确定应当对该第二组非易失性存储器元件进行刷新程序;以及对所述第二组非易失性存储器元件执行所述刷新程序。一个实施例包括将数据写入多状态非易失性存储器元件的集合;基于该集合中的第一组非易失性存储器元件中的一个或多个非易失性存储器元件的条件,确定是否应当执行对该第一组非易失性存储器元件中所存储数据的刷新;如果确定出应当刷新该第一组中存储的数据,则确定该集合中的那些非易失性存储器元件在第一组非易失性存储器元件之前被写入;以及确定在第一组之前被写入的非易失性存储器元件应当进行刷新程序。一个实施例为一种用于操作多状态存储器设备的方法,该存储器设备被组织成为非易失性存储器元件的块。该方法包括确定所述块中的第一块中的一个或多个非易失性存储器元件存在数据完整性问题;确定该设备中的哪些块在该第一块之前被写入;以及在没有确定在所述第一块之前被写入的块中的非易失性存储器元件存在数据完整性问题的情况下,刷新在所述第一块和在该第一块之前被写入的其它块中所存储的数据。
一种示例性实现包括非易失性存储器元件的集合,以及与该非易失性存储器元件的集合通信的一个或多个管理电路。所述一个或多个管理电路执行上述处理。
图1是NAND串的俯视图;图2是NAND串的等效电路图;图3是非易失性存储器系统的框图;图4是示出存储器阵列的一个实施例的框图;图5是示出感测块的一个实施例的框图;图6A示出Vt分布的示例性集合;图6B示出Vt分布的示例性集合;图7是其中可嵌入根据本发明实施例的存储器设备的示例性移动式设备;图8示出应当刷新数据的块的确定过程的一个实施例;图9A的流程图示出存储器阵列的块中所存储数据的刷新过程的一个实施例;图9B的流程图描述用于对非易失性存储器进行编程的过程的一个实施例;图IOA的流程图示出用于确定块是否存在数据完整性问题的过程的一个实施例;图IOB示出基于有多少比特需要根据纠错算法进行更正来确定是否需要进行数据刷新的过程的一个实施例;图IOC示出基于纠错算法收敛所需时间来确定是否需要进行数据刷新的过程的一个实施例;图11示出示例性分布函数;图12示出存储用于确定是否需要进行数据刷新的值的表格的一个实施例;图13A示出标识出候选块用于刷新程序的过程的一个实施例;图13B的流程图示出用于标识出候选块用于刷新程序的过程的一个实施例;图14示出用于标识刷新程序候选块的序号的管理过程的一个实施例;图15示出用于选择刷新程序候选块的时间戳的管理过程的一个实施例;图16示出警告用户采取旨在减轻数据保持问题的动作的过程的一个实施例。
具体实施例方式闪速存储器系统的一个示例使用NAND结构,其包括布置串联的多个晶体管,夹于两个选择栅极之间。所述串联的晶体管和所述选择栅极被称为NAND串。图1是示出一个 NAND串的俯视图。图2是其等效电路。图1和图2中所示的NAND串包括串联且夹在第一 (或漏极侧)选择栅极120与第二(或源极侧)选择栅极122之间的四个晶体管100、102、 104和106。选择栅极120通过比特线接触126将NAND串与比特线连接。选择栅极122将 NAND串与源极线128连接。通过将适当的电压施加到选择线S⑶控制选择栅极120。通过将适当的电压施加到选择线SGS控制选择栅极122。晶体管100、102、104和106中的每一个具有控制栅极和浮置栅极。例如,晶体管loo具有控制栅极ioocG和浮置栅极loore。 晶体管102包括控制栅极102CG和浮置栅极102TO。晶体管104包括控制栅极104CG和浮置栅极104TO。晶体管106包括控制栅极106CG和浮置栅极106TO。控制栅极100CG连接
6到字线WL3,控制栅极102CG连接到字线WL2,控制栅极104CG连接到字线WLl,且控制栅极 106CG连接到字线WLO。注意,虽然图1和图2示出在NAND串中有四个存储器单元,但是使用四个存储器单元仅为示例。NAND串可具有少于四个存储器单元或多于四个存储器单元。例如,一些 NAND串会包括八个存储器单元、16个存储器单元、32个存储器单元、64个存储器单元、128 个存储器单元,等等。本文的讨论并不限于NAND串中任何特定数量的存储器单元。使用NAND结构的闪速存储器系统的典型架构可包括若干NAND串。每一 NAND串通过其受选择线SGS控制的源极选择栅极而连接至源极线,并且通过其受选择线SGD控制的漏极选择栅极而连接至其所关联的比特线。每一比特线以及经由比特线接触部连接到该比特线的相应NAND串包括存储器单元阵列的列。多个NAND串共字比特线。通常,比特线在垂直于字线的方向上在NAND串的顶部走线,并且连接到一个或多个感测放大器。每一存储器单元可存储数据(模拟或数字数据)。当存储一比特数字数据时,存储器单元的可能阈值电压的范围被划分为两个范围,这两个范围被分配给逻辑数据“1”和 “0”。在NAND类型闪速存储器的一个示例中,阈值电压在存储器单元被擦除之后是负值,并且定义为逻辑“1”。在编程之后的阈值电压是正值,并且定义为逻辑“0”。当阈值电压是负值并且通过将0伏特施加至控制栅极而尝试读取时,存储器单元会导通以指示目前存储的是逻辑1。当阈值电压是正值并且通过将0伏特施加至控制栅极而尝试读取操作时,存储器单元不会导通,这指示存储的是逻辑零。在存储多个数据电平的情况下,可能阈值电压的范围划分为所述数据电平的数目。例如,如果存储四个电平的信息(两个比特数据),则会有分配给数据值“11”、“10”、 “01”和“00”的四个阈值电压范围。在NAND类型存储器的一个示例中,在擦除操作之后的阈值电压是负值且定义为“11”。正阈值电压用于数据状态“10”、“01”和“00”。如果存储八个电平的信息(或状态)(例如对于三比特数据),则会有分配给数据值“000”、“001”、 “010”、“011”、“100”、“101”、“110”、“111”的八个阈值电压范围。被编程至存储器单元中的数据与该存储器单元的阈值电压电平之间的特定关系取决于所述单元采用的数据编码方案。例如,第6,222,762号美国专利和第2004/0255090 号美国专利申请公布描述了用于多状态闪速存储器单元的各种数据编码方案,这两个专利和专利申请皆通过引用整体并入本文。在一个实施例中,使用格雷码分配方式来将数据值分配给阈值电压范围,从而如果浮置栅极的阈值电压错误地变为其邻近的物理状态,则仅会有一个比特受影响。在一些实施例中,数据编码方案可随不同的字线而不同,数据编码方案可以随时间而改变,或者可将随机字线的数据比特反转或者随机化,以降低数据模式敏感性甚至存储器单元上的损耗。在以下美国专利/专利申请中提供了 NAND型闪速存储器的有关示例及其操作第 5,570,315号美国专利;第5,774,397号美国专利;第6,046,935号美国专利;第6,456,528 号美国专利;以及美国专利公开NO.US2003/0002348,所有这些专利/专利申请通过引用并入本文。这里的说明也可应用于除NAND之外的其它类型的闪速存储器以及其它类型的非易失性存储器。除了 NAND闪速存储器之外,也可以使用其它类型的非易失性存储器设备。例如,所谓的TANOS结构(包括硅衬底上的TaN-Al2O3-SiN-SiO2叠层),其本质上为利用了氮化物层(而不是浮置栅极)中的电荷捕获的存储器单元,也可与本发明一起使用。可用于闪速EEPROM系统中的另一类型的存储器单元利用非导电介电材料代替导电浮置栅极来以非易失性方式存储电荷。在Chan等人的文章“A True Single-Transistor Oxide-Nitride-Oxide EEPROM Device”(IEEE Electron Device Letters,卷 EDL-8,第 3 号,1987年3月,第93-95页)中描述了这种单元。以氧化硅、氮化硅和氧化硅(“0N0”) 形成的三层电介质夹在导电的控制栅极与存储器单元沟道上方的半导电衬底的表面之间。 通过将电子从该单元沟道注入到氮化物中对该单元进行编程,在该氮化物中,电子被捕获并存储在有限区域中。这种存储的电荷于是以可检测的方式改变该单元的一部分沟道的阈值电压。通过将热空穴注入氮化物中来擦除存储器单元。此外,参见Nozaki等人著的"A I-Mb EEPROM with M0N0S Memory Cell for Semiconductor Disk Application,“ (IEEE Journal of Solid-State Circuits,卷 26,第 4 号,1991 年 4 月,第 497-501 页),其描述了为分离栅极式结构的类似存储器单元,其中,掺杂的多晶硅栅极在存储器单元沟道的一部分上延伸以形成单独的选择晶体管。前述两篇文章通过引用而全部并入本文。在通过引用并入本文的、由 William D. Brown 禾口 Joe Ε. Brewer 编辑的"Nonvolatile Semiconductor Memory Technology”(IEEE Press,1998年)的第1. 2部分中提到的编程技术在该部分中也被描述为可应用于电介质电荷捕获设备。也可以使用其它类型的存储器设备。图3示出非易失性存储器器件210,该存储器器件210可包括一个或多个存储器管芯或芯片212。存储器管芯212包括存储器单元的(二维或三维)阵列200、控制电路 220以及读取/写入电路230A和230B。在一个实施例中,通过各种外围电路对存储器阵列 200的存取是以对称方式(在该阵列的相对两侧)实现的,使得每侧的存取线和电路的密度减少一半。读取/写入电路230A和230B包括多个感测块300,所述感测块允许并行读取存储器单元的页面或者对其进行编程。存储器阵列200可经由行解码器240A和240B由字线寻址以及经由列解码器242A和242B由比特线寻址。在典型实施例中,控制器244与一个或多个存储器管芯212包括在同一存储器器件210 (例如可移动存储卡或封装)中。命令和数据经由线232在主机与控制器244之间传输并且经由线234在控制器与一个或多个存储器管芯212之间传输。一种实现可包括多个芯片212。控制电路220与读取/写入电路230A和230B协作,以对存储器阵列200执行存储器操作。控制电路220包括状态机222、片上地址解码器224和功率控制模块226。状态机222提供存储器操作的芯片级控制。片上地址解码器224提供在由主机或存储器控制器使用的地址与由解码器240A、240B、242A和242B使用的硬件地址之间转换的地址接口。功率控制模块226控制在存储器操作期间供应给字线和比特线的功率和电压。在一个实施例中,功率控制模块226包括一个或多个电荷泵,所述电荷泵可形成比电源电压更高的电压。在一个实施例中,控制电路220、功率控制电路226、解码器电路224、状态机电路 222、解码器电路242A、解码器电路242B、解码器电路240A、解码器电路240B、读取/写入电路230A、读取/写入电路230B和/或控制器244中的一个或其任何组合可以被称为一个或多个管理电路。图4描述存储器单元阵列200的示例性结构。在一个实施例中,存储器单元阵列划分为M个存储器单元块。对于EEPROM系统,通常,块是擦除的单位。也就是说,每个块包含被一起擦除的最小数量的存储器单元。每个块通常分成数个页面。页面是编程单位。在一行存储器单元中通常存储一个或多个数据页面。页面可存储一个或多个扇区。扇区包括用户数据和开销数据。开销数据通常包括从扇区的用户数据计算出的纠错码(ECC)。当数据被编程到阵列中时,控制器的一部分(在下文中描述)计算ECC,并且当数据从阵列中被读取时还对ECC进行检查。或者,ECC和/或其它开销数据存储在与其所属的用户数据不同的页面或甚至不同的块中。用户数据扇区通常是512字节,对应于磁盘驱动器中扇区的大小。大量的页面形成块,例如为从8个页面直至32、64、128或更多个页面中的任何数量。 也可使用不同大小的块和布置。在另一实施例中,比特线划分为奇比特线和偶比特线。在奇/偶比特线架构中,在一个时间对公共字线上的、连接到奇比特线的存储器单元进行编程,而在另一时间对公共字线上的、连接到偶比特线的存储器单元进行编程。图4示出存储器阵列200的块i的更多细节。块i包括X+1个比特线和X+1个 NAND串。块i还包括64个数据字线(WL0-WL63)、两个哑元字线(WL_dO和WL_dl)、漏极侧选择线(SGD)和源极侧选择线(SGS)。每一 NAND串的一个端子经由漏极选择栅极(其连接至选择线SGD)连接至相应比特线,而另一端子经由源极选择栅极(其连接至选择线SGS) 连接至源极线。因为存在64个数据字线和两个哑元字线,所以每一 NAND串包括64个数据存储器单元和两个哑元存储器单元。在其它实施例中,NAND串可具有多于或少于64个数据存储器单元和两个哑元存储器单元。数据存储器单元可存储用户或系统数据。哑元存储器单元通常并不用于存储用户或系统数据。一些实施例不包括哑元存储器单元。图5是单个感测块300的框图,该感测块被分区为核心部分(称为感测模块480) 和公共部分490。在一个实施例中,关于每一比特线会具有单独的感测模块480且关于多个感测模块480的集合具有一个公共部分490。在一个示例中,感测块包括一个公共部分490 和八个感测模块480。在组中的每个感测模块将经由数据总线472与关联的公共部分通信。 请参考美国专利申请公布2006/0140007获取更多细节,该申请通过引用全部并入本文。感测模块480包括感测电路470,其确定所连接的比特线中的传导电流是大于还是小于预定阈值电平。在一些实施例中,感测模块480包括通常称为感测放大器的电路。 感测模块480还包括比特线锁存器482,其用于设置关于所连接的比特线的电压条件。例如,比特线锁存器482中锁存的预定状态会导致所连接的比特线被拉到指出编程禁止的状态(例如Vdd)。公共部分490包括处理器492、数据锁存器494集合和耦合在数据锁存器494集合与数据总线420之间的I/O接口 496。处理器492执行计算。例如,其功能之一在于,确定感测到的存储器单元中存储的数据,并且将确定的数据存储在数据锁存器集合中。数据锁存器494集合用于在读取操作期间存储由处理器492确定的数据比特。其还用于在编程操作期间存储从数据总线420导入的数据比特。导入的数据比特代表要被编程到存储器中的写入数据。I/O接口 496在数据锁存器494与数据总线420之间提供接口。在读取或感测期间,系统的操作受状态机222控制,该状态机222控制将不同控制栅极电压供给寻址到的存储器单元。随着遍历与存储器所支持的不同存储器状态对应的各预定控制栅极电压,感测模块480可在这些电压之一处跳变,并且将从感测模块480经由总线472向处理器492提供输出。此时,通过考虑感测模块的跳变事件以及关于从状态机通过输入线493施加的控制栅极电压的信息,处理器492确定所得存储器状态。然后计算存储器状态的二进制编码并将所得数据比特存储在数据锁存器494中。在核心部分的另一实施例中,比特线锁存器482具有双重职责,既作为用于对感测模块480的输出进行锁存的锁存器,又作为如上所述的比特线锁存器。可以想到,一些实现方式可包括多个处理器492。在一个实施例中,每一处理器 492包括输出线(图5中未示出),使得每一输出线是线或(wired-OR)在一起的。在一些实施例中,输出线在连接到线或的线之前被反转。因为接收该线或的线的状态机能够确定被编程的所有比特何时已达到期望电平,所以这种配置使得能够在编程验证处理期间快速确定编程处理何时已完成。例如,当每一比特均已达到其期望电平时,会向线或的线发送关于该比特的逻辑0(或数据1被反转)。当所有比特输出数据0(或反转的数据1)时,则状态机获知要终止编程处理。在每一处理器与八个感测模块通信的实施例中,状态机可能(在一些实施例中)需要八次读取线或的线,或者在处理器492中添加逻辑以累加关联的比特线的结果,使得状态机仅需读取线或的线一次。在编程或验证期间,待编程的数据来自数据总线420并存储在数据锁存器494集合中。受状态机控制的编程操作包括施加至寻址到的存储器单元的控制栅极的编程电压脉冲序列(其幅值渐增)。每一编程脉冲后跟随着用于确定存储器单元是否已被编程为期望状态的验证处理。处理器492相对于期望的存储器状态来监控被验证的存储器状态。当这二者吻合时,处理器492设置比特线锁存器482,从而使得该比特线被拉到指示编程禁止的状态。这样,即使耦合到该比特线的存储器单元在其控制栅极上受到编程脉冲,也能禁止该单元被进一步编程。在其它实施例中,处理器在初始时加载比特线锁存器482,且感测电路在验证处理期间将其设置为禁止值。数据锁存器栈494包含与感测模块对应的数据锁存器的栈。在一个实施例中,每感测模块480存在3-5个(或另一数量)的数据锁存器。在一个实施例中,锁存器中每个为一比特。在一些实现方式中(但不要求),数据锁存器被实现为移位寄存器,从而其中存储的并行数据被转换为串行数据用于数据总线420,反之亦然。在一个优选实施例中,与m个存储器单元的读取/写入块对应的所有数据锁存器可被链接在一起以形成块移位寄存器, 从而数据块可通过串行传送而输入或输出。具体地说,调整一排读取/写入模块,从而其数据锁存器集合中的每一个会仿佛它们为用于整个读取/写入块的移位寄存器的一部分那样将数据依次移入或者移出数据总线。在(1)第7,196,931 号美国专利 “Non-Volatile Memory And Method With Reduced Source Line Bias Errors", (2)第 7, 023, 736 号美国专利 “Non-Volatile Memory And Method with Improved Sensing”,(3)美国专利申请公布 No. 2005/0169082, (4)第 7,196,928 号美国专禾Ij "Compensating for Coupling During Read Operations of Non-Volatile Memory”和(5)2006年7月20日公布的美国专利申请公布 No. 2006/0158947 "Reference Sense Amplifier For Non-Volatile Memory"
取操作和感测放大器的其它信息。所有这五个刚列出的专利文献通过引用而全部并入本文。在适当时,在成功编程处理(具有验证)结束时,存储器单元的阈值电压应在被编程的存储器单元的阈值电压的一个或多个分布内,或在被擦除的存储器单元的阈值电压的分布内。图6Α示出当每一存储器单元存储四个数据比特时与存储器单元阵列的数据状态对应的示例性Vt分布。然而,另外的实施例可关于每个存储器单元使用多于四个或少于四个比特的数据。图6A示出与数据状态0-15对应的16个Vt分布。在一个实施例中,状态 0中的阈值电压是负值,而状态1-15中的阈值电压是正值。然而,状态1-15中的一个或多个中的阈值电压可以是负值。在数据状态0-15中各状态之间是用于从存储器单元读取数据的读取基准电压。 例如,图6A示出数据状态0与数据状态1之间的读取基准电压Vrl,以及数据状态1与数据状态2之间的读取基准电压Vr2。通过测试给定存储器单元的阈值电压是大于还是小于相应的读取基准电压,系统能够确定存储器单元处于什么状态。在每一数据状态0-15的下边缘或该下边缘附近为验证基准电压。例如,图6A示出关于状态1的Vvl和关于状态2的Vv2。当将存储器单元编程为给定状态时,系统会测试这些存储器单元是否具有大于或等于验证基准电压的阈值电压。图6B示出由于纠错算法能够处理特定百分比的错误的存储器单元,所以与数据状态0-15对应的Vt分布的另一实施例可部分交叠。还应当注意,由于通过源极或体偏置产生的衬底效应(body effect)被用于将负阈值电压偏移至可测量的正值范围中,因此Vt轴可偏离被施加至控制栅极的实际电压。还需要注意,与所示十六个状态的相等的间隔/宽度相反,不同状态可具有不同的宽度/间隔,以容忍对数据保持损失的不同的敏感度。在一些实施例中,状态0和/或15比其它状态更宽。图7示出示例性移动式设备700,其中嵌入了根据本发明实施例的存储器设备 210。该示例性设备700具有全球卫星定位(GPQ接收器710,用于接收GPS信息,使其能够用作个人导航设备。存储器设备210可用于存储地图,基于由GPS信息确定的该示例性设备的位置,处理器720在显示器702上向用户显示该地图。通常,在用户于存储器设备210中存储了一套地图后,则用户在较长一时间段内不需要覆盖所存储的地图。例如,地图数据中的大部分在数年内不会改变。这里描述的实施例确定每隔多久刷新数据,例如地图数据,该刷新足够频繁以保护该数据,但是也不会太频繁而干扰用户或使存储器设备210负担过重。该示例性设备700用作具有嵌入式存储器设备210的设备的一个示例。但是,嵌入式存储器设备210可与个人数字助理、蜂窝电话、 个人媒体播放器等一起使用。图8示出用于确定存储器设备210中的哪个块应该刷新其数据的处理800的实施例。通常,该处理800用于其中每个存储器单元存储多于一个比特的块,例如每个存储器单元存储四比特的图6A和6B所示示例。该处理800可以在存储器设备210上电之后一有空闲时间时启动,或者在此后定期地启动。在一个实施例中,存储器设备210集成到便携式设备(例如个人导航设备)中,该便携式设备即使在其自身断电后也可被供电较长一段时间。 例如,个人导航设备可能某一次保持插入汽车的点烟器中数天,在这种情况下,能够定期执行该处理800。在一个实施例中,基于纠错算法的性能触发处理800。例如,如果纠错算法的收敛时间过长,或者如果需要由纠错算法纠正的数据比特的数目大于临界值,则启动处理800以确定特定的块(与检测到的问题相关的块或者其它块)是否应当刷新其自身的数据。在步骤802中,选择存储器阵列200的块进行关于数据完整性问题(例如数据保持问题、读取干扰问题,等等)的测试。但是,不需要明确地标识该数据完整性问题的原因 (例如数据保持)。在一个实施例中,依次测试存储器阵列200中的块,以保证每个块经过测试。但是,可按不同的顺序测试所述块,例如按随机顺序,或者按所述块最近一次被编程的顺序。所述处理800并不必须要测试存储器阵列200中的每个块。例如,可推迟对近期编程的块进行测试。但是,由于难以监视和记录温度历史,因此可能难以预测对数据完整性问题的影响。例如,可能难以直接确定存储器设备210是否暴露于高温下。例如,存储器设备210可能留在温度高的环境中,但是没有电源来驱动能够监视和存储温度数据的逻辑。 结果,即使近期编程的块也可能进行测试,以避免数据完整性问题失败。在一个实施例中,处理800仅选择存储器阵列200中少量的块样本进行测试。在一个实施例中,仅对每存储器单元存储特定最小数量比特的块进行数据完整性问题测试。例如,一些块可能每存储器单元存储单个比特,而其它的块可能每存储器单元存储四比特。在这种情况下,每存储器单元存储单个比特的块在Vt分布之间具有很大的间隙而不需要测试O在一些实施例中,系统保证基本同时对整个数据块进行写入,在这种情况下,不需要对所选择的块中的每个字线进行数据完整性问题分析。通过基本同时进行写入,意味着系统执行以下规则如果对块的写入中断,则放弃对该块的写入。也就是说,丢弃该块中的数据并且后续将该数据写入另一个块。注意,基本同时进行写入并不意味着同时对所有字线进行编程。通常,依次对字线进行编程。基本同时对整个块进行写入的一个示例是在其中每个存储器单元存储单个比特的块(二进制块)中临时存储数据。于是,在填写四个这样的二进制块后,则数据被写入每个存储器单元存储四个比特的块(本文中称为“X4块”)中。如果对X4块写入数据中断, 则放弃对该X4块的写入。随后,仍在二进制块中的数据被写入另一 X4块中。如果该写入完成而没有中断,则该块写入成功。因此,X4块中的所有数据被基本同时写入。在步骤804中,选择所选块中的一个字线进行数据完整性分析。在一些实施例中, 系统保证以某一特定顺序对字线进行写入。在以特定顺序对字线进行写入的实施例中,选择被写入过的块中的第一字线进行数据完整性分析。在一个实施例中,随机选择字线。如果需要,可以对块中的多个字线进行数据完整性分析。并不是块中的所有字线都需要作为候选者。在一个实施例中,可以选择已知比其它字线更具问题的字线进行数据完整性分析。 例如,工程特征可能早已确定每个块中的第一字线更容易具有数据完整性问题。在其它实施例中,因为靠近块的中间的字线在每个块测试单个字线的情况下可能更适合,所以可将该块边缘附近的字线排除在候选池之外。尽管在所述处理800的一个实施例中字线是随机选择的,但是并不要求随机选择字线。在一个实施例中,记录经测试的一个或多个字线,使得每个字线(或者至少是候选集合中的每一个字线)经过测试。例如,可以按顺序进行字线的测试,在每次对块进行测试时测试不同的字线。在步骤806中,确定块中被选字线中存储的数据是否具有数据完整性问题,该数据完整性问题标识该块应当进行刷新。图10AU0B和IOC提供了能够用于确定是否存在数据完整性问题的数种技术的细节。简单而言,一种技术包括确定块中的一个或多个Vt分布是否偏移大于允许量,大于允许量表示存在数据保持问题。这样的偏移还可能指出另一问题,例如读取干扰。对这种偏移的测试不要求对所有Vt分布进行偏移分析。用于测试数据完整性问题的另一技术包括对从被选块的字线读取的数据运行纠错算法。基于需要由纠错算法纠正的比特的数目,或者根据纠错算法收敛得到解所需的时间长度,指出数据完整性问题。如果存储器单元块不存在数据完整性问题,则控制进入步骤802以选择另一个块进行测试。如果被选块不存在数据完整性问题,则保持该记录,使得能够在某时刷新该块中的数据。应当注意,该数据不必立即刷新。例如,在执行任何块的数据刷新之前,可确定要刷新那个块集合。在一些情况下,在执行数据刷新之前设备可能断电。在一个实施例中,使用备用块来记录应当刷新哪些数据块。图9A示出刷新数据的处理。应当注意,一旦确定一个块具有数据完整性问题,则可能许多其它块也会存在同样的问题。例如,如果由于存储器设备暴露于高温下而引起数据完整性问题,则其它的块可能也具有同样的数据完整性问题。这对于在具有该问题的块之前最近编程的或者在其之后近期编程的其它的块尤其如此。因此,这些其它的块可以是刷新程序的候选者。因此,如果步骤806确定该块具有数据完整性问题(在下文中称为“坏块”),则控制进入步骤808以确定其它的块进行刷新程序。在步骤808中,基于各个块相对于坏块最近一次编程的时间而于何时被最近一次编程,标识要进行刷新程序的块。本文中,这些其它的块被称为“候选块”。例如,将所有在坏块之前进行编程的块标识为候选块。但是,在坏块之后特定时间段内进行编程的块也可被标识为“候选块”。在步骤810中,对候选块执行刷新程序。该刷新程序确定候选块中的数据是否应当刷新。在一个实施例中,刷新程序自动刷新候选块中的数据,而不确定在候选块中是否存在数据完整性问题。在一个这样的自动数据刷新实施例中,图9A的处理900用于实现步骤 810。在一个实施例中,步骤810的刷新程序确定候选块是否存在数据完整性问题,以确定是否要刷新候选块中的数据。图10AU0B和IOC所示处理中的任何一者或其他处理能够用于确定候选块中的字线是否存在数据完整性问题。在基本同时对整个块进行写入的实施例中,随机选择候选块中要测试的字线。如果图10AU0B和IOC所示处理之一确定候选块存在数据完整性问题,则图9A的处理900可用于刷新候选块中的数据。注意,有可能在所述处理800的一次重复中通过步骤806对候选块进行数据完整性测试,而且在所述处理800的不同次重复中的步骤810中再次进行数据完整性测试。但是,很可能在步骤810中选择与步骤806中测试过的字线不同的、随机选择的字线进行测试。此外,可以采用与步骤806中不同的数据完整性测试。例如,在步骤806中可能已使用图IOB所示的测试(确定需要通过纠错算法纠正多少比特),而在步骤810可能使用图IOA 的测试(寻找Vt分布中的偏移)。但是,可能使用相同的测试,但是具有不同参数。举例而言,为了触发数据刷新而需要由纠错算法纠正的比特的数目可能与第二次测试该块时不同。通过刷新根据策略标识出的候选块中的数据,处理800以足够的频次刷新数据以足以防止数据丢失,但是又不会太频繁而使设备210负担过重或者干扰用户访问存储器阵列200。注意,可能在步骤802-806中已于近期对有些候选块进行数据完整性问题测试,但是该测试并不导致确定要刷新该数据。其可能原因在于数据完整性问题的严重性未完全处于触发数据刷新的阈值。注意,通过基于候选块相对于坏块最近一次编程的时间而于何时被最近一次编程,对候选块执行刷新程序,能够在适当时间刷新存储器设备210中的块,该适当时间使得既不会太频繁以致使存储器设备负担过重,又不会太稀少而使得数据完整性问题太严重而纠错算法无法纠正。例如考虑存储器设备210可能留在极热环境(例如夏天里的汽车内部)中的情况。将存储器设备210置于如此高的温度下可能大大加速电荷损失/获取的速率,这可能潜在导致数据保持问题。但是,应当注意,由于存储器设备不一定会被置于高温下,所以不需要简单地频繁刷新数据。而且,频繁的数据刷新由于可能使存储器设备负担过重或者干扰该设备的正常使用,所以可能并不希望出现。图9A是示出存储器阵列200的块中所存储数据的刷新处理900的一个实施例的流程图。对处理800的步骤806或步骤810已标识出的需要数据刷新的块启动该处理900。 在一个实施例中,处理900刷新块中所有的页面。但是,不要求刷新所有页面中的数据。在步骤902中,从要刷新的块读取数据。如前所述,在当初存储该块的数据时,逐个扇区地计算奇偶校验位,且将奇偶校验位与用户数据结合作为ECC编码机制的一部分。注意,在存储该数据之前,为了将数据随机化,也可以采用扰码程序。在一些实施例中,一个字线上的存储器单元形成数个扇区或ECC页面。扇区的数据可以首先进行扰码,然后由ECC引擎进行编码。与数个扇区对应的经扰码和ECC编码的数据可以累积,然后被同时写入单个字线。例如,一个字线可供给相当于四个扇区的数据。在一些实施例中,可对一个字线上的所有单元同时进行写入。对一个块进行编程在于在每一平面中一次将数据写入一个字线。在美国专利申请公布No. 2006/0158947中描述了能够对所有比特线一起编程的NAND体系结构(ABL NAND体系结构)的示例。在步骤904中,对刚刚读取的数据执行ECC算法以纠正该数据。在一个实施例中, 控制器244执行能够每512比特纠正6个或更多比特的强纠错算法。在一个实施例中,控制器244执行迭代解码技术。在一个实施例中,在多位化(Multi-bit-per-cell)闪速存储器中控制器244执行概率性纠错。在2007年4月19日公布的题为“!Probabilistic Error Correction in Multi-bit-per-cell Flash Memory” 的美国专利申请公布 2007/0086239 以及 2007 年 4 月 19 日公布的题为“Method of Error Correction in MBC Flash Memory" 的美国专利申请公布2007/0089034中提供了在多位化闪速存储器中执行纠错的更多细节,这两个申请均通过弓I用并入本文。在步骤906中,经纠错的数据被写入存储器阵列200的块中。在一个实施例中,总是将数据写入与被刷新的块不同的块中,以实现“损耗均衡”。也就是说,将数据写入不同的块中能够有助于使每个块受到的编程量平均化。在一个实施例中,确定是将数据刷新至新的块还是同样的块。该决定可基于自最近一次对该块进行写入以来的时间和/或该块已被编程的次数,即“最新计数”(hot count)来作出。例如,如果该块近期被编程和/或如果该最新计数高,则可希望将数据写入不同的块。在一个实施例中,每个块存储其自身的最新计数。在一个实施例中,向用户显示不要将设备断电直到刷新程序900完成的消息。但是,不管是否显示这样的消息,用户也可能在数据刷新期间将设备断电。而且,有可能用户通过访问存储器阵列200而中断刷新程序。因此,在非易失性存储器中保留数据刷新处理 900进程的记录,使得该处理900如果被中断则能够恢复。图9B是描述用于对连接至被选字线的存储器单元进行编程的编程处理的流程图。在一个实施例中,图9B所示处理用于对一个页面的数据进行编程。因此,可多次使用图9B的处理来对在所述处理900的步骤906中被进行写入的块中不同的页面进行编程。在图9B所示处理的一种实现中,存储器单元在编程之前进行擦除(步骤940)。 在一个实施例中,通过将P阱提升至擦除电压(例如20伏)直到足够长的一段时间,并将被选择的块的字线接地而将源极线和比特线浮置,擦除存储器单元。由于电容性耦合, 未被选择的字线、比特线、选择线和共同源极线也被提升至该擦除电压的相当大的部分。 因此,被选存储器单元的沟道氧化物层被施加以强电场,且随着浮置栅极的电子通常由于 Fowler-Nordheim隧穿机制而被输送至衬底侧,于是被选存储器单元的数据被擦除。随着电子从浮置栅极被传送到P阱区域,被选单元的阈值电压降低。可对整个存储器阵列、单独的块或另一单位量的单元执行擦除。在存储器单元的块被擦除后,可如本文所述那样对各存储器单元进行编程或部分编程。注意,不需要在一个块的每个字线被编程之前执行步骤 940中所执行的擦除。相反,可擦除所述块然后对每个字线编程,而在各字线的编程之间不进行擦除。在步骤942中,执行软编程以将被擦除的存储器单元的擦除阈值电压的分布变窄。由于该擦除处理,一些存储器单元可处于比所需更深的擦除状态。软编程可施加小的编程脉冲以将被擦除的存储器单元的阈值电压移至更靠近擦除验证电平。在步骤950中, 由控制器244发出“数据加载”命令,且该命令被输入到状态机222。在步骤952,将指定页面地址的地址数据提供给解码器224。在步骤954,将关于被寻址页面的编程数据页面输入供进行编程。例如,在一个实施例中,可以输入5 字节的数据。该数据被锁存在被选择比特线的适当寄存器/锁存器中。在一些实施例中,该数据也被锁存在被选择比特线的第二寄存器中以用于验证操作。在步骤956中,从控制器244接收“编程”命令,并将其提供给状态机222。由“编程”命令触发,使用施加至适当字线的电压,将步骤954中锁存的数据编程到由状态机222控制的被选存储器单元中。在步骤958中,将编程信号“Vpgm” (例如电压脉冲序列)初始化为起始幅度(例如 12V或另一合适的电平),且将状态机222所维护的编程计数器PC初始化为0。在步骤960中,将编程信号Vpgm的脉冲施加至被选择的字线。 未选择的字线接收被称为“Vpass”的一个或多个升压电压(boosting voltage) 0如果在特定数据锁存器中存储逻辑“0”指示应对相应存储器单元进行编程,则将相应比特线接地。 另一方面,如果在特定锁存器中存储逻辑“ 1”指示对将相应存储器单元保持在其当前数据状态,则将相应比特线连接到Vdd以禁止编程。注意,编程信号包括电压脉冲的集合,其中, 脉冲的幅度随每一相继脉冲而增加。在电压脉冲之间是一组验证脉冲。在步骤962中,使用适当的目标电平集合验证被选择的存储器单元的状态,如上所述。如果检测出被选择单元的阈值电压已达到适当的目标电平,则在对应数据锁存器中存储的数据变为逻辑“1”。如果检测出该阈值电压尚未达到适当的目标电平,则在对应数据锁存器中存储的数据不变。通过此方式,在其对应的数据锁存器中存储有逻辑“1”的比特线无需进行编程。当所有数据锁存器存储有逻辑“1”时,状态机222获知所有被选择的单元均已被编程。在步骤964中,检查所有数据锁存器是否存储有逻辑“1”。如果是,则因为所有被选择的存储器单元已被编程且针对它们的目标状态进行了验证,所以编程处理完成并且成功。在步骤966中报告“PASS”状态。注意,在一些实现方式中,在步骤964,检查是否有至少预定数量的数据锁存器存储有逻辑“1”。该预定数量可以小于全部数据锁存器的数量,从而允许编程处理在所有存储器单元达到它们的适当的验证电平之前停止。未成功编程的存储器单元可以在读取处理期间使用纠错操作得以纠正。在步骤964中,如果确定出并非所有数据锁存器都存储有逻辑“ 1 ”,则继续编程处理。在步骤968中,针对编程限制值检查编程计数器PC。编程限制值的一个示例为20 ;然而,在不同实现方式中可使用其它值。如果编程计数器PC不小于编程限制值,则在步骤969 中确定尚未成功编程的存储器单元的数量是否等于或小于预定数量。如果未成功编程的存储器单元的数量等于或小于该预定数量,则将编程处理标记为通过,并且在步骤971中报告PASS状态。在很多情况下,能够在读取处理期间使用纠错操作纠正未被成功编程的存储器单元。然而,如果未被成功编程的存储器单元的数量大于预定数量,则将编程处理标记为失败,且在步骤970中报告FAIL状态。如果在步骤968中确定出编程计数器PC小于编程限制值(例如20),则将下一 Vpgm电压脉冲的幅度增加步长大小(例如0. 2-0. 4伏特步长大小),并且在步骤972中使编程计数器PC递增。在步骤972之后,所述处理环回到步骤 960以施加下一 Vpgm电压脉冲。通常,在验证操作(例如在图9B所示步骤962期间执行的验证操作)和读取操作期间,被选择的字线连接到一电压,该电压的电平是针对每一读取和验证操作而指定,以确定所关注的存储器单元的阈值电压是否已达到这样的电平。在施加字线电压之后,测量存储器单元的传导电流,以确定该存储器单元是否响应于施加到字线的电压而被导通。如果测量的传导电流大于特定值,则假设该存储器单元导通且施加到字线的电压大于该存储器单元的阈值电压。如果测量的传导电流未大于该特定值,则假设存储器单元未导通且施加到字线的电压不大于该存储器单元的阈值电压。存在很多在读取或验证操作期间测量存储器单元的传导电流的方法。在一个示例中,根据存储器单元的传导电流对感测放大器中的专用电容器放电或充电的速率测量存储器单元的传导电流。在另一示例中,被选择的存储器单元的的传导电流允许(或者无法允许)包括存储器单元的NAND串对相应的比特线放电。在一段时间之后测量比特线上的电压,以查看该比特线是否已被放电。图IOA是示出用于确定块是否存在数据完整性问题的处理1000的一个实施例的流程图。该处理1000可用于执行图8的步骤806。处理1000还能够用于步骤810的刷新程序的实施例,其中,确定候选块是否具有数据完整性问题。在步骤1002,对非易失性存储器元件执行高分辨率扫描。该扫描可在有限范围内执行。例如参考图6B,可在状态14和15 部分执行扫描。该高分辨率扫描包括以比正常读取处理更高的分辨率执行数次读取。仅需扫描块中的单个字线(或其一部分)以收集用于检测数据完整性问题的所有数据。但是, 根据需要,也可扫描来自多个字线的数据。在这里,高分辨率读取点被称为“软读取”。图11示出分布函数1101 (视作控制栅极电压的函数的单元)。该分布1101对应于例如16个Vt分布(例如图6B中所示的Vt分布)中的大约四个。该分布具有顶峰之间
16的“凹谷”,该“凹谷”对应于将存储器单元编程至不同状态而产生的Vt分布。在一个实施例中,确定分布函数1101中的谷底1111之一。由于仅需确定对应于一个谷底的阈值电压, 所以仅需确定分布函数1101的一部分。在图11所示的该示例中,使用16个不同的控制栅极电压(软读取电压Vsrl-Vsrie)产生实线所示的分布1101部分。可使用多于或少于16 个软读取电压。该分布1101的虚线部分指出在施加更大范围的控制栅极电压的情况下该分布1101如何表现。在一个实施例中,目的用于标识的凹谷是基于由于编程至不同状态而产生的Vt 分布的预期特征确定的。例如,可基于诸如Vt分布之间的预期分隔以及不同Vt分布预期会出现的偏移量等因素选择凹谷。对于一些非易失性存储器设备,具有更高电压的Vt分布具有更大的分隔并且预期出现更大偏移。但是注意,每个状态可因不同的数据完整性问题而受到不同影响,这还会影响关于标识哪个凹谷的决定。例如,状态15可能比其它状态受到更大程度的读取干扰。因此,如果旨在针对数据保持问题进行测量,则可能希望避免读取受读取干扰(或者至少读取干扰会如何影响Vt分布的偏移的因素)影响很大的状态。注意,高分辨率扫描是在非常有限的、不包括其它14个Vt分布(在使用16个数据状态的实施例中)中的任何一个的电压范围上执行的。因此,读取操作的总数保持为合理低的数目。 另一方面,由于以下原因,可能希望选择扫描状态14与15之间的凹谷(即,在存在16个状态时最高的凹谷)。有可能出现所述分布的向下偏移如此之大,使得状态14与15之间的凹谷可能被错误解释为状态13与14之间的凹谷。搜索两个最高状态之间的凹谷可缓解该问题。为确定所述分布,软读取电压Vsrl-Vsrie被相继施加至块中被选择字线的存储器单元的控制栅极。例如,施加至存储器单元的控制栅极的电压随着每个相继电压而递增例如50mV。记录响应于每次软读取而传导(导通)的存储器单元的数量。不要求记录每个指定单元中存储的实际数据。相反,可基于对响应于每个软读取电压有多少存储器单元传导(导通)的分析来确定分布1101的形状。在处理1000的步骤1004中,确定分布函数中的谷底。在一个实施例中,标识谷底电压。谷底电压的目的在于引入参考点,用于确定Vt分布中的至少一个偏移了多少。在图 11中,在Vt分布110 和1102b之间示出谷底电压1111的示例。在一个实施例中,参考点是不同于谷底的某处。例如,参考电压可能是分布函数1101中的顶峰。在一个实施例中,通过首先使阈值电压分布数据平滑而确定凹谷。可使用许多适当的已知函数之一来使阈值电压分布数据平滑。例如,可使用低通滤波器来使数据平滑。于是,可确定平滑后数据的导数。存在许多用于创建和存储关于该导数的信息的方法和形式, 并不要求特定的方法和形式。接下来,研究导数计算的输出以寻找跨零点,以标识凹谷。下文中描述用于寻找凹谷的另一技术。在该实施例中,通过利用函数对阈值电压分布进行卷积,对阈值电压分布数据进行平滑。在一个实施例中,该函数是高斯函数。在另一实施例中,该函数是截断高斯,使得去除高斯函数的前尾部和后尾部。在另一实施例中, 可使用不同于高斯的其他函数。然后,确定平滑后数据的导数。接下来,研究导数计算的输出以寻找从负到正的过零点,以标识凹谷。可用于定位凹谷的另一种技术是将阈值电压分布数据进行平方。这可用于为该数据提供更大的对比。然后,使用任一上述方法对阈值电压分布数据的平方进行平滑。接下来,确定平滑后数据的倒数并根据跨零点确定凹谷。在步骤1006中,基于参考点(例如,谷底电压的阈值电压)确定Vt分布的偏移。 作为另一示例,可基于分布函数中顶峰的阈值电压确定Vt分布1102b的偏移。在一个实施例中,可修改上述导数方法以标识分布函数1101中的顶峰。在一个实施例中,计算Vt分布的偏移作为谷底电压与参考电压之间的差。可基于在编程后Vt分布1102b的预期形状确定参考电压。该预期形状可根据工程特征确定。因此,不需要为确定参考电压而确定紧接着在现场编程之后的Vt分布110 和1102b的形状。还应该注意,在首次编程时,Vt分布 110 和1102b可能完全不交叠。注意,取决于在编程期间是从存储器单元去除电荷还是向存储器单元添加电荷,所述分布110 和1102b可由于数据保持问题而向右或向左偏移。在步骤1008中,确定是否要至少部分地基于Vt分布的偏移而刷新数据。可基于确定所述偏移如何影响加速读取数据的能力的实验室试验,确定保证数据刷新的偏移量。如果要刷新块中的数据,则执行图9A的处理900。但是,数据刷新不需要立即执行。例如,可推迟数据刷新,直到确定整个存储器阵列200中的哪些块要刷新。保留要刷新的块的记录, 使得数据刷新(例如,处理900)可在方便时执行。在一些情况下,不会在存储器设备210 断电前执行数据刷新。因此,该记录应当保持在诸如备用块等非易失性存储器中。步骤1008的刷新确定可基于不同于Vt分布偏移、或者除Vt分布偏移之外的很多因素。注意,相比与较低阈值电压相关的状态,存储器单元具有较高阈值电压时的状态可按更快的速率损失/获取电荷。因此,刷新确定中的一个因素在于进行分析的Vt分布与哪些状态相关。如前所述,不同的状态可能具有不同的宽度/间隔,以适应不同程度的数据保持损失。因此,更倾向于偏移的状态可更加适合测量Vt分布中的偏移。但是,任一状态可用于测量Vt分布中的偏移。可基于对实验室中设备执行的测试得知特定存储器设备的不同 Vt分布偏移特征。在刷新确定中要考虑的另一因素在于对哪个或哪些字线进行数据完整性测试。如上所述,在一个实施例中,选择单个字线用于进行数据完整性问题的测试。关于特定的数据完整性问题,例如数据保持,不同的字线可具有不同的特征。注意,由于一些字线的特征彼此会很类似,所以可将不同的字线组成集合。要考虑的又一因素是所述块已被编程的次数,该次数被另称为“最新计数”。该最新计数可存储作为该块的开销。与仅被编程数次的块相比,已被编程很多次的块可倾向于更快速地朝向电中性变化。因此,至少对于一些存储器设备,具有高的最新计数的块与具有较低最新计数的块相比,可能应当以更小的Vt分布偏移进行刷新。另一因素是自所述块被编程起经过的时间。但是,由于存储器设备可能受到差别很大的环境条件,所以,自上一次写入以来的时间自身可能不是可靠的、关于需要刷新数据的指示。也就是说,过度依赖自上一次编程以来的时间可能导致如果该时间参数太长,则无法在需要时刷新;或者,如果该时间参数太短,则刷新太频繁。但是,作为许多因素之一, 当在临界情况下决定是否刷新数据时,使用时间参数是有利的。要考虑的另一因素是当前的电源电压,该电源电压能够影响许多电压的幅值,例如用于确定Vt分布相交的点的软读取电压的幅值。刷新决定也可基于对所选块进行编程时的温度和当前温度。注意,晶体管的阈值电压是温度的函数。因此,如果这两个温度实质上不同,则预期会出现Vt分布的偏移。在一个实施例中,存储器设备210内建有温度补偿,以解决这些由温度引起的阈值电压偏移, 在这种情况下,不必在进行刷新确定时将温度考虑在内。在一个实施例中,存储器设备210存储多轴“刷新因素”表,该表指出上述因素如何影响刷新确定。该刷新因素表可在将存储器设备210提供给用户之前存储在存储器设备 210中,使得该表可由管理电路访问。图12示出具有第一轴和第二轴的双轴表1200的一个示例,第一轴用于16个不同的状态(S0-S15),而第二轴用于五个不同的字线(WL)组。在实际中,每个存储器单元包含用于确定允许Vt分布由于与该单元相关的因素而偏移多少的值。例如,与状态13和WJ1-WL23相关的存储器单元具有值“Vx”。在示例性双轴表1200 的其它单元中未显示值,以不使该图变得不清晰。作为一个特定示例,如果测试过字线17且正在分析状态13,则参考表1200,将Vt 分布的偏移与值“Vx”比较,以确定是否存在数据完整性问题。表1200可具有更多的轴,每个轴对应于上述或其它因素之一。例如,该表1200可具有对应于不同最新计数范围的另一个轴。图IOB示出基于有多少比特需要通过纠错算法纠正而确定是否需要数据刷新的处理1030的一个实施例。该处理1030是一种用于执行图8的步骤806的技术。在步骤 1032中,读取所选字线上的单元。如上所述,在一个实施例中,随机选择字线。在步骤1034中,对刚刚读入的数据执行ECC算法。该ECC算法确定该数据中有多少比特需要纠正。在步骤1038中,控制器244确定需要纠正的比特的数目是否大于阈值比特数。如果是,则将块标识为需要数据刷新,且在此时或者随后执行刷新程序(例如,图9A)。如果错误比特的数目小于阈值,则此时不标识该块进行数据刷新(步骤1042)。在一个实施例中, 该阈值是最新计数的函数。例如,该最新计数越高,则该阈值越低。图IOC示出处理1060的一个实施例,该处理用于根据纠错算法需要多久收敛来确定是否需要数据刷新。处理1060是一种用于执行图8的步骤806的技术。在步骤1062中, 读取所选字线上的单元。在步骤1064中,控制器244执行ECC算法,以尝试恢复错误的数据比特。在步骤 1068中,控制器244确定纠错算法收敛所需时间是否超过允许的时间。在一个实施例中,控制器244确定迭代解码技术是否采用比允许的迭代次数更多的迭代而收敛。允许的次数是可变的,可进行调整以改变该处理1060的敏感性。例如,如果该块是处理800的步骤808 中标识出的候选块,则可增加敏感性。如果纠错算法收敛时间过长,则在此时或随后刷新这个块(步骤90幻。如果纠错算法在允许的迭代次数内收敛,则不刷新这个块中的数据(步骤1072)。在一个实施例中,迭代次数是最新计数的函数。例如,对于越高的最新计数,收敛所需的允许迭代次数越低。图13A示出处理1300的一个实施例,该处理用于标识出候选块用于刷新程序。图 13A所示处理可用于实现图8的步骤808。该处理1300使用与每个块相关的时间戳来标识候选块。在步骤1302中,存取与坏块相关的时间戳(该坏块是在处理800的步骤806中标识出的)。在步骤1304中,存取与其它的块相关的时间戳。在一个实施例中,块的时间戳存储在该块自身中。通常,每个字线具有未用于数据存储的一些存储器单元。时间戳可存储在与这些未使用的存储器单元之一相关的存储器元件。如果在每个块中存储时间戳,则仅需读取具有时间戳的字线。此外,注意,由于时间戳数据仅为字线中数据的很小部分,所以可忽略字线上的大多数数据。在一个实施例中,存储器设备中的“时间戳”表存储时间戳, 减轻了从每个块读取时间戳的需求。例如,将存储器阵列200中的一个或多个块留出用于该时间戳表。在步骤1306中,确定哪些块的时间戳相比与坏块相关的时间戳更早。这些块被标识为进行刷新程序的候选块。在一个实施例中,在具有数据完整性问题的块之后一定时间内被最近一次编程的块也被标记进行刷新程序。例如,在坏块之后一天或两天内被最近一次编程的那些块也可能存在同样由环境引起的数据完整性问题,因而被标识为候选块。对于被标识为候选块的这些块执行处理800的步骤810。在一个实施例中,将序列号而不是时间戳与每个块关联。序列号指出所述块被编程的顺序。图13B为示出处理1350的一个实施例的流程图,该处理1350用于通过使用序列号标识进行刷新程序的候选块。图13B的处理1350可用于实现图8的步骤808。在步骤1352中,存取与坏块相关的序列号。在步骤13M中,存取与其它的块相关的序列号。通常,一个块的序列号存储于该块中。但是,序列号可存储在其它地方,例如存储在具有与块号相关的序列号的表格的备用块中。在步骤1356中,其序列号低于与坏块相关的序列号的块被标识为进行刷新程序的候选者。对于被标识为候选块的这些块执行处理800的步骤810。图14示出处理1400的一个实施例,该处理1400用于管理被用来标识进行刷新程序的候选块的序列号。在步骤1402中,存储器设备210上电。注意,该存储器设备210可集成于另一设备如个人导航设备中。使用该示例,只要该个人导航设备有电源可用时,该存储器设备210就可具有电源。例如,用户可能将个人导航设备插入电源如汽车的“电引燃器”中。在该示例中,即使用户关闭了个人导航设备,通过用户将存储器设备210插入该引燃器中,也可使该存储器设备210上电。在步骤1404中,从存储器阵列200的块中读取序列号。一些块可能没有序列号。 例如,当前未存储有效数据的块不会具有序列号。在一个实施例中,每单元仅存储单个比特的块由于不需要测试而没有序列号。注意,在存储器设备210上电之后、在读取序列号之前,可执行许多其它动作。在步骤1406中,将最高的序列号记录作为当前序列号。当前序列号可存储于随机存取存储器中,该随机存取存储器可以在存储器设备210上或者在存储器设备210之外。例如,与设备210耦合的主机可具有随机存取存储器。或者,当前序列号可记录在非易失性存储器(例如,备用块)中。在步骤1408中,存储器阵列200收到写入一个或多个块的请求。在步骤1410中, 使当前序列号递增。在步骤1412中,将当前序列号(在递增之后)存储在正被写入的块中。 如果存在多个要写入的块(步骤1414),则控制进入到步骤1410,以使序列号递增并将其存储在下一正被写入的块中。图15示出处理1500的一个实施例,该处理1500用于管理用来选择进行刷新程序 (例如,处理800的步骤810)的候选块的时间戳。该处理1500以步骤1502开始,其中,存储器设备210上电。在步骤1504中,从不同的块中读取时间戳。对于使用序列号的实施例,并非所有
20的块会具有时间戳。如上所述,在处理1300的步骤1304的一个实施例中,从表中存取时间戳。在任选的步骤1506中,在步骤1504中读取的时间戳存储在该时间戳表中。该表可在 RAM中,或者该表可占用非易失性存储器的一个或多个块。在步骤1508中,接收对一个或多个块进行写入的请求。在步骤1510中,确定当前时间。注意,在一些情况下,可用时间的准确性可能存在问题。例如,可能通过询问与存储器设备210耦合的主机而存取时间。但是,该主机可能提供不准确的时间。例如,该主机的时钟可能已被错误编程。可根据时间源的类型(例如,不受信任的个人计算机)或者根据与在先时间不一致的时间(例如,时间倒退)质疑时间的准确性。如果时间信息未获信任, 则可使用 值代替该时间信息。或者,可存储最新的可信的时间信息。注意,如果存储最新的可信的时间信息,这可能导致块在其实际编程时间之前被进行编程的结论。因此,根据块何时编程而确定何时刷新的处理1300可能过渡包含。在一些实施例中,存储器设备210可访问被认为是非常可靠的可信时间源。例如, 如果存储器设备210用于从卫星接收正确时间的个人导航设备中,则可认为该时间是可信且准确的。在步骤1512中,将时间戳存储在正被写入的块中。根据需要,可针对每个被写入的块重复步骤1510。但是,只要写入处理未中断相当长的一段时间,则该同一时间戳仍可用于按给定的写入请求而进行写入的所有的块。在任选的步骤1514中,更新时间戳表。注意,可为所述块存储时间戳和序列号两者。如上所述,如果时间信息不可信,则所存储的时间戳可为哑值。当执行处理1300以确定是否要基于时间戳进行刷新时,对于具有哑值的这些块,可将序列号用于刷新确定。图16示出处理1600的一个实施例,该处理1600警告用户采取旨在减轻数据保持问题的动作。在步骤1602中,判断出存储器设备210的刷新太频繁。在一个实施例中,管理电路作出此判断,但是该判断也可在存储器设备210外部作出。为确定数据的刷新是否太频繁,可维持关于数据刷新的记录。该记录可跟踪每次处理800,每次处理800导致刷新至少一个块。该记录也可包括总共刷新了多少个块,有多少个块是根据对实际数据完整性问题的判断(例如,由所述处理1000、1030或1060中的一个或多个判断)而刷新的,有多少个块是根据基于何时被编程而自动刷新的,等等。如果时间信息可用的话,上述记录还可指出何时进行了刷新。在一些情况下,不会知道特定数据刷新的时间,但是能够确定时间窗口。例如,当出现数据刷新时,存储器设备可能耦合至未提供正确或可信的时间的主机。但是,如果存储器设备后来耦合至提供该时间的主机,则可将刷新时间本地化至时间窗口(假设刷新之前的时间已知)。可根据在存储器设备于实验室中进行检验时获知的信息,确定在一段时间内有多少数据刷新被认为是太频繁。在步骤1604中显示消息,警告用户采取正确的动作以减轻数据完整性问题。作为示例,该消息指出用户不应将存储器设备留在高温环境中过长时间。上文中提供了对本发明的具体描述以用于进行阐述和说明。但并非要穷举或者将本发明限于所公开的精确形式。根据以上教导,可实现很多修改和变型。上述实施例被选取用于最佳地解释本发明的原理及其实际应用,从而使得本领域技术人员能够以不同的实施例并利用适于特定预期用途的不同变型来最佳地利用本发明。本发明的范围要由所附权利要求来定义。
权利要求
1.一种用于操作非易失性存储器设备的方法,该方法包括基于所述设备的第一组非易失性存储器元件中的一个或多个非易失性存储器元件的条件,确定出应当执行对该第一组非易失性存储器元件中所存储数据的刷新(806);根据相对于最近一次对所述第一组非易失性存储器元件进行了编程的时间于何时对所述设备中的第二组非易失性存储器元件进行了最近一次编程,确定出应当对该第二组非易失性存储器元件进行刷新程序(808);以及对所述第二组非易失性存储器元件执行所述刷新程序(810)。
2.根据权利要求1所述的方法,其中,执行所述刷新程序包括基于所述第二组非易失性存储器元件中的一个或多个非易失性存储器元件的条件,确定是否刷新所述第二组非易失性存储器元件中所存储的数据。
3.根据权利要求1或2所述的方法,其中,所述确定应当对所述设备中的第二组非易失性存储器元件进行刷新程序包括确定所述设备中的哪些非易失性存储器元件在所述第一组非易失性存储器元件之前被编程。
4.根据权利要求1至3中任一项所述的方法,其中,所述确定应当对所述设备中的第二组非易失性存储器元件进行刷新程序包括存取与第一组非易失性存储器元件相关的第一时间戳,该第一时间戳指出所述第一组非易失性存储器元件被最近一次编程的时间;存取与所述设备中非易失性存储器元件的块相关的时间戳,与所述块相关的该时间戳指出所述非易失性存储器元件的块中的每一个块被最近一次编程的时间;以及确定哪个所述块具有早于所述第一时间戳的相关时间戳。
5.根据权利要求1至4中任一项所述的方法,还包括将所述第一组编程至包括第一阈值电压分布和第二阈值电压分布的多个阈值电压分布,并且,其中所述确定应当执行对所述第一组非易失性存储器元件中所存储数据的刷新包括确定所述第一组非易失性存储器单元的阈值分布;确定所述阈值分布上的参考点;基于所述参考点的偏移,确定所述第一组中存储的数据是否应当刷新。
6.根据权利要求5所述的方法,其中,确定所述阈值分布中的参考点包括将多个读取参考电压施加至所述第一组中的至少一部分非易失性存储器元件,在包括所述第二阈值电压分布和第一阈值电压分布中的一部分的电压范围上施加所述读取参考电压;基于施加所述读取参考电压,确定阈值分布中的凹谷,该凹谷为参考点。
7.根据权利要求6所述的方法,其中,所述第一组与多个字线相关,并且,其中该方法还包括随机选择所述字线的第一字线以对其施加所述多个读取参考电压。
8.根据权利要求7所述的方法,其中,确定应当执行对所述设备的第一组非易失性存储器元件中所存储数据的刷新还基于所述第一字线的、相对于其它字线位置的位置。
9.根据权利要求8所述的方法,其中,确定应当执行对所述设备的第一组非易失性存储器元件中所存储数据的刷新还基于该第一组中的一个或多个非易失性存储器元件已被编程的次数。
10.根据权利要求1至3中任一项所述的方法,其中,确定应当对所述设备中第二组非易失性存储器元件进行刷新程序包括存取所述设备中多个非易失性存储器元件组中的每一个组的序列号,所述序列号表示所述多个组被编程的顺序,且所述序列号包括用于所述第一组的第一序列号和用于所述第二组的第二序列号;以及确定应当刷新序列号低于所述第一序列号的组中存储的数据,所述第二序列号低于所述第一序列号。
11.根据权利要求1所述的方法,其中,执行所述刷新程序包括在没有确定所述第二组非易失性存储器元件存在数据完整性问题的情况下,刷新所述第二组非易失性存储器元件中存储的数据。
12.—种非易失性存储器设备,包括多个非易失性存储器元件组,包括第一组(块i) 和第二组(块i+n);以及与所述多个非易失性存储器元件组通信的管理电路(220,230,240,242,244),该管理电路基于所述第一组非易失性存储器元件中的一个或多个非易失性存储器元件的条件,确定应当执行对该第一组非易失性存储器元件中所存储数据的刷新;该管理电路根据相对于最近一次对所述第一组非易失性存储器元件进行了编程的时间于何时对所述第二组非易失性存储器元件进行了最近一次编程,确定是否应当对该第二组非易失性存储器元件进行刷新程序;该管理电路对该第二组执行刷新程序。
13.根据权利要求12所述的非易失性存储器设备,其中,所述管理电路将所述第一组编程至包括第一阈值电压分布和第二阈值电压分布的多个阈值电压分布,所述管理电路确定所述第一组非易失性存储器单元的阈值分布,所述管理电路确定所述阈值分布上的凹谷,所述管理电路基于所述凹谷的偏移,确定是否应当执行对所述第一组非易失性存储器元件中所存储数据的刷新。
14.根据权利要求13所述的非易失性存储器设备,其中,通过将多个读取参考电压施加至所述第一组中的至少一部分非易失性存储器元件,所述管理电路确定所述凹谷,所述管理电路在包括所述第二阈值电压分布和第一阈值电压分布中的一部分的电压范围上施加所述读取参考电压。
15.根据权利要求12所述的非易失性存储器设备,其中,基于所述第二组非易失性存储器元件的最近一次编程是否在所述第一组的最近一次编程之前,所述管理电路确定所述第二组非易失性存储器元件是否应当进行所述刷新程序。
全文摘要
公开了用于刷新非易失性存储器设备中的数据的技术,该刷新足够频繁,足以克服错误的或遭破坏的数据比特,但不会太频繁而干扰存储器存取或导致存储器单元负担过重。一个实施例包括基于设备中第一组非易失性存储器元件中的数据的条件,确定执行对该第一组非易失性存储器元件中所存储数据的刷新;根据相对于最近一次对所述第一组非易失性存储器元件进行了编程的时间于何时对该设备中的第二组非易失性存储器元件进行了最近一次编程,确定应当对该第二组非易失性存储器元件进行刷新程序;以及对所述第二组非易失性存储器元件执行所述刷新程序。
文档编号G11C16/34GK102246241SQ200980150591
公开日2011年11月16日 申请日期2009年9月30日 优先权日2008年12月18日
发明者尼玛·穆赫莱斯 申请人:桑迪士克股份有限公司