一种NandFlash的编程方法与流程

文档序号:12806220阅读:425来源:国知局
一种Nand Flash的编程方法与流程

本发明涉及存储设备硬件技术领域,尤其涉及一种nandflash的编程方法。



背景技术:

nandflash是flash内存的一种,属于非易失性存储设备(non-volatilememorydevice),其内部采用非线性宏单元模式,具有容量大,改写速度快等优点,适用于大量数据的存储。广泛应用于嵌入式产品中,如数码相机、mp3随身听记忆卡、体积小巧的u盘等。在nandflash的发展中,早期nandflash颗粒的存储单元多为单层单元(single-levelcell,slc),即一个存储单元为1bit(比特)位,此时每个存储单元存在两种状态为0和1,随着nandflash的发展,nandflash颗粒的存储单元逐渐演变为多层单元(multi-levelcell,mlc),即一个存储单元有2比特位,接着推出了三层单元(triple-levelcell,tlc),即一个存储单元有3比特位,甚至四层单元(quad-levelcell,qlc),即一个存储单元有4比特位,相对应的,nandflash颗粒存储单元的状态也由2个变为4个、8个甚至16个。

nandflash的操作包括三部分:擦除操作、编程(写操作)以及读操作,其中以块为单位进行擦除操作,以页为单位进行编程和读操作,对于nandflash的编程操作,其过程又分为加压编程、编程验证以及验证结果三步操作。在nandflash存储单元由1比特位变为多比特位的情况下,图1给出了传统的nandflash进行编程的编程方法示意图。该示意图以tlc存储单元为例,tlc存储单元具有1个擦除状态和7个编程状态,其编程状态记为p1~p7,如图1所示,传统的编程方法是在加压编程之间启动七次编程的结果验证。该方法存在的问题是:在一次加压编程后,存储单元实际上只达到了p1状态,还未达到p2,p3,p4,p5,p6,p7状态,如果此时就启动p2~p7的编程验证,就会大大浪费编程验证时间。其编程验证和扫描验证结果所用的时间就会占据整个编程过程的一半以上,严重影响编程速度。

在编程操作中,由于加压编程的时间不能改变,为了提高编程操作速度,只有控制编程验证和扫描验证结果所用的时间。图2为改进后的现有编程方法的示意图,仍以tlcnandflash为例,如图2所示,该编程方法使用参数来控制何时启动编程验证,例如,在编程验证阶段,如果没有启动p2的验证,那么只做p1的编程验证。该方法虽然减少了验证的次数,提高了编程速度,但在对存储块中的所有编程页都做一样的处理时会产生误差,导致其他问题如对峰值电流和功耗产生影响。



技术实现要素:

有鉴于此,本发明实施例提供一种nandflash的编程方法,以提高nandflash内存的编程速度。

本发明实施例提供了一种nandflash的编程方法,包括:

s101、对编程页施加编程电压,如果达到启动第1状态编程验证的验证条件,则启动第1状态的编程验证并扫描处于第1状态的存储单元;

s102、设置m=1,其中,m为所述nandflash的编程状态序号,1≤m≤m,m=2n-1,n为nandflash存储单元具有的比特位;

s103、判定m<2n-1是否成立,若是,则执行步骤s104;若否,则执行步骤s106;

s104、如果第m状态的扫描结果达到启动第m+1状态编程验证的设定值,则设置m=m+1,启动第m状态的编程验证并扫描处于第m状态的存储单元,之后返回步骤s103;若否,则执行步骤s105;

s105、以设定电压增量值抬升所述当前编程电压,启动第1状态至第m状态的编程验证并扫描处于第m状态的存储单元,之后返回步骤s103;

s106、判定第m状态的编程验证次数是否达到最大验证次数,若是,则执行步骤s107;若否,则返回执行步骤s105;

s107、如果所述编程页中所有编程失败的存储单元总数不大于内部设定值,则结束对所述编程页的编程操作。

进一步的,所述对编程页施加编程电压,包括:

