用于刷新存储器设备中的数据的系统和方法与流程

文档序号:11160895阅读:575来源:国知局
用于刷新存储器设备中的数据的系统和方法与制造工艺

本申请要求2014年10月6日提交的美国申请号14/507,321的优先权,所述申请的全部内容通过引用结合在此。

技术领域

本申请总体上涉及对系统中的数据进行管理。更确切地,本申请涉及刷新存储器设备中的数据。



背景技术:

存储器设备可以将数据编程到其中的单元中。然而,在编程之后立即或者在一段时间之后读取被编程到单元中的数据时可能存在问题。例如,在闪存的背景下,被编程到多层单元(其中,多个位被编程到单个单元中)中的数据可能由于数据保持问题而劣化。



技术实现要素:

公开了用于刷新存储器设备中的数据的系统和方法。在一方面,公开了一种存储器设备。所述存储器设备包括非易失性存储器以及与所述非易失性存储器通信的处理器电路。所述处理器电路包括:擦除模块,所述擦除模块被配置成用于擦除所述非易失性存储器中的区段;编程模块,所述编程模块被配置成用于仅在所述存储器区段已经被所述擦除模块擦除之后才将数据编程到所述存储器区段中;以及刷新模块,所述刷新模块被配置成用于在所述存储器区段还没有被所述擦除模块擦除的情况下刷新所述存储器区段中的所述数据的一部分或全部。

在另一方面,公开了一种存储器设备,所述存储器设备包括存储器控制器电路以及一个或多个存储器芯片。所述存储器控制器电路包括:错误校正模块,所述错误校正模块被配置成用于确定从一个或多个存储器芯片中读取的数据中的错误;以及刷新触发模块,所述刷新触发模块被配置成用于基于所述错误而判定是否命令刷新所述数据的部分或全部。所述一个或多个存储器芯片与所述存储器控制器电路通信,其中所述一个或多个存储器芯片各自包括:存储器阵列;刷新模块,所述刷新模块被配置成用于响应于刷新命令而刷新所述存储器阵列中的所述数据的部分或全部;以及编程验证模块,所述编程验证模块被配置成用于验证对在所述存储器阵列中的所述数据的所述部分或全部的所述刷新。

在又另一方面,公开了一种方法。在存储器设备中进行的所述方法包括:使用第一编程方案将数据编程到所述存储器设备中的存储器区段中;确定所述存储器的所述区段中的所述数据中的一个或多个错误;基于所述一个或多个错误而判定是否刷新所述数据的部分或全部;以及响应于确定刷新所述数据的所述部分或全部而使用第二编程方案将所述数据的所述部分或全部编程到所述存储器的所述区段中,所述第二编程方案不同于所述第一编程方案并且具有比所述第一编程方案少的步骤。

在查阅以下附图、具体实施方式和权利要求书之后,其他的特征和优点将变得清楚。此外,公开了其他实施例,并且实施例中的每一个可以单独地或组合在一起使用。现在将参照附图对所述实施例进行描述。

附图说明

参照以下附图和说明可以更好地理解所述系统。在附图中,相似的参考号遍及所有不同的视图指代对应的部分。

图1A展示了与存储器设备相连接的主机系统。

图1B展示了图1A的存储器设备控制器和存储器芯片的另一个框图。

图1C展示了在所述存储器设备控制器和存储器芯片内的刷新的数据流。

图2A展示了存储器设备控制器芯片,这是在图1A中描绘的存储器设备控制器的第一示例。

图2B展示了存储器设备控制器芯片,这是在图1A中描绘的存储器设备控制器的第二示例。

图3A展示了在图1A中描绘的存储器芯片控制器的示例。

图3B展示了例如在图1A中描绘的存储器中使用的存储器芯片的框图的示例。

图4是在图3B的存储器存储体中可以使用的存储器单元阵列的代表性电路图。

图5展示了图3B的存储器存储体的示例物理存储器组织。

图6示出了图5的物理存储器的一部分的展开视图。

图7A展示了示例非易失性存储器编程图,展示了每单元三位的存储器中的三阶段NAND闪存编程操作中每一阶段的目标电压水平。

图7B是图7A中展示的编程序列的对字线进行编程的序列的图表。

图8A展示了将数据编程到存储器区段中、判定是否刷新所述数据、并刷新所述数据的部分或全部的第一示例的流程图。

图8B展示了将数据编程到存储器区段中、判定是否刷新所述数据、并刷新所述数据的部分或全部的第二示例的流程图。

图9展示了触发对数据的读取、使用错误校正编码(ECC)确定位错误率(BER)、并使用所述BER来判定是否刷新所述数据的一个示例的流程图。

图10A展示了从控制存储器芯片的存储器设备控制器的角度看对数据进行刷新的第一示例的流程图。

图10B展示了从存储器芯片的角度看对数据进行刷新的所述第一示例的流程图。

图11A展示了从控制存储器芯片的存储器设备控制器的角度看对数据进行刷新的第二示例的流程图。

图11B展示了从存储器芯片的角度看对数据进行刷新的所述第二示例的流程图。

图12展示了从控制存储器芯片的存储器设备控制器的角度看对数据进行刷新的第三示例的流程图。

图13A展示了在编程操作之后判定是否进行刷新操作并进行刷新操作的流程图。

图13B展示了判定是否对遭受数据保持问题的块进行刷新操作并进行刷新操作的流程图。

图13C展示了判定是否对遭受循环应力问题的块进行刷新操作并进行刷新操作的流程图。

图14A展示了处于多个不同阶段的每单元3位的不同状态的第一图表,包括由于电荷损失造成的改变。

图14B展示了处于多个不同阶段的每单元3位的不同状态的第一图表,包括由于刷新造成的改变。

图14C展示了处于多个不同阶段的每单元1位的不同状态的第一图表,包括由于电荷损失造成的改变。

图14D展示了处于多个不同阶段的每单元1位的不同状态的第一图表,包括由于刷新造成的改变。

具体实施方式

如在背景技术部分中讨论的,所述存储器设备可以将数据编程到存储器单元中。所述存储器单元可以被编程以在相应单元中存储一个位或多个位。例如,所述存储器单元可以被操作以存储两个电荷层,使得在每个单元中存储单个位的数据。这典型地被称为二进制或单层单元(SLC)存储器。作为另一个示例,所述存储器单元可以被操作来在每个电荷储存元件或区域中存储多于两个可检测电荷层,由此在每个中存储多于一个位的数据。后一种构型被称为多层单元(MLC)存储器。在存储器中可以使用一种或两种类型的存储器单元,例如可以使用二进制闪存来缓存数据并且可以使用MLC存储器来进行长期存储。

例如,在被配置成用于3个位的信息的MLC存储器单元中,表示这3个位必然存在23=8种可能状态。这8种状态(在此称为Er、A、B、C、D、E、F和G,其中Er是指擦除状态)是所述单元可以被编程到的8个分立的电压水平(Vt)。在新近编程后的这8种编程后状态的示例在图14A的图表中用虚线展示。同样,SLC的在新近编程后的编程状态的示例在图14C的图表中用虚线展示。每个单元中存在的位数的示例仅用于展示的目的。

然而,立即或在一段时间后从所述存储器单元中读取数据可能产生错误。读取中的错误可能是由于Vt移位(Vt下移)。更具体地,Vt移位的发生可能:是在对单元进行编程之后不久的新近条件下;是由于数据保持问题;和/或是由于所述存储器设备的大量循环。例如,对单元进行编程之后,Vt可能下移而造成故障位计数(FBC)增大,由此使得系统性能下降并潜在地造成在所述存储器设备中错误地检测高的位错误率(BER)。

Vt下移现象可能致使所述状态的Vt分布在尾侧上略微加宽,甚至在没有数据保持问题的情况下也是如此,如下文讨论的。这种类型的Vt下移典型地并不是足够严重而立即造成不可校正的错误校正码(UECC)的问题、而是可能致使故障位计数(FBC)增大。由于新近条件的Vt下移造成的增大的FBC可能具有两种负面影响:(1)在初期随着FBC的增大,存储器设备读取性能可能由于更长的错误校正编码(ECC)解码时间而受到影响;并且(2)可能存在更大的机会造成对系统BER的过度检测,由此触发其他系统级别的错误处理机制(例如读取擦洗/刷新、CVD、EPWR/RBAX恢复等等)并且妨碍了总体系统性能且不必要地引入了额外的P/E循环。

