CN105308685B - 非易失性存储装置的编程处理和非易失性存储系统 - Google Patents
非易失性存储装置的编程处理和非易失性存储系统 Download PDFInfo
- Publication number
- CN105308685B CN105308685B CN201480005814.2A CN201480005814A CN105308685B CN 105308685 B CN105308685 B CN 105308685B CN 201480005814 A CN201480005814 A CN 201480005814A CN 105308685 B CN105308685 B CN 105308685B
- Authority
- CN
- China
- Prior art keywords
- data
- programmed
- copy
- memory
- page
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C16/00—Erasable programmable read-only memories
- G11C16/02—Erasable programmable read-only memories electrically programmable
- G11C16/06—Auxiliary circuits, e.g. for writing into memory
- G11C16/10—Programming or data input circuits
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C11/00—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
- G11C11/56—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency
- G11C11/5621—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency using charge storage in a floating gate
- G11C11/5628—Programming or writing circuits; Data input circuits
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C16/00—Erasable programmable read-only memories
- G11C16/02—Erasable programmable read-only memories electrically programmable
- G11C16/06—Auxiliary circuits, e.g. for writing into memory
- G11C16/34—Determination of programming status, e.g. threshold voltage, overprogramming or underprogramming, retention
- G11C16/3436—Arrangements for verifying correct programming or erasure
- G11C16/3454—Arrangements for verifying correct programming or for detecting overprogrammed cells
- G11C16/3459—Circuits or methods to verify correct programming of nonvolatile memory cells
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C2211/00—Indexing scheme relating to digital stores characterized by the use of particular electric or magnetic storage elements; Storage elements therefor
- G11C2211/56—Indexing scheme relating to G11C11/56 and sub-groups for features not covered by these groups
- G11C2211/562—Multilevel memory programming aspects
- G11C2211/5621—Multilevel programming verification
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C2216/00—Indexing scheme relating to G11C16/00 and subgroups, for features not directly covered by these groups
- G11C2216/12—Reading and writing aspects of erasable programmable read-only memories
- G11C2216/14—Circuits or methods to write a page or sector of information simultaneously into a nonvolatile memory, typically a complete row or word line in flash memory
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Read Only Memory (AREA)
Abstract
一种用于以下操作的系统及方法:将一组数据编程至非易失性存储元件上;内部地或外部地将待编程的数据页的副本以及周围的数据页保存至存储器单元;在编程之后验证编程的正确性;以及当发现编程错误时,在替选的非易失性存储元件中恢复要被重新编程的被损坏的数据的安全副本。另外,一种用于以下操作的系统及方法:对跨越非易失性存储器系统的多个管芯的一组或更多组数据进行编程;在对所述一组或更多组数据进行编程之前,借助于诸如XOR运算对跨越多个管芯的数据页进行组合;使用各种方法确定编程的正确性;以及当识别到数据损坏时,借助于诸如XOR运算来恢复数据页的安全副本,以将页重新编程在非易失性存储器系统上的替选位置中。
Description
背景技术
半导体存储装置在各种电子装置中的使用已经变得日益流行。例如,在蜂窝电话、数码相机、个人数字助理、移动计算装置、非移动计算装置以及其他装置中使用非易失性半导体存储器。电可擦除可编程只读存储器 (EEPROM)和闪速存储器是其中最流行的非易失性半导体存储器。
EEPROM和闪速存储器两者都利用浮置栅极,该浮置栅极位于半导体衬底中的沟道区上方并且与其绝缘。该浮置栅极位于源极区与漏极区之间。在浮置栅极上设置控制栅极,并且该控制栅极与该浮置栅极绝缘。晶体管的阈值电压由浮置栅极上保留的电荷量来控制。即,在晶体管接通以允许其源极和漏极之间导通之前必须施加于控制栅极的最小电压量由浮置栅极上的电荷电平来控制。
当对EEPROM或闪速存储装置进行编程时,通常给控制栅极施加编程电压并且将位线接地。来自沟道的电子被注入到浮置栅极中。当电子在浮置栅极中累积时,浮置栅极变成带负电,并且存储器单元的阈值电压升高,使得存储器单元处于编程状态下。可以在题为“Source Side Self Boosting Technique For Non-Volatile Memory”的美国专利6,859,397以及题为“Detecting Over Programmed Memory”的美国专利6,917,542中找到关于编程的更多信息,这两个专利的全部内容通过引用被合并到本文中。
一些EEPROM和闪速存储装置具有用于存储两种范围的电荷的浮置栅极,并且因此存储器单元可以在两种状态之间被编程/擦除:擦除状态和编程状态(对应于数据“1”和数据“0”)。这样的装置被称为二进制装置或单层单元(SLC),并且数据是二进制数据。
多态闪速存储器单元(存储多态数据)通过识别多个不同的允许阈值电压范围来实现。每个不同的阈值电压范围与该组数据位的预定值对应。例如,一些单元可以存储2位,而其他单元可以存储3位。被编程至存储器单元中的数据与存储器单元的阈值电压范围之间的具体关系取决于该存储器单元所采用的数据编码方案。例如,美国专利No.6,222,762和美国专利申请公开 No.2004/0255090均描述了用于多态闪速存储器单元的各种数据编码方案,这两者的全部内容通过引用被合并到本文中。
除了由多态存储器架构产生的容量增加以外,由于不断减小存储器单元的物理尺寸的历史,消费者已经看到了明显的优势。可以在给定的管芯面积上更密集地封装较小的存储器单元,使得用户能够在与较旧的存储器技术相同的价格下访问更大的存储器容量。栅极面积的缩小会减小浮置栅极至衬底的电容以及控制栅极至浮置栅极的电容。电容的减小又需要较少的电荷用于对单元进行编程和擦除,因此消耗较少的电力。对单元进行编程和擦除所需要的电荷的减少还意味着:对于相似的充电电流和放电电流,可以更快地执行编程操作和擦除操作。
然而,缩放存储器单元的大小带来一定的风险。如上所述,为了实现固定的管芯大小具有较高的存储器容量的优势,这些较小的单元必须更紧密地被封装在一起。然而,这样做会导致较大数量的制造错误如字线之间的短路。这样的错误通常损坏存储在正在被编程的字线和邻近字线上的页上的任何数据。在一些情况下,在包装及运输之前由制造商进行测试期间没有意识到这些缺陷。相反,这些缺陷仅在由用户执行编程擦除周期之后才开始损坏数据。
对于一些存储器系统而言,存在称为增强的后写读(EPWR)的技术以便在编程期间测试错误。数据首先被编程至每个存储器单元存储1位的二进制存储器单元中。此后,数据被重新编程至每个存储器单元存储3位的多态存储器单元中。在将数据编程至每个存储器单元存储3位的多态存储器单元中之后,读取经编程的数据并且将经编程的数据与存储在二进制存储器单元中的数据进行比较以验证编程的正确性。如果发现了差异,则认为多态存储器单元的块被损坏,并且因此退出未来使用。然后,将数据重新编程至别处。虽然该处理是有用的,但是其不满足所有问题并且可能是昂贵的,因为系统在对多态存储器单元编程之前需要保持存储器单元的块以最初存储数据。另外,该处理导致性能损失并且需要大量的编程/擦除周期。
附图说明
图1是NAND串的俯视图;
图2是NAND串的等效电路图;
图3是非易失性存储器系统的框图;
图4是示出了存储器阵列的一种实施方式的框图;
图5是示出了感测块的一种实施方式的框图;
图6示出了示例性的一组阈值电压分布并且示出了示例编程处理;
图7示出了示例性的一组阈值电压分布并且示出了示例编程处理;
图8A至图8C示出了阈值电压分布的示例和示例编程处理;
图9是示出了阈值电压分布与存储在存储器单元中的数据之间的关系的示例的表格;
图10是描述用于操作非易失性存储装置的处理的一种实施方式的流程图;
图11是描述用于对非易失性存储装置进行编程的处理的一种实施方式的流程图;
图12是描述用于执行非易失性存储装置的编程操作的处理的一种实施方式的流程图;
图13是示出了包括存储器管芯和控制器电路的系统的一种实施方式的框图;
图14是示出了包括存储器管芯、包括多个存储器管芯和控制器电路的系统的一种实施方式的框图;
图15是示出了存储器管芯上的数据页彼此之间以及其各自的字线的示意性布置的图;
图16是示出了当对页进行编程时保存位于该页附近的数据的方法的一种实施方式的流程图;
图17是示出了当对页进行编程时保存位于该页附近的数据的方法的一种实施方式的流程图;
图18示出了跟踪数据的哪些页在寄存器中被组合的表格;
图19是示出了以下方法的一种实施方式的流程图:该方法通过将附近数据与来自其他存储器管芯的数据进行组合来保存当对一个存储器管芯上的页进行编程时位于该页附近的数据;
图20是示出了在其中存储器单元被视为不适当地被编程的阈值电压区域的曲线图;
图21是示出了以下方法的一种实施方式的流程图:该方法确定一组存储器单元中的太多存储器单元是否已经不适当地被编程;
图22是示出了当对页进行编程时保存位于该页附近的数据的方法的一种实施方式的流程图;
图23是示出了保存要被编程的页附近的数据的方法的一种实施方式的流程图;
图24是示出了以下方法的一种实施方式的流程图:当在编程操作的有序序列期间对下页进行编程时,该方法保存位于该下页附近的数据;
图25是示出了以下方法的一种实施方式的流程图:当在有序的编程操作的有序序列期间对上页进行编程时,该方法保存位于该上页附近的数据;
图26是示出了以下方法的一种实施方式的流程图:当在编程操作的随机序列期间对下页进行编程时,该方法保存位于该下页附近的数据;以及
图27是示出了以下方法的一种实施方式的流程图:当在编程操作的随机序列期间对上页进行编程时,该方法保存位于该上页附近的数据。
具体实施方式
在本文中描述以下系统和方法:出于验证的目的,通过所述系统和方法,可以将数据内部地或外部地保存至存储器电路,使得如果所述数据的编程操作在存储器电路的某个区域上失败,则通过一个或更多个副本保存的数据可以在存储器电路上的其他地方被编程。在一些实施方式中,存储器电路的失败区域,其可以是页、块、一个或更多个字线或者某个其他大小的区域,可以被标记以防止将来的编程尝试。如果编程操作成功,则保存的数据的全部或一部分可以从冗余存储中释放。
例如,在检测到字线之间的可能的短路(或其他缺陷)的情况下,本技术的一些实施方式可以保存与正在被编程的页物理上靠近的页上的数据。该数据可以被保存在外部数据锁存器、控制器RAM、NAND存储器上的其他位置或其他地方上。无论存储器中的页顺序地被编程还是随机被编程,都可以使用本技术的实施方式。
在存储器电路包括多个存储器管芯的实施方式中,用于保存数据页的方法可以包括使用一个或更多个异或(XOR)运算(或其他逻辑/数学运算)以为了更高效的存储而对数据进行组合或压缩。具体地,当一个或更多个这些区域的全部或一部分正在被编程时,可以通过存储器管芯上或存储器管芯外的一个或更多个XOR运算(或其他逻辑/数学运算)将每个管芯的相对应的区域组合到一起。在编程操作完成之后,为了验证编程操作成功,系统可以读取被编程的数据页和/或新被编程的页周围的数据。如果这些读取操作中的任何读取操作失败,则系统可以通过当前未被编程的区域对存储的数据执行一次或更多次XOR运算(或其他逻辑/数学运算),从而恢复待编程的原始数据的安全副本。然后,系统可以定位存储器的如下空闲区域:在该空闲区域上对保存的副本进行编程。在实施方式中,在成功的编程操作或成功的数据恢复之后,可以擦除所保存的副本。
现在将参照附于本文的附图来描述实施方式。
可以用于实现本文中描述的技术的非易失性存储系统的一个示例是使用 NAND结构的闪速存储器系统,该NAND结构包括夹在两个选择栅极之间串联布置多个晶体管。串联晶体管和选择栅极被称为NAND串。图1是示出了一个NAND串的俯视图。图2是其等效电路。图1和图2中示出的NAND 串包括夹在第一(漏极侧)选择栅极120与第二(源极侧)选择栅极122之间的4个串联的晶体管100、102、104和106。选择栅极120将NAND串经由位线接触部(bitline contact)126连接至位线。选择栅极122将NAND串连接至源极线128。通过向选择线SGD施加适当的电压来控制选择栅极120。通过向选择线SGS施加适当的电压来控制选择栅极122。晶体管100、102、 104和106中的每一个具有控制栅极和浮置栅极。例如,晶体管100具有控制栅极100CG和浮置栅极100FG。晶体管102包括控制栅极102CG和浮置栅极102FG。晶体管104包括控制栅极104CG和浮置栅极104FG。晶体管106 包括控制栅极106CG和浮置栅极106FG。控制栅极100CG连接至字线WL3,控制栅极102CG连接至字线WL2,控制栅极104CG连接至字线WL1,以及控制栅极106CG连接至字线WL0。
注意,虽然图1和图2示出了NAND串中的4个存储器单元,但是使用 4个存储器单元仅被提供为示例。NAND串可以具有少于4个存储器单元或多于4个存储器单元。例如,一些NAND串将包括8个存储器单元、16个存储器单元、32个存储器单元、64个存储器单元、128个存储器单元等。本文中的讨论不限于NAND串中的存储器单元的任意特定数量。一种实施方式使用具有66个存储器单元的NAND串,其中,64个存储器单元用于存储数据,而2个存储器单元由于其不存储数据而被称为伪存储器单元。
使用NAND结构的闪速存储器系统的典型架构包括若干NAND串。每个NAND串通过其由选择线SGS控制的源极选择栅极被连接至公共源极线并且通过其由选择线SGD控制的漏极选择栅极被连接至其相关联的位线。每条位线和经由位线接触部连接至该位线的相应的NAND串包括存储器单元阵列的列。位线由多个NAND串共享。通常,位线沿垂直于字线的方向在NAND 串之上延伸并且被连接至灵敏放大器。
在下面的美国专利/专利申请中提供了NAND型闪速存储器及其操作的相关示例:美国专利No.5,570,315;美国专利No.5,774,397;美国专利 No.6,046,935;美国专利No.6,456,528;以及美国专利公开No. US2003/0002348,这些专利/专利申请全部通过引用被合并到本文中。
除了NAND闪速存储器以外,还可以使用其他类型的非易失性存储装置。例如,非易失性存储器装置还通过使用介电层用于存储电荷的存储器单元来制造。使用介电层代替先前描述的导电浮置栅极元件。以下文献中已经描述了利用电介质存储元件的这样的存储器装置:Eitan等人,“NROM:A Novel Localized Trapping,2-Bit Nonvolatile MemoryCell”,IEEE电子器件快报,第 21卷,第11期,第543页至545页,2000年11月。ONO介电层跨源极扩散和漏极扩散之间的沟道而延伸。一个数据位的电荷被定位在靠近漏极的介电层中,而其他数据位的电荷被定位在靠近源极的介电层中。美国专利No. 5,768,192和美国专利No.6,011,725公开了具有夹在两个二氧化硅层之间的俘获电介质的非易失性存储器单元。多态数据存储通过分别读取电介质内的空间上分开的电荷存储区的二进制状态来实现。也可以使用基于MONOS或 TANOS类型的结构或纳米晶体的非易失性存储装置。也可以使用其他类型的非易失性存储装置。
图3示出了具有用于对存储器单元(例如,NAND多态闪速存储器)的页(或其他单位)并行地进行读取和编程的读/写电路的存储器装置210。存储装置210可以包括一个或更多个存储器管芯212。存储器管芯(或集成电路)212包括存储器单元200、控制电路220以及读/写电路230A和230B的阵列(二维或三维)。在一种实施方式中,在阵列的相对侧上以对称方式来实现各种外围电路对存储器阵列200的访问,使得每一侧上的访问线和电路的密度减少一半。读/写电路230A和230B包括多个感测块300,感测块300使得能够对存储器单元的页并行地进行读取或编程。存储器阵列200能够经由行解码器240A和行解码器240B通过字线以及经由列解码器242A和列解码器242B通过位线寻址。字线和位线是控制线的示例。在典型的实施方式中,控制器244包括在与一个或更多个存储器管芯212相同的存储器装置210(例如,可移除存储卡或封装)中。命令和数据经由线232在主机与控制器244 之间传输以及经由线234在控制器与一个或更多个存储器管芯212之间传输。
控制电路220与读/写电路230A和230B协作以对存储器阵列200执行存储器操作。控制电路220包括状态机222、片上地址解码器224和电力控制模块226。状态机222提供存储器操作的管芯级控制。片上地址解码器224 提供由主机或存储器控制器使用的地址与由解码器240A、240B、242A和242B 使用的硬件地址之间的地址接口。电力控制模块226对在存储器操作期间提供给字线和位线的电力和电压进行控制。在一种实施方式中,电力控制模块226包括可以产生比供电电压大的电压的一个或更多个电荷泵。控制电路220 向行解码器240A和行解码器240B以及列解码器242A和列解码器242B提供地址线ADDR。列解码器242A和列解码器242B经由被标记为数据I/O的信号线向控制器244提供数据。温度传感器228可以是本邻域已知的模拟或数字温度传感器。
在一种实施方式中,控制器244在与存储器管芯212不同的管芯(或集成电路)上来实现。在一些实施方式中,控制器244与主机并且与控制电路 220以及解码器接驳。在一些实施方式中,控制器244与读/写电路接驳。
在一些实施方式中,控制电路220、电力控制电路226、解码器电路224、状态机电路222、解码器电路242A、解码器电路242B、解码器电路240A、解码器电路240B、读/写电路230A、读/写电路230B、和/或控制器244中的一个或其任意组合可以被称为一个或更多个管理电路。一个或更多个管理电路执行本文中描述的处理。
图4示出了存储器单元阵列200的示例性结构。在一种实施方式中,存储器单元阵列被分成大量的存储器单元块(例如,块0至块1023,或者另一数量的块)。对于闪速存储器系统而言常见的是:块是擦除的单位。即,每个块包括一起被擦除的最小数量的存储器单元。也可以使用其他擦除的单位。
块包括经由位线(例如,位线BL0至位线BL69,623)和字线(WL0、 WL1、WL2、WL3)被访问的一组NAND串。图4示出了串联连接以形成 NAND串的4个存储器单元。虽然示出了4个单元要被包括在每个NAND串中,但是也可以使用多于4个或少于4个存储器单元(例如,16、32、64、 128或另一数量的存储器单元可以在NAND串上)。NAND串的一个端子经由漏极选择栅极(连接至选择栅极漏极线SGD)连接至相应的位线,而另一端子经由源极选择栅极(连接至选择栅极源极线SGS)连接至源极线。
通常,每个块被分成很多页。在一种实施方式中,页是编程的单位。也可以使用其他编程的单位。通常,一个或更多个数据页被存储在一行存储器单元中。例如,一个或更多个数据页可以被存储在连接至公共字线的存储器单元中。页可以存储一个或更多个扇区。扇区包括用户数据和开销数据(也称为系统数据)。用户数据的扇区通常是512字节,512字节对应于磁盘驱动器中扇区的大小。很多页形成块,例如,从8页至高达32页、64页、128页或更多页不等。还可以使用不同大小的块、页和扇区。另外,块可以具有多于或少于69,624个位线。
图5是单独的感测块300的框图,该感测块300被划分成:被称为感测模块480的核心部分和公共部分490。在一种实施方式中,针对每个位线存在分离的感测模块480,以及针对一组多个感测模块480存在一个公共部分 490。在一种实施方式中,感测块将包括1个公共部分490和8个感测模块 480。一个组中的每个感测模块将经由数据总线472与相关联的公共部分进行通信。可以在美国专利申请公开2006/0140007中找到一个示例,其全部内容通过引用被合并到本文中。
感测模块480包括感测电路系统470,该感测电路系统470确定连接的字线中的导电电流在预定电平以上还是以下。在一些实施方式中,感测模块 480包括通常被称为灵敏放大器的电路。感测模块480还包括位线锁存器482,该位线锁存器482用于对连接的位线设置电压条件。例如,位线锁存器482 中锁存的预定状态将导致连接的位线被拉到指定编程禁止的状态(例如, Vdd),以便锁定存储器单元而不进行编程。
公共部分490包括处理器492、一组数据锁存器494和耦接在该组数据锁存器494与数据总线420之间的I/O接口496。处理器492执行计算。例如,处理器492的功能之一是确定存储在感测的存储器单元中的数据并且将所确定的数据存储在该组数据锁存器中。该组数据锁存器494用于在读操作期间存储由处理器492确定的数据位。该组数据锁存器494还用于在编程操作期间存储从数据总线420导入的数据位。所导入的数据位表示打算被编程至存储器中的写数据。I/O接口496提供数据锁存器494和数据总线420之间的接口。
在读或感测期间,系统的操作受状态机222的控制,该状态机222控制 (使用电力控制226)不同的控制栅极电压对寻址的存储器单元的供给。虽然状态机222通过与存储器支持的各种存储状态相对应的各种预定义的控制栅极电压进行单步调试,但是感测模块480会在这些电压中的一个电压跳变 (trip),并且经由总线472将输出从感测模块480提供给处理器492。此时,处理器492通过考虑感测模块的跳变事件以及关于经由输入线493从状态机施加的控制栅极电压的信息来确定所得到的存储器状态。然后,处理器492 计算存储器状态的二进制编码并且将所得到的数据位存储在数据锁存器494 中。在核心部分的另一种实施方式中,位线锁存器482承担双重任务,不但用作用于锁存感测模块480的输出的锁存器而且还用作如上所述的位线锁存器。
预期一些实现方案将包括多个处理器492。在一种实施方式中,每个处理器492将包括输出线(图5中未示出),使得每个输出线被“或”布线在一起。在一些实施方式中,输出线在连接至线或(wired-OR)线之前被反转。该配置使得能够在编程处理已经完成时的编程验证处理期间进行快速确定,因为接收线或线的状态机可以确定正在被编程的所有位何时已经达到期望的电平。例如,当每个位已经到达其期望的电平时,关于该位的逻辑0将被发送至线或线或数据1被反转)。当所有比特输出数据0(或数据1被反转)时,则状态机知道终止编程处理。在每个处理器与8个感测模块进行通信的实施方式中,状态机(在一些实施方式中)需要读取线或线8次,或者逻辑被添加至处理器492以累加相关联的位线的结果,使得状态机仅需读取线或线1 次。
数据锁存器堆栈494包括与感测模块对应的一堆数据锁存器。在一种实施方式中,每个感测模块480具有3个(或4个或另一数量的)数据锁存器。在一种实施方式中,锁存器每个1位。
在编程或验证期间,待编程的数据从数据总线420被存储在一组数据锁存器494中。在验证处理期间,处理器492监视与期望的存储器状态相关的所验证的存储器状态。当这两个状态一致时,处理器492设置位线锁存器482,以使得位线被拉到指定编程禁止的状态。即使其受制于其控制栅极上的编程脉冲,上述操作仍然禁止耦接至位线的存储器单元进一步进行编程。在其他实施方式中,处理器最初加载位线锁存器482,并且感测电路系统在验证处理期间将位线锁存器482设置成禁止值。
在一些实现方案中(但不是必需的),数据锁存器被实现为移位寄存器,使得存储在数据锁存器中的并行数据被转换成数据总线420的串行数据,反之亦然。在一种优选实施方式中,可以将与存储器单元的读/写块相对应的所有数据锁存器链接在一起以形成块移位寄存器,使得数据块可以通过串行传送来输入或输出。具体地,读/写模块库适于使得所述读/写模块的数据锁存器组中的每个数据锁存器顺序地将数据移位至数据总线中或移位出数据总线外,好像它们是整个读/写块的移位寄存器的一部分。
在以下中可以找到关于感测操作和灵敏放大器的另外的信息:(1)2004 年3月25日公开的题为“Non-Volatile Memory And Method With Reduced Source Line BiasErrors”的美国专利申请公开No.2004/0057287;(2)在2004 年6月10日公开的题为“Non-Volatile Memory And Method With Improved Sensing”的美国专利申请公开No.2004/0109357;(3)美国专利申请公开No. 20050169082;(4)于2005年4月5日提交的发明人是Jian Chen的题为“Compensating for Coupling During Read Operations of Non-Volatile Memory”的美国专利公开2006/0221692;以及(5)于2005年12月28日提交的发明人为Siu Lung Chan和Raul-Adrian Cernea的题为“Reference Sense Amplifier ForNon-Volatile Memory”的美国专利申请公开No.2006/0158947。以上列出的所有5个专利文献的全部内容通过引用被合并到本文中。
在成功的编程处理(具有验证)结束时,存储器单元的阈值电压应当适当地在经编程的存储器单元的阈值电压的一个或更多个分布内或者在经擦除的存储器单元的阈值电压的分布内。图6示出了当每个存储器单元存储2位数据时存储器单元阵列的示例阈值电压分布(与数据状态对应)。然而,其他实施方式可以使用每个存储器单元多于或少于2位数据(例如,如每个存储器单元3位或4位或更多位数据)。本文中描述的技术不限于每个存储器单元具有任何特定数量的位。
图6示出了经擦除的存储器单元的第一阈值电压分布E。还示出了经编程的存储器单元的3个阈值电压分布A、B和C。在一种实施方式中,E分布中的阈值电压为负,而A、B和C分布中的阈值电压为正。图6的每个不同的阈值电压分布与该组数据位的预定值相对应。被编程至存储器单元中的数据与存储器单元的阈值电压电平之间的特定关系取决于针对存储器单元所采用的数据编码方案。例如,美国专利No.6,222,762和美国专利申请公开No.2004/0255090描述了针对多态闪速存储器单元的各种数据编码方案,这两个专利文献的全部内容通过引用被合并到本文中。在一种实施方式中,使用格雷(Gray)码分配将数据值分配给阈值电压范围,使得如果浮置栅极的阈值电压错误地转换至其邻近的物理状态,则将仅影响1位。一个示例将“11”分配给阈值电压范围E(状态E),将“10”分配给阈值电压范围A(状态A),将“00”分配给阈值电压范围B(状态B),并且将“01”分配给阈值电压范围C(状态C)。然而,在其他实施方式中,不使用格雷码。虽然图6示出了 4种状态,但是本发明还可以应用于其他多态结构,包括包含多于或少于4 种状态的多态结构。
图6还示出了用于从存储器单元读取数据的3种读取参考电压Vra、Vrb 和Vrc(也称为读取比较电平/值)。通过测试给定存储器单元的阈值电压高于还是低于Vra、Vrb和Vrc,系统可以确定存储器单元处于什么状态。例如,如果存储器单元具有小于Vra的阈值电压,则假定处于状态E。如果存储器单元具有小于Vrb或大于Vra的阈值电压,则假定处于状态A。如果存储器单元具有小于Vrc并且大于Vrb的阈值电压,则假定处于状态B。如果存储器单元具有大于Vrc的阈值电压,则假定处于状态C。
图6还示出了3个验证参考电压Vva、Vvb和Vvc(也称为验证比较值/ 电平)。当对处于状态A的存储器单元进行编程时,系统将测试这些存储器单元的阈值电压是否大于或等于Vva。当对处于状态B的存储器单元进行编程时,系统将测试存储器单元的阈值电压是否大于或等于Vvb。当对处于状态C的存储器单元进行编程时,系统将确定存储器单元的阈值电压是否大于或等于Vvc。
在一种被称为全序列编程的实施方式中,可以将存储器单元从擦除状态 E直接编程至编程状态A、B或C中的任意一种状态。例如,可以首先擦除待编程的全体存储器单元,使得全体中的所有存储器单元处于擦除状态E。然后,使用编程处理将存储器单元直接编程成状态A、B或C。当一些存储器单元正从状态E被编程成状态A时,其他存储器单元正从状态E被编程成状态B和/或正从状态E被编程成状态C。
图7示出了对存储两个不同的页,即下页和上页的数据的多态存储器单元进行编程的两级技术的一个示例。示出了4种状态:状态E(11)、状态A (10)、状态B(00)状态C(01)。对于状态E,两个页都存储“1”。对于状态A,下页存储“0”,而上页存储“1”。对于状态B,两个页都存储“0”。对于状态C,下页存储“1”,而上页存储“0”。注意,虽然已经给每个状态分配了特定的位模式,但是也可以分配不同的位模式。在第一编程阶段中,根据待编程至下逻辑页的位设置存储器单元的阈值电压电平。如果该位是逻辑“1”,则阈值电压不变,原因是:由于已经早早被擦除,所以相应的存储器单元处于适当的状态。然而,如箭头504所示,如果待编程的位是逻辑“0”,则增大单元的阈值电平以成为状态A。这使第一编程阶段结束。
在第二编程阶段中,根据正在被编程至上逻辑页的位设置存储器单元的阈值电压电平。如果上逻辑页的位要存储逻辑“1”,则由于存储器单元处于状态E或状态A中的一种状态中,所以不会发生编程,取决于对下页的位的编程,状态E和状态A两个都携带上页位“1”。如果上页位要成为逻辑“0”,则转换阈值电压。如箭头502所示出的,如果第一阶段导致存储器单元仍然处于擦除状态E,则在第二阶段中存储器单元被编程,使得阈值电压增大以处于状态C内。如箭头506所示出的,作为第一编程阶段的结果,如果存储器单元已经被编程成状态A,则在第二阶段中对存储器单元进一步编程,使得阈值电压增大以处于状态B内。第二阶段的结果是将存储器单元编程成所指定的存储上页的逻辑“0”而未改变下页的数据的状态。
在一种实施方式中,如果足够的数据被写入以填满整个页,则系统可以被设置成执行全序列写入。如果没有足够的数据写满整页,则编程处理可以对使用接收的数据进行编程的下页进行编程。当接收到随后的数据时,系统将对上页进行编程。而在另一实施方式中,系统可以以如下模式开始写入:该模式对下页进行编程,并且如果随后接收到足够的数据以填满全部(或大多数)字线的存储器单元,则转换成全序列编程模式。在美国专利申请2006/0126390中公开了这样的实施方式的更多细节,其全部内容通过引用被合并到本文中。
图8A至图8C描述了用于对非易失性存储器进行编程的另一多态编程处理。对于任何特定的存储器单元,图8A至图8C的处理通过在写到先前页的邻近存储器单元之后写到相对于特定页的该特定存储器单元,来将浮置栅极减小成浮置栅极耦合。在由图8A至图8C教示的处理的实现方案的一个示例中,非易失性存储器单元使用4种数据状态每存储器单元存储两位数据。例如,假定状态E是经擦除的状态,并且状态A、B和C是经编程的状态。图 9示出了状态与所存储的数据之间的关系的一个示例。状态E存储数据11。状态A存储数据01。状态B存储数据00。状态C存储数据10。这是格雷编码的示例。也可以使用其他将数据编码成物理数据状态的编码模式。每个存储器单元存储两个数据页。出于引用的目的,将这些数据页称为上页和下页;然而,可以给它们其他标记。参照图8A至图8C的处理的状态A,上页存储数据0,而下页存储数据1。参照状态B,两个页都存储数据0。参照状态C,下页存储数据0,而上页存储数据1。
图8A至图8C的编程处理是两级编程处理;然而,图8A至图8C的处理可以用来实现三级处理、四级处理等。在第一级中,下页被编程。如果下页仍然保持数据1,则存储器单元状态保持处于状态E。如果下页数据要被编程成0,则存储器单元的电压的阈值升高,使得存储器单元被编程成状态B’。图8A示出了将存储器单元从状态E编程至状态B’。图8A中示出的状态B’是B的过渡状态;因此,验证点被示出为Vvb′,Vvb’低于Vvb。
在一种实施方式中,在存储器单元从状态E被编程成状态B’之后,NAND 串中的其相邻的存储器单元(在字线WLn+1上)将相对于其下页被编程。在对相邻的存储器单元编程之后,浮置栅极至浮置栅极耦合效应可以使较早被编程的存储器单元的明显阈值电压升高。这将对以下产生影响:将状态B’的阈值电压分布扩展成如图8B的阈值电压分布520所示出的阈值电压分布。当对上页编程时,将对阈值电压分布的明显扩展进行矫正。
图8C示出了对上页进行编程的处理。如果存储器单元处于经擦除的状态 E,并且上页保持1,则存储器单元将保持处于状态E。如果存储器单元处于状态E并且其上页数据要被编程为0,则存储器单元的阈值电压将升高,使得存储器单元处于状态A。如果存储器单元处于中间的阈值电压分布520并且上页数据仍然为1,则存储器单元将被编程为最终状态C。如果存储器单元处于中间阈值电压分布520并且上页数据要变为数据0,则存储器单元将成为状态B。由图8A至图8C示出的处理降低了浮置栅极与浮置栅极耦合的效应,因为仅对邻近存储器单元的上页编程将对给定的存储器单元的明显阈值电压产生影响。
虽然图8A至图8C提供了关于4种数据状态和两个数据页的示例,但是由图8A至图8C教示的概念可以应用于具有多于或少于4种状态并且不同于两页的其他实现方案。可以在美国专利No.7,196,928中找到关于图8A至图 8C的编程处理的更多细节,其通过引用被合并到本文中。
图10是描述用于对非易失性存储器如图3的系统(或其他系统)进行操作的处理的一种实施方式的流程图。在步骤600中,接收对数据进行编程的请求。该请求可能来自主机、另一装置或控制器。该请求可以在控制器、控制电路、状态机或其他装置处被接收。在步骤602中,响应于该请求,控制器、控制电路、状态机或其他部件将确定闪速存储器单元中的哪个块将用于存储数据。在步骤604中,使用上述编程处理(或其他编程处理)中的任何编程处理将数据编程至所确定的块中。在步骤606中,一次或多次读取经编程的数据。由于在步骤之间会经过不可预测的时间量,所以在步骤604与步骤606之间存在虚线,并且步骤606不响应于步骤604而执行。更确切地,步骤606响应于读数据的请求或其他事件而执行。
图11是描述用于对块中的存储器单元进行编程的编程处理的流程图。图 11的处理是图10的步骤604的一种实施方式。在步骤632中,在编程之前 (以块或其他单位)擦除存储器单元。在一种实施方式中,通过将p阱升高至擦除电压(例如,20伏特)足够的时间段并且将所选择的块的字线接地同时将源极线和位线浮置来擦除存储器单元。因此,强电场被施加至所选择的存储器单元的隧道氧化层,并且当通常通过福勒-诺德海姆隧道机制(Fowler-Nordheim tunneling mechanism)将浮置栅极的电子发射至衬底侧时,所选择的存储器单元被擦除。由于电子从浮置栅极转移至p阱区,所以所选择的存储器单元的阈值电压降低。可以对整个存储器阵列、单个块或单元的其他单位执行擦除。还可以使用用于擦除的其他技术。
在步骤634中,执行软编程以使已擦除的存储器单元的阈值电压分布变窄。由于擦除处理,一些存储器单元可以处于比需要的状态更深的擦除状态。软编程可以施加编程脉冲以将较深擦除的存储器单元的阈值电压移动至仍然处于擦除状态的有效范围内的较高的阈值电压。在步骤363中,如本文所述对块的存储器单元进行编程。可以使用上述各种电路在状态机、控制器或状态机和控制器的组合的指导下执行图11的处理。例如,控制器可以向状态机发出命令和数据以对该数据进行编程。作为响应,状态机可以操作如上所述的电路以执行编程操作。
图12是描述用于对连接至公共字线的一个或更多个存储器单元执行编程的处理的一种实施方式的流程图。因此,当对存储器单元的块进行编程时,针对块的每个字线执行图12的处理一次或更多次。在图11的步骤636期间,可以执行图12的处理一次或多次。例如,可以使用图12的处理将存储器单元从状态E直接编程至状态A、B或C中的任何状态(例如,全序列编程)。可替代地,可以使用图12的处理来执行图7、图8A至图8C或其他编程方案的处理的一个阶段或每个阶段。例如,当执行图8A至图8C的处理时,图12 的处理用于实现第一阶段,该第一阶段包括将一些存储器单元从状态E编程至状态B’。然后,图12的处理可以再次用于实现第二阶段,该第二阶段包括将一些存储器单元从状态E编程至状态A并且将一些存储器单元从状态 B’编程至状态B和状态C。
通常,将在编程操作期间施加于控制栅极的编程电压施加为一系列编程脉冲。编程脉冲之间是一组执行验证的一个或更多个验证脉冲。在很多实现方案中,编程脉冲的幅度随着每个连续的脉冲而增加预定步长大小。在图12 的步骤770中,将编程电压(Vpgm)初始化为起始幅度(例如,约12V至 16V或另一适当的电平),并且将由状态机222保持的编程计数器PC初始化为1。
在步骤772中,将编程信号Vpgm的编程脉冲施加于所选择的字线(针对编程而选择的字线)。在一种实施方式中,正在被编程的存储器单元都被连接至同一字线(所选择的字线)。未被选择的字线接收一个或更多个升高的电压(例如,约9伏特)来执行本领域已知的升压方案以避免编程干扰。存在能够与本文所描述的技术一起使用的很多不同的升压方案。在一种实施方式中,如果应当对存储器单元进行编程,则将相对应的位线接地。另一方面,如果存储器单元应当保持处于其当前的阈值电压,则相对应的位线被连接至 Vdd以禁止编程。在步骤772中,将编程脉冲同时施加于连接至所选择的字线的所有存储器单元,使得连接至所选择的字线的应当被编程的所有存储器单元同时被编程。即,同时(或在交叠时间期间)对这些存储器单元进行编程。以这种方式,连接至所选择的字线的所有存储器单元将同时改变其阈值电压,除非这些存储器单元已经被锁定而不进行编程。
在步骤774中,使用适当的一组目标电平执行一个或更多个验证操作来验证适当的存储器单元。如果存储器单元被验证已经达到其目标,则该存储器单元被锁定而不进行进一步编程。用于锁定存储器单元而不进行进一步编程的一种实施方式是将相对应的位线电压升高到例如Vdd。
在步骤776中,确定所有存储器单元是否已经达到其目标阈值电压。如果所有存储器单元已经达到其目标阈值电压,则编程处理完成并且成功,这是因为所有选择的存储器单元被编程并且被验证至其目标状态。在步骤778 中报告“通过”状态。如果在步骤776中确定不是所有存储器单元都已经达到其目标阈值电压,则编程处理继续进行至步骤780。
在步骤780中,系统对尚未达到其相应的目标阈值电压分布的存储器单元的数量进行计数。即,系统对验证处理已经失败的存储器单元的数量进行计数。该计数可以通过状态机、控制器或其他逻辑来进行。在一个实现方案中,每个感测块300(参见图3)将存储其相应的存储器单元的状态(通过/ 失败)。可以使用数字计数器对这些值进行计数。如上所述,感测块中的很多感测块具有被或接线(wire-OR’d)在一起的输出信号。因此,检查一条线就可以指示一大组单元中没有单元验证失败。通过适当地组织被或接线在一起的线(例如,类似二叉树的结构),可以使用二分检索法来确定失败单元的数量。以这样的方式,如果小数量的单元失败,则计数很快完成。如果大量单元失败,则计数时间较长。在美国专利公开2008/0126676中可以找到更多信息,其全部内容通过引用被合并到本文中。在另一替选方案中,如果每个灵敏放大器相对应的存储器单元已经失败,则每个灵敏放大器可以输出模拟电压或电流,并且模拟电压或电流求和电路可以用于对已经失败的存储器单元的数量进行计数。在一种实施方式中,存在一个计数的总数,这个总数反映当前正在被编程的在最后的验证步骤已经失败的存储器单元的总数。在另一实施方式中,针对每个数据状态进行单独的计数。
在步骤782中,确定来自步骤780的计数是否小于或等于预定极限。在一种实施方式中,预定极限是在存储器单元的页的读处理期间能够由ECC校正的位的数量。如果失败单元的数量小于或等于预定极限,则编程处理可以停止并且在步骤778中报告“通过”状态。在这种情况下,足够的存储器单元正确地被编程,使得尚未完全被编程的少量剩余的存储器单元可以在读处理期间使用ECC来校正。在一些实施方式中,步骤780对每个扇区、每个目标数据状态或其他单位的失败单元的数量进行计数,并且在步骤782中将这些计数单个地或者整体地与阈值进行比较。在另一实施方式中,预定极限可以小于在读处理期间可以由ECC校正的位的数量,以为以后的错误考虑。当针对页对并非所有存储器单元进行编程或者比较仅一种数据状态(或并非所有状态)的计数时,则预定极限可以是在存储器单元的页的读处理期间可以由ECC校正的位的数量的一部分(按比例或不按比例)。在一些实施方式中,未预先确定该极限。替代地,该极限基于已经针对页已经计数的错误的数量、被执行的编程擦除循环的数量、温度或其他标准而变化。
如果失败单元的数量不小于预定极限,则编程处理继续进行至步骤784,并且对照编程极限值(PL)来检查编程计数器PC。编程极限值的一个示例是20;然而,也可以使用其他值。如果编程计数器PC不小于编程极限值PL,则认为编程处理失败,并且在步骤788中报告失败的状态。如果编程计数器 PC小于编程极限值PL,则处理继续进行至步骤786,在步骤786期间,编程计数器PC增加1并且编程电压Vpgm步进到下一个幅度。例如,下一个脉冲的幅度比先前脉冲的幅度大了步长大小(例如,0.1至0.4伏特的步长大小)。在步骤786之后,处理循环返回至步骤772并且将另一编程脉冲施加至所选择的字线。
在验证操作(例如,步骤774)和读操作期间,所选择的字线被连接至以下电压,针对每个读操作(例如,Vra、Vrb和Vrc)或验证操作(例如, Vva、Vvb和Vvc)来指定该电压的电平,以确定所关注的存储器单元的阈值电压是否已经达到这样的电平。在给字线施加电压之后,测量存储器单元的导电电流以确定存储器单元是否响应于施加至字线的电压而接通。如果测量到导电电流大于某个值,则假设存储器单元接通并且施加至字线的电压大于存储器单元的阈值电压。如果测量到导电电流不大于某个值,则认为存储器单元未接通并且施加至字线的电压不大于存储器单元的阈值电压。
存在在读操作或验证操作期间测量存储器单元的导电电流的很多方法。在一个示例中,存储器单元的导电电流由其对灵敏放大器中的专用电容器进行放电或充电的速率来测量。在另一示例中,所选择的存储器单元的导电电流允许(或不允许)包括该存储器单元的NAND串使相对应的位线放电。在查看位线已经被放电还是未被放电的时间段之后,测量位线上的电压。注意,本文中描述的技术可以与本领域已知的用于验证/读取的不同方法一起来使用。在下面的专利文献中可以找到关于验证/读取的更多信息:(1)美国专利申请公开No.2004/0057287;(2)美国专利申请公开No.2004/0109357;(3) 美国专利申请公开No.2005/0169082;以及(4)美国专利申请公开No. 2006/0221692,这些专利文献的全部内容通过引用被合并到本文中。根据本领域已知的技术来执行上述擦除操作、读操作和验证操作。因此,本领域的技术人员可以改变很多所说明的细节。也可以使用本领域已知的其他擦除技术、读技术和验证技术。
图13是示出了能够使本文中公开的方法技术化的一个示例物理电路的框图。所示出的电路包括与一个或更多个控制电路1304(虽然图13仅示出了一个控制电路,但是其他实施方式可以采用更多的控制电路)进行通信的存储器管芯1302。如图2所示,存储器管芯1302可以包括存储器阵列200 (包括存储器管芯)及其连接的部件,然而还如图2所示,控制电路1304可以包括(至少部分地)控制器244。在一种实施方式中,存储器管芯1302上的非易失性存储元件是存储两位数据的NAND存储器单元,但是在其他实施方式中,存储器单元可以每存储器单元存储多于两位。
在一种实施方式中,控制电路1304可以包括存储器接口1306、处理器 1308、RAM1310和主机接口1312。存储器接口1306是通过其将来自处理器 1306的输出数据馈送至存储器管芯1302中的基本装置。可替代地,系统可以使用存储器接口将从存储器管芯传送的数据馈送至处理器。存储器接口还可以包括寻址电路,该寻址电路确定数据要被写在存储器管芯上哪个地方以及从存储器管芯上哪个地方读取数据。处理器1308对从主机接口1312、RAM 1310和存储器接口1306接收的数据执行逻辑运算和算术运算,以确定要将哪些数据存储在存储器管芯上,要将哪些数据本地存储在RAM上,以及要将哪些数据通过主机接口传送至主机。如所示,主机接口被连接至主机装置,并且主机接口是管理控制器处理器1308与主机装置之间的双向通信的系统。仅作为示例,如果所公开的方法和系统以数码相机(或其他主机)的存储卡的方式来实现,则主机接口可以使得图13的电路能够与在该相机(或其他主机)的运行中使用的其他电子器件进行双向通信。RAM 1310可以用作缓存数据的本地存储装置,使得在处理器将数据中继至主机接口之前将该数据移动至存储器1302或从存储器1302检索该数据。具体地,如图13所示,RAM 1310包括一组寄存器(R1、R2、R3、R4、…)或用作寄存器的存储器位置,使得这些寄存器可以存储离散的数据组并且将该数据传递给彼此。
图14示出了以下存储器系统:除了存储器系统(1402)包括每个都具有与存储器1302类似的(或不同的)容量和功能的多个管芯(管芯1、管芯2、管芯3、管芯4)以外,其他与图13中所示出的存储器系统类似。虽然图14 示出了4个管芯,但是可以使用多于或少于4个管芯。控制电路1404包括与存储器接口1406、RAM 1410和主机接口1412进行通信的处理器1408。在一种实施方式中,RAM 1410包括易失性存储器。在另一实施方式中,RAM 1410包括非易失性存储器。存储器接口1406可以配备有独立于其他管芯而与单个管芯进行通信的能力,并且在实施方式中可以修改控制器1404的其他部件(即,处理器1408、RAM 1410和主机接口1412),以处理并解决由多个管芯引起的增加的容量或功能。具体地,RAM 1410包括一组寄存器或用作寄存器的存储器位置,使得这些寄存器可以存储离散的数据组并且彼此传递该数据。图14示出了具有4个寄存器(上奇、上偶、下奇和下偶)的RAM 1410;然而,也可以使用多于4个寄存器或少于4个寄存器。
图15示出了存储器单元的一个示例块的一部分的存储器管芯上的数据页的子集的示例性布局。在该实施方式中,每个字线存储两页数据。图15示出了来自该块的4个字线(WL0 1520、WL1 1522、WL2 1524和WL3 1526)。连接至字线1520的存储器单元将数据存储在页P0和页P2中。连接至字线 1522的存储器单元将数据存储在页P1和页P4中。连接至字线1524的存储器单元将数据存储在页P3和页P6中。连接至字线1526的存储器单元将数据存储在页P5和页P8(图15中未示出)中。在一种实施方式中,编程的次序是P0、P1、P2、P3、P4、P5、P6、…。
为了说明一个示例,假定数据正被编程至页P6中。图15中带箭头的虚线示出了页P1、P3、P4和P5将附近数据存储在同一字线(1524)或最接近的字线(1522和1526)上。如果字线1524存在故障,则对页P6进行编程会影响存储在附近页P1、P3、P4和P5中的数据。例如,如果字线1524与字线1522之间短路,则对P6进行编程会影响P1或P4(并且会影响P3)。当对P6进行编程时,P6的数据被存储在锁存器(参见图5的数据锁存器494) 中,所以可以对失败的编程处理进行再次尝试。然而,如果对P6进行编程损坏了P1、P3、P4或P5中的数据,则上述数据会丢失。
图16是示出如下方法的一种实施方式的流程图:该方法用于在发生错误的情况下对将保存存储在正被编程的页附近的数据的数据页进行编程。图16 的处理作为图11的步骤636的一部分而被执行(一次或多次)。在一种实施方式中,图16的处理作为多页编程处理的一部分针对正在被编程的每个页执行一次。在步骤1570中,将正在被编程的目标页附近的数据的另外的副本存储在一个或更多个辅助位置中。辅助位置不同于存储数据的存储器单元并且不同于当前编程操作的目标。例如,辅助位置可以是图5中的数据锁存器494、 RAM1310(或1410)、存储器管芯外部的其他位置、存储器管芯上的一个或更多个位置、或其他存储器单元。在步骤1572中,对目标页的数据进行编程 (例如,使用图12的处理)。为了将数据编程至目标页中,首先将数据加载至相应位线的适当的数据锁存器494中,然后对来自相应的锁存器的数据进行编程。在步骤1574中,从存储目标页的存储器单元读回刚被编程的目标页中的数据。在步骤1576中,将在步骤1574中读回的数据与锁存器494中的原始数据进行比较。也可以在NAND芯片内执行读回,以判定在不保存原始数据的页的两种状态分布之间是否存在任何错误。在一些实施方式中,由于锁存器限制,仅保存下页数据;在其他实施方式中,在数据锁存器中既不保存下页也不保存上页。如果确定数据已经正确地被编程,则在步骤1578中释放存储在辅助位置中的附近数据的全部或一部分(意味着辅助位置现在可以丢弃或重写数据)。如果在步骤1576中确定数据尚未正确地被编程,则在步骤1580中系统将数据重新编程至存储器单元的不同块中。另外,将目标字线弃置(被标记以使得其不再被使用)。
如果目标页被损坏,则系统认为字线具有影响附近数据的故障;因此,在步骤1582中,将对存储在辅助位置中的附近数据进行恢复并且重新编程至存储器单元的不同块。在一些实施方式中,如果目标页被损坏,则系统假设附近数据也被损坏。在其他实施方式中,系统通过将存储器单元中的数据与辅助位置中的数据进行比较来进行测试,以确定附近数据是否被损坏,并且将仅对被损坏的数据进行重新编程。另外,将存储被损坏的附近数据的字线弃置(被标记以使得将其不再被使用)。
在步骤1576的一些实施方式中,如果没有错误,则数据正确地被编程。在步骤1576的其他实施方式中,如果错误的数量小于预定值,则数据正确地被编程,其中,预定值是可以由ECC校正的位的数量或者可以由ECC校正的位的数量的某个分数。如果ECC可以对该页进行校正,则可以确定该页正确地被编程。下面参照图20讨论判定该页是否正确被编程的另一方法。
在一些实施方式中,存储在一个或更多个辅助位置中的附近数据包括数据页,并且附近数据的每个页被分立地存储在控制电路RAM(1310/1410) 中。然而,在其自己的控制电路RAM(1310/1410)的各个槽中存储所有数据页会导致低效率地使用RAM空间。因此,以下操作可能更高效(即,节省存储空间):通过将数据的这些单位与来自其他源的数据进行组合并且将该组合的数据存储在同一位置中,来将数据的这些单位如页保存在RAM 1310/1410或存储器管芯中的位置上。在本文中描述的一些实施方式中,系统可以使用按位XOR运算(或其他数学运算或逻辑运算)将某些页一起存储在同一位置中。即,RAM 1310/1410(或存储器管芯)上的单个位置可以包括对页的集合进行XOR运算的结果。在一些实施方式中,当对数据进行复制以在外部存储正在被编程的块时,系统可以将下页(例如,P0、P1、P3和P5) 一起存储在一个寄存器中同时将上页(例如,P2、P4和P6)一起存储在一个寄存器中。可替代地,可以经由XOR运算将页组合到4个寄存器(参见图 14)中:上奇、上偶、下奇和下偶。奇字线上的上页(例如,P4)被组合至上奇寄存器中。偶字线上的上页(例如,P2和P6)被组合至上偶寄存器中。奇字线上的下页(例如,P1和P5)被组合至下奇寄存器中。偶字线上的下页(例如,P0和P3)被组合至下偶寄存器中。由于存储器中潜在的缺陷类型如字线到字线短路,并且在损坏的WL或WL至衬底短路的情况下,上页会损坏下页,所以使用4个XOR RAM缓冲器。还可以使用其他布置。例如,当对P6进行编程时,可以将P1和P5之间的XOR运算的结果存储在下奇寄存器中。
为了对给定页进行检索,保存根据一个或更多个XOR运算所组合的数据的寄存器的内容与该寄存器中存储的所有其他页进行XOR运算。例如,如果下奇寄存器正存储P1XORP5,则为了对P1进行检索系统将下奇寄存器与 P5进行XOR运算。
图17是示出图16的处理的示例实现方案的流程图,图16的处理涵盖以下一种实施方式:该实施方式为了更高效地使用存储空间而如上所述组合数据页。图17的处理作为图11的步骤636的一部分而被执行(一次或多次)。在一种实施方式中,图17的处理作为多页编程处理的一部分对正在被编程的每个页执行一次。
在步骤1602中,将正在被编程的目标页附近并且在与正在被编程的目标页相同的字线上的数据的另外的副本存储在存储器芯片(例如,存储器芯片 212)上的本地锁存器中。在其他实施方式中,通过使用如下讨论的XOR进行组合来存储正在被编程的目标页附近并且在与正在被编程的目标页相同的字线上的数据。在步骤1604至步骤1610中,通过使用按位XOR运算(或组合数据的其他函数)对数据页进行组合,将正在被编程的目标页附近的数据的另外的副本存储在一个或更多个辅助位置中。辅助位置不同于存储数据的存储器单元并且不同于当前编程操作的目标。在一种实施方式中,如上所述对正在被编程的目标页附近的数据进行组合。在步骤1604中,通过使用XOR 运算将附近数据与寄存器的内容进行组合,将存储在基字线上的上页中的正在被编程的目标页附近的数据存储在上奇寄存器中。在步骤1606中,通过使用XOR运算将附近数据与寄存器的内容进行组合,将存储在耦字线上的上页中的正在被编程的目标页附近的数据存储在上偶寄存器中。在步骤1608中,通过使用XOR运算将附近数据与寄存器的内容进行组合,将存储在奇字线上的下页中的正在被编程的目标页附近的数据存储在下奇寄存器中。在步骤 1610中,通过使用XOR运算将附近数据与寄存器的内容进行组合,将存储在偶字线上的下页中的正在被编程的目标页附近的数据存储在下偶寄存器中。
在步骤1612中,对目标页的数据进行编程(例如,使用图12的处理)。为了将数据编程至目标页中,首先将数据加载至相应的位线的适当的数据锁存器494中,然后对来自相应的锁存器的数据进行编程。在步骤1614中,从存储目标页的存储器单元读回目标页中的刚被编程的数据。在步骤1616中,将在步骤1614中读回的数据与锁存器494中的原始数据进行比较。如果确定数据已经正确地被编程,则在步骤1618中释放存储在辅助位置中的附近数据的全部或一部分(意味着辅助位置现在可以地丢弃或重写数据)。在一种实施方式中,寄存器的全部内容被刷新。在另一种实施方式中,通过从存储器单元读取待释放的页的数据并且执行按位XOR运算以从适当的寄存器移除数据来从寄存器移除待释放的页。
在使用XOR将数据保存在RAM上的实施方式中,XOR保存累积的数据。在一些实施方式中,系统不能释放在XOR累积中存储的数据。系统必须保持累积XOR数据,这就是为什么系统保存图18的表格以确保系统知道什么数据正被XOR到一起。在检查当前页正确地被编程之后,数据被验证以进行校正,所以系统可以假设稍后数据能够正确地被读回。由于表格大小有限,所以系统不能XOR数据很长时间。当表格被填满时,系统将必须除去表格以及XOR数据。根据数据的大小周期性地执行上述除去操作。可能不能防止刷新边界的失败。
如果在步骤1616中确定数据尚未正确地被编程,则在步骤1620中系统将数据重新编程至存储器单元的不同块中。另外,将目标字线弃置(被标记以使得其不再被使用)。在一种实施方式中,还将正在被编程的数据存储在控制器中,使得在步骤1620中可以将数据发送至新块以用于编程。
如果目标页被损坏,则系统将以通过将存储器单元中的数据与辅助位置中的数据进行比较进行测试来确定附近数据是否被损坏,并且将对被损坏的数据进行重新编程。另外,将存储被损坏的附近数据的字线弃置(被标记以使得其不再被使用)。在步骤1622中,从存储器单元读取来自附近页的存储器单元的数据。另外,还读取存储在寄存器中被组合的数据的存储器单元,使得在步骤1624中从寄存器恢复附近页的数据并且将从寄存器恢复的附近页的数据与在步骤1622中读取的数据进行比较(在步骤1626中)以确定附近数据是否被损坏。在步骤1628中,将存在差异的页假设为被损坏,并且对其进行重新编程。当检测到对数据进行编程失败时,一些实施方式将所有数据移动至新块。
如上所述,图14示出了具有多个管芯的系统。在一种实施方式中,系统将对每个管芯分别执行上述处理。在这样的实施方式中,对于每个管芯,RAM 1410可以具有分立的寄存器组。
在具有多个管芯的另一实施方式中,系统针对所有管芯将存储在辅助位置中的附近页组合至同一组(或多组)寄存器中。在一个示例中,存在针对所有管芯使用的单独的一组寄存器(上奇、上偶、下奇和下偶)。
在另一示例实施方式中,管芯中的每个块将对应于系统中的其他管芯中的块。以这种方式,关于每个管芯的块X或每个管芯的多个块会存在一组寄存器(上奇、上偶、下奇和下偶)。可替代地,可以使用表格来确定在每个寄存器中呈现哪些页或哪些块。图18提供了表示哪些数据页被组合到寄存器中的表格的示例。在一个示例中,每个寄存器存在一个表格。图18的示例表格包括以下列:表格条目编号、页编号、块编号、平面的编号和管芯编号。也可以使用其他表格格式。以这种方式,每个寄存器可以存储多个管芯(或者,可替代地,同一管芯上的多个块)的数据“附近数据”。图18的表格将由控制器来保存。
图19是示出如下方法的一种实施方式的流程图:当对一页进行编程时,该方法通过将附近数据与来自其他存储器管芯的数据进行组合来保存位于一个存储器管芯上的该页附近的数据。该处理表示对图17的处理的替代方案,该处理是图16的处理的另一示例实现方案,并且当存储器系统包括多个存储器管芯时该处理可以特别有用。在步骤1650中,系统获得位于目标存储器管芯中的目标页(或其他单位)附近的一页或更多页(或其他单位)数据。系统可以使用标准的读操作来获得该数据。在步骤1652中,通过使用按位XOR 运算(或其他函数)将该附近数据与来自其他存储器管芯的数据进行组合来将该附近数据复制至一个或更多个辅助位置中。在步骤1652的一个示例实现方案中,通过使用XOR运算将附近数据与寄存器的内容进行组合,将存储在奇字线上的上页中的正在被编程的目标页附近的数据存储在上奇寄存器中;通过使用XOR运算将附近数据与寄存器的内容进行组合,将存储在偶字线上的上页中的正在被编程的目标页附近的数据存储在上偶寄存器中;通过使用XOR运算将附近数据与寄存器的内容进行组合,将存储在奇字线上的下页中的正在被编程的目标页附近的数据存储在下奇寄存器中;以及通过使用XOR 运算将附近数据与寄存器的内容进行组合,将存储在偶字线上的下页中的正在被编程的目标页附近的数据存储在下偶寄存器中。
在步骤1654中,系统将数据编程至目标存储器管芯的目标页中。在步骤 1656中,系统读取在步骤1654中被编程的数据。在步骤1658中,系统确定该数据是否已经成功地被编程。如果数据已经成功地被编程,则可以从辅助位置释放附近数据。在步骤1660中,系统从存储器单元读取附近数据(与在步骤1652中存储的数据相对应)。在步骤1662中,使用一个或更多个XOR 运算从在寄存器中组合的数据中移除在步骤1652中存储的附近数据的至少一部分。在一些实施方式中,只有当不存在图18中的表格时,才必需从XOR 堆中移除数据。在一种实施方式中,优选地,将XOR堆留在那里,仅保存表格以对什么进入了XOR数据保持器进行跟踪。
如果在步骤1658中系统已经确定在步骤1654中被编程的数据未被正确地编程,则在步骤1664中将从数据锁存器494或从控制器检索的该数据重新编程至新位置中,譬如同一目标存储器管芯中的另一个块或另一存储器管芯的块。此外,可能需要对附近数据进行重新编程。在步骤1666中,系统识别哪些寄存器正存储适当的“附近数据”。将使用表格(参见图18)来识别所识别的寄存器中的所有页。系统将通过读取存储器单元并且使用错误校正代码执行错误校正,从所识别的寄存器中的所有页的存储器单元获得原始数据。使用XOR运算,系统将恢复来自寄存器的附近数据(步骤1668)并且将该附近数据与从存储附近数据的存储器单元读取的数据进行比较(步骤1670)。如果从存储器单元读取的附近数据与从寄存器恢复的数据匹配,则不存在损坏并且可以随意地对附近数据进行重新编程。如果从存储器单元读取的附近数据与从寄存器恢复的数据不匹配,则存在损坏并且将从寄存器恢复的附近数据重新编程至新位置。
因为随着更多的页累积到XOR,XOR输出处理花费较多时间,所以将周期性地刷新地址表格和寄存器以重新开始新的累积。随着页逐渐被编程,在编程之后立即进行缺陷检测,因此,不存在缺陷累积。一检测到一个缺陷,就立即从XOR页恢复数据并且可以将坏的块中的所有相关页移动至一些其他块。
此外,可能存在部分页的数据被编程的实施方式。在这样的实施方式中,可以使用针对页的第一部分的XOR运算将部分页组合到上面提到的寄存器中的一个寄存器中。当页的另外部分到达时,可以首先通过使用FF…执行 XOR运算并且然后使用新数据执行XOR将页的另外部分添加至寄存器。
如由图16的步骤1574、图17的步骤1616和图19的步骤1658执行的确定数据页是否已经成功被编程的一种方法使用本领域已知的标准读取操作。然而,为了确定数据页是否已经成功地被编程,也可以使用其他方法。在公开的技术的一种实施方式中,确定数据页是否已经成功地被编程包括确定连接至同一字线的太多(相对于一些阈值)存储器单元是否处于不确定的数据状态,使得这些存储器单元的阈值电压位于可能的数据状态的可接受的值以外。下面参照图20和图21提供了关于确定存储器单元是否已经正确地被编程的该替代方法的更多细节。
图20是示出认为存储器单元不适当地被编程的阈值电压区域的图。该图与图6类似,并且在图21中示出了参照由图20提供的阈值电压区域确定不适当地被编程的存储器单元的数量的处理。如图6所示,图20的纵轴表示单元的数量,而横轴表示阈值电压。该图示出了存储器单元相对于阈值电压的分布,并且基于这些区域表示的数据状态对分布的区域进行标记。虽然图20 示出了与存储两位数据的存储器单元的数据状态相对应的数据状态E、A、B 和C,但是可以对图20中示出的概念进行扩展,以描述存储器单元可以存储任意数量的位的数据的系统。
除了表示数据状态的存储器单元的分布的区域以外,图20还使用虚线沿着阈值电压轴划分区域,在区域中,如果存在存储器单元,则系统认为这些存储器单元不适当地被编程。认为存储器单元不适当地被编程的阈值电压的第一区域位于分别标记为“Vva-△”和“Vva”的虚线之间。认为存储器单元不适当地被编程的阈值电压的第二区域位于分别标记为“Vvb-△”和“Vvb”的虚线之间。认为存储器单元不适当地被编程的阈值电压的第三区域位于分别标记为“Vvc-△”和“Vvc”的虚线之间。
然而,“Vva”、“Vvb”和“Vvc”指的是如图6所描述的验证参考电压,“Vva-△”、“Vvb-△”和“Vvc-△”可以表示分别比“Vva”、“Vvb”和“Vvc”小电压值“△”的电压。在一些实施方式中,“△”表示固定电压值如0.2V。在其他实施方式中,“△”是在认为存储器单元不适当地被编程的阈值电压的区域中可以变化的电压值。因此,认为存储器单元不适当地被编程的阈值电压的区域的宽度为“△”伏特。认为其阈值电压位于这些区域的任意存储器单元不适当地被编程。例如,其阈值电压位于“Vva-△”和“Vva”之间的任何存储器单元具有表示数据状态“E”和数据状态“A”的阈值电压之间的阈值电压,但是不能确定是处于数据状态“E”还是处于数据状态“A”。如果确定一组存储器单元中足够的存储器单元(如连接至字线的存储器单元,或块中的存储器单元等)不适当地被编程,则系统在以后的编程操作或读操作中不再使用该组存储器单元。该组存储器单元可被称为“弃置”。在一些实施方式中,存储器管芯为每组存储器单元如字线或块分配标志位,该标志位的状态表示是否可以正常地对字线或块进行编程并读取字线或块,或者表示字线或块是否可能被损坏并且对以后的操作无效。因此,一旦一组存储器单元已经被“弃置”,则可以将区域的相对应的标志位从其先前状态转变成其相反的状态(“1”到“0”或“0”到“1”),以防止对该区域中的存储器单元进一步执行编程操作和读操作。可替代地,确定一组存储器单元是被弃置还是未被弃置的信息可以存储在管芯上地址解码器224中和/或由状态机222控制。下面参照图21对确定一组存储器单元中足够的存储器单元是否不适当地被编程的处理以及在一些情况下是否必须弃置该组存储器单元进行描述。
图21是示出了确定一组存储器单元中太多存储器单元是否已经不适当地被编程的方法的一种实施方式的流程图。图21的方法可以作为本领域已知的标准读操作的替代方案来使用。在步骤1802中,当保持存储器单元的块中的字线接地时,系统给字线施加电压“Vva-△”(如图20所示)。然后,在步骤1804中,系统对连接至通过其相应的位线导电的字线的存储器单元的数量进行计数,从而计算阈值电压小于“Vva-△”的存储器单元的数量。步骤1804 中的计数可以由控制电路1304/1404的处理器1308/1408来执行。在步骤1806 中,当保持存储器单元的块中的位线接地时,系统给步骤1802中提到的同一字线施加电压“Vva”。然后,在步骤1808中,以与步骤1804类似的方式,系统对连接至通过其相应的位线导电的字线的存储器单元的数量进行计数,从而对阈值电压小于“Vva”的存储器单元的数量进行计数。然后,在步骤 1810中,系统计算在步骤1808中获得的数量与在步骤1804中获得的数量之间的差,从而确定阈值电压位于“Vva-△”和“Vva”之间的存储器单元的数量。在一些实施方式中,该计算可以是由控制单元1304/1404的处理器 1308/1408对通过步骤1808和步骤1804获得的数量(存储在处理器1308/1408 上的寄存器中)执行的减法运算。如图20所示,将这些存储器单元视为不适当地被编程。因此,在步骤1812中,系统(可能通过使用控制电路1304/1404 的处理器1308/1408)可以将视为不适当地被编程的存储器单元的数量与一些阈值数量进行比较。如果认为不适当地被编程的存储器单元的数量超过了该阈值,则系统进行至步骤1814,其中,系统可以报告错误。在一些实施方式中,系统可以将该字线弃置。然后,系统进行至步骤1816,在步骤1816中,系统退出该处理。如果视为不适当地被编程的存储器单元的数量没有超过该阈值,则系统进行至步骤1818。
除了系统确定阈值电压位于“Vvb-△”和“Vvb”之间的存储器单元的数量以外,步骤1818至步骤1826很大程度上与步骤1802至步骤1812一样地进行。然后,在步骤1828中,类似于步骤1812,系统检查阈值电压位于“Vvb-△”和“Vvb”之间的存储器单元的数量是否超过阈值数量,该阈值数量可以与步骤1812中使用的阈值数量相同或者可以与步骤1812中使用的阈值数量不同。在一些实施方式中,系统可以替代地将阈值电压位于“Vvb- △”和“Vvb”之间的存储器单元的数量与阈值电压位于“Vva-△”和“Vva”之间的存储器单元的数量相加,并且将该新数量与阈值数量进行比较。如果不适当地被编程的存储器单元的数量超过了阈值,则在步骤1814中,系统如以前进行至步骤1814和步骤1816。否则,系统进行至步骤1830。
除了系统确定阈值电压位于“Vvc-△”和“Vvc”之间的存储器单元的数量以外,步骤1830至步骤1838很大程度上与步骤1818至步骤1826一样地进行。然后,在步骤1840中,类似于步骤1828,系统检查阈值电压位于“Vvc- △”和“Vvc”之间的存储器单元的数量是否超过阈值数量,该阈值数量可以与步骤1812和步骤1828中使用的阈值数量相同或者可以与步骤1812和步骤 1828中使用的阈值数量不同。在一些实施方式中,系统可以替代地将阈值电压位于“Vvc-△”和“Vvc”之间的存储器单元的数量与阈值电压位于“Vvb- △”和“Vvb”之间的存储器单元的数量和/或阈值电压位于“Vva-△”和“Vva”之间的存储器单元的数量相加,然后将该新数量与阈值数量进行比较。如果不适当地被编程的存储器单元的数量超过了阈值,则在步骤1814中,系统如以前进行至步骤1814和步骤1816。否则,系统直接进行至步骤1816。
图22是描述了对图15所示出的结构应用的图16的另一处理的流程图。假设系统将要对P6进行编程(图15的1512)。在步骤1852中,由于在P6 附近存在页(由于它们位于相同的且最接近的字线上)并且因此最可能由于对P6的编程操作而被损坏,所以系统将P1(1502)、P3(1506)、P4(1508) 和P5(1510)存储在一个或更多个辅助位置中。在步骤1854中,系统将数据编程至P6的存储器单元中。在步骤1856中,系统读取页P6中的最近被编程的数据。在步骤1858中,系统检查该数据是否正确地被编程。在一些实施方式中,系统可以使用多位比较器,该多位比较器可能位于一个或更多个控制电路1304/1404的处理器1308/1408、存储器接口1306/1406、存储器管芯上的专用计数器或状态机222(参见图3)中,以确定刚被编程至P6上的数据是否与在对P6编程之前存储在锁存器494中的数据的副本匹配。在一些实施方式中,该副本也可以位于控制器上的RAM 1310/1410上。
如果在步骤1858中系统确定对P6的编程操作已经成功,则在步骤1860 中,系统从辅助位置中的存储空间释放P1和P4同时保留早先已经存储的P3、 P5和P6的副本,因为这些页物理上最接近P7(未示出),在步骤1862中,使用图22的处理对P7进行编程。
如果在步骤1858中系统确定对P6的编程操作已经失败,则在步骤1864 中,系统将P6和P3两者的内容看作都被损坏,这是因为它们在同一字线上 (1524)。在步骤1858的一些实施方式中,如果P6和P3两者中的任一个读取会失败,则响应于同一方式,系统可以对P3而不是P6进行测试,或者可以对P3和P6两者进行测试。在步骤1864中,系统通过对该恢复的数据进行编程将所存储的P6和P3的副本移动至存储器管芯上的非易失性存储元件的新块。然后,在步骤1866中,将被损坏的字线WL(n+2)弃置。在一些实施方式中,存储器管芯给每个字线和块分配标志位,该标志位的状态表示是否可以对该字线或块进行正常地编程和读取,或者表示该字线或块是否可能被损坏并且对以后的操作无效。因此,对于其相对应的页(在这种情况下, P3和P6),可以将这些位从其先前状态转变成其相反的状态(“1”到“0”或“0”到“1”),以防止对这些页进一步执行编程操作和读操作。可替代地,确定字线或块是活动的还是被弃置的信息可以被存储在片上地址解码器224 中和/或由状态机222来控制。
如上所述,P6的读取中的错误可能由字线与字线短路引起。因此,在步骤1868中,系统进行至对剩余的附近页P1、P4或P5是否也已经被损坏进行测试。图23中提供了步骤1868的更多细节。
图23是描述用于在对目标页编程之后对附近页进行测试的处理的流程图。在步骤1872中,系统读取P1以确保P1尚未被损坏(例如,由于字线与字线短路)。因此,在步骤1872的一些实施方式中,由于P4也在同一字线上,所以系统可以读取P4或者系统可以读取P1和P4两者。在步骤1874中,系统可以通过将P1与存储在辅助位置中的页的副本进行匹配来检查以确定是否正确地读取P1(或P4,或P1和P4两者)。如果读取是成功的,则系统转变至步骤1880来读取P5以确定P5是否可能由于WL(n+2)和WL(n+3) 之间的字线与字线短路而已经被损坏。
如果步骤1874的读取不成功,则系统转变至步骤1876。与图16的步骤 1614类似,在步骤1876中,系统将存储为备份的P1和P4的副本移动至NAND 存储器上的新块。然后,在步骤1878中,系统将WL(n+1)弃置,因为WL (n+1)可能由于与WL(n+2)短路而已经被损坏。然后,系统转变至步骤 1880,其中,系统读取P5。在步骤1882中,系统检查在步骤1880中读取P5 是否成功。如果成功读取P5,则系统移动至步骤1880,其中,当保存P3、 P5和P6的副本时,系统释放P1和P4的副本。接下来,在步骤1890中,当对P7(未示出)进行编程时,系统重复与图16和图17所示的处理类似的处理。
如果在步骤1880中读取P5不成功,则系统将P5的副本移动至NAND 上的新块(步骤1884),而且在步骤1886中将使用WL(n+3)弃置。然后,系统执行步骤1888,步骤1890紧跟在步骤1888之后。
再参照图15,每个字线具有下页和上页。例如,P0、P1、P3和P5是下页。P2、P4和P6是上页。
图24是示出如下方法的一种实施方式的流程图:当在编程操作的有序序列期间对下页进行编程时,该方法保存位于下页附近的数据。可以将图24的处理用作图16和图22中示出的处理的替代方案。与在图16的步骤1570中一样,在步骤1902中,将正在被编程的目标下页附近的数据页的另外的副本存储在一个或更多个辅助位置中。在一种实施方式中,辅助位置可以包括控制电路1304/1404的RAM 1310/1410中的一个或更多个位置。参照图15,在本文中将该附近数据页称为P3,并且在本文中将目标下页称为P5,但是图 24的处理可以适用于任何页或字线结构。因此,在步骤1904中,系统对P5 进行编程。然后,在步骤1904的编程操作之后,系统读取P5。在步骤1908 中,系统检查P5是否正确地被编程。如果P5正确地被编程,则系统进行至步骤1910,在步骤1910中,系统继续进行下一个操作。否则,系统进行至步骤1912。
在步骤1912中,系统将被编程至P5上的数据重新编程至新位置。在一些实施方式中,系统可以从数据锁存器494(图5)检索该数据并且将该数据编程至存储器管芯上的替选位置。然后,因为P3可能由于WL3与WL2之间的字线与字线短路而已经被损坏,所以在步骤1914中系统从该数据在步骤 1902中被复制至的一个或更多个辅助位置来恢复被编程至P3上的数据。在步骤1910中继续执行下一个操作之前,系统执行将该数据编程至新位置。
图25是示出如下方法的一种实施方式的流程图:当在编程操作的有序序列期间对该上页编程时,该方法保存位于上页附近的数据。可以将图25的处理用作图16和图22中示出的处理的替代方案。在步骤2002中,将待编程的目标上页附近的数据页存储在一个或更多个辅助位置中。参照图15,在一些实施方式中,目标上页可以包括P6,并且这些附近数据页可以包括P1、P4 和P5。参照图13和图14,在一些实施方式中,这些辅助位置可以包括RAM1310/1410中的寄存器R1、R2和R3,使得P1、P4和P5分别被存储在R1、 R2和R3上。在一些实施方式中,还可以将要被编程至P6上的数据的副本存储在辅助位置如RAM 1310/1410中的寄存器R4中。另外,可能需要将P6附近的一些数据如P3上的数据(再参照图15)存储在除了RAM1310/1410以外的一个位置或辅助位置中,以降低另外的RAM的必要性并且因此节约有价值的管芯区域。因此,在一些实施方式中,系统将P3数据的副本保留在数据锁存器494(图5)上。在一些情况下,因为以有序顺序进行编程处理,所以在步骤2002之前可能已经将P3数据存储在数据锁存器494中。虽然图25 具体参考其他图,但是图25的处理可以适用于任何页、RAM或字线结构。
在步骤2004中,系统对P6进行编程。一旦P6已经被编程,则在步骤 2008中,系统读取P5和P6。然后,在步骤2010中,系统检查P5和P6是否已经正确地被编程。如果P5和P6二者已经成功地被编程,则在步骤2016 中,系统将P3数据移动至RAM 1310/1410上的寄存器R1,因为P3在P7(未示出)附近,可以在对P6编程之后对P7进行编程,并且在物理缺陷的情况下,P3上的数据可能由于对P7进行编程而被损坏。同时,系统从RAM 1310/1410移除P1和P4的副本,因为当系统对P7编程时P1和P4不可能被损坏,并且移除P1和P4的副本防止RAM 1310/1410中累积大量数据并且减小另外的RAM的必要性,因此节约有价值的管芯区域。另外,可以将P6的副本从R4传送至R3,可以将P5的副本从R5传送至R2,并且在对P7编程失败的情况下,将要被编程至P7中的数据的副本存储在R4中。在步骤2016 之后,在步骤2006中系统继续执行下一个操作。
在一些实施方式中,系统在读取P5之前可以读取P6,使得如果P6成功地被编程,则系统立即转变至步骤2006。
在步骤2010之后,如果P5和P6未正确地被编程,则很可能P3由于 WL3和WL2之间字线与字线短路而被损坏。因此,在步骤2012中,将分别来自数据锁存器、R3和R4的P3、P5和P6的副本移动至一个或更多个新数据块。然后,系统进行至步骤2006。
如果P5成功地被编程,但是P6没有成功地被编程,则由于WL2和WL1 之间字线与字线短路,P1和P4也可能已经被损坏。因此,在步骤2014中,系统读取P4。在一些实施方式中,系统可以替代地读取P1或者除P4以外读取P1。在步骤2018中,系统检查P4(或P1)是否被损坏。如果P4(或P1) 没有被损坏,则在步骤2020中,将分别来自R1、R2、R4和数据锁存器的P1、P4、P6和P3的副本移动至一个或更多个新数据块。然后,系统进行至步骤2006。
如果P4(或P1)没有被损坏,则物理缺陷如损坏的字线很可能与WL2 隔离。因此,在步骤2022中,将分别来自R4和数据锁存器的P6和P3的副本移动至一个或更多个新数据块。在步骤2022之后,系统进行至步骤2006。
图26是示出如下方法的一种实施方式的流程图:当在编程操作的随机序列(即,不按次序P0、P1、P2、…)期间对下页进行编程时,该方法保存位于下页附近的数据。图26示出了图24所示出的处理的替代处理。参照图15,将待编程的目标数据页称为P5,并且将附近数据页称为P3。由于编程操作已经按照随机顺序来执行,所以数据锁存器494中可能不存在P3的副本。因此,在步骤2102中,系统读取P3,将该数据复制至一个或更多个辅助位置。在一种实施方式中,辅助位置可以是RAM 1310/1410中的寄存器R2。然后,在步骤2104中,系统对P5进行编程。在步骤2106中,系统读取P5。在步骤2108中,系统检查P5是否已经正确地被编程。如果P5正确地被编程,则在步骤2110中系统继续执行下一个操作。否则,系统进行至步骤2112,在步骤2112中,系统或许从数据锁存器494检索本应该被编程至P5上的数据,并且将该数据重新编程至新位置。由于步骤2108中的编程操作可能已经损坏了P3,所以在步骤2114中,系统恢复在步骤2102中被复制的P3数据并且将该数据重新编程至新位置。然后,系统进行至步骤2110。
图27是示出了如下方法的一种实施方式的流程图:当在编程操作的随机序列期间对上页进行编程时,该方法保存位于上页附近的数据。可以将图27 的处理用作图25所示出的处理的替代方案。在步骤2202中,将待编程的目标上页附近的数据页存储在一个或更多个辅助位置中。参照图15,在一些实施方式中,目标上页可以包括P6并且这些附近数据页可以包括P1、P4和P5,因为编程操作已经按照随机顺序来进行,所以系统可能必须通过执行标准的读操作来获得P1、P4和P5,数据锁存器494中可能不存在这些数据页的副本。参照图13和图14,在一些实施方式中,辅助位置可以包括RAM 1310/1410 中的寄存器R1、R2和R3,使得P1、P4和P5分别被存储在R1、R2和R3 中。在一些实施方式中,还可以将要被编程至P6上的数据的副本存储在辅助位置如RAM 1310/1410中的寄存器R4中。另外,可能需要将P6附近的一些数据如P3上的数据(再参照图15)存储在除了RAM 1310/1410以外的一个位置或辅助位置,以降低另外的RAM的必要性并且因此节约有价值的管芯区域。由于编程操作已经按照随机顺序来执行,所以数据锁存器494中可能不存在P3的副本。因此,在步骤2202中,系统也读取P3,将该数据复制至一个或更多个数据锁存器494中。虽然图27对其他图做了特定引用,但是图 27的处理可能适用于任何页、RAM或字线架构。
在步骤2204中,系统对P6进行编程。一旦P6已经被编程,则在步骤 2206中,系统读取P6。然后,在步骤2208中,系统基于步骤2206的读操作来检查P6是否已经正确地被编程。如果P6已经成功地被编程,则在步骤2210 中,系统继续执行下一个操作。
如果P6没有正确地被编程,则在步骤2212中,系统读取P5以确定P5 是由于步骤2204的编程操作还是或许由于WL2与WL3之间的字线与字线短路而被损坏。在步骤2214中,系统检查P5是否被损坏。如果P5被损坏,则在步骤2216中,系统将分别与来自数据锁存器494、R3和R4的P3、P5和 P6相对应的数据的副本(在步骤2202中保存的)移动至新位置如存储器管芯上的新块。然后,在步骤2210中系统继续执行下一个操作。
如果P5没有被损坏,但是P6没有成功地被编程,则P1和P4也可能由于WL2与WL1之间的字线与字线短路而已经被损坏。因此,在步骤2218 中,系统读取P4。在一些实施方式中,系统可能改为读取P1或者除了P4以外读取P1。在步骤2018中,系统检查P4(或P1)是否被损坏。如果P4(或 P1)被损坏,则在步骤2224中,将分别来自R1、R2、R4和数据锁存器的 P1、P4、P6和P3的副本移动至新位置如一个或更多个新数据块。然后,系统进行至步骤2210。
如果P4(或P1)没有被损坏,则物理缺陷如损坏的字线很可能与WL2 隔离。因此,在步骤2222中,将分别来自R4和数据锁存器的P6和P3的副本移动至新位置如一个或更多个新数据块。在步骤2222之后,系统进行至步骤2210。在一些实施方式中,在步骤2208之后,如果P6没有成功地被编程,则系统可以直接进行至步骤2216或步骤2222而不是读取各个周围的页并且确定应当将哪些页移动至新位置。
本公开内容描述了用于保护待被编程在非易失性存储器装置如NAND存储器管芯上的数据的系统及方法。被编程至这些非易失性存储元件上的数据可能由于断开的字线或字线之间电路短路而遭遇被损坏。因此,可以使用本技术通过检查所存储的数据是否不同于一个或更多个存储的副本或存储器元件是否处于不确定的电压状态来检测是否已经出现了这样的故障。例如,如果数据页未被正确地编程,则该页和/或一个或更多个附近页(经由安全副本) 被移动至存储器电路上的替选块。在一些实施方式中,经编程的页的副本位于RAM上,该RAM是连接至存储器管芯的控制器电路的一部分。在其他实施方式中,副本经由XOR运算被组合成根据字线和页的位置存储的相等或较低数量的页。所公开的技术的另外的实施方式可以应用XOR方案来跨NAND 或RAM中的多个管芯对页进行组合,因此当跨这些多个存储器管芯执行一系列编程操作时使得系统能够保存数据。
一种实施方式包括用于对非易失性存储装置进行编程的处理,所述处理包括:将第一组数据编程至第一组非易失性存储元件中;在对第一组数据编程之前,将附近数据的另外的副本存储在一个或更多个辅助位置,一个或更多个辅助位置不同于附近数据的非易失性存储装置中的预期的非易失性存储元件,附近数据被存储在相对于第一组非易失性存储元件最接近的字线上。所述处理还包括:确定第一组数据是否正确地被编程,如果第一组数据正确地被编程,则释放附近数据的另外的副本的至少一部分,如果第一组数据没有正确地被编程,则将第一组数据重新编程至与该第一组非易失性存储元件不同的非易失性存储元件;并且从另外的副本恢复附近数据的至少一部分;以及将所恢复的附近数据编程至与预期的非易失性存储元件不同的另外的非易失性存储元件。
一种实施方式包括非易失性存储系统,所述非易失性存储系统包括多个非易失性存储元件和与非易失性存储元件进行通信的一个或更多个控制电路。一个或更多个控制电路将多组数据编程至非易失性存储元件中。针对被编程的每组数据,一个或更多个控制电路在对各组数据编程之前将附近数据的另外的副本存储在与预期的非易失性存储元件不同的一个或更多个辅助位置中,确定相应组数据是否适当地被编程,从另外的副本恢复附近数据的至少一部分,并且如果相应组数据没有适当地被编程,则将所恢复的附近数据编程至与预期的非易失性存储元件不同的另外的非易失性存储元件。
一种实施方式包括用于对非易失性存储装置进行编程的处理,所述处理包括将多组数据编程至非易失性存储装置中。对于正在被编程的每组数据,所述处理还包括:在对各组数据编程之前,将附近数据的另外的副本存储在与预期的非易失性存储元件不同的一个或更多个辅助位置中;确定各组数据是否适当地被编程;至少释放与待编程的其他组数据并不最接近的附近数据的另外的副本的子集;如果各组数据适当地被编程,则存储待编程的其他组数据附近的其他数据的另外的副本;从另外的副本恢复附近数据的至少一部分;以及如果相应组数据没有适当地被编程,则将所恢复的附近数据编程至与预期的非易失性存储元件不同的另外的非易失性存储元件。
一种实施方式包括用于对非易失性存储装置进行编程的处理,所述处理包括:将第一组数据编程至不同的存储器管芯;并且针对每组数据:获得已经存储在预期的非易失性存储元件中的附近数据的副本;将所获得的附近数据的副本与来自其他存储器管芯的数据的副本进行组合;如果相应组数据没有适当地被编程,则从附近数据的副本与来自其他存储器管芯的数据的副本组合的副本恢复附近数据的至少一部分;以及将所恢复的附近数据存储在新位置。
一种实施方式包括用于对非易失性存储装置进行编程的处理,所述处理包括:将多组数据编程至不同的存储器管芯,并且针对每组数据:获得已经存储在预期的非易失性存储元件中的附近数据的副本;将附近数据的所获得的副本与来自其他存储器管芯的数据的副本进行组合;如果相应组数据没有适当地被编程,则从附近数据的副本与来自其他存储器管芯的数据的副本组合的副本恢复附近数据的至少一部分;以及将所恢复的附近数据存储在新位置。
一种实施方式包括非易失性存储系统,所述非易失性存储系统包括多个存储器管芯和一个或更多个控制电路,每个存储器管芯包括多个非易失性存储元件,一个或更多个控制电路与非易失性存储元件进行通信。所述一个或更多个控制电路将多组数据编程至不同的存储器管芯。针对每组数据,一个或更多个控制电路获得已经存储在预期的非易失性存储元件中的附近数据的副本;将附近数据的所获得的副本与来自其他存储器管芯的数据的副本进行组合;如果该组数据没有适当地被编程,则所述一个或更多个控制电路从附近数据的副本与来自其他存储器管芯的数据的副本组合的副本恢复附近数据的至少一部分;以及将所恢复的附近数据存储在新位置。
一种实施方式包括用于对非易失性存储装置进行编程的处理,所述处理包括:将第一组数据编程至与公共控制器进行通信的多个管芯中的第一管芯上的第一组非易失性存储元件中;并且在对第一组数据编程之前,获得已经存储在第一管芯上的预期的非易失性存储元件中的附近数据的副本;将附近数据的所获得的副本与来自其他管芯的数据的副本进行组合;从附近数据的副本与来自其他管芯的数据的副本组合的副本恢复附近数据的至少一部分;以及如果相应组数据没有适当地被编程,则将所恢复的附近数据存储在新位置。
出于说明和描述的目的已经给出前面的详细描述。其并非是无遗漏的或限制为所公开的精确形式。根据上述教导可以进行许多修改和变化。选择所描述的实施方式以最好地解释所公开的技术的原理和其实际应用,从而使本领域技术人员能够最佳地利用适合于预期的特定用途的各种实施方式中的技术和各种修改。其旨在范围由所附的权利要求来限定。
Claims (15)
1.一种用于对非易失性存储装置进行编程的处理,包括:
将多组数据编程至不同的存储器管芯;以及
针对每组数据:获得已经存储在预期的非易失性存储元件中的附近数据的副本,将所获得的附近数据的副本与来自其他存储器管芯的数据的副本进行组合,如果相应组数据未正确地编程,则从所述附近数据与来自其他存储器管芯的数据的副本组合的副本恢复所述附近数据的至少一部分,并且将所恢复的附近数据存储在新位置处。
2.根据权利要求1所述的处理,还包括:
如果所述相应组数据正确地被编程,则释放所述附近数据的副本的至少一部分。
3.根据权利要求1或2所述的处理,其中,
所述附近数据被存储在相对于所述相应组数据最接近的字线上;
所述最接近的字线包括第一字线、与所述第一字线相邻的第二字线以及与所述第二字线相邻的第三字线;
所述相应组数据被编程至与所述第二字线连接的第一组非易失性存储元件中;
所述相应组数据包括第一数据页;以及
所述附近数据包括所述第二字线上的另外的数据页以及所述第一字线和所述第三字线上的另外的数据页。
4.根据权利要求1所述的处理,其中,
将所获得的附近数据的副本与来自其他存储器管芯的数据的副本进行组合包括:对所获得的附近数据的副本和来自其他存储器管芯的数据的副本执行异或运算。
5.根据权利要求4所述的处理,还包括:
如果所述相应组数据正确地被编程,则从组合的所获得的附近数据的副本和来自其他存储器管芯的数据的副本移除所获得的附近数据的副本。
6.根据权利要求5所述的处理,还包括:
保存如下数据结构,所述数据结构指示哪个管芯的哪些部分被包括在组合的所获得的附近数据的副本和来自其他存储器管芯的数据的副本中。
7.根据权利要求1所述的处理,其中,
将所获得的附近数据的副本与来自其他存储器管芯的数据的副本进行组合包括:将第一管芯上的第一位置的附近数据与第二管芯上的对应位置的数据进行组合。
8.根据权利要求1所述的处理,还包括:
将四个数据结构保存在与不同的存储器管芯进行通信的控制器上,所述四个数据结构存储不同的存储器管芯的组合的数据,所述四个数据结构包括:用于存储奇字线上页的数据的第一数据结构、用于存储奇字线下页的数据的第二数据结构、用于存储偶字线上页的数据的第三数据结构以及用于存储偶字线下页的数据的第四数据结构。
9.一种非易失性存储器系统,包括:
多个存储器管芯,每个所述存储器管芯包括多个非易失性存储元件;以及
与所述非易失性存储元件进行通信的一个或更多个控制电路,所述一个或更多个控制电路将多组数据编程至不同的存储器管芯;
针对每组数据:所述一个或更多个控制电路获得已经存储在预期的非易失性存储元件中的附近数据的副本,将所获得的附近数据的副本与来自其他存储器管芯的数据的副本进行组合,如果该组数据未正确地编程,则所述一个或更多个控制电路从所述附近数据与来自其他存储器管芯的数据的副本组合的副本恢复所述附近数据的至少一部分,并且将所恢复的附近数据存储在新位置处。
10.根据权利要求9所述的非易失性存储器系统,其中,
如果相应组数据正确地被编程,则所述一个或更多个控制电路释放所述附近数据的副本的至少一部分。
11.根据权利要求9或10所述的非易失性存储器系统,其中,
所述一个或更多个控制电路通过对所获得的附近数据的副本和来自其他存储器管芯的数据的副本执行异或运算将所获得的附近数据的副本与来自其他存储器管芯的数据的副本进行组合。
12.根据权利要求11所述的非易失性存储器系统,其中,
如果所述相应组数据正确地被编程,则所述一个或更多个控制电路从组合的所获得的附近数据的副本和来自其他存储器管芯的数据的副本移除所获得的附近数据的副本。
13.根据权利要求12所述的非易失性存储器系统,其中,
所述一个或更多个控制电路保存如下数据结构,所述数据结构指示哪个管芯的哪些部分被包括在组合的所获得的附近数据的副本和来自其他存储器管芯的数据的副本中。
14.根据权利要求9所述的非易失性存储器系统,其中,
所述一个或更多个控制电路通过将第一管芯上的第一位置的附近数据与第二管芯上的对应位置的数据进行组合来对所获得的附近数据的副本与来自其他存储器管芯的数据的副本进行组合。
15.根据权利要求9所述的非易失性存储器系统,其中,
所述一个或更多个控制电路包括与不同的存储器管芯进行通信的控制器;
所述控制器保存四个数据结构;
所述四个数据结构存储所述不同的存储器管芯的组合的数据;以及
所述四个数据结构包括:用于存储奇字线上页的数据的第一数据结构、用于存储奇字线下页的数据的第二数据结构、用于存储偶字线上页的数据的第三数据结构和用于存储偶字线下页的数据的第四数据结构。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/749,968 US8913428B2 (en) | 2013-01-25 | 2013-01-25 | Programming non-volatile storage system with multiple memory die |
US13/749,968 | 2013-01-25 | ||
PCT/US2014/012879 WO2014116906A1 (en) | 2013-01-25 | 2014-01-24 | Recovery of nearby data in programming of non-volatile multi-level multiple memory die |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105308685A CN105308685A (zh) | 2016-02-03 |
CN105308685B true CN105308685B (zh) | 2018-02-02 |
Family
ID=50071799
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480005814.2A Active CN105308685B (zh) | 2013-01-25 | 2014-01-24 | 非易失性存储装置的编程处理和非易失性存储系统 |
Country Status (4)
Country | Link |
---|---|
US (1) | US8913428B2 (zh) |
EP (1) | EP2948956B1 (zh) |
CN (1) | CN105308685B (zh) |
WO (1) | WO2014116906A1 (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9111598B2 (en) * | 2013-09-16 | 2015-08-18 | Netapp, Inc. | Increased I/O rate for solid state storage |
JP6088675B1 (ja) * | 2016-02-02 | 2017-03-01 | ウィンボンド エレクトロニクス コーポレーション | 半導体記憶装置 |
US10019332B1 (en) * | 2017-03-10 | 2018-07-10 | Western Digital Technologies, Inc. | Non-volatile memory with program failure recovery |
CN107977282B (zh) * | 2017-12-20 | 2021-01-26 | 北京兆易创新科技股份有限公司 | 一种SPI-Nand读取数据页的方法及装置 |
US10846165B2 (en) | 2018-05-17 | 2020-11-24 | Micron Technology, Inc. | Adaptive scan frequency for detecting errors in a memory system |
US11003551B2 (en) | 2018-09-27 | 2021-05-11 | Sandisk Technologies Llc | Non-volatile storage system with program failure recovery |
US10665313B1 (en) * | 2019-05-02 | 2020-05-26 | Sandisk Technologies Llc | Detecting short circuit between word line and source line in memory device and recovery method |
CN111984193B (zh) * | 2020-08-14 | 2024-09-06 | 深圳市硅格半导体有限公司 | 数据编写存储报错的恢复方法、系统、设备及存储介质 |
US12014772B2 (en) | 2021-11-17 | 2024-06-18 | Samsung Electronics Co., Ltd. | Storage controller and storage device including the same |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20120088137A (ko) * | 2011-01-31 | 2012-08-08 | 에스케이하이닉스 주식회사 | 비휘발성 메모리 장치의 프로그래밍 방법 |
CN102754165A (zh) * | 2010-01-28 | 2012-10-24 | 桑迪士克技术有限公司 | 允许多个数据状态失败的非易失性存储器中的多位编程方法以及编程失败的情况下的数据恢复方法 |
Family Cites Families (46)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6222762B1 (en) | 1992-01-14 | 2001-04-24 | Sandisk Corporation | Multi-state memory |
US5555204A (en) | 1993-06-29 | 1996-09-10 | Kabushiki Kaisha Toshiba | Non-volatile semiconductor memory device |
KR0169267B1 (ko) | 1993-09-21 | 1999-02-01 | 사토 후미오 | 불휘발성 반도체 기억장치 |
US5815434A (en) | 1995-09-29 | 1998-09-29 | Intel Corporation | Multiple writes per a single erase for a nonvolatile memory |
US5903495A (en) | 1996-03-18 | 1999-05-11 | Kabushiki Kaisha Toshiba | Semiconductor device and memory system |
US5768192A (en) | 1996-07-23 | 1998-06-16 | Saifun Semiconductors, Ltd. | Non-volatile semiconductor memory cell utilizing asymmetrical charge trapping |
US5930167A (en) | 1997-07-30 | 1999-07-27 | Sandisk Corporation | Multi-state non-volatile flash memory capable of being its own two state write cache |
US6768165B1 (en) | 1997-08-01 | 2004-07-27 | Saifun Semiconductors Ltd. | Two bit non-volatile electrically erasable and programmable semiconductor memory cell utilizing asymmetrical charge trapping |
US6763424B2 (en) | 2001-01-19 | 2004-07-13 | Sandisk Corporation | Partial block data programming and reading operations in a non-volatile memory |
US6522580B2 (en) | 2001-06-27 | 2003-02-18 | Sandisk Corporation | Operating techniques for reducing effects of coupling between storage elements of a non-volatile memory operated in multiple data states |
US6456528B1 (en) | 2001-09-17 | 2002-09-24 | Sandisk Corporation | Selective operation of a multi-state non-volatile memory system in a binary mode |
US6717847B2 (en) | 2001-09-17 | 2004-04-06 | Sandisk Corporation | Selective operation of a multi-state non-volatile memory system in a binary mode |
US6751766B2 (en) * | 2002-05-20 | 2004-06-15 | Sandisk Corporation | Increasing the effectiveness of error correction codes and operating multi-level memory systems by using information about the quality of the stored data |
US7327619B2 (en) | 2002-09-24 | 2008-02-05 | Sandisk Corporation | Reference sense amplifier for non-volatile memory |
US7196931B2 (en) | 2002-09-24 | 2007-03-27 | Sandisk Corporation | Non-volatile memory and method with reduced source line bias errors |
US7046568B2 (en) | 2002-09-24 | 2006-05-16 | Sandisk Corporation | Memory sensing circuit and method for low voltage operation |
US6859397B2 (en) | 2003-03-05 | 2005-02-22 | Sandisk Corporation | Source side self boosting technique for non-volatile memory |
US7237074B2 (en) | 2003-06-13 | 2007-06-26 | Sandisk Corporation | Tracking cells for a memory system |
US6917542B2 (en) | 2003-07-29 | 2005-07-12 | Sandisk Corporation | Detecting over programmed memory |
US7716413B2 (en) | 2004-02-15 | 2010-05-11 | Sandisk Il Ltd. | Method of making a multi-bit-cell flash memory |
US7310347B2 (en) | 2004-03-14 | 2007-12-18 | Sandisk, Il Ltd. | States encoding in multi-bit flash cells |
US7120051B2 (en) | 2004-12-14 | 2006-10-10 | Sandisk Corporation | Pipelined programming of non-volatile memories using early data |
US20060140007A1 (en) | 2004-12-29 | 2006-06-29 | Raul-Adrian Cernea | Non-volatile memory and method with shared processing for an aggregate of read/write circuits |
US7212436B2 (en) | 2005-02-28 | 2007-05-01 | Micron Technology, Inc. | Multiple level programming in a non-volatile memory device |
US7196928B2 (en) | 2005-04-05 | 2007-03-27 | Sandisk Corporation | Compensating for coupling during read operations of non-volatile memory |
US8020060B2 (en) | 2006-01-18 | 2011-09-13 | Sandisk Il Ltd | Method of arranging data in a multi-level cell memory device |
US7388781B2 (en) | 2006-03-06 | 2008-06-17 | Sandisk Il Ltd. | Multi-bit-per-cell flash memory device with non-bijective mapping |
US7885119B2 (en) | 2006-07-20 | 2011-02-08 | Sandisk Corporation | Compensating for coupling during programming |
US8059456B2 (en) | 2006-11-07 | 2011-11-15 | Sandisk Il Ltd. | Programming a NAND flash memory with reduced program disturb |
US7440319B2 (en) | 2006-11-27 | 2008-10-21 | Sandisk Corporation | Apparatus with segmented bitscan for verification of programming |
US7545681B2 (en) | 2006-11-27 | 2009-06-09 | Sandisk Corporation | Segmented bitscan for verification of programming |
US7570520B2 (en) | 2006-12-27 | 2009-08-04 | Sandisk Corporation | Non-volatile storage system with initial programming voltage based on trial |
KR100874915B1 (ko) | 2007-01-15 | 2008-12-19 | 삼성전자주식회사 | 용도 변환이 가능한 검증 데이터 버퍼를 구비하는 플래시 메모리 장치, 및 이를 이용하는 프로그램 및 검증 방법 |
KR100850515B1 (ko) | 2007-01-24 | 2008-08-05 | 삼성전자주식회사 | 멀티레벨 셀 플래시 메모리를 갖는 메모리 시스템 및그것의 프로그램 방법 |
US7616500B2 (en) | 2007-02-20 | 2009-11-10 | Sandisk Corporation | Non-volatile storage apparatus with multiple pass write sequence |
US9607664B2 (en) | 2007-09-27 | 2017-03-28 | Sandisk Technologies Llc | Leveraging portable system power to enhance memory management and enable application level features |
US8111548B2 (en) * | 2008-07-21 | 2012-02-07 | Sandisk Technologies Inc. | Programming non-volatile storage using binary and multi-state programming processes |
US8307241B2 (en) | 2009-06-16 | 2012-11-06 | Sandisk Technologies Inc. | Data recovery in multi-level cell nonvolatile memory |
US8402217B2 (en) | 2009-09-15 | 2013-03-19 | Marvell International Ltd. | Implementing RAID in solid state memory |
US8468294B2 (en) * | 2009-12-18 | 2013-06-18 | Sandisk Technologies Inc. | Non-volatile memory with multi-gear control using on-chip folding of data |
KR20110087036A (ko) * | 2010-01-25 | 2011-08-02 | 삼성전자주식회사 | 덮어쓰기 가능한 불휘발성 메모리 장치 및 그것의 데이터 쓰기 방법 |
US8213255B2 (en) | 2010-02-19 | 2012-07-03 | Sandisk Technologies Inc. | Non-volatile storage with temperature compensation based on neighbor state information |
US8274831B2 (en) | 2010-05-24 | 2012-09-25 | Sandisk Technologies Inc. | Programming non-volatile storage with synchronized coupling |
US8479062B2 (en) | 2010-12-03 | 2013-07-02 | International Business Machines Corporation | Program disturb error logging and correction for flash memory |
US8738844B2 (en) | 2011-04-14 | 2014-05-27 | Macronix International Co., Ltd. | Program method, data recovery method, and flash memory using the same |
US8737125B2 (en) * | 2012-08-07 | 2014-05-27 | Sandisk Technologies Inc. | Aggregating data latches for program level determination |
-
2013
- 2013-01-25 US US13/749,968 patent/US8913428B2/en active Active
-
2014
- 2014-01-24 CN CN201480005814.2A patent/CN105308685B/zh active Active
- 2014-01-24 EP EP14703725.3A patent/EP2948956B1/en active Active
- 2014-01-24 WO PCT/US2014/012879 patent/WO2014116906A1/en active Application Filing
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102754165A (zh) * | 2010-01-28 | 2012-10-24 | 桑迪士克技术有限公司 | 允许多个数据状态失败的非易失性存储器中的多位编程方法以及编程失败的情况下的数据恢复方法 |
KR20120088137A (ko) * | 2011-01-31 | 2012-08-08 | 에스케이하이닉스 주식회사 | 비휘발성 메모리 장치의 프로그래밍 방법 |
Also Published As
Publication number | Publication date |
---|---|
EP2948956A1 (en) | 2015-12-02 |
WO2014116906A1 (en) | 2014-07-31 |
US20140211561A1 (en) | 2014-07-31 |
CN105308685A (zh) | 2016-02-03 |
US8913428B2 (en) | 2014-12-16 |
EP2948956B1 (en) | 2017-01-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105359218B (zh) | 非易失性存储器编程数据保存 | |
CN105308685B (zh) | 非易失性存储装置的编程处理和非易失性存储系统 | |
USRE46995E1 (en) | Programming non-volatile storage using binary and multi-state programming processes | |
CN102160118B (zh) | 非易失性存储器阵列的最后字线的数据保持的改进 | |
CN102906820B (zh) | 用同步耦合编程非易失性存储器 | |
CN102246241B (zh) | 非易失性存储器的数据刷新 | |
JP4220319B2 (ja) | 不揮発性半導体記憶装置およびそのサブブロック消去方法 | |
US7440324B2 (en) | Apparatus with alternating read mode | |
US7839690B2 (en) | Adaptive erase and soft programming for memory | |
EP2286411B1 (en) | Erase-verification process for non-volatile storage | |
US8839074B2 (en) | On chip data recovery for non-volatile storage | |
KR101904581B1 (ko) | 고장난 워드 라인 스크린 및 데이터 복원을 갖는 비휘발성 저장장치 | |
CN113168881B (zh) | 检测存储器设备中字线与源极线之间的短路及恢复方法 | |
US9135989B2 (en) | Write data preservation for non-volatile storage | |
CN107112047A (zh) | 用于在非易失性存储器中区块编程的部分区块擦除 | |
JP2013518359A (ja) | データ状態に固有の失敗の計数に基づく不揮発性メモリのデータ復旧 | |
EP2078303B1 (en) | Reading of a nonvolatile memory cell by taking account of the stored state of a neighboring memory cell | |
CN106205702A (zh) | 对编程故障自动响应的非易失性存储装置 | |
US9047974B2 (en) | Erased state reading |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: American Texas Applicant after: DELPHI INT OPERATIONS LUX SRL Address before: American Texas Applicant before: Sandisk Technologies, Inc |
|
COR | Change of bibliographic data | ||
GR01 | Patent grant | ||
GR01 | Patent grant |