基于nandflash中的控制单元通过字线选择单元选取要编程的存储页,记为编程页;对所述编程页的字线施加初始编程电压,并在设定时间内持续施压。

进一步的,所述启动第1状态编程验证的验证条件为:对所述编程页施加编程电压的编程次数达到设定验证启动次数;所述预设验证启动次数设定在1次~128次。

进一步的,还包括:对编程页施加编程电压,如果所施加编程电压的当前编程次数小于所述预设验证启动次数,则以设定电压增量值抬升所述编程电压,并令当前编程次数自加1。

进一步的,还包括:如果所述编程页中所有编程失败的存储单元总数超过内部设定值,则强制结束所述编程页的当前编程验证操作,同时声明所有编程失败的存储单元,并对所述编程页重新执行编程操作。

进一步的,所述启动第m状态的编程验证,包括:启动对所述编程页的读操作,基于读操作查验应该编程到第m状态的存储单元是否已编程到了第m状态。

进一步的,所述扫描所述第m状态的存储单元,包括:

基于所述编程页中存储单元的位线,对应该处于第m状态的存储单元进行扫描,确定编程失败的存储单元个数,并计算第m状态的编程失败率;记所述第m状态的编程失败率为第m状态的扫描结果。

进一步的,所述启动第m+1状态编程验证的设定值为一个百分比值,所述百分比值基于所述编程页在历史编程操作中第m状态编程失败率的数据规律设定。

进一步的,所述最大验证次数以及内部设定值均基于所述编程页在历史编程操作中的数据规律设定。

进一步的,所述设定电压增量值为一固定值。

本发明实施例提供的一种nandflash的编程方法,在现有的编程方法的前提下对编程过程中的编程验证及验证结果扫描两阶段的操作进行了改进,在该方法中,将对处于第m+1编程状态存储单元的编程验证基于处于第m状态存储单元的扫描验证结果进行启动,并设定了存储单元编程验证的最大次数以及结束编程操作的结束条件。利用该方法,可以大大降低整个编程操作的时间消耗,很大程度的提高编程速度,同时也避免了编程操作时峰值电流和功耗产生影响。

附图说明

图1为nandflash传统编程方法在tlcnandflash中的过程示意图;

图2为现有的nandflash编程方法在tlcnandflash中的过程示意图;

图3为本发明实施例一提供的一种nandflash的编程方法的流程图;

图4为本发明实施例二提供的一种nandflash的编程方法的流程图;

图5a为本发明实施例三提供的一种nandflash的编程方法的流程图;

图5b为本发明实施例三提供的一种nandflash的编程方法在tlcnandflash中的过程示意图。

具体实施方式

下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。

实施例一

图3为本发明实施例一提供的一种nandflash的编程方法的流程图,该方法由nandflash执行,是对现有编程方法的一种改进,如图3所示,该方法包括:

s101、对编程页施加编程电压,如果达到启动第1状态编程验证的验证条件,则启动第1状态的编程验证并扫描处于第1状态的存储单元。

在本实施例中,所述编程页具体可为nandflash的存储单元阵列中用于编程操作的一个存储单元页。所述编程操作以存储单元页为单位进行,所述nandflash的存储单元阵列由多个存储单元块组成,所述存储单元块由多个存储单元页组成,所述存储单元页由多个存储单元以行列连接组成。在一个存储单元页中,每行由多个存储单元以字线连接,每列由多个存储单元以位线连接,且一个存储单元页共享一根字线,一个存储单元块共享一根位线。

一般地,nandflash的编程操作分为:加压编程、编程状态验证以及验证结果扫描三个阶段。基于nandflash型号的不同,存储单元所具有比特位的个数不同,进而编程时nandflash具有的编程状态个数也不同。所述编程验证具体可为验证对编程页加压后存储单元中要发生改变的比特位状态是否发生了改变,即比特位的状态是否由“1”变成“0”。所述验证结果扫描具体可为扫描编程到某个编程状态的所有存储单元,确定这些存储单元中应该编程到某个编程状态但是编程失败的存储单元个数。