作为另一个示例,Vt可能由于数据保持问题而移位。更具体地,数据保持问题可能致使存储器设备的Vt分布加宽并且在向下右侧尾部上向下移位更多。

作为又一个示例,Vt可能由于存储器设备的操作而移位。更具体地,随着存储器设备被大量循环,编程串扰和过度编程情况可能变得越来越严重,由此致使存储器设备的Vt分布在右侧尾部和左侧尾部上均加宽、并且最终造成UECC,因为所述存储器设备已经尝试达到最大耐久能力。因此,所述单元可能失去电荷,例如图14A和14C的图表中的实线所展示的(这与编程时的电荷产生偏差)。

典型地,随着Vt移位加重,所述存储器设备需要对位于第一块中的数据重新编程。具体地,将选择之前已经被擦除的第二块。所述存储器设备接着将用原先存储在所述第一块中的数据来对第二块编程。之后,将擦除所述第一块以使得能够将其他数据编程到其中。

在一个实施例中,不将某个存储器区段(例如块或子块)中的数据编程到另一个块中。而是,刷新所述存储器区段中的数据。在图14B中展示了这样的一个示例,其中虚线展示了在刷新之后的这8种状态。在图14D中展示了这样的另一个示例,其中虚线展示了在刷新之后SLC中的这两种状态。如图所示,所述刷新之后的状态减小了Vt移位而不需要重新编程。这与将来自这个块的数据重新载入另一个块中并擦除这个块的传统方法形成对比,所述传统方法导致了写入放大并降低了所述存储器块的编程/擦除循环能力。相比之下,可以利用参数的改变对这个块的部分或全部进行刷新(例如,仅上部页编程,对单个字线、或对小于整个块的一组字线),并且不需要重新载入/擦除。例如在没有擦除的情况下刷新上部页使得擦除应力较小并且编程时间较短。

更具体地,所述存储器设备判定在所述存储器区段中的所述数据的部分或全部中是否存在错误。在一个实施例中,所述存储器设备可以通过读取所述存储器区段的部分或全部、并且确定读取中的错误来判定是否存在错误。如下文更详细讨论的,对存储器区段的读取可以用若干方式中的一种来触发,例如通过外部请求(例如,主机系统命令所述存储器设备进行读取,和/或主机系统命令所述存储器设备进行写入),或例如通过内部请求(例如,所述存储器设备控制器可以确定将进行内部读取)。例如,触发对所述存储器区段的读取可以是响应于:将数据从SLC折叠到MLC中;标识受应力的存储器区段(例如,受应力的块);标识老化的存储器区段(例如,具有高的编程/擦除计数的块)。进一步,读取中的错误可以用若干方式中的一种来确定。一种方式是使用错误校正编码(ECC)引擎来生成位错误率(BER),如下文更详细讨论的。

可以对读取中的错误进行分析以便判定是否刷新所述存储器区段的部分或全部。在一个实施例中,可以将所述错误与阈值进行比较。响应于确定了所述错误超过所述阈值,可以进行刷新。与所述错误进行比较的这个阈值在一个实施例中可以是静态的并且在替代性实施例中可以是动态的。例如,所述阈值可以基于操作条件(例如,所述存储器设备的温度)和/或基于所述存储器的寿命或使用(例如,对于新编程的MLC块而已不同的阈值、并且基于编程/擦除循环、或对块的读取访问,如下文更详细讨论的)来动态地选择。

响应于确定刷新所述块,可以用若干方式中的一种来进行刷新。在一个实施例中,所述存储器设备控制器可以命令所述存储器芯片进行所述刷新,其中所述存储器设备控制器验证所述刷新是否已恰当地进行。例如,所述存储器设备控制器可以命令所述存储器芯片在存储器区段(例如块或字线)中进行刷新。之后,所述存储器设备控制器可以读取所述存储器区段、确定读取中的错误、并且接着基于所述读取中的错误来判定所述刷新是否已恰当地进行。在一个实施例中,响应于确定了所述刷新还没有成功地进行,所述存储器设备控制器可以发送另一个命令给所述存储器芯片来在存储器区段中进行刷新,其中可选地在所述刷新中对所述存储器芯片使用不同的编程电压。之后,所述存储器设备控制器可以读取所述存储器区段、确定读取中的错误、并且再次判定所述刷新是否已恰当地进行。在此方面,所述存储器设备控制器可以迭代进行多个刷新循环。在替代性实施例中,响应于确定了所述刷新还没有成功地进行,所述存储器设备控制器可以命令对所述数据进行重新编程(例如,所述存储器设备将所述数据编程到另一个存储器区段、并且擦除所述存储器区段)。

在替代性实施例中,所述存储器设备控制器可以命令所述存储器芯片进行所述刷新,其中所述存储器芯片验证所述刷新是否已成功地进行。如下文更详细讨论的,所述存储器芯片可以包括编程验证电路,通过所述编程验证电路,所述存储器芯片可以验证经编程的电压事实上是否已被编程到所述单元中。所述存储器芯片可以返回所述编程验证电路的结果,所述结构指示了所述刷新是否已成功地进行。在一个实施例中,响应于所述存储器芯片指示所述刷新还没有成功地进行,所述存储器设备控制器可以命令对所述数据进行重新编程。在替代性实施例中,响应于所述存储器芯片指示所述刷新还没有成功地进行,所述存储器设备控制器可以命令所述存储器芯片再次刷新所述数据。

在一个实施例中,所述存储器设备控制器可以命令所述存储器芯片进行所述刷新,其中所述存储器设备控制器和/或所述存储器芯片验证所述刷新是否已恰当地进行。例如,所述存储器设备控制器可以命令所述芯片刷新所述数据。所述存储器芯片可以刷新所述数据、并且使用所述编程验证电路来验证所述刷新是否已成功地进行。响应于所述存储器芯片指示所述刷新还没有成功地进行,所述存储器设备控制器可以验证所述刷新是否已成功地进行。在第一个更具体的实施例中,在所述存储器设备控制器接收到所述刷新还没有成功地进行的指示之后,所述存储器设备控制器可以读取所述存储器区段而不进行另一个刷新操作、并且使用所述ECC引擎来验证所述刷新是否已成功地进行。响应于所述ECC引擎确定了所述刷新还没有成功地进行,所述存储器设备控制器可以命令对所述数据进行重新编程。在第二个更具体的实施例中,所述存储器设备控制器可以命令用潜在地不同的刷新电压进行另一次刷新、并且之后使用所述ECC引擎来判定所述刷新是否已成功地进行。

参见所述图,图1A展示了主机系统100和存储器设备102。所述主机系统100可以包括任何类型的主机设备,例如固定的计算机系统(例如,台式计算机)或移动的计算机系统(例如,膝上型计算机、智能电话、平板电脑、或类似物)

图1A的主机系统100可以被看成两个主要部分,在关注存储器设备102的情况下,所述主机系统由电路与软件的组合构成。它们是与所述存储器设备102相接的应用程序部分108和驱动程序部分110。例如在台式计算机、膝上型计算机、智能电话、平板电脑中,所述应用程序部分110可以包括运行文字处理、图形、控制或其他大众应用软件的处理器(例如,CPU)112、以及用于管理主机系统100上的数据的文件系统114。在相机、手机、或其他主要专用于执行单个一组功能的主机系统中,所述应用程序部分108包括操作所述相机来拍摄和存储照片、操作所述手机来打电话和接电话等等的软件。

图1A的存储器设备102可以包括半导体存储器设备。半导体存储器设备包括易失性存储器设备(如动态随机存取存储器(“DRAM”)或静态随机存取存储器(“SRAM”))、非易失性存储器设备(如电阻式随机存取存储器(“ReRAM”)、电可擦除可编程只读存储器(“EEPROM”)、闪存(其还可以被考虑为EEPROM的子集)、铁电随机存取存储器(“FRAM”)、和磁阻随机存取存储器(“MRAM”))、以及能够存储信息的其他半导体元件。每种类型的存储器设备可以具有不同的配置。例如,闪存设备可以被配置成NAND或NOR构型。

