允许多个数据状态失败的非易失性存储器中的多位编程方法以及编程失败的情况下的数...的制作方法

文档序号:6738301阅读:165来源:国知局
专利名称:允许多个数据状态失败的非易失性存储器中的多位编程方法以及编程失败的情况下的数 ...的制作方法
允许多个数据状态失败的非易失性存储器中的多位编程方法以及编程失败的情况下的数据恢复方法
背景技术
本技术涉及一种非易失性存储器。供各种电子装置使用的半导体存储器已经日益普及。例如,非易失性半导体存储器被用在移动电话、数字摄像装置、个人数字助理、移动计算装置、非移动计算装置以及其它装置中。电可擦除可编程只读存储器(EEPROM)和闪存是其中最普及的非易失性半导体存储器。与传统的全功能EEPROM相比,采用也为ー种类型的EEPROM的闪存,可以以ー步擦除整个存储器阵列的内容或者该存储器的一部分的内容。传统的EEPROM和闪存这两者都利用位于半导体基板中的沟道区上方且与其隔离的浮置栅极。该浮置栅极位于源区与漏区之间。控制栅极设置在浮置栅极上方且与其隔离。这样形成的晶体管的阈值电压(Vth)利用浮置栅极上所保留的电荷量来控制。S卩,在晶体管导通以允许在其源极与漏极之间导通之前必须施加至控制栅极的最小电压量利用浮置栅极上的电荷水平来控制。最重要的是对来自存储器的数据进行准确编程以及读回的能力。然而,各种失败情况会导致数据损坏。