在本实施例中,所提供的方法对现有编程方法的改进主要体现在编程状态验证以及验证结果扫描阶段。所述第1状态具体可指nandflash编程操作中存储单元应该呈现出的一种编程状态。相应的,编程状态还存在第2状态、第3状态、...、以及第m状态等。将所述编程状态以编号表示,主要便于对本发明所提编程方法中之后操作的描述。

进一步的,所述对编程页施加编程电压,包括:基于nandflash中的控制单元通过字线选择单元选取要编程的存储页,记为编程页;对所述编程页的字线施加初始编程电压,并在设定时间内持续施压。

一般地,nandflash的简易结构优选为:存储单元阵列、字线选择单元、位线选择单元、电压泵、以及整个nandflash芯片的控制单元。所述控制单元控制nandflash的具体操作,如擦除操作,编程操作等。在本实施例中,对于nandflash的编程操作,nandflash中的控制单元首先通过字线选择单元选取要编程的存储页,作为编程页;然后控制电压泵对编程施加编程电压并进行相应的加压控制,如持续施压和以设定值抬升电压等。

在本实施例中,通过电压泵对编程页的字线施加编程电压,使其处于高电平,此时编程页的位线处于0电平,进而使作为存储单元的晶体管中的电子注入该晶体管的浮栅中,由此实现存储单元比特位状态的改变。需要注意的是,在设定时间内电压泵向编程页持续施加恒定电压,设定时间一般优选为10μs~150μs。

在本实施例中,在对编程页加压之后,需要对编程页存储单元的编程状态进行验证,所采用的方法是基于编程验证启动条件逐步启动各编程状态的编程验证。所述启动第1状态编程验证的条件具体为所施加编程电压的当前编程次数是否达到了设定的启动第1状态编程验证的设定验证启动次数。

s102、设置m=1,其中,m为所述nandflash的编程状态序号,1≤m≤m,m=2n-1,n为nandflash存储单元具有的比特位。

在本实施例中,不同类型的nandflash,存储单元具有的比特位个数不同,进而编程时能达到的编程状态的个数也不同,为了便于对之后步骤的描述,以序号m表示不同的编程状态,其中,1≤m≤m,m=2n-1,n为nandflash存储单元具有的比特位。示例性的,如果存储单元具有3比特位,则具有的编程状态总数m就为7个,各编程状态可表示为第1状态,第2状态,...,第m状态,...,第7状态。

s103、判定m<2n-1是否成立,若是,则执行步骤s104;若否,则执行步骤s107。

在本实施例中,在判定编程状态的扫描结果是否符合启动下一编程状态进行编程验证的条件前,需要先判定所述编程状态是否合法,即判定所述编程状态的序号m是否大于2n-1,如果大于的话,再进行之后的编程验证判定是无意义的,可直接执行步骤s107。

s104、判定第m状态的扫描结果是否达到启动第m+1状态编程验证的设定值,若是,则执行步骤s105;若否,则执行步骤s106。

在本实施例中,启动第m+1状态编程验证的设定值具体指第m+1状态编程验证的启动条件,所述设定值需要与所述第m状态的扫描结果值进行比较。

s105、设置m=m+1,启动第m状态的编程验证并扫描处于第m状态的存储单元,之后返回步骤s103;

在本实施例中,如果第m+1状态的编程验证的设定值小于或等于第m状态的扫描结果值,则可启动第m+1状态的编程验证。需要注意的是,在启动第m+1状态的编程验证前,需先将设置为m=m+1,由此便于实现所有编程状态的编程验证条件判定的循环操作。

进一步的,所述启动第m状态的编程验证,包括:启动对所述编程页的读操作,基于读操作查验应该编程到第m状态的存储单元是否已编程到了第m状态。

在本实施例中,所述对第m状态的编程验证具体可理解为对所述编程页中应该编程到第m状态的存储单元进行读操作,由此查验应该编程到第m状态的存储单元是否已编程到了第m状态。