所述存储器设备可由无源和/或有源元件以任何组合来形成。通过非限制性示例的方式,无源半导体存储器元件包括ReRAM设备元件,在一些实施例中,所述元件包括如反熔丝相变材料等电阻率切换存储元件以及(可选地)如二极管等操控元件。进一步通过非限制性示例的方式,有源半导体存储器元件包括EEPROM和闪存设备元件,在一些实施例中,所述元件包括如浮栅、导电纳米颗粒、或电荷存储介电材料等包含了电荷存储区域的元件。

多个存储器元件可以被配置为使得它们串联或使得每个元件是可单独访问的。通过非限制性示例的方式,NAND配置(NAND存储器)中的闪存设备通常包含串联的存储器元件。NAND存储器阵列可以被配置为使得阵列包括多个存储器串,其中,串包括共享单个位线并作为群组被访问的多个存储器元件。替代性地,存储器元件可以被配置为使得每一个元件是可单独访问的(例如,NOR存储器阵列)。NAND和NOR存储器配置是示例性的,并且存储器元件可以以其他方式配置。

位于基板内和/或上方的半导体存储器元件可以被安排在两个或三个维度(如二维存储器结构或三维存储器结构)中。

在二维存储器结构中,半导体存储器元件被安排在单个平面或单个存储器设备级中。通常,在二维存储器结构中,存储器元件被安排在基本上平行于支撑存储器元件的基板的主要表面而延伸的平面中(例如,在x-z方向平面中)。基板可以是在其上方或在其中形成存储器元件层的晶片,或者其可以是在形成存储器元件之后附接至其上的载体基板。作为非限制性示例,基板可以包括如硅等半导体。

可以在单个存储器设备级中将存储器元件安排成有序阵列,如在多个行和/或列中。然而,可以在非规则或非正交配置中排列存储器元件。存储器元件中的每个存储器元件可以具有两个或更多个电极或接触线,如位线和字线。

三维存储器阵列被安排成使得存储器元件占据多个平面或多个存储器设备级,由此在三个维度(即,在x方向、y方向和z方向上,其中,y方向基本上垂直于并且x和z方向基本上平行于基板的主表面)中形成结构。三维存储器的一个示例是三维闪存。

作为非限制性示例,三维存储器结构可以被垂直地安排成多个二维存储器设备级的堆叠。作为另一个非限制性示例,三维存储器阵列可以被安排成多个垂直列(例如,基本上垂直于基板的主表面延伸的列,即,在y方向上),每列在每列中具有多个存储器元件。可以在二维配置中(例如,在x-z平面中)安排所述列,导致存储器元件的三维安排,元件位于多个垂直堆叠的存储器平面上。存储器元件在三个维度中的其他配置也可以构成三维存储器阵列。

通过非限制性示例的方式,在三维NAND存储器阵列中,存储器元件可以被耦合在一起,以便在单个水平(例如,x-z)存储器设备级内形成NAND串。可替代地,存储器元件可以被耦合在一起,以便形成横跨多个水平存储器设备级的垂直NAND串。可以设想其他三维配置,其中,一些NAND串包含单个存储器级中的存储器元件,而其他串包含跨越多个存储器级的存储器元件。还可以在NOR配置中和在ReRAM配置中设计三维存储器阵列。

通常,在单片式三维存储器阵列中,在单个基板上方形成一个或多个存储器设备级。可选地,单片式三维存储器阵列还可以具有至少部分地位于单个基板内的一个或多个存储器层。作为非限制性示例,基板可以包括如硅等半导体。在单片式三维阵列中,构成阵列的每个存储器设备级的层通常在阵列的基础存储器设备级的层上形成。然而,单片式三维存储器阵列的邻近存储器设备级的层可以被共享或在存储器设备级之间存在中间层。

然后,再次,二维阵列可以被单独地形成并且然后被封装在一起,以便形成具有多个存储器层的非单片式存储器设备。例如,非单片式堆叠存储器可以通过在单独的基板上形成存储器级然后将存储器级堆叠在彼此顶上来构造。可以减薄基板或者可以在堆叠之前将其从存储器设备级中移除,但是因为存储器设备级最初地在单独的基板上方形成,所以所产生的存储器阵列不是单片式三维存储器阵列。此外,多个二维存储器阵列或三维存储器阵列(单片式或非单片式)可以在单独的芯片上形成然后被封装在一起,以便形成堆叠芯片存储器设备。

存储器元件的操作以及与存储器元件的通信通常需要相关联的电路。作为非限制性示例,存储器设备可以具有用于控制和驱动存储器元件完成如编程和读取等功能的电路。此相关联的电路可以位于与存储器元件相同的基板上和/或位于单独的基板上。例如,用于存储器读-写操作的控制器可以位于单独的控制器芯片上和/或位于与存储器元件相同的基板上。

本领域的技术人员将意识到,本发明不限于所描述的二维和三维示例性结构,但涵盖了如此处描述的本发明的精神和范围内的和如本领域的技术人员理解的所有相关存储器结构。

返回参见图1A,存储器设备102可以包括:非易失性存储器,例如闪存116(可以处于一个或多个存储器芯片的形式);以及系统控制器118,所述系统控制器118既与存储器设备102所连接的主机系统100相接以便来回传送数据、又控制所述闪存116。如上文讨论的,考虑了其他类型的非易失性存储器,例如可以由多个电阻性存储器单元构成的电阻性存储器、以及铁电存储器。

所述存储器设备102可以采取若干形式中的一种。在一种形式中,所述存储器设备102可以包括嵌入设备。例如,所述存储器设备102可以包括被配置成用作内部或嵌入SSD驱动程序的非易失性存储器,其看起来可以类似于图1A的示意图,主要区别是存储器设备102的位置在主机系统100内部。SSD可以处于分立模块的形式,所述模块是旋转磁盘驱动程序的简易替换件。可替代地,存储器设备102可以处于通过如图1A所展示的机械与电气连接器的匹配的零件104和106而可去除地连接至所述主机系统100上的卡的形式。

如上文讨论的,图1A的存储器设备102可以包括半导体存储器设备并且包括非易失性存储器(例如一个或多个存储器芯片116)、以及存储器设备控制器118。在替代性实施例中,所述存储器设备102可以包括易失性和非易失性存储器二者。

所述主机系统100可以所述存储器设备通信以用于多个目的。一个目的是使得主机系统102将数据存储在所述存储器设备上和/或从其读取数据。例如,所述主机系统100可以发送数据至所述存储器设备102以便存储在所述存储器设备102的所述一个或多个存储器芯片116上。作为另一个示例,所述主机系统100可以从所述存储器设备102请求存储在所述一个或多个存储器芯片116上的数据。当与所述存储器设备通信时,所述主机系统100可以发送数据的逻辑地址,例如处于一定范围的逻辑块地址(LBA)的形式。所述存储器设备控制器118接着可以在一个或多个步骤中将所述LBA转换成所述存储器芯片116上的实际物理地址。所述存储器设备控制器118可以进行逻辑地址到实际物理地址的转换以便映射为所述实际物理地址。例如,来自所述主机系统100的LBA可以被映射为所述存储器设备的内部逻辑地址,并且所述存储器设备的内部逻辑地址可以被映射为所述实际物理地址。作为另一个示例,来自所述主机系统100的LBA可以被直接映射为所述实际物理地址。

图1A展示了,非易失性存储器116包括多个存储器芯片,包括存储器芯片0(120)和存储器芯片N(126)。存储器芯片0(120)包括存储器芯片0控制器122和存储器阵列124。同样,存储器芯片N(126)包括存储器芯片N控制器128和存储器阵列130。如下文更详细讨论的,存储器芯片控制器可以包括电路和/或用于控制相应存储器芯片上的操作的软件。进一步,在一个实施例中,存储器阵列可以包括在相应存储器芯片上的存储器单元。

图1B展示了图1A的存储器设备控制器118和存储器芯片0(120)的另一个框图。存储器芯片0(120)仅被展示用于举例的目的。如图1B所示,在一个实施例中,所述存储器设备控制器118可以命令对存储器区段(例如,块)进行编程、并且之后可以判定是否刷新所述块中的数据。为此,所述主机系统100可以包括块擦除触发器130、块擦除命令132、块选择器136、块编程命令138、读取触发器142、读取命令144、读取数据错误分析器148、刷新判定器150、以及刷新命令152。所述块擦除触发器130、块擦除命令132、块选择器136、块编程命令138、读取触发器142、读取命令144、读取数据错误分析器148、刷新判定器150、以及刷新命令152中的任一个、任何组合、或全部可以被实施为软件、硬件、或硬件与软件的组合。