图I是使用単行/列解码器和读/写电路的非易失性存储器系统的框图。图2是示出图I的感测块100的一个实施例的框图。图3示出图I的存储器阵列155中的NAND闪存存储单元的块。
图4不出不例阈值电压分布和一遍编程。图5 出例阈值电压分布和两遍编程。图6a_c示出示例阈值电压分布和使用中间状态的两遍编程。图7示出按前后字线顺序对ー组存储元件的多遍编程操作。图8a_f示出图2的感测块使用的、编程操作中在不同点处的示例数据锁存器值。图9示出除两个未使用的数据锁存器组合以外、针对不同数据状态的根据存储元件的快速、慢速或抑制模式的图8a_8f的数据锁存器值。图10示出图9的数据锁存器值的变型,其使得经擦除状态具有与抑制的A状态、B状态和C状态不同的组合。图Ila示出在失败检测处理中使用基于图10的数据锁存器值和A状态读取操作的结果的逻辑运算来提供经擦除状态错误和经过编程的较高状态错误的计数。图Ilb示出在失败检测处理中使用基于图10的数据锁存器值和A状态读取操作的结果的逻辑运算来提供经擦除状态错误的计数。图Ilc示出数据恢复操作中基于图10的数据锁存器值以及C状态和B状态读取操作的结果的逻辑运算的使用。图12a示出示例编程和编程后失败检测和恢复操作。
图12b示出图12a的步骤1218的编程后(post-programming)错误检测和恢复操作的更多详情。图12c示出图12b的步骤1244的数据恢复操作的更多详情。图13示出编程操作和后续数据恢复操作中的所选字线的示例波形。
具体实施例方式提供了提供错误检测和数据恢复的方法和非易失性存储系统。 在编程操作期间,多种因素可能导致损坏数据。例如,字线或块由于制造エ艺变化而可能存在物理缺陷。在一些情况下,字线对于基板而言较短,使得提升(boosting)受影响并且程序干扰产生。其它潜在的问题包括字线之间短、字线宽度改变、块的过多循环、温度相关影响等。此外,可能没有检测到数据损坏,直到太晚而无法恢复该数据为止。例如,基于写入数据,一些存储元件应该保持处于经擦除状态,而其它存储元件被编程为目标数据状态。在这种情况下,在对其它存储元件编程期间,经擦除状态存储元件可能受到干扰。当编程针对其它存储元件而继续(诸如,对同一字线或不同字线上的同一页数据或另ー页数据进行编程)时,被编程为该经擦除状态以外的目标数据状态的存储元件也会受到干扰。一种检测数据损坏的方法是在对数据进行编程之后读回所有数据并将其与原始写入数据进行比较。然而,这强加了基本的时间处罚,并且需要诸如额外的数据锁存器的附加存储资源。一种解决方案涉及对现有数据锁存器进行权衡(leverage)以针对易于发生错误的特定数据状态(诸如,经擦除状态)来检测损坏的数据。在该方法中,对数据锁存器进行配置,以使得可以在对一组存储元件的编程完成时将经擦除状态与其它状态区分开。通过在成功完成编程操作之后执行单次读取操作、访问数据锁存器并且执行逻辑运算,可以标识损坏的存储元件。如果损坏的存储元件的数量超过诸如ECC可恢复错误的数量的阈值,则可以执行恢复操作。该恢复操作基于读取结果和数据锁存器来进行附加读取操作和逻辑运算,以完全恢复写入数据。接着讨论可以用于提供更快的编程和降低的功耗的示例存储器系统。图I是使用単行/列解码器和读/写电路的非易失性存储器系统的框图。根据ー个实施例,该图示出具有读/写电路的存储器装置197,其中该读/写电路用于对存储元件的页进行并行读取和编程。存储器装置197可包括一个或多个存储器晶片(die) 198。存储器晶片198包括存储元件155的ニ维存储器阵列、控制电路110以及读/写电路165。结合图4来进ー步讨论存储器阵列155。在一些实施例中,存储元件的阵列可以是三维的。经由行解码器130通过字线以及经由列解码器160通过位线可对存储器阵列155进行寻址。读/写电路165包括多个感测块100,并且允许对存储元件的页并行读取或编程。通常,控制器150与一个或多个存储器晶片198—样包括在同一存储器装置197 (例如,可移动存储卡)中。经由线120在主机与控制器150之间以及经由线118在控制器与一个或多个存储器晶片198之间传送命令和数据。控制电路110与读/写电路165进行协作以对存储器阵列155执行存储器操作,并且包括状态机112、片上(on-chip)地址解码器114和电源控制模块116。状态机112提供存储器操作的芯片级控制。片上地址解码器114提供主机或存储器控制器所使用的地址与解码器130和160所使用的硬件地址之间的地址接ロ。电源控制模块116对存储器操作期间供给至字线和位线的功率和电压进行控制。在一些实现中,可以组合图I的部件中的一部分。在各种设计中,除存储器阵列155以外的部件中的一个或多个部件(单独或组合)可被看作管理或控制电路。例如,ー个或多个控制电路可以包括控制电路110、状态机112、解码器114/160、电源控制器116、感测块100 (包括图2中的处理器192)、读/写电路165以及控制器150等中的任ー个或者组合。结合图2来进ー步讨论感测块100。 在另ー实施例中,非易失性存储器系统使用双重行/列解码器和读/写电路。各种外围电路对存储器阵列155的访问是在该阵列的相对侧上以对称方式来实现的,以使得各侧上的访问线和电路的密度均减半。因而,行解码器被分成两个行解码器,并且列解码器被分成两个列解码器。同样,读/写电路也被分成从阵列155的底部连接至位线的读/写电路以及从阵列155的顶部连接至位线的读/写电路。这样,读/写模块的密度基本上减半。图2是示出感测块的一个实施例的框图。将单个感测块100划分成ー个或多个被称为感测模块180或感测放大器的核心部分、以及被称为管理电路190的公共部分。在一个实施例中,对于每条位线存在単独的感测模块180以及对于ー组多个(例如,四个或八个)感测模块180存在ー个公共管理电路190。组内的每个感测模块均经由数据总线172与关联的管理电路进行通信。因而,存在与一组存储元件的感测模块进行通信的ー个或多个管通电路。 感测模块180包括感测电路170,其中感测电路170通过确定所连接位线内的传导电流是高于还是低于预定阈值水平来执行感測。感测模块180还包括用于设置关于所连接位线的电压状态的位线锁存器182。例如,位线锁存器182内所锁存的预定状态将导致所连接位线被拉至指定程序禁止的状态(例如,I. 5-3V)。作为示例,标志=0可以禁止编程,而标志=1不禁止编程。管理电路190包括处理器192、示例的四组数据锁存器194-197以及耦合在数据锁存器组194与数据总线192之间的I/O接ロ 196。可以针对每个感测模块设置ー组数据锁存器,并且可以针对每组设置用QDL、UDL和LDL标识的三个数据锁存器。以下结合图8a-f、9、10和Ila-c来进ー步讨论数据锁存器的使用。处理器192执行计算,诸如以确定所感测的存储元件中存储的数据并将所确定的数据存储在数据锁存器组中。各数据锁存器组194-197用于存储在读取操作期间处理器192所确定的数据位,并且存储在编程操作期间从数据总线120输入的数据位,其中这些数据位表示要被编程到存储器中的写入数据。I/O接ロ 196提供数据锁存器194-197与数据总线120之间的接ロ。在读取期间,系统的操作处于状态机112的控制下,其中状态机112控制不同的控制栅电压向所寻址的存储元件的供给。随着该操作通过与存储器所支持的各种存储器状态相对应的各种预定的控制栅电压而步进,感测模块1808在这些电压中的ー个处可能跳闸(trip),并且将相应的输出从感测模块180经由总线172提供给处理器192。此时,处理器192通过考虑感测模块的跳闸事件以及与经由输入线193从状态机施加的控制栅电压有关的信息,确定作为结果所得到的存储器状态。然后,该处理器计算存储器状态的ニ进制编码,并将作为结果所得到的数据位存储到数据锁存器194-197中。在管理电路190的另ー实施例中,位线锁存器182起到双重作用,既用作用于对感测模块180的输出进行锁存的锁存器,也用作如上所述的位线锁存器。ー些实现可以包括多个处理器192。在一个实施例中,每个处理器192均包括输出线(未示出),以使各输出线以线或(wired-OR)方式连接到一起。在一些实施例中,输出线在连接至线或线(wired-OR line)之前被反转。由于接收线或的状态机可以确定正被编程的所有位何时已达到期望水平,因此该配置使得能够在对编程处理何时已完成的程序验证处理期间进行快速 确定。例如,当每个位已达到其期望水平时,该位的逻辑零将被发送至线或线(或者使数据I反转)。当所有的位都输出数据O (或者数据I反转)时,状态机知道终止该编程处理。由于每个处理器均与八个感测模块进行通信,因此,状态机需要读取线或线8次,或者逻辑被添加到处理器192以累积关联位线的結果,以使得状态机仅需读取线或线一次。同样,通过正确地选择逻辑水平,全局状态机可以检测第一位何时改变其状态,并且相应地改变算法。在程序或验证操作期间,从数据总线120将要编程的数据(写入数据)存储在数据锁存器组19Γ197中。在状态机的控制下,该程序操作包括将ー系列编程电压脉冲施加至所寻址的存储元件的控制栅扱。在每个编程脉冲之后是读回(验证),以确定存储元件是否已被编程为期望的存储器状态。在一些情况下,处理器192监视与期望存储器状态相关的所读回的存储器状态。当这两者一致时,处理器192设置位线锁存器182,以使位线被拉至指定程序禁止的状态。即使在控制栅极上出现程序脉冲,这也禁止了耦合到位线的存储元件进ー步进行编程。在其它实施例中,处理器初始装载位线锁存器182,并且感测电路在验证处理期间将其设置为禁止值。各数据锁存器组194 197可以被实现为还用于每个感测模块的数据锁存器的堆栈。在一个实施例中,每个感测模块180有三个数据锁存器。在一些实现中,数据锁存器被实现为移位寄存器,以使得其中所存储的并行数据转换成用于数据总线120的串行数据,并且反之亦然。可以将与m个存储元件的读/写块相对应的所有数据锁存器都链接到一起以形成块移位寄存器,从而可以通过串行传送来输入或输出数据块。具体地,将读/写模块组适配成使得其数据锁存器组中的每个数据锁存器将使数据顺次移入或移出数据总线,如同这些数据锁存器是整个读/写块的移位寄存器的一部分那样。数据锁存器标识关联的存储元件在编程操作中何时已达到特定里程标志。例如,锁存器可以标识存储元件的Vth在快速编程模式下低于较低验证水平(例如,图5中的VvaL或VvbL),在慢速编程模式下高于较低验证水平(例如,VvaL或VvbL)而低于较高验证水平或目标验证水平(例如,Vva, Vvb或Vvc),或者在禁止模式下高于较高验证水平或目标验证水平。数据锁存器指示存储元件当前是否存储来自一页数据的ー个或多个位。例如,可以使用LDL锁存器来存储下页数据。当将下页位存储在关联的存储元件中吋,LDL锁存器翻转(例如,从O到I)。例如,可以使用UDL锁存器来存储上页数据。当将上页位存储在关联的存储元件中吋,M)L锁存器翻转。这在关联的存储元件完成编程时(例如,在其Vth超过诸如Vva、Vvb或Vvc的目标验证水平吋)发生。当关联的存储元件处于慢速编程模式下吋,该QDL锁存器可以翻转。在一些检测方案中,一旦任意存储元件被锁定,就将该存储元件的所有数据锁存器(QDL、LDL、UDL)都设置为“I”。然而,这并不允许区分已锁定于不同数据状态的存储元件。例如,无法将E状态存储元件与A、B或C状态存储元件区分开。如以下将进ー步讨论的,可以以最佳方式使用数据锁存器以克服该问题,从而,实现高效的错误检测和恢复操作。图3示出图I的存储器阵列155内的NAND闪存单元的块。该存储器阵列可以包括多个块。各示例块300、310包括多个NAND串和在这些块之间共用的各位线(例如,BL0、BLU...)。每个NAND串的一端连接至漏极选择门(S⑶),并且漏极选择门的控制栅极经由公共SGD线相连接。这些NAND串在其另一端连接至源极选择门,而该源极选择门连接至公共源极线320。六十四条字线(例如,WL0-WL63)在源极选择门与漏极选择门之间延伸。还可以使用除NAND闪存以外的其它类型的非易失性存储器。例如,在闪速EEPROM系统中使用的其它类型的存储单元采用非导电的介电材料来代替导通浮置栅极,以按非易失性方式存储电荷。由氧化硅、氮化硅和氧化硅形成的三层介质夹入导通的控制栅极与在存储单元沟道上方的半导体基板的表面之间。通过将来自单元沟道的电子注入氮化物中来对单元进行编程,其中俘获到这些电子并将其储存到限制区域中。然后,该储存的电荷以可 检测的方式改变该単元的沟道的一部分的阈值电压。通过将热空穴注入氮化物中来擦除该単元。可以将类似的单元设置在分裂栅配置中,在该配置中,掺杂多晶硅栅极在存储单元沟道的一部分之上延伸以形成単独的选择晶体管。在另ー种方法中,使用NROM单元。例如,将两个位存储在每个NROM单元中,其中ONO介电层在源扩散与漏扩散之间的沟道上延伸。一个数据位的电荷位于与漏极相邻的介电层中,并且其它数据位的电荷位干与源极相邻的介电层中。通过单独读取在介质内的空间上分离的电荷储存区域的ニ值状态来获得多状态数据存储。还已知其它类型的非易失性存储器。图4示出示例阈值电压分布和一遍编程。针对每个存储元件存储两位数据的情况来设置存储元件阵列的示例阈值电压分布。第一阈值电压分布400是针对经擦除(E状态)的存储元件所设置的。三个阈值电压分布402、404和406分别表示经编程状态A、B和C。在一个实施例中,E状态分布下的阈值电压为负,并且A、B和C状态分布下的阈值电压为正。可以通过保持阈值电压被确定为超过相应的验证水平的存储元件的计数来确定处于特定状态的存储元件的数量。每个不同的阈值电压范围对应于数据位组的预定值。被编程到存储元件中的数据与存储元件的阈值电压水平之间的特定关系依赖于存储元件所采用的数据编码方案。在一个实施例中,使用格雷码分配来向阈值电压范围分配数据值,以使得如果浮置栅极的阈值电压错误地变换为其相邻的物理状态,则将仅影响一位。一个示例向阈值电压范围E (状态E)分配“ 11”,向阈值电压范围A (状态A)分配“ 10”,向阈值电压范围B (状态B)分配“00”,并且向阈值电压范围C (状态C)分配“01”。然而,在其它实施例中,不使用格雷码。尽管示出了四种状态,但还可以使用其它多状态结构,包括包含多于或少于四种状态的多状态结构。为了从存储元件读取数据,还提供了 Vra、Vrb和Vrc这三个读取基准电压。通过测试给定存储元件的阈值电压是高于还是低于Vra、Vrb和Vrc,该系统可以确定存储元件所处的状态,例如编程状况。此外,提供了 Vva、Vvb和Vvc这三种目标验证基准电压。当将存储元件编程为状态A时,系统将测试这些存储元件是否具有大于或等于Vva的阈值电压。当将存储元件编程为状态B吋,系统将测试存储元件是否具有大于或等于Vvb的阈值电压。当将存储元件编程为状态C时,系统将确定存储元件是否具有大于或等于Vvc的阈值电压。在一个实施例中,被称为全序列编程,可以将存储元件从E状态直接编程为经编程状态A、B或C中的任意状态。例如,可以首先擦除要编程的全体存储元件,以使得该全体中的所有存储元件都处于经擦除状态E。然后,使用诸如图13所示的一系列程序脉冲来将存储元件直接编程为状态A、B或C。在将ー些存储元件从状态E编程为状态A的同时,可以将其它存储元件从状态E编程为状态B以及/或者从状态E编程为状态C。此外,针对ー个或多个数据状态,使用偏移验证水平和目标验证水平。例如,对于A状态,VvaL和Vva分别是偏移验证水平和目标验证水平,并且对于B状态,VvbL和Vvb分别是偏移验证水平和目标验证水平。偏移验证水平相对于最終或目标验证水平偏移。根据编程方案,偏移验证水平可能高于目标验证水平。该验证水平可以表示电压或电流。
在编程期间,当A状态存储元件(打算将其编程为作为目标状态的A状态)的Vth小于或等于VvaL时,在快速编程模式下对该存储元件进行编程。这可以通过使位线接地来实现。当Vva ^ VthXVvaL时,诸如通过将关联位线电压升高至接地水平与充分抑制水平之间的水平来在慢速编程模式下对存储元件进行编程。这通过避免阈值电压的大幅増加来提供较大的精度并因此提供较窄的Vt分布。当Vth>Vva吋,对存储元件进行锁定以防止进ー步编程。同样,B状态存储元件(打算将其编程为B状态)可以具有快速编程模式和慢速编程模式。注意,在ー种方法中,对于诸如C状态的最高状态,不使用慢速编程模式,这是因为该模式对于其它状态而言不太有益。在八状态编程的示例中,例如,对于经擦除状态和7个经编程状态A-G,可以将快速编程模式和慢速编程模式用于中间状态A-F。图5示出对存储上页和下页这两个不同页的数据的多状态存储元件进行编程的两遍技术的示例。通过重复图4中的阈值电压分布400、402、404和406来示出四种状态。这些状态以及这些状态所表示的位是状态E (11)、状态A (01)、状态B (00)和状态C (10)。对于状态E,这两页都存储“I”。对于状态A,下页存储“I”并且上页存储“O”。对于状态B,这两页都存储“O”。对于状态C,下页存储“O”并且上页存储“I”。注意,尽管已对各状态分配了特定位模式,但还可以分配不同的位模式。在第一遍编程中,根据要编程为下逻辑页的位来设置存储元件的Vth。如果该位是逻辑“1”,则其由于已较早被擦除而处于适当状态,因此没有改变Vth。然而,如果要编程的位是逻辑“1”,则如箭头500所示,使Vth増加为状态A。这样结束第一遍编程。在第二遍编程中,根据被编程为上逻辑页的位来设置存储元件的Vth。在下页、上页都为I、I的情况下,由于存储元件处于状态E,因此没有发生编程。在下页、上页为O、I的情况下,由于存储元件处于状态A,因此没有发生编程。在下页、上页为0、0的情况下,发生如箭头510所表示的从状态A到状态B的转变。在下页、上页为1、0的情况下,发生如箭头520所表示的从状态E到状态C的转变。在该示例中,对于A状态和B状态,还可以分别使用偏移验证水平VvaL和VvbL。在一个实施例中,如果下页数据和上页数据这两者都可利用,则可以设置系统以执行全序列写入。如果不能利用充足的数据,则编程操作可以利用接收到的数据来对下页数据进行编程。当接收到随后的数据时,该系统接着将对上页进行编程。在又一实施例中,系统可以在对下页进行编程的模式下开始进行写入,并且在随后接收到充足数据以对字线的存储元件的全部(或大部分)进行填充的情况下转换成全序列编程模式。图6a_c示出示例的ー组阈值电压分布和使用中间状态的两遍编程。该编程技术通过针对任意特定存储元件在向先前页的相邻存储元件进行写入之后对于特定页向该特定存储元件进行写入,来降低浮置栅极到浮置栅极耦合的影响。在ー种示例实现中,非易失性存储元件使用四种数据状态来使每一存储元件存储两位数据。例如,E状态是经擦除状态并且状态A、B和C是经编程状态。如之前那样,状态E存储数据11,状态A存储数据OI,状态B存储数据00并且状态C存储数据10。还可以使用将数据编码成物理数据状态的其它编码。每个存储元件均存储两页数据。为了參考的目的,将这些数据页称为上页和下页;然而,可以对这些数据页赋予其它标记。 编程操作是两步骤处理。在第一步骤中,对下页进行编程。如果下页要保持数据I,则存储元件状态保持处于状态E (分布600 )。如果要将数据编程为O,则提高存储元件的电压的阈值以使得将该存储元件编程为状态B’(分布610)。因此,图6a示出将存储元件从状态E编程为状态B’。状态B’是临时状态B ;因此将验证点表示为低于Vvb的Vvb’。在一个实施例中,在将存储元件从状态E编程为状态B’之后,将针对下页对NAND串中的其相邻存储元件(WLn+Ι)进行编程。这将具有使状态B’的阈值电压分布加宽为被不为图6b的阈值电压分布612的阈值电压分布的效果。阈值电压分布的该明显加宽将在对上页编程时进行补救。如由分布602所示,还可以对状态E进行加宽。图6c示出对上页进行编程的处理。如果存储元件处于经擦除状态E并且上页为I,则存储元件将保持处于状态E (分布602)。如果存储元件处于状态E并且其上页数据为0,则将使该存储元件的阈值电压升高以使得该存储元件处于状态A (分布604)。如果存储元件处于中间阈值电压分布612并且上页数据为0,则将该存储元件编程为最終状态B (分布606)。如果存储元件处于中间阈值电压分布612并且上页数据为1,则将使该存储元件的阈值电压升高以使得该存储元件处于状态C (分布608)。在该示例中,对于A数据状态和B数据状态,也可以使用偏移验证水平。由图6a-c所表示的处理减轻了浮置栅极至浮置栅极耦合的影响,这是因为仅相邻存储元件的上页编程会对给定存储元件的明显阈值电压产生影响。替选的状态编码的示例是当上页数据为O时从分布612移动至状态C,并且在上页数据为I时移动至状态B。尽管图6a_c提供了关于四种数据状态和两页数据的示例,但所教导的概念可以适用于在多于或少于四种状态以及多于或少于两页情况下的其它实现。例如,每个存储元件有8种或6种状态的存储器装置当前正在规划或生产。图7示出按前后字线顺序对ー组存储元件的多遍编程操作。所示的部件可以是非常大的ー组存储元件的子组、字线和位线。在一次可能的程序操作中,在第一遍编程中对WLn-I上的存储元件(例如,存储元件702、704和706)进行编程。该步骤由圈出的“ I”来表示。接着(“2”),在第一遍编程中对WLn上的存储元件(例如,存储元件712、714和716)进行编程。在该示例中,当选择字线以进行编程时,在每个程序脉冲之后发生验证操作。在对WLn进行验证操作期间,向WLn施加一个或多个验证电压,并且向包括WLn-I和WLn+Ι的剩余字线施加通过电压(pass voltage)。这些通过电压用于使未选择的存储元件接通(使其导通),以使得对于所选字线可以发生感测操作。接着(“3”),在第二遍编程中对WLn-I上的存储元件进行编程。接着(“4”),在第一遍编程中对WLn+Ι上的存储元件进行编程。接着(“5”),在第二遍编程中将WLn上的存储元件编程为其各自的最終状态。由于对WLn+Ι进行编程,因此,WLn上的存储元件受到易于使其针对每个状态的阈值电压分布提高并变宽的耦合的影响。在单遍编程和多遍编程期间,这都会发生。在单遍的遍编程中,在移动至例如WLn-I的下一字线、然后移动至WLn、然后移动至WLn+Ι之前完全对姆条字线进行编程。图8a_f示出图2的感测块所使用的编程操作中在不同点的示例数据锁存器值。在该示例中,将每条位线与QDL、UDL和LDL这三个数据锁存器相关联。这些数据锁存器可分别被看作第一数据锁存器、第二数据锁存器和第三数据锁存器。每条位线和所选的存储元件可以具有第一数据锁存器、第二数据锁存器和第三数据锁存器。一条位线的第一数据锁存器对应于另一条位线的第一数据锁存器,例如,这两者都可以是QDL。一条位线的第二数据锁存器对应于另一条位线的第二数据锁存器,例如,这两者都可以是UDL。一条位线的第三数据锁存器对应于另一条位线的第三数据锁存器,例如,这两者都可以是LDL15UDL和LDL分别存储上页的位信息和下页的位信息,而QDL存储与存储元件是否已超过较低验证水平 有关的信息。图8a示出在开始根据关联存储元件的目标数据状态进行编程时每组数据锁存器的位值。对于E状态的存储元件,所有的锁存器都被设置为I。对于A状态存储元件,QDL、UDL和LDL锁存器分别被设置为0、0和I。对于B状态存储元件,所有的锁存器被设置为O。对于C状态存储元件,QDL、UDL和LDL锁存器分别被设置为O、I和O。图Sb示出在A状态存储元件的Vth已超过较低验证水平VvaL之后根据关联存储元件的目标数据状态的、每个数据锁存器的位值。如由虚线框所示,QDL位被翻转为I。在执行验证操作之后,在毎次程序验证迭代结束时进行数据锁存器的改变。图Sc示出在A状态存储元件的Vth已超过目标验证水平Vva之后根据关联存储元件的目标数据状态的、每个锁存器的位值。如由虚线框所示,UDL位被翻转为O。图8d示出在B状态存储元件的Vth已超过较低验证水平VvbL之后根据关联存储元件的目标数据状态的、每个锁存器的位值。如由虚线框所示,QDL位被翻转为I。图Se示出在B状态存储元件的Vth已超过目标验证水平Vvb之后根据关联存储元件的目标数据状态的、每个锁存器的位值。如由虚线框所示,UDL位和LDL位被翻转为I。图8f示出在C状态存储元件的Vth已超过目标验证水平Vvc之后根据关联存储元件的目标数据状态的、每个锁存器的位值。如由虚线框所示,QDL位和LDL位被翻转为I。图9示出除两个未使用的数据锁存器组合以外、针对不同的数据状态根据存储元件的快速模式、慢速模式或禁止模式的图8a_8f的数据锁存器值。如所述的,存储元件可以在快速编程模式下进行编程,直到达到其目标数据状态的偏移验证水平为止,此后,该存储元件在慢速编程模式下进行编程,直到达到目标数据状态的目标验证水平为止,此后,禁止该存储元件进行进ー步编程。这里所提供的数据锁存器包括对于不同编程模式以及对于不同数据状态而言不同的三位組合。“E”表示保持处于E状态从而没有发生失败的E状态存储元件。“Efail”表示受到干扰而上升到E状态以上从而发生失败的E状态存储元件。这两种情形均由相同的数据锁存器值来表示,这是因为根据写入数据将这两者规定为E状态存储元件。对于A状态存储元件,“Afast”、“Aslow”和Ainhibit (“Ainh”)分别表示快速模式、慢速模式和禁止模式。同样,对于B状态存储元件,“Bfast”、“Bsl0W”和Binhibit (“Binh”)分别表示快速模式、慢速模式和禁止模式。对于C状态存储元件,“Cfast”和Cinhibit (“Cinh”)分别表示快速模式和禁止模式。在编程操作结束吋,A状态存储元件、B状态存储元件和C状态存储元件使得QDL=UDL=LDL=1,使得无法通过其数据锁存器来将它们彼此区分。同样,利用该实现,在编程操作结束时无法将E状态存储元件与A状态存储元件、B状态存储元件和C状态存储元件区分开。可以通过实现以下来发现该问题的解决方案由于存在三个数据锁存器,因此存在三元组(QDL,UDL,LDL)的23=8个可能的特有組合。然而,在该示例中,存储元件可以仅以六种类别为特征E状态、E状态以上但VvaL以下、在VvaL与Vva之间、Vva以上但VvbL以下、VvbL与Vvb之间、以及Vvb以上但Vvc以下。因而,没有使用如下两个组合即,#1(O, I, I)和 #2 (I, 1,0)。
这些组合可以用于进行错误检测和数据恢复的目的。组合#1的优点在于该组合的UDL和LDL数据与常规的E状态存储元件的数据相同,即,UDL=I和LDL=I,这意味着E状态存储元件的上页位信息和下页位信息保持不变。对于该配置,使用QDL=O,而QDL=I用于表示禁止的A状态存储元件、B状态存储元件和C状态存储元件。这允许在编程操作结束时将E状态存储元件与A状态存储元件、B状态存储元件和C状态存储元件区分开。图10示出图9的数据锁存器值的变型,其使得经擦除状态具有不同于禁止的A状态、B状态和C状态的组合。这里,对于“E”存储元件和“Efail”存储元件,QDL=0,UDL=I并且LDL=1。对于其它数据状态,可以保持如图9中所提供的相同组合,并且在图10中重复这些组合。在编程操作结束时,所有的E状态存储元件具有数据锁存器(0,1,1,),而已被禁止的A状态存储元件、B状态存储元件和C状态存储元件具有数据锁存器(1,I, I)。因而,在编程结束时,对QDL的扫描可以区分E状态存储元件与其它存储元件。E状态存储元件可被看作在较大的一组存储元件中的第一子组的存储元件中(诸如,在字线上),并且A状态存储元件、B状态存储元件和C状态存储元件可被看作在该组的第二子组中。不同状态的各种存储元件可以随机分布并混用。要将第二子组中的存储元件编程为至少三种目标数据状态,包括与E状态相邻的第一目标数据状态(A状态)、与第一目标数据状态相邻的第二目标数据状态(B状态)以及与第二目标数据状态相邻的第三目标数据状态(C状态)。第二子组中已成功完成编程的每个存储单元均具有其关联数据锁存器之一(例如,QDL)中的第一值(例如,I),并且利用与其关联数据锁存器之一(例如,QDL)中的第ー值不同的值(例如,O)来标识第一子组中的每个存储元件。该修改后的数据锁存器配置可以用于确定被称为E->X失败的E状态失败的数量,这是因为存储元件转变为较高的状态X,通常为A状态。在编程操作结束时,使用Vra(或者E状态分布与A状态分布之间的其它电压)来执行读取操作,以标识Vth>Vra的存储元件。这些存储元件在感测期间将是不导通的。基于读取操作的结果以及QDL值,可以对E->X失败的数量进行计数。如果存储元件的页内的失败的数量高于被称为位忽略阈值(例如,由存储器装置内的ROM保险丝參数设置)的阈值,则可以对该页设置程序状态=失败。该页的数据可以通过涉及执行全读取操作的恢复操作来恢复,其中该全读取操作包括在Vrc (或者B状态分布与C状态分布之间的其它电压)下的C状态读取、然后在Vrb (或者A状态分布与B状态分布之间的其它电压)下的B状态读取。该恢复操作还使用可通过错误检测处理、以及如接下来所述的访问数据锁存器值并执行适当的逻辑运算得到的A状态读取結果。注意,图10的该数据锁存器分配将影响表示快速编程模式或慢速编程模式是否有效的程序数据传送。为了进行比较,图9的方法通过仅查看QDL (使用SA〈=QDL)来判定快速编程模式或缓慢编程模式是否有效,并且相应地设置位线偏差(Vbl对于慢速编程模式而言升高,而对于快速编程模式而言接地)。这里,“SA〈=QDL”表示数据从QDL被加载到SA中。利用图10的方法,偏差“O”可以重写程序禁止信息。为了避免该情况,可以将新的程序数据传送改变为SA〈=QDL I (UDL&LDL),其中“ | ”表示逻辑或运算。利用图10的方法,在编程操作结束时,可以对经过编程的A状态存储元件、B状态存储元件和C状态存储元件进行计数,以查看总数是否小于阈值。这可以通过执行逻辑运算YB0X〈=UDL&LDL并且以YBOX对O的数量进行计数来实现,该逻辑运算使得向临时变量YBOX加载值UDL&LDL,其中表示逻辑与。可以通过感测模块的管理电路来进行逻辑运算,并且YBOX可以保持在感测模块的管理电路、状态机或其它位置中。 图9的方法与图10的方法之间的ー个相似之处在于,当(UDL, LDL) = (1,1)时禁止存储兀件。图Ila示出在失败检测处理中使用基于图10的数据锁存器值以及A状态读取操作的结果的逻辑操作来提供经擦除状态错误和经过编程的较高状态错误的计数。图Ila重复图10的表中的QDL行。为了參考,在图Ilb中也重复了图10的行。在编程操作结束时,QDL将标识剩余的经过编程的存储元件。SA〈=read@A表示在Vra处执行读取操作,并且将该读取操作的结果加载到例如感测模块的感测放大器(SA)中。该读取操作将处于经擦除状态的存储元件与处于目标数据状态中的相邻状态(例如,A状态)的存储元件区分开。该读取操作确定任何E状态存储元件是否已由于干扰而越过Vra。在进行该读取吋,“E”(非失败E状态)存储元件将导通,而“Efail”(失败E状态)存储元件以及所有的经编程状态(例如,A状态、B状态、C状态)存储元件将不导通。在该示例中,在感测期间,如果存储元件导通,则SA=0,而如果存储元件不导通,则SA=I。如所示,对于“E”存储元件,SA=0,并且对于“Efail”存储元件,SA=I。同样,对于所有的经编程状态存储元件,SA=1。在逻辑运算SA& QDL中,“&”表示逻辑与,并且“、表示负或反转。SAfQDL标识处于“Efail”、“Afast”、“Bfast”和“Cfast”状态的存储元件。在编程结束时,无法被编程为目标状态的一些存储元件被忽略。处于“Afast”、“Bfast”和“Cfast”状态的存储元件包括这些被忽略的存储元件。可以通过在逻辑运算ΥΒ0Χ〈= SA | QDL之后以YBOX对“ I ”进行计数来确定所有数据状态的错误数量。该计数包括“Efail”存储元件以及尚未完成编程(例如,处于“Afast”、“AsloW”、“Bfast”、“BsloW”和“Cfast”)并且在编程完成之前被忽略的A状态存储元件、B状态存储元件和C状态存储元件。这些被忽略的存储元件还可能造成错误。由于纠错码(ECC)可以应付这些错误,因此对所有状态的错误进行计数更加有意义。图Ilb示出在失败检测处理中使用基于图10的数据锁存器值以及A状态读取操作的结果的逻辑运算来提供经擦除状态错误(“Efail”)的计数。在该操作中,仅对“Efail”存储元件进行计数,并且可以避免对其它未完成的A状态存储元件、B状态存储元件和C状态存储元件的计数。除图Ila中的SA行以外,图Ilb还重复图10的表中的QDL行、UDL行和LDL行。在这两种计数方法(所有状态或仅E状态)中,三个数据锁存器QDL、UDL和LDL中的数据将保留该数据以进行数据恢复。一旦失败计数超过阈值,则可以执行全字线读取操作以恢复数据并将该数据移动至存储器装置内的其它位置。为了仅对“Efail”存储元件进行计数,可以使用逻辑运算YB0X〈=SA& QDL&UDL&LDL。这向临时变量YBOX分配值。虚线框表示对于“Efail”,YBOX=I,而对于E以及其它所有的存储元件状态,ΥΒ0Χ=0。因而,YBOX将“Efail”存储元件与其它所有的存储元件区分开。因而,可以通过在编程操作期间在ー组存储元件当中对YBOX=I的存储元件的数量进行计数来对“Efail ”存储元件的数量进行计数。图Ilc示出在数据恢复处理中使用基于图10的数据锁存器值以及C状态和B状态读取操作的结果的逻辑运算。数据恢复的步骤如下。I. QDL恢复ー根据QDL*く = rQDL&UDL&LDL),可以从三个数据锁存器内的剩余数据获得QDL数据。 2.在C状态(Vrc)下进行读取。由于C状态存储元件中的一部分可能没有达到其目标状态并且在编程期间被忽略,因此,可以假定将错误地读取C状态数据中的一部分(由X来标记)。可以通过逻辑运算UDL*〈=SAI (UDLfLDL)来更新UDL以恢复C状态。3.使用UDL#〈=UDL | QDL来再次更新UDL锁存器一次以完全恢复上页数据。4.在B状态(Vrb)下进行读取。再次,由干与以上针对C状态所述的原因相同的原因,假定会错误地读取B状态数据中的一部分(由X来标记)。由于剩余了数据,因此可以通过逻辑运算LDL〈=LDL& SA来将LDL数据变换成原始程序数据。这里,由于上页数据恢复依赖于LDL和QDL上的剰余数据,因此首先进行C读取。虚线框表示UDL和LDL的最终恢复值。根据图10或图Ilb可以验证,这些值与根据写入数据而在数据锁存器中原始设置的值相同。因而,通过执行该数据恢复操作,可以正确地恢复每个存储元件的下页数据信息和上页数据信息这两者。注意,可以在感测块的管理电路中或者在状态机内执行逻辑运算,其中这两者都在存储器芯片上。这无需将数据传送至外部的片外控制器(例如,图I中的150)以在此执行操作。因而,可以以对于片外控制器或主机基本透明的方式在芯片上执行错误检测和数据恢复操作。图12a示出示例编程和编程后失败检测处理和恢复操作。在步骤1200中,对于上页的写入数据,编程操作开始。注意,可以预先对下页进行编程。步骤1202配置与各存储元件的感测模块相关联的数据锁存器。例如,这些感测模块可以与各位线以及NAND串或串联连接的存储元件的其它链相关联。数据锁存器被配置为标识保持在经擦除状态的第一子组的存储元件、以及被编程为各自的目标数据状态(诸如,A状态、B状态和C状态)的第二子组的存储元件。在步骤1204中更新程序循环计数。最初,将该程序循环计数设置为O。在步骤1206中,向包括第一子组和第二子组的存储元件的所选字线施加程序电压Vpgm。此夕卜,感测模块基于数据锁存器来设置禁止或程序模式。在步骤1208中,使用偏移验证水平和目标验证水平来执行验证操作。这是感测操作当各存储元件处于导通状态时,该感测操作可以使用感测模块来对相应位线进行预充电并且允许感测节点放电到位线。当存储元件处于非导通状态时,该存储元件未大量放电。在放电时段之后,可以将作为结果所得到的数据传送至管理电路以监视并控制每个存储元件的编程。具体地,在步骤1210中,管理电路基于来自验证操作的结果来更新数据锁存器,诸如结合图10所述的那样。步骤1212确定经过编程的存储元件的数量。例如,如结合图10所述,可以通过执行逻辑运算YBOX〈=UDL&LDL来对经过编程的A状态存储元件、B状态存储元件和C状态存储元件进行计数。判定步骤1214判定经过编程的存储元件的数量是否小于阈值。如果判定步骤1214为真,则编程操作成功(步骤1216),并且如结合图12b和12c进ー步描述的那样,执行编程后错误检测和恢复操作(步骤1218)。当第二子组内的不超过最大数量的存储元件未能达到其各自的目标数据状态时,判断步骤1214为真。如果判定步骤1214为假,则判定步骤1222判断循环计数是否已超过最大值。如果判定步骤1222为真,则编程操作不成功(步骤1224)。如果判定步骤1212为假,则使Vpgm升高(步骤1220),并且更新循环计数(步骤1204),以使得执行其它的程序验证迭代。图12b示出图12a的步骤1218的编程后错误检测和恢复操作的更多详情。在步骤1230中,在Vra下执行ニ值读取操作。參见图Ila中的运算SA〈=read@A。步骤1232标 识Vth>Vra的存储元件(例如,根据SA=I )。步骤1234对Vth>Vra的存储元件的数据锁存器进行评价以根据写入数据来标识期望保持处于E状态的存储元件(“Efail”)。步骤1234可以执行结合图Ilb所述的运算YB0X〈=SA& QDL&UDL&LDL。步骤1236例如根据YBOX=I的存储元件来对E状态存储元件的失败次数进行计数。在判定步骤1238中,如果计数小于或等于阈值,则在步骤1240中设置状态=通过。例如,这表明检测到少量的ECC可纠正错误,从而无法确保将数据重写入另一位置。如果判定步骤1238为假,则设置状态=失败。可以将检测到错误的块标记为坏的,使得不再使用该块。此外,如结合图12c进ー步所述的,在步骤1244中执行恢复操作。图12c示出图12b的步骤1244的数据恢复操作的更多详情。步骤1250在Vrc下执行读取操作(图Ilc中的SA〈=read@C),步骤1252在Vrb下执行读取操作(图Ilc中的SA〈=read@B),并且也如结合图Ilc所述的那样,步骤1254基于读取结果和数据锁存器中的值来执行逻辑运算。步骤1256将恢复的数据写入其它块内的其它字线。图13示出编程操作以及后续的数据恢复处理中的所选字线的示例波形。编程操作可以包括一系列程序验证迭代,其中向所选字线施加程序脉冲(例如,1302、1304、1306、...、1308),接着是为¥¥&し¥¥&、¥¥乩、¥¥13和¥¥。的验证电压(例如,1310)。该编程操作在从开始时间ts到最終的结束时间tf的时间段1312内延伸。在错误检测处理中在ta处发生Vra下的读取操作。基于错误检测处理的结果,可以开始数据恢复操作,该数据恢复操作可使用在tc处在Vrc下的C状态读取以及在tb处在Vrb下的B状态读取。可以提供错误检测和恢复处理的各种替选。I.在所述方案中,使用E状态存储元件的数据锁存器的(0,1,I)配置来将这些E状态存储元件与使用(1,1,I)配置的禁止的A/B/C状态存储元件区分开。替选是将(0,I, I)用于禁止的A/B/C状态存储元件并且将(1,1,I)用于E状态存储元件的相反方法。2.在所述方案中,在编程操作结束时,将特有的(0,I, I)数据锁存器配置用于E状态存储元件,以将该E状态存储元件与任何其它存储元件区分开。然而,通常,可以将(0,1,
I)配置作为替代分配给禁止的A/B/C状态存储元件中的任ー个,因而,在编程操作结束时,能够区分该状态的存储元件。例如,可以向禁止的A状态存储元件分配(0,1,1),以使得在编程结束时,可以将经编程的A状态存储元件与其它存储元件区分开。根据选择了哪个选项,确保了将针对与该状态相对应的存储元件恢复正确的数据。这在仅一种状态的数据损坏的情形下会是有用的。例如,在ー些具体情况下,存储元件难以被编程为C状态,从而导致该页使程序状态失败,而关于其它所有状态的数据看上去都正常。在这样的情况下,可以通过使用A读取、B读取和C读取来根据QDL数据和其它状态确定C状态存储元件,从而恢复完整的数据。还可以提供ROM保险丝选项以选择要将哪个状态与该数据恢复方案相关联。3.如所述,存储两种未使用的数据锁存器配置(0,I, I)和(1,1,0)。可以一起使用这两种组合来表示两种不同类型的存储元件。例如,可以使用(0,I, I)配置来表示E状态存储元件,而可以将(1,1,O)配置用于禁止的C状态存储元件。在这种情况下,对于至少这两种数据状态,可以确保完整数据恢复。注意,以上结合图9描述了通常不使用(QDL,UD L, LDL)的两种组合SP,#1(0,I, I)和#2(1,1,0)。在所提供的详细示例中,使用了本身的组合#I。然而,例如,还可以使用组合#1和组合#2这两者以从两种失败进行恢复。例如,可以向E状态失败分配组合#1,并且可以向A状态失败(例如,Ainh)分配组合#2。在这种情况下,可以恢复E->X以及A_>X失败。作为另ー替选,根据其它锁存器分配,可以使用组合#2来代替组合#1。在一个实施例中,一种用于对非易失性存储系统中的一组存储元件进行编程的方法,所述方法包括基于写入数据,在与该组中要保持在经擦除状态的第一子组中的存储元件相关联的数据锁存器中、以及在与该组中要编程为各自的目标数据状态的第二子组中的存储元件相关联的数据锁存器中配置数据。该方法还包括禁止第一子组中的存储元件、同时对所述第二子组中的存储元件进行编程,并且基于第二子组中的存储元件在编程期间的进度来更新第二子组中的存储元件的关联数据锁存器。该方法还包括确定第二子组中不超过最大数量的存储元件未能达到其各自的目标数据状态(这与具有不大于指定数量的位或存储元件错误相关),使得认为对第二子组中的存储元件的编程成功地完成。该方法还包括响应于对第二子组中的存储元件的编程的成功完成,通过对第一子组中的存储元件执行用于区分经擦除状态与目标数据状态中的相邻状态的读取操作来确定第一子组中发生错误的存储元件的数量。在另ー实施例中,一种非易失性存储系统包括一组非易失性存储元件,该组非易失性存储元件包括该组中要保持在经擦除状态的第一子组中的存储元件以及该组中要编程为各自的目标数据状态的第二子组中的存储元件。还提供了与每个存储元件相关联的数据锁存器、以及至少ー个控制电路。该至少ー个控制电路用于(a)基于写入数据,在与第一子组中的存储元件相关联的数据锁存器中以及在与第二子组中的存储元件相关联的数据锁存器中配置数据;(b)禁止第一子组中的存储元件,对第ニ子组中的存储元件进行编程,并且基于第二子组中的存储元件在被编程时的进度来更新第二子组中的存储元件的关联数据锁存器;(c)确定第二子组中不超过最大数量的存储元件未能达到其各自的目标数据状态,使得认为对第二子组中的存储元件的编程成功完成;以及(d)响应于对第二子组中的存储元件的编程的成功完成,通过对第一子组中的存储元件执行用于区分经擦除状态与目标数据状态中的相邻状态的读取操作来确定第一子组中发生错误的存储元件的数量。在另ー实施例中,一种非易失性存储系统包括用于基于写入数据来在与该组中要保持在经擦除状态的第一子组中的存储元件相关联的数据锁存器中、以及在与该组中要编程为各自的目标数据状态的第二子组中的存储元件相关联的数据锁存器中配置数据的装置。还提供了用于禁止第一子组中的存储元件同时对第二子组中的存储元件进行编程、并且基于第二子组中的存储元件在编程期间的进度来更新第二子组中的存储元件的关联数据锁存器的装置。还提供了用于确定第二子组中不超过最大数量的存储元件未能达到各自的目标数据状态,使得认为对第二子组中的存储元件的编程成功完成的装置。还提供了用于响应于对第二子组中的存储元件的编程的成功完成,通过对第一子组中的存储元件执行用于区分经擦除状态与目标数据状态中的相邻状态的读取操作来确定第一子组中发生错误的存储元件的数量的装置。在另ー实施例中,一种用于对非易失性存储系统中的组进行编程的方法包括基于写入数据,在与存储元件相关联的数据锁存器中配置数据,其中所述写入数据标识打算将存储元件中的至少一部分编程后的不同的目标数据状态。该方法还包括执行编程操作以将存储元件中的至少一部分编程为不同的目标数据状态,并且基于存储元件中的至少ー部分在编程操作期间的进度来更新存储元件中的至少一部分的关联数据锁存器。该方法还包括响应于编程操作的成功完成来执行读取操作,其中该读取操作区分处于不同目标数据状态中的一种目标数据状态(例如,E状态)的存储元件与处于不同目标数据状态中的其它目标数据状态(例如,A状态、B状态和C状态)的存储元件。该方法还包括从处于其它 目标数据状态的存储元件当中,通过确定期望被编程为该ー种目标数据状态的存储元件的数量来确定出错的存储元件的数量。该方法还包括如果出错的存储元件的数量足够大,则执行恢复操作以恢复写入数据。提供了相应的方法、系统以及用于执行本文中所提供的方法的计算机可读存储装置或处理器可读存储装置。前述详细描述是出于说明和描述的目的而提供的。并不意味着是详尽的或者限于所公开的确切形式。鉴于以上教导,可以进行多种变型和变化。所述实施例是为了最好地说明技术的原理及其实际应用而选择的,由此使得本领域的其它技术人员能够在各种实施例中以及通过适合于所考虑的特定使用的各种变型来最佳地利用该技木。本技术的范围旨在由所附权利要求来限定。
权利要求
1.一种用于对非易失性存储系统中的一组存储元件进行编程的方法,所述方法包括 基于写入数据,在与所述组(300)中要保持在经擦除状态的第一子组中的存储元件相关联的数据锁存器(194-197)中、以及在与所述组中要编程为各自的目标数据状态(A, B,C)的第二子组中的存储元件相关联的数据锁存器中配置数据; 禁止所述第一子组中的存储元件、同时对所述第二子组中的存储元件进行编程,并且基于所述第二子组中的存储元件在编程期间的进度来更新所述第二子组中的存储元件的关联数据锁存器; 确定所述第二子组中不超过最大数量(阈值)的存储元件未能达到其各自的目标数据状态,使得认为对所述第二子组中的存储元件的编程成功完成;以及 响应于对所述第二子组中的存储元件的编程的成功完成,通过对所述第一子组中的存储元件执行用于区分所述经擦除状态与所述目标数据状态中的相邻状态的读取操作,来确 定所述第一子组中发生错误的存储元件的数量。
2.根据权利要求I所述的方法,其中 如果所述第一子组中发生错误的存储元件的数量足够大,则执行恢复操作以恢复所述写入数据,其中,所述恢复操作对所述第二子组中的存储元件执行区分各目标数据状态的附加读取操作。
3.根据权利要求2所述的方法,其中 所述第二子组中的存储元件要被编程为至少三种目标数据状态,包括作为所述相邻状态的第一目标数据状态(A)、与所述第一目标数据状态相邻的第二目标数据状态(B)以及与所述第二目标数据状态相邻的第三目标数据状态(C);以及 所述附加读取操作区分所述第二目标数据状态与所述第三目标数据状态,然后区分所述第一目标数据状态与所述第二目标数据状态。
4.根据权利要求I至3中任一项所述的方法,其中 所述第二子组中已成功完成编程的每个存储元件均具有其关联数据锁存器之一中的第一值; 所述第一子组中的每个存储元件均利用与其关联数据锁存器之一中所述第一值不同的值来标识;以及 所述确定所述第一子组中发生错误的存储元件的数量包括使用所述第一子组中的每个存储元件的关联数据锁存器之一以及来自所述读取操作的结果来执行逻辑运算。
5.根据权利要求I至4中任一项所述的方法,其中 与每个存储元件相关联的数据锁存器包括第一(QDL)数据锁存器、第二(UDL)数据锁存器和第三(LDL)数据锁存器; 所述编程包括针对至少一种所述目标存储状态,相对于偏移验证水平和目标验证水平来验证所述第二子组中的至少一部分存储元件; 对于针对至少一种所述目标存储状态来相对于所述偏移验证水平和所述目标验证水平所验证的所述第二子组中的每个存储元件,所述第一数据锁存器(QDL)指示该存储元件是否已达到所述偏移验证水平,所述第二数据锁存器(UDL)提供上页数据,并且所述第三数据锁存器(LDL)提供下页数据; 对于所述第一子组中的每个存储元件,所述第一数据锁存器的值不同于所述第二子组中已成功完成编程的存储元件的第一数据锁存器的值;以及 所述确定所述第一子组中发生错误的存储元件的数量包括使用所述第一子组的存储元件的第一数据锁存器以及来自所述读取操作的结果来执行逻辑运算。
6.根据权利要求I至5中任一项所述的方法,其中 所述确定所述第二子组中不超过最大数量的存储元件未能达到其各自的目标数据状态包括使用所述第二子组中的每个存储元件的数据锁存器来执行逻辑运算。
7.根据权利要求I至6中任一项所述的方法,其中 所述确定所述第一子组中发生错误的存储元件的数量包括确定所述第一子组中被读取为处于至少一种所述目标数据状态的存储元件的数量。
8.根据权利要求I至7中任一项所述的方法,其中 所述确定所述第一子组中发生错误的存储元件的数量包括当所述读取操作向所述第一子组内的每个存储元件施加控制栅电压时,确定所述第一子组中不导通的存储元件的数量,其中所述控制栅电压是以区分所述经擦除状态与所述目标数据状态中的所述相邻状态的水平来施加的。
9.根据权利要求I至8中任一项所述的方法,其中 所述第二子组中的存储元件被编程有至少两页数据。
10.一种非易失性存储系统,包括 一组非易失性存储元件(300),包括所述组中要保持在经擦除状态的第一子组中的存储元件以及所述组中要编程为各自的目标数据状态的第二子组中的存储元件; 与每个存储元件相关联的数据锁存器(194-197);以及 至少一个控制电路(192),所述至少一个控制电路用于(a)基于写入数据,在与所述第一子组中的存储元件相关联的数据锁存器中、以及在与所述第二子组中的存储元件相关联的数据锁存器中配置数据;(b)禁止所述第一子组中的存储元件,对所述第二子组中的存储元件进行编程,并且基于所述第二子组中的存储元件在被编程时的进度来更新所述第二子组中的存储元件的关联数据锁存器;(c)确定所述第二子组中不超过最大数量的存储元件未能达到其各自的目标数据状态,使得认为对所述第二子组中的存储元件的编程成功完成;以及(d)响应于对所述第二子组中的存储元件的编程的成功完成,通过对所述第一子组中的存储元件执行用于区分所述经擦除状态与所述目标数据状态中的相邻状态的读取操作来确定所述第一子组中发生错误的存储元件的数量。
11.根据权利要求10所述的非易失性存储系统,其中 如果所述第一子组中发生错误的存储元件的数量足够大,则所述至少一个控制电路执行恢复操作以恢复所述写入数据,其中,所述恢复操作对所述第二子组中的存储元件执行区分各目标数据状态的附加读取操作。
12.根据权利要求10或11所述的非易失性存储系统,其中 所述第二子组中已成功完成编程的每个存储元件均具有其关联数据锁存器之一中的第一值; 所述第一子组中的每个存储元件均利用与其关联数据锁存器之一中的所述第一值不同的值来标识;以及 为了标识所述第一子组中的存储元件,所述至少一个控制电路使用所述第一子组中的每个存储元件的关联数据锁存器之一以及来自所述读取操作的结果来执行逻辑运算。
13.根据权利要求10至12中任一项所述的非易失性存储系统,其中 与每个存储元件相关联的数据锁存器包括第一(QDL)数据锁存器、第二(UDL)数据锁存器和第三(LDL)数据锁存器; 为了对所述第二子组中的存储元件进行编程,所述至少一个控制电路针对至少一种所述目标存储状态,相对于偏移验证水平和目标验证水平来验证所述第二子组中的至少一部分存储兀件; 对于针对至少一种所述目标存储状态来相对于所述偏移验证水平和所述目标验证水平所验证的所述第二子组中的每个存储元件,所述第一数据锁存器指示该存储元件是否已达到所述偏移验证水平,所述第二数据锁存器提供上页数据,并且所述第三数据锁存器提 供下页数据; 对于所述第一子组中的每个存储元件,所述第一数据锁存器的值不同于所述第二子组中已成功完成编程的存储元件的第一数据锁存器的值;以及 为了标识所述第一子组中的存储元件,所述至少一个控制电路使用所述第一数据锁存来执行逻辑运算。
14.根据权利要求10至13中任一项所述的非易失性存储系统,其中 所述至少一个控制电路使用所述第二子组中的每个存储元件的数据锁存器来执行逻辑运算,以验证所述第二子组中不超过最大数量的存储元件的最大数量未能达到所述目标数据状态。
15.根据权利要求10至14中任一项所述的非易失性存储系统,其中 为了确定所述第一子组中发生错误的存储元件的数量,所述至少一个控制电路确定所述第一子组中被读取为处于至少一种所述目标数据状态的存储元件的数量。
全文摘要
一种用于非易失性存储器系统的错误检测和数据恢复操作。即使在成功完成了对一组存储元件的编程操作之后,一些存储元件的数据也可能损坏。例如,可能通过对其它存储元件进行编程来干扰经擦除状态存储元件。为了使得在这种情形下能够恢复数据,可以将关联数据锁存器配置为允许只要完成编程就将经擦除状态存储元件与其它数据状态区分开。此外,在完成编程之后,可以执行单次读取操作。使用来自读取操作的结果以及数据锁存器中的值来执行逻辑运算,以标识已杂散到另一数据状态的经擦除状态存储元件。如果错误数量超过阈值,则开始针对其余状态进行读取操作的完全恢复操作。
文档编号G11C11/56GK102754165SQ201180007275
公开日2012年10月24日 申请日期2011年1月27日 优先权日2010年1月28日
发明者杰弗里·W·卢策, 迪潘舒·杜塔, 闫利 申请人:桑迪士克技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1