一般地,在nandflash的编程操作中,所述编程页中哪个存储单元的比特位应该处于哪个编程状态在加压编程前已经是确定的。可以说,在所述编程页中,每个编程状态对应的存储单元个数是一个固定值。确定编程状态对应存储单元个数的过程可表述为:由外部用户通过复用引脚向nandflash芯片输入数据,所述输入数据存放至页寄存器中,并通过nand片选向nfcmd写入命令以及向nfaddr写入地址告诉选中的存储单元需要达到什么状态。等待数据就绪后,就可通过加压编程实现相应存储单元的比特位状态的改变,之后可通过读操作验证存储单元中比特位状态变化的情况。

s106、以设定电压增量值抬升所述当前编程电压,启动第1状态至第m状态的编程验证并扫描处于第m状态的存储单元,之后返回步骤s103。

在本实施例中,如果第m状态的扫描结果值没有达到设定的第m+1状态的编程验证启动值,那么表明nandflash电压泵向编程也提供的编程电压达不到存储单元中电荷的移动的力度,需要抬升电压,因此可以以设定电压增量值抬升当前编程电压并在设定时间内持续施加抬升后的编程电压。

一般地,存储单元达到不同编程状态所需要的电压大小和宽度不同,即持续施加编程电压的设定时间不同,因此,在设定电压增量值抬升编程电压时也要相应改变电压持续的设定时间长短,在本发明方法中,设定时间的范围基于历史操作的数据规律动态改变。

在本实施例中,在以设定电压增量值抬升所述当前编程电压后,需要启动第1状态到第m状态的编程验证,而启动所述第1~m的编程验证时不再需要判定是否达到验证启动条件,且无需扫描处于第1~m-1状态的存储单元,只需对处于第m状态的存储单元进行扫描,因为对第m状态存储单元的扫描结果需要作为判定是否启动第m+1状态编程验证的条件。

s107、判定第m状态的编程验证次数是否达到最大验证次数,若是,则执行步骤s108;若否,则返回执行步骤s106。

在本实施例中,若m的当前赋值大于等于2n-1(n为存储单元具有的比特位个数)时,无需再基于第m状态的扫描结果判定是否需要启动下一编程状态的编程验证,而是需要判定对第m状态的编程验证的次数是否达到了最大验证次数。

一般地,在nandflash闪存的工作操作中,无论是擦除操作还是编程操作,对存储单元比特位状态改变数量的限定并不像norflash那样绝对,nandflash允许存在少量没有达到相应状态的存储单元。因此对于第m状态的编程验证不能无休止的进行,需要一个结束条件,即设置编程验证的最大验证次数,当处于第m状态存储单元验证次数达到最大次数时,就可结束对其的编程验证。

s108、如果所述编程页中所有编程失败的存储单元总数不大于内部设定值,则结束对所述编程页的编程操作。

在本实施例中,所述所有编程失败的存储单元具体可指对存储单元的验证达到最大验证次数后编程页中所有没有达到相应编程状态的存储单元。所述内部设定值具体可指nandflash中为相应编程页允许存储单元可以达到的最大错误个数。如果最终编程失败的存储单元总数不大于允许的最大错误个数则可正常结束对所述编程页的编程操作。

进一步的,所述最大验证次数以及内部设定值均基于所述编程页在历史编程操作中的数据规律设定。

在本实施例中,对最大验证次数及内部设定值的设定由编程操作的实际情况设定,一般地,可基于所述编程页在历史编程操作中的数据规律设定最大验证次数及内部设定值的最佳值。

本发明实施例一提供的一种nandflash的编程方法,在现有的编程方法的前提下对编程过程中的编程验证及验证结果扫描两阶段的操作进行了改进,在该方法中,基于处于第m状态存储单元的扫描验证结果决定是否启动对处于第m+1编程状态存储单元的编程验证,所述方法还设定了存储单元编程验证的最大次数以及结束编程操作的结束条件。利用该方法,可以大大降低整个编程操作的时间消耗,很大程度的提高编程速度,同时也避免了编程操作时峰值电流和功耗产生影响。