所述存储器芯片0(120)可以包括块擦除器134、块编程140、块读取器146、块刷新器154。所述块擦除器134、块编程140、块读取器146、块刷新器154中的任一个、任何组合、或全部可以被实施为软件、硬件、或硬件与软件的组合。

所述块擦除触发器130可以包括用于选择所述存储器阵列中的块进行擦除的触发器。响应于来自所述块擦除触发器130的触发,所述块擦除命令132可以生成擦除命令来发生给所述所述存储器芯片0(120)以便擦除所选择的块。响应于接收到所述擦除命令,所述块擦除器134擦除所选择的块。所述块选择器136被配置成用于选择用于编程数据的块。进而,所述块编程命令138生成命令来发送给存储器芯片0(120)以便对所述块进行编程。响应于接收到所述命令,所述块编程器140所述块进行编程。

所述存储器设备控制器118可以使用读取触发器142来读取所述存储器芯片0(120)中的所述数据。所述读取触发器142可以基于来自所述主机系统100的将读取所述数据的请求、或基于内部请求来触发读取。响应于对读取的触发,所述读取命令144发送命令给所述存储器芯片0(120)。块读取器146读取所述块(或所述块的子部分)并发送所述数据来通过读取数据错误分析器148进行错误分析。如下文更详细讨论的,读取数据错误分析器148的一个示例可以是可以生成BER的ECC引擎。所述刷新判定器150可以分析所述读取数据错误分析器148的输出以便判定是否刷新所述存储器块的部分或全部。例如,所述读取数据错误分析器148可以将由所述ECC引擎生成的BER与阈值进行比较,以便判定是否命令刷新。响应于确定刷新所述块的部分或全部,所述刷新命令152发送命令给存储器芯片0(120),所述存储器芯片可以使用块刷新器154来刷新所述块的部分或全部。

图1C展示了在所述存储器设备控制器和存储器芯片内的刷新的数据流。在刷新所述数据时,所述存储器设备控制器118的控制器ASIC发送命令给NAND I/O电路。所述命令包括:关于所述命令是用于更新的指示、用于更新的数据、关于用于更更新的块(或子块)的指示、以及可选地用于更新的一个或多个编程电压,如下文更详细讨论的。所述NAND I/O电路可以向所述NAND编程电路发送所述操作是刷新的指示(与来自被擦除的块的编程不同)、以及关于所述存储器阵列中用于编程的区段(例如,用于编程的存储器阵列,如下文讨论的)的指示。进而,所述NAND编程电路使用解码电路来选择用于编程的存储器(例如,字线、块)。所述NAND I/O电路进一步将所述数据发送给NAND数据锁存器以便锁存所述数据以进行编程。

在验证之后,来自经刷新的区段(例如,经刷新的(多个)字线或块)的数据可以被读出并发送给所述控制器ASIC。所述控制器ASIC可以将读出的数据发送给所述ECC电路以进行错误分析(例如,所述ECC电路可以生成BER)。所述控制器ASIC可以接收BER并且然后BER。在一个实施例中,所述控制器ASIC可以将BER与被定义为成功刷新所述存储器区段的预定义阈值进行比较。如果BER小于所述预定义阈值,则所述控制器ASIC可以命令再次进行刷新。可替代地,如果BER小于所述预定义阈值,则所述控制器ASIC可以命令对所述块进行重新编程。

图2A展示了存储器设备控制器芯片200,这是在图1A中描绘的存储器设备控制器118的一个示例。如图2A所示,所述存储器设备控制器芯片200包括主机系统接口202,所述主机系统接口可以包括用于与主机系统100通信的电路和/或软件。可替代地,主机系统接口202可以在存储器设备控制器芯片200的外部。存储器设备控制器芯片200进一步包括控制器204、存储器208、以及(多个)存储器芯片接口214。存储器208可以包括Vt移位检测210、块编程控制211、以及块刷新控制。Vt移位检测210可以包括由控制器204执行来检测存储器区段(例如在块或子块)中的Vt移位(例如,下移)的软件。块编程控制211可以包括由控制器204执行来控制所述一个或多个存储器芯片116对块进行编程的软件,如下文更详细讨论的。块刷新控制212可以包括由控制器204执行来控制所述一个或多个存储器芯片116对块(或块的一部分)进行刷新的软件,如下文更详细讨论的。存储器芯片接口214可以包括被配置成用于与一个或多个存储器芯片通信的一条或多条通信线路。

图2B展示了存储器设备控制器芯片220,这是在图1A中描绘的存储器设备控制器118的第二示例。所述存储器设备控制器芯片220可以被实施在单个集成电路芯片220上,例如专用集成电路(ASIC),如图2B所示。进一步,由所述存储器设备控制器芯片220执行的所述不同功能可以由单个设备来执行、或者可以由多个设备来执行,如图2B所示。更具体地,所述存储器设备控制器芯片220可以被划分为图2B中所展示的所述不同设备,例如(多个)闪存接口222、处理器224、RAM 223、ECC 234、主机接口236、时钟232。图2B仅用于展示的目的。

所述存储器设备控制器芯片220的处理器224可以被配置成能够经由(多个)闪存接口222分开地与相应存储器芯片通信的多线程处理器。所述(多个)闪存接口222可以针对闪存116中的每个相应存储器芯片具有I/O端口。所述存储器设备控制器芯片220可以包括内部时钟232。所述处理器224可以经由内部数据总线228与错误校正编码(ECC)模块234(在下文更详细讨论)、RAM缓冲器230、主机接口236、固件226(可以包括启动编码ROM)通信。

图3A展示了存储器芯片控制器300的示例,例如图1A中描绘的存储器芯片0控制器122。存储器芯片控制器300包括存储器设备控制器芯片接口302,所述接口是与存储器设备控制器芯片200的接口。存储器芯片控制器300进一步包括控制器304和存储器306。存储器306可以包括编程验证308、块编程309、以及块刷新310。

编程验证308可以用来验证被编程到一个或多个存储器单元中的数据是否已被成功地编程。如下文更详细讨论的,编程验证测试可以包括读取操作,其中施加验证电压(Vread)并且将流经所述单元的电流与所述编程验证测试的验证电流(Iverify_set)或所述编程验证测试的重设验证电流(Iverify_reset)进行比较,以便判定是否已分别达到所述设定或重设状态。编程验证308可以判定是否已通过了所述编程验证测试。如果确定了还没有通过所述编程验证测试,则在一个实施例中,可以返回错误,并且在替代性实施例中,可以更新所述编程参数的一个或多个值,例如通过增大电压量和/或持续时间和/或电流极限,并且可以再次进行编程。

块编程309可以用来对块编程(或对块的一部分编程),如下文更详细讨论的。块刷新310可以用来刷新之前被编程在块中的数据(或刷新块的一部分),如下文更详细讨论的。存储器阵列接口314可以包括到所述存储器阵列、例如存储器阵列124的接口。

图3B展示了例如图1A中描绘的闪存芯片0(120)中使用的存储器芯片的块程序的示例。每个存储器芯片可以包含被规整到多个平面中的存储器单元阵列。图3B为了简化示出了平面360和362,但是可以替代地使用更小的数量,例如一个平面,或更大数量的平面,例如四个或八个平面。可替代地,一个存储器存储体的存储器单元阵列不能分为多个平面。然而当如此划分时,每个平面具有其自身列的控制电路314和316,所述电流是独立于彼此可操作的。电路314和316接收其相应存储器单元阵列的地址、并且将其解码以便寻址相应位线318和320中的特定的一个或多个位线。通过行控制电路324响应于在总线364上接收的地址来寻址所述字线322。源电压控制电路326和328也与相应平面相连接,作为p阱电压控制电路330和332。如果所述存储体采用具有单个存储器单元阵列的存储器芯片的形式,并且如果在所述系统中存在两个或更多这样的芯片,则数据通过与总线364相连接的相应数据输入/输出电路334和336而被传入和传出所述平面360和362。电路334和336通过经由相应的列控制电路314和316连接至所述平面的线路338和340既提供将数据编程到所述存储器单元中、又提供从其相应平面的存储器单元中读取数据。

虽然所述存储器设备芯片控制器200中的控制器204控制所述存储器芯片编程数据、读取数据、刷新数据、擦除以及参加各种内务事宜的操作,但每个存储器芯片还包含执行来自所述存储器设备控制器118的命令以便执行这样的功能(例如编程功能、刷新功能、以及编程验证功能)的某种控制电路。多个接口电路342连接至总线364上。来自所述存储器设备控制器118的命令被提供给状态机344,所述状态机接着提供对其他电路的特定控制以便执行这些命令。状态机344可以进一步包括错误确定功能,例如在此讨论的。控制线路346-354将所述状态机344与如图3B所示的这些其他电路相连接。来自状态机344的状态信息通过线路356被传达至所述接口342,以便通过总线364传输至所述存储器设备控制器118。

下文讨论存储器单元阵列310和312的NAND架构,但可以替代地单独地或组合地使用其他非易失性存储器架构或技术,例如NOR。用图4的电路图展示了一种示例NAND阵列,这是图3B的存储器存储体的存储器单元阵列310的一部分。提供了更大数量的全局位线,其中为了简单地解释,在图4中示出了仅4条这样的线402-408。一定数量的串联存储器单元串410-424连接在这些位线之一与参考电势之间。使用存储器单元串414作为代表,在这个串的其中一端处,多个电荷储存存储器单元426-432与所选择的晶体管434和436串联连接。当使得这个串的所选择的晶体管导电时,所述串连接在其位线与所述参考电势之间。接着在某个时刻对这个串中的一个存储器单元进行编程或读取。

图4的字线438-444独立地延伸跨过多个存储器单元串中的每一个的一个存储器单元的电荷储存元件,并且并行编程单元446和450在所述串的每端处控制所述所选择的晶体管的状态。使得共享共用的字线和控制栅线438-450的所述存储器单元串形成将一起被擦除的存储器单元块452。这个单元块包含能一次物理地擦除的最小数量的单元。沿着所述字线438-444之一的一行存储器单元可以一次并行地进行编程。典型地,以规定的顺序对多行NAND阵列进行编程,在此情况下从沿着字线444最靠近所述串的接地的末端或另一个共用电势的这行开始。接着并行地对沿着字线442的这行存储器单元进行编程,并且以此类推地遍及这个块452。最后并行地对沿着字线438的这一行进行编程。

一行存储器单元仅是并行编程单元的一个示例。所述并行编程单元可以包括以下之一或二者:(1)可以并行地对所有物理结构(例如存储器单元)进行编程/读取;以及(2)可以按照相同的或相似的完成时间对所有物理结构进行编程/读取。要素(2)是出于效率的目的,但不是并行编程单元所要求的。

存储器的一行存储器单元可以由在裸片上处于相同物理位置的多个单元构成。可替代地,这一行存储器单元可以由在一个裸片或全都能够并行编程的多个裸片上处于不同物理位置的多个单元构成。此外,考虑了可以对多个存储器单元并行地编程的其他并行可编程单元。

第二块454是类似的,其存储器单元串与第一块452中的所述串连接至相同的全局位线上、但具有不同的一组字线和控制栅线。所述字线和控制栅线被所述行控制电路324驱动至其恰当的操作电压。如果在所述系统中存在多于一个平面,例如图3B的平面1和2,则一个存储器架构使用在其间延伸的共用字线。替代地可以有多于两个平面共享共用的字线。在其他存储器架构中,独立平面的字线是分开地被驱动的。

所述存储器单元可以被操作来存储两个电荷层,使得在每个单元中存储单个位的数据。这典型地被称为二进制或单层单元(SLC)存储器。可替代地,所述存储器单元可以被操作来在每个电荷储存元件或区域中存储多于两个可检测电荷层,由此在每个中存储多于一个位的数据。后一种构型被称为多层单元(MLC)存储器。在存储器中可以使用这两种类型的存储器单元,例如可以使用二进制闪存来缓存数据并且可以使用MLC存储器来进行长期存储。所述存储器单元的电荷储存元件最常见地是导电浮栅、但可替代地可以是非导电性的介电的电荷收集材料。

图5概念性地展示了多存储体闪存的一个存储体的组织,所述存储体在下文的进一步说明中被用作示例。四个平面502-508的存储器单元可以位于单个集成存储器单元芯片上、位于两个芯片上(每个芯片上两个平面)或位于四个分开的芯片上。具体的安排对于下文的讨论不重要。当然,在系统中可能存在其他数量的平面,例如1、2、8、16或更多。所述平面通过矩形被单独地划分为图5所示的多个存储器单元块,例如位于相应平面502-508中的块510、512、514和516。在每个平面中可以存在几百个或几千个块。

如上文提及的,所述存储器单元块是擦除单位,能够一起物理地擦除的最小数量的存储器单元。然而,为了增大并行性,所述块可以按更大的元块单位来操作。将来自每个平面中的一个块逻辑地联系在一起形成元块。这四个块510-516被示出为形成一个元块518。元块内的所有单元典型地一起被擦除。用来形成元块的所述块不需要限制为在其相应平面内具有相同的相对位置,如在由块522-528构成的第二元块520中所示。虽然通常优选的是使所述元块延伸跨过所有平面,但为了高的系统性能,所述存储器设备可以被操作为具有动态地形成具有不同平面中的一个、两个或三个块中的人一个或全部块的元块的能力。这允许元块的大小与可用于在一个编程操作中存储的数据量更紧密地匹配。

所述单独的块进而出于操作目的被划分为多个存储器单元页,如图6中展示的。例如,块510-516中的每一个的存储器单元各自被划分为八个页P0-P7。可替代地,在每个块中可以存在16、32或更多个存储器单元页。页是块内的数据编程单位,包含了一次被编程或读取的最小量数据。在图3B的NAND架构中,页是由沿着块内的字线的存储器单元形成的。然而,为了增大所述存储器设备的操作并行性,可以将两个或更多个块中的这样的页逻辑地连接成元页。在图6中展示了元页602,所述元页是由来自这四个块510-516中的每一个块的一个物理页形成的。例如,元页602包括在这四个块中的每一个块中的页P2,但是元页的页不一定需要在每个块中具有相同的相对位置。在存储体内,元页是最大编程单位。

图7A展示了每单元3位NAND闪存的编程。图7A的示例仅用于展示的目的。考虑了其他数量的位数/单元以及其他类型的存储器。参见图7A,对于每单元3位NAND闪存,字线中的每个单元可以存储来自3个不停页中的每一个页的位:上部页位(UP)702、中间页位(MP)704和下部页位(LP)706。用于这样的存储器单元的典型编程操作将需要三次将旨在用于所述单元的主机数据的3个原始位从所述控制器传递至所述NAND存储器,为了将正确量的电荷轻推到所述单元中以达到希望的电压状态而需要的三个编程轮次中的每一个有一次,而不超过所述希望的电压状态。

如图7A中所示,这三个编程轮次或状态在此可以分别被称为第一编程轮次708、模糊编程轮次710和精细编程轮次712。总体来说,第一编程轮次708将是将所储存的电压留在擦除(Er)714水平或中间水平(图7A中的LM716)的较粗糙的电压脉冲,其中所述Er电压水平容许随后继续编程到这8个所希望的电压状态中的前4个中的一个(Er、A、B或C),并且所述LM电压水平将电压推到可以增大至这8个所希望的电压状态中的后4个中的一个(D、E、F或G)的阈值。

在例如图7A中所展示的存储器中的典型第一/模糊/精细编程方案中,这3个主机原始位反复从所述控制器发送至所述NAND以执行这三个编程阶段中的每一个。因此,在所述第二或“模糊”编程步骤中,UP、MP、和LP数据被再次从控制器发送至NAND存储器。所述UP、MP和LP位被所述非易失性存储器(例如,NAND闪存)使用来生成为了将在第一编程步骤708中实现的当前状态(Er或LM)推到这8个所希望的电压状态中的更加解析的1个而需要的模糊编程阶段电压脉冲。在图7A中示出了在模糊编程710之后的假想的电压分布选项、以及在所述电压水平下这3个页位的相关联状态。在第二轮将原始的3个位的数据传输至NAND存储器并进行了第二、模糊编程阶段710之后,这原始的三个位再次从所述控制器中的RAM被调用并发送至NAND为了实现这8个状态中的所希望1个而必须的最后一个、或精细编程步骤712。在图7A中之后示出了在精细编程阶段712之后实现的可能编程电压的分布,其中这8个可能的状态被示出为是完全复原的。