实施例二

图4为本发明实施例二提供的一种nandflash的编程方法,本实施例在上述各实施例的基础上进行优化,在本实施例中,进一步的,本发明所述的方法还包括步骤:对编程页施加编程电压,如果所施加编程电压的当前编程次数小于所述预设验证启动次数,则以设定电压增量值抬升所述编程电压,并令当前编程次数自加1。

进一步的,还包括步骤:如果所述编程页中所有编程失败的存储单元总数超过内部设定值,则强制结束所述编程页的当前编程验证操作,同时声明所有编程失败的存储单元,并对所述编程页重新执行编程操作。

如图4所示,本发明实施例提供的一种nashflash的编程方法,包括如下步骤:

s201、对编程页施加编程电压。

在本实施例中,基于nandflash的控制单元,控制电压泵在设定时间内对选中字线的编程页持续施加恒定电压。一般地,向编程页施加的初始编程电压为8v左右。

s202、判定所施加编程电压的当前编程次数是否达到启动第1状态编程验证的验证条件,若否,则执行步骤s203;若是,则执行步骤s204。

在本实施例中,所述启动第1状态编程验证的验证条件为对所述编程页施加编程电压的编程次数达到设定验证启动次数;进一步的,所述设定验证启动次数设定在1次~128次。

在本实施例中,当对编程页进行编程操作时,施加的编程电压使得部分存储单元的比特位处于了第1状态,需要说明的是,存储单元的比特位处于第1状态所需要的阈值电压的范围一般在10v~30v。

s203、以设定电压增量值抬升编程电压,并令当前编程次数自加1,之后返回步骤s202。

在本实施例中,如果编程页所施加编程电压的当前编程次数没有达到设定的启动第1状态编程验证的验证条件,则需要以设定电压增量值抬升当前编程电压,并令当前编程次数自加1。进一步的,所述设定电压增量值为一固定值。即每次抬升的软擦除电压值不变,优选地,所述电压增量值的范围控制在0.5v~1.5v内。

s204、启动第1状态的编程验证并扫描处于第1状态的存储单元。

在本实施例中,所述启动编程页第1状态的编程验证电压与编程页处于加压编程阶段的电压不同,一般地,将编程验证阶段的电压设定在-3v~10v。同时,所述启动第1状态的编程验证并扫描处于第1状态的存储单元具体描述为对应该编程到第1状态的存储单元进行读操作,查验所述存储单元是否已经编程到了第1状态;之后对所述存储单元进行扫描,确定应编程到第1状态的但是编程失败的存储单元个数。基于上述失败的存储单元个数以及应该编程到第1状态存储单元的总个数,可以计算出此次加压编程中,编程到第1状态的失败率。

s205、设置m=1,其中,m为所述nandflash的编程状态序号,1≤m≤m,m=2n-1,n为nandflash存储单元具有的比特位。

在本实施例中,在接下来的验证启动的循环判定前,可先对nandflash的编程状态m的值初始化,设置m=1。之后通过本发明方法中设定的对m的累加,实现对第m状态是否启动编程验证的循环判定。

s206、判定m<2n-1是否成立,若是,则执行步骤s207;若否,则执行步骤s210。

在本实施例中,所述步骤s206的判定可看作本发明方法中进行循环操作的一个总体判定条件,只有满足m<2n-1,才有进行循环操作的必要。

s207、判定第m状态的扫描结果是否达到启动第m+1状态编程验证的设定值,若是,则执行步骤s208;若否,则执行步骤209。

在本实施例中,所述第m状态的扫描结果具体为:应该处于第m状态但加压编程后没有达到第m状态的存储单元个数与所述应该处于第m状态的所有存储单元个数的比值。需要注意的是,该比值为一百分比值。