虽然每个字线都将被写入三次,但写入顺序在字线之间可以交错,例如图7B中展示的。更具体地,由于对相邻字线施加的第一、模糊和精细编程步骤可能造成编程串扰问题,其中对一个字线施加的电荷可能影响对相邻字线施加的电荷,因此典型地利用预定的字线编程顺序。因此,对相邻字线的编程可以交错,以减小编程串扰的机会。字线编程顺序可能实质上从表格的左下以对角线图案向右上发展。例如,到字线0的第一编程轮次之后是到字线1的第一编程轮次,接着是回到字线0的模糊编程轮次。之后,所述图案的发展方式是:在字线N上的第一编程轮次(在这个示例中以N=2开始)之后是在字线N-1上的模糊编程轮次、接着是在字线N-2上的精细编程轮次,直到在最后一个字线上的第一编程轮次完成,如图所示。

图8A展示了将数据编程到存储器区段中、判定是否刷新所述数据、并刷新所述数据的部分或全部的第一示例的流程图800。在802,将存储器区段、例如块擦除。在804,使用第一编程方案对所述存储器区段进行编程。在图7A中展示了所述第一编程方案的一个示例。

在806,使用错误检测方案来分析所述存储器区段的至少一部分。例如,使用ECC引擎来读取和分析所述更块的部分或全部的数据,以便确定BER。读取所述块中的多个单元的数据可以是迭代的过程。初始地对于所述多位单元的不同状态设定所述单元的读取电平条件。例如,在每单元3位的示例中,所述不同状态的初始读取电压如下:A=1.5875V;B=3.1875V;C=3.4875V;D=4.2875V;E=5.0875V;F=5.8875V;G=6.3875V。将结果发送至所述ECC引擎以便判定所述BER是否是可校正的。如果所述ECC引擎确定了所述BER太高而不能校正所述错误,则修改初始读取电压(例如,减小.1)并且重复这个过程以便确定所生成的BER是否是可校正的。考虑了用于确定所述数据中的错误的其他错误检测方案。

在808,基于所述错误检测方案的结果,判定是否触发刷新所述存储器区段中的所述数据的部分或全部。例如,可以将所述错误检测方案的结果与阈值比较。响应于确定了所述错误检测方案的结果指示所述存储器区段中的错误大于所述阈值,则可以在所述存储器区段中触发刷新。

如上文讨论的,所述阈值可以取决于一个或多个因素来选择,例如:受到潜在刷新的存储器区段的状态(例如,数据是否最近被折叠到MLC块中;所述块的编程/擦除循环的数量;在所述块已被编程之后对所述块的读取数量);环境条件(例如,所述存储器设备的温度(例如,容纳存储器阵列的存储器芯片的温度);所述的存储器设备Vcc(例如,供应给所述存储器芯片的功率);等等)。

例如,ECC引擎可以生成BER。可以将所述BER与阈值进行比较,以便判定是否触发刷新所述存储器区段中的所述数据的部分或全部。一种类型的ECC引擎是具有2K字节数据中继线(大致16K比特)的BCH引擎。在这个示例中,所述ECC引擎不能校正多于122比特的错误,这被认为是不可校正的ECC(UECC)。可以将所述BER与RfECC(刷新ECC)进行比较。所述RfECC可以是预定的静态数,例如100。可替代地,所述RfECC可以是取决于所述存储器设备的多个不同条件的变化的数。作为一个示例,当检查在将数据从SLC折叠到MLC块中之后立即检查所述MLC块时,可以使用第一RfECC。之后可以使用不同于所述第一RfECC的第二RfECC。作为另一个示例,RfECC可以取决于所述块的老化或磨损而改变。可以使用多个不同的寿命指示符,例如在对块编程之后已经对所述块施加的编程/擦除循环(P/E)或读取数量。在上文给出的示例的背景下,RfECC可以随着块的老化而改变,例如RfECC为100、80和60,分别将所述块确定为“较新”、“中等老化”和“严重老化”。在此方面,刷新所述块(或块的子部分)可以随着所述块老化而变得更具侵略性。同样,RfECC可以取决于对所述块的读取数量而改变,其中RfECC随着对所述块的读取数量的增大而减小。同样,此方面,刷新所述块(或块的子部分)可以随着在所述块上进行更多读取而变得更具侵略性。

作为又一个示例,RfECC可以取决于所述存储器设备的总体条件而改变。总体条件可以包括所述存储器设备内部的条件,例如Vcc水平(可以由系统电路来确定)、或者可以包括所述存储器设备的环境条件,例如温度。在温度的背景下,RfECC在所述存储器设备的温度高于温度阈值时可以较高、并且在所述存储器设备的温度低于温度阈值时可以较低。

响应于确定刷新所述存储器区段,在810,可以在所述存储器区段的一部分(或全部)上进行对所述存储器区段的刷新。所述刷新可以使用不同于所述第一编程方案的第二编程方案在804进行。

如上文讨论的,图7A展示了在擦除了块之后在804可以使用的编程方案的一个示例。因为在810进行了刷新,数据已经被编程到所述存储器区段中,但具有移位的Vt。在此方面,用于进行刷新的所述(多个)步骤和/或在所述步骤中使用的电压可以不同于在擦除了块之后在804使用的编程方案。例如,图7A展示了第一/模糊/精细的不同步骤。在一个实施例中,所述刷新没有进行“第一步骤”和“模糊”步骤,而是仅进行“精细”步骤。作为另一个示例,在所述刷新中使用的电压可以不同于在擦除了块之后在804使用的编程方案。

例如,在所述每单元3位NAND闪存中,所述刷新过程可以包括使用初始编程电压。如下文更详细讨论的,所述初始编程电压可以是静态的或动态的。将有待被编程到相同状态的单元一起编程。更具体地,字线可以包括例如14万个单元。所述字线上的用于刷新到A状态的所述单元中的每一个可以同时被编程。在施加了编程电压之后,所述编程验证电路可以使用一组预定电压来判定所述单元是否已被恰当地编程。出于例示的目的,3位/单元NAND闪存的从A到G的验证电平可以包括0.8、1.6、2.4、3.2、4.0、4.8、5.6V。在编程验证失败的情况下,可以增大编程电压(例如,增大40mV),并且可以重复这个过程。在一个实施例中,这个过程的重复次数可以局限于预定数量。之后,所述存储器芯片可以像所述存储器系统控制器报告失败,如下文更详细讨论的。可以对于状态A至G中的每个状态重复这个过程。

如上文讨论的,在所述刷新操作中使用的电压在一个实施例中可以是静态的并且在替代性实施例中可以是动态的。例如,响应于确定了将进行所述刷新,可以使用(多个)预定的静态电压来刷新所述存储器区段。作为另一个示例,响应于确定了将进行所述刷新,可以动态地选择在所述刷新中使用的电压。更具体地,所述电压可以基于一个或多个因素进行选择,包括:所述存储器区段中的错误的量;和/或所述存储器设备的总体条件。例如,查找表可以将不同的BER与不同的编程电压相关联。在此方面,较高的BER可以对刷新操作产生较高的编程电压。

此外,响应于在808确定了将触发刷新,在810可以在多个不同时刻进行所述刷新。在一个实施例中,在810的刷新可以立即响应于在808确定了将触发刷新。在替代性实施例中,在810的刷新不需要立即响应于在808确定了将触发刷新而进行。而是,受到刷新的所述存储器区段、例如块可以被添加到用于刷新的存储器区段列表中。当所述存储器设备闲置时,所述存储器设备可以刷新所述列表上的存储器区段。

进一步,如上文讨论的,可以刷新不同的存储器区段。作为一个示例,可以刷新整个块。更具体地,在块内的单个读取可以触发刷新整个块。作为另一个示例,可以刷新一个块的子部分。更具体地,可以刷新一个块内的一个或多个特定字线,而可以不触摸所述块中的其余字线。如上文讨论的,一个块可以由多个字线构成,例如字线0至127。可以在单个字线上、例如字线50上进行读取。所述存储器设备可以基于来自读取字线50的BER确定应当刷新字线50。在此方面,所述存储器设备可以仅刷新字线50,而不刷新字线0-49或51-127。

图8B展示了将数据编程到存储器区段中、判定是否刷新所述数据、并刷新所述数据的部分或全部的第二示例的流程图850。在852,检测例如由于数据保持或循环而造成的潜在数据损坏。在854,扫描所述系统的潜在损坏数据的物理地址。所述系统的扫描可以在主机读取(例如,所述主机系统命令了所述读取)的过程中、或在背景系统扫描的过程中进行,如下文更详细讨论的。

在856,存储包含由于数据保持或循环而造成的潜在损坏数据的块的地址。在858,将所述数据读取到所述ECC引擎,并且校正所述数据。在860,将校正数据发送回到所述NAND闪存芯片、并且所述NAND闪存芯片将其用作原始数据来验证原始位置中的原始数据。如上文讨论的,所述NAND闪存芯片可以接收校正数据以进行刷新。更具体地,所述NAND闪存芯片可以根据所接收的校正数据来确定一个字线中的哪些单元将被编程到哪个状态(例如,在每单元3位中,状态A-G之一)、将所确定的单元刷新到所述状态、并且使用编程验证来判定所述刷新是否已使得所述单元具有与所述状态相对应的值)。在862,可以将这个验证过程应用于整个块、或仅应用于这个块的一部分,例如受影响的字线的上部页、中页、下部页、或多个页的组合。在864,可以应用所述编程脉冲来将所述数据重新编程回到所述位置,直到所述验证过程通过了验证标准。

图9展示了触发对数据的读取、使用错误校正编码(ECC)确定位错误率(BER)、并使用所述BER来判定是否刷新所述数据的一个示例的流程图900。在902,判定是否请求了主机读取。响应于确定请求了主机读取,在904,进行主机读取。可替代地,可以进行内部读取。例如,所述存储器系统控制器可以分析块的多个不同特征,例如P/E循环,以便判定一个块是否是内部读取的候选物。更具体地,具有高/E的块(指示了较多地被使用的块并且因此更易于出现错误)可以是内部读取的候选物。在906,判定一个块是否包含触发内部读取的特征。如果是,则在908,进行内部读取。

在910,使用所述ECC引擎来确定BER。在912,访问用于触发刷新的BER阈值。如上文讨论的,所述BER阈值可以是静态或动态的。在914,将BER与所述BER阈值进行比较。响应于确定了BER大于所述BER阈值,在916,将所述块(或所述块的子部分)放到有待刷新的块(或块的子部分)清单上。

图10A展示了从控制存储器芯片的存储器设备控制器的角度看,对数据进行刷新的第一示例的流程图1000,其中所述存储器芯片进行刷新验证。在1002,所述存储器系统控制器判定是否在所述块(或所述块的一部分)上进行刷新。如果是,则在1004,所述存储器系统控制器发送刷新命令和所述数据给所述存储器芯片。在1006,所述存储器系统控制器判定所述存储器芯片是否已经返回了编程验证确认。如下文讨论的,所述编程验证确认通过所述存储器芯片指示所述刷新已经成功地进行。响应于所述存储器芯片控制器确定了没有接收到编程验证确认,在1008,所述存储器系统控制器可以命令对所述块进行重新编程。例如,所述存储器系统控制器可以命令所述存储器芯片将所述数据编程到分开的块(例如,通过使用图7A中展示的序列)中、并且接着命令擦除所述块。可替代地,响应于所述存储器芯片控制器确定了没有接收到编程验证确认,所述存储器芯片控制器可以命令所述存储器芯片再次进行所述刷新。响应于接收到关于没有接收到编程验证确认的第二指示,所述存储器系统控制器可以命令对所述块进行重新编程。

图10B展示了从存储器芯片的角度看,对数据进行刷新的第一示例的流程图1050,其中所述存储器芯片进行刷新验证。在1052,所述存储器芯片从所述存储器系统控制器接收刷新命令和所述数据。在1054,所述存储器芯片刷新所述块的一部分(或全部)。在1056,所述存储器芯片进行编程验证以验证所述刷新是否成功。响应于确定了编程验证已发生,在1058,所述存储器芯片可以发送编程验证确认给所述存储器系统控制器。响应于确定了编程验证还没有发生,在1060,所述存储器芯片可以发送编程验证失败给所述存储器系统控制器。

在替代性实施例中,响应于确定了编程验证指示失败,所述存储器芯片可以再次进行所述刷新。例如,所述存储器芯片可以修改进行刷新的电压(例如,增大电压)并且接着用经修改的电压来进行所述刷新。之后,所述存储器芯片可以进行编程验证。所述存储器芯片可以将这些步骤迭代预定次数,每次迭代都检查所述编程验证。如果在预定的迭代次数之后没有发生编程验证,则所述存储器芯片可以将编程验证失败发生给所述存储器系统控制器。

图11A展示了从控制存储器芯片的存储器设备控制器的角度看,对数据进行刷新的第二示例的流程图1100,其中所述存储器系统控制器进行验证。在1102,所述存储器系统控制器判定刷新是否是必须的或必要的。如果是,则在1104,所述存储器系统控制器将计数器设定为零。在1106,所述存储器系统控制器设定初始刷新编程电压。如上文讨论的,所述初始刷新编程电压可以是静态的或动态的。例如,在一个实施例中,所述初始刷新编程电压可以基于BER进行选择。

在1108,将刷新命令、编程电压和数据发送至所述存储器芯片。在1110,将计数器加一。在1112,所述存储器系统控制器命令所述存储器芯片读取已被刷新的数据。在1114,所述存储器系统控制器从所述存储器芯片接收已被读取的数据。在1116,所述存储器系统控制器在读取的数据上使用所述ECC引擎来确定BER。

在1118,所述存储器系统控制器判定BER是否小于阈值。在第一实施例中,所述存储器系统控制器可以将BER与被用于触发刷新的相同阈值进行比较。如果BER不小于所述阈值,则在1120,可以检查所述计数器以判定迭代次数(由所述计数器指示)是否小于为了重新发送刷新命令而允许的次数。如果迭代次数小于允许迭代的次数,则在1122,所述存储器系统控制器选择新的编程电压、别接着迭代至1108。所选择的这个新的编程电压可以包括从所述初始编程电压增大。编程电压的增大可以是静态的且预先确定的。可替代地,编程电压的增大可以是动态的,例如取决于BER。

响应于在1120确定了已经查过发送刷新命令的次数,在1124,对所述块进行重新编程。例如,所述存储器系统控制器可以命令所述存储器芯片将所述数据编程到分开的块(例如,通过使用图7A中展示的序列)中、并且接着命令擦除所述块。

图11B展示了从存储器芯片的角度看,对数据进行刷新的第二示例的流程图1150,其中所述存储器设备控制器、而不是所述存储器芯片进行验证。在1152,判定所述存储器芯片是否接收到刷新命令、编程电压和数据。响应于接收到,在1154,所述存储器芯片使用编程电压和数据刷新所述块(或所述块的一部分)。

图12展示了从控制存储器芯片的存储器设备控制器的角度看,对数据进行刷新的第三示例的流程图1200,其中所述存储器系统控制器和所述存储器芯片均进行验证。在1202,所述存储器系统控制器判定是否在所述块(或所述块的一部分)上进行刷新。如果是,则在1204,所述存储器系统控制器发送刷新命令和所述数据给所述存储器芯片。在1206,所述存储器系统控制器判定所述存储器芯片是否已经返回了编程验证确认。如上文关于图10B讨论的,所述存储器芯片可以进行编程验证。

响应于确定了没有接收到编程验证确认,在1208,所述存储器系统控制器将计数器设定为零。在1210,所述存储器系统控制器设定初始刷新编程电压。在1212,将刷新命令、编程电压和数据发送至所述存储器芯片。在1214,将计数器加一。在1216,所述存储器系统控制器命令所述存储器芯片读取已被刷新的数据。在1218,所述存储器系统控制器从所述存储器芯片接收已被读取的数据。在1220,所述存储器系统控制器在读取的数据上使用所述ECC引擎来确定BER。

在1222,所述存储器系统控制器判定BER是否小于阈值(例如用于触发刷新的阈值)。如果BER不小于所述阈值,则在1224,可以检查所述计数器以确定迭代次数(由所述计数器指示)是否小于为了重新发送刷新命令而允许的次数。如果迭代次数小于允许迭代的次数,则在1226,所述存储器系统控制器选择新的编程电压、别接着迭代至1212。如上文讨论的,所选择的这个新的编程电压可以包括从初始编程电压增大,其中这种增大是静态的且预先确定的、或是动态的。响应于在1224确定了已经查过发送刷新命令的次数,在1228,对所述块进行重新编程。