进一步的,所述启动第m+1状态编程验证的设定值为一个百分比值,所述百分比值基于所述编程页在历史编程操作中第m状态编程失败率的数据规律设定。

在本实施例中,由于第m+1状态编程验证的启动基于第m状态的扫描结果,所以用于启动第m+1状态编程验证的设定值的形式应该与第m状态的扫描结果形式相同,需设置成一百分比值。所述百分比值的设定需要遵循一定的规律,设定的太高或太低都会影响编程验证的效率,因此可基于以往的历史编程操作中第m状态编程失败率的一个数据规律设定,从而使第m+1状态设定值快速启动编程验证。

s208、设置m=m+1,启动第m状态的编程验证并扫描处于第m状态的存储单元,之后返回步骤s206。

如果设定的第m+1状态的编程验证启动值小于或等于第m状态的扫描结果值,则可启动第m+1状态的编程验证。由于先设置m=m+1,所述启动第m状态的编程验证并扫描处于第m状态的存储单元即可看作在设置m=m+1前,对第m+1状态的编程操作。

进一步的,所述扫描所述第m状态的存储单元,包括:基于所述编程页中存储单元的位线,对应该处于第m状态的存储单元进行扫描,确定编程失败的存储单元个数,并计算第m状态的编程失败率;记所述第m状态的编程失败率为第m状态的扫描结果。

在本实施例中,对所述第m状态的存储单元的扫描主要通过对所述编程页中存储单元的位线扫描实现。基于所述存储单元的位线,可查看哪些存储单元的比特位没有改变到第m状态。如果比特位没有改变到相应状态,则认为对相应存储单元的编程失败,由此可确定编程到第m状态失败的存储单元个数。基于编程失败的存储单元个数以及需要编程的存储单元总个数,可计算出第m状态的编程失败率。第m状态的编程失败率被看作第m状态的扫描结果。

s209、以设定电压增量值抬升所述当前编程电压,启动第1状态至第m状态的编程验证并扫描处于第m状态的存储单元,之后返回步骤s206。

在本实施例中,如果第m状态的扫描结果值没有达到启动第m+1状态编程验证的设定值,则需要以设定电压增量值抬升当前编程电压并在设定时间内持续施加抬升后的编程电压。需要注意的是,该电压增量与上述步骤s203中电压增量可以相同也可以不同,可根据实际情况设定。

s210、判定第m状态的编程验证次数是否达到最大验证次数,若是,则执行步骤s211;若否,则执行步骤s209。

在本实施例中,对所述最大验证次数的判定具体用于作为nandflash编程操作结束的前提条件。

s211、判定编程页中所有编程失败的存储单元总数是否小于等于内部设定值,若是,则执行步骤s212;若否,则执行步骤s213。

在本实施例中,对所述内部设定值的判定作为nandflash编程操作的结束条件。

s212、结束对所述编程页的编程操作。

s213、强制结束所述编程页的当前编程验证操作,同时声明所有编程失败的存储单元,返回s201重新执行编程操作。

在本实施例中,如果所述编程页中所有编程失败的存储单元总数超过内部设定值,可认为nandflash中存在存储单元坏区,需要对这些坏区存储单元进行声明,将其标记出来,便于以后编程时不再向其写入数据,之后返回s201对编程页中正常的存储单元重新执行编程操作。

本发明实施例二提供的一种nandflash的编程方法,在该方法中,首先基于处于第m状态存储单元的扫描验证结果决定是否启动对处于第m+1编程状态存储单元的编程验证,同时在每次抬升电压后无需重复扫描前m-1状态的存储单元,所述方法还设定了存储单元编程验证的最大次数以及结束编程操作的结束条件。利用该方法,可以大大降低整个编程操作的时间消耗,很大程度的提高编程速度,同时也避免了编程操作时峰值电流和功耗产生影响。

实施例三