如上文讨论的,可以在多个不同时刻判定是否进行刷新。例如,这种确定是基于正在进行的事件、例如基于将数据编程到块中来进行的。在一个实施例中,将数据编程到块中(例如从SLC折叠到MLC中,下文关于图13A进行讨论)可以触发判定是否进行刷新。在替代性实施例中,从将数据编程到块中起过去的时间(例如,如果从编程起过去的时间大于预定量,下文关于图13B进行讨论)可以触发判定是否进行刷新。作为另一个示例,这种确定可以基于所述存储器设备自身来进行。在一个实施例中,所述存储器中的块的寿命(或寿命指示符)可以触发判定是否进行刷新(例如编程擦除计数大于预定阈值,下文关于图13C进行讨论)。进一步,关于判定是否进行刷新的所述阈值可以改变。

图13A展示了在编程操作之后判定是否进行刷新操作并进行刷新操作的流程图1300。对块的编程可以触发判定是否进行刷新操作。在1302,针对具体操作、即针对X3存储器的编程操作,设定故障位计数(FBC)阈值(RfECC(新近))。在1304,进行正常的SLC到MLC数据折叠,其中所述折叠操作在X3存储器中进行。在美国公开申请号2013-0173844 A1中公开了将数据从SLC折叠到MLC的一个示例。所述折叠操作可以得到大于所希望的FBC。

在1306,在刚被编程的块上进行增强型写入后读取。更具体地,ECC引擎可以分析所述读取的结果以确定FBC。因此,除了在所述NAND存储器芯片上进行的内部验证(在对所述数据块编程的过程中进行)之外,所述系统存储器控制器可以使用所述ECC引擎来验证写入。在1308,将FBC与RfECC(新近)进行比较。如果FBC大于RfECC(新近)(例如,FBC大于在对所述块编程后立即希望的量),则在1310,所述存储器系统控制器开始在所述块的标记区段(例如,所述块内的某些页)上使用SLC源数据来进行刷新操作、并且向所述存储器芯片发送命令来进行所述NAND刷新操作。更具体地,在所述折叠操作中使用的所述SLC块中的数据可以与所述刷新命令一起被发送至所述存储器芯片。

图13B展示了判定是否对遭受数据保持问题的块进行刷新操作并进行刷新操作的流程图1330。如上文讨论的,在一段时间之后,所述块中的数据可能遭遇数据保持问题。在此方面,数据在块中存储的时间越长,数据保持问题的可能性就越大。因此,在空闲时间期间,可以检查所述块以便确定数据已经在块中存储了多长时间。在一个实施例中,可以对包括的数据在其中存储了比预定时间量更长的时间段的块进行标记,以便判定是否进行刷新操作。在替代性实施例中,可以对包括的数据在其中存储了最长时间的块(与其他块相比)进行标记,以便判定是否进行刷新操作。

在1332,针对具体操作、即针对遭受数据保持的块,设定故障位计数(FBC)阈值(RfECC(DR))。作为一个示例,可以分析具有严重数据保持应力的块,例如3X红外(IR)-X回流或DR块。在1334,使用CVD或动态读取操作来扫描块以便确定由于3X Ir-回流造成的Vt下移的量。CVD是一种类型的单元Vt分布。CVD可以用作更精细形式的动态读取,其中读取电压增量式改变,直到通过ECC引擎确定的读取结果是充分可校正的。

在1336,将FBC与RfECC(DR)进行比较。如果FBC大于RfECC(DR),则在1338,所述存储器系统控制器开始在标记页上进行刷新操作。不像图13A中使用SLC源数据,将所述页读出到所述存储器系统控制器。所述存储器系统控制器接着可以使用所述ECC引擎来进行ECC校正,以便获得校正数据发送给所述存储器芯片,以便在刷新中使用。

在1340,应用相同的页数据刷新。如上文讨论的,使用来自这同一页的经ECC校正的数据图案进行所述刷新。在此方面,所述经ECC校正的数据图案被发送至所述存储器芯片,所述存储器芯片可以使用所述经ECC校正的数据图案来刷新这同一页。

图13C展示了判定是否对遭受循环应力问题的块(例如,具有高P/E计数(PEC)的块)进行刷新操作并进行刷新操作的流程图1360。如上文讨论的,块的性能可能由于老化或磨损而变差。在此方面,可以使用寿命指示符来判定一个块是否可能潜在地遭遇数据保持问题。因此在空闲时间期间,可以检查所述块的寿命指示符(例如,P/E计数)来确定所述块的相对老化或磨损。在一个实施例中,可以对具有的P/E计数大于预定P/E计数的块进行标记,以便判定是否进行刷新操作。在替代性实施例中,可以对具有最高P/E计数的块(与其他块相比)进行标记,以便判定是否进行刷新操作。

在1362,针对具体操作、即针对遭受高PEC的块,设定故障位计数(FBC)阈值(RfECC(PEC))。在1364,使用CVD或动态读取操作来扫描块以便确定Vt下移的量。

在1366,将FBC与RfECC(PEC)进行比较。如果FBC大于RfECC(PEC),则在1368,所述存储器系统控制器开始在标记页上进行刷新操作。不像图13A中使用SLC源数据,将所述页读出到所述存储器系统控制器。所述存储器系统控制器接着可以使用所述ECC引擎来进行ECC校正,以便获得校正数据发送给所述存储器芯片,以便在刷新中使用。

在1370,应用相同的页数据刷新。如上文讨论的,使用来自这同一页的经ECC校正的数据图案进行所述刷新。在此方面,所述经ECC校正的数据图案被发送至所述存储器芯片,所述存储器芯片可以使用所述经ECC校正的数据图案来刷新这同一页。

所述指令可以被实施在计算机可读介质中。所述计算机可读介质可以是单个介质,或者所述计算机可读介质可以是单个介质或多个介质,例如集中或分布式数据库、和/或存储一组或多组指令的相关联缓存和服务器。术语“计算机可读介质”还可以包括可能能够存储、编码和/或承载一组指令以便由处理器执行的、或者可以使得计算机系统执行在此公开的所述方法或操作中的任意一种或多种的任何介质。

所述计算机可读介质可以包括固体存储器,例如存储卡或容纳一个或多个非易失性只读存储器的程序包。所述计算机可读介质还可以是随机存取存储器或其他易失性可再写入存储器。此外,所述计算机可读介质可以包括磁光介质或光介质,例如用于捕捉载波信号、例如通过传输介质传达的信号的盘、带、或其他存储设备。电子邮件的数字文件附件、或其他自含信息档案或档案组可以被视为分布式介质,所述介质可以是有形存储介质。所述计算机可读介质优选是有形存储介质。相应地,本公开可以被认为包括计算机可读介质或分布式介质以及其他等效物和在其中可以存储数据或指令的后续介质中的任何一种或多种。

可替代地或另外,可以构造专用硬件实施方案,例如专用集成电路、可编辑逻辑阵列和其他硬件设备,来实施在此描述的所述方法中的一种或多种。可以包括多个不同实施例的装置和系统的应用程序可以广义地包括各种各样的电子系统和计算机系统。在此描述的一个或多个实施例可以使用两个或更多特定的互连的硬件模块或设备以及相关的控制信号和数据信号来实施多个功能,所述信号可以在所述模块之间并且通过所述模块传送、或者作为专用集成电路的一部分。相应地,本系统可以涵盖软件、固件、以及硬件实现方式。

在此描述的所述展示旨在提供对多个不同实施例的结构的一般性理解。所述展示不旨在用作对利用在此描述的结构或方法的装置、处理器和系统的所有要素和特征的全面描述。本领域技术人员在查阅本公开后将清楚许多其他的实施例。可以利用并从本公开推导出其他的实施例,使得可以在不背离本公开的范围的情况下作出结构上和逻辑上的替代和改变。此外,所述展示仅是表示性的并且可能不是按比例绘制的。所述展示中的某些比例可能被夸大,而其他比例可能被最小化。相应地,本公开和所述图应被视为展示性的而不是限制性的。

以上公开的主题应被视为展示性的而不是限制性的,并且所附权利要求书旨在覆盖落入本说明书的真正精神和范围内的所有这样的修改、增强、和其他实施例。因此,在法律允许的最大程度上,将由对以下权利要求书及其等效物的最宽的可容许的理解来确定范围,并且此范围不应由以上具体实施方式来限制或约束。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1