如图5a所示,本发明实施例三提供了一种nandflash的编程方法的优选实施例,本实施例基于tlc型的nandflash,详细说明了本发明所提的一种nandflash的编程方法。基于背景技术中对tlcnandflash的介绍,了解到tlc型nandflash的存储单元具有3个比特位,因此具有7个编程状态,分别记作第1状态p1、第2状态p2、...、第i状态pi、...、以及第7状态p7。具体的本实施例的所提编程方法的编程示意图如图5b所示,下面具体结合图5a,详细说明图5b的编程操作过程,如图5a所示,给出了本发明实施例的方法在tlcnandflash中进行编程操作的流程示意图,具体包括如下步骤:

s301、对选中字线施加初始编程电压,并在持续时间内持续施压。

示例性的,基于tlcnandflash中的控制单元通过字线选择单元选取编程页,之后通过电压泵对选中页的字线加压。且持续时间可优选设定为10μs~150μs的任一时间段。

s302、判定所施加编程电压的当前编程次数是否达到启动第1状态编程验证的验证条件,若否,则执行步骤s303;若是,则执行步骤s304。

示例性的,设定第1状态p1编程验证的启动条件为当前编程次数达到设定验证启动次数,所述设定验证启动次数为1次~128次的任一值。

s303、电压泵以设定电压增量值抬升当前编程电压,并令当前编程次数自加1,之后返回s302。

示例性的,设定电压增量值控制在0.5v~1.5v的任一值。

s304、启动第1状态p1的编程验证并扫描处于第1状态p1的存储单元。

示例性的,对应该编程到第1状态p1的存储单元进行读操作,之后查验上述存储单元是否达到第1状态p1,接着扫描应编程到第1状态p1但是编程失败的存储单元个数。

s305、设置m=1,其中,m为tlcnandflash的编程状态序号,1≤m≤7。

s306、判定m<7是否成立,若是,则执行步骤s307;否则执行步骤s310。

s307、判定第m状态pm的扫描结果是否达到启动第m+1状态pm+1编程验证的设定值,若是,则执行步骤s308;若否,则执行步骤309。

示例性的,启动第2状态p2编程验证的设定值可以为30%,以及启动第7状态p7编程验证的设定值可以为60%,各状态的设定值可基于实际情况设定,将上述编程状态设定的启动值与所述编程状态的前一编程状态的扫描结果比较,如将第2状态p2的设定值与第1状态p1的扫描结果比较,将第7状态p7的设定值与第6状态p6的扫描结果比较等等。

s308、设置m=m+1,启动第m状态pm的编程验证并扫描处于第m状态pm的存储单元,之后返回步骤s306。

示例性的,当m等于1时,设置m=m+1后,m值为2,之后启动第2状态p2的编程验证并扫描处于第2状态p2的存储单元。

s309、以设定电压增量值抬升当前编程电压,启动第1状态p1至第m状态pm的编程验证并扫描处于第m状态pm的存储单元,之后返回步骤s306。

示例性的,当m等于6时,在抬升当前编程电压后,直接启动第1状态p1至第6状态p6的编程验证,并只扫描处于第6状态p6的存储单元。

s310、判定第m状态pm的编程验证次数是否达到最大验证次数若是,则执行步骤s311;若否,则执行步骤s309。

示例性的,只需验证第7状态p7的编程验证次数是否达到最大验证次数。

s311、如果编程页中所有编程失败的存储单元总数小于等于内部设定值,则直接结束编程操作;否则,强制结束当前编程验证,同时声明所有编程失败的存储单元,并返回s301重新执行。

在本实施例中,所述最大验证次数以及内部设定值均基于历史编程操作中的数据规律设定。

本发明实施例三提供的一种nandflash的编程方法的优选实施例,在该优选实施例中,确定tlcnandflash的所有编程状态后,基于本发明的方法对所述tlcnandflash编程操作中的编程验证以及验证结果扫描进行改进。利用该方法,可以大大降低整个编程操作的时间消耗,很大程度的提高编程速度,同时也避免了编程操作时峰值电流和功耗产生影响。

注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

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