加快nor flash编程速度的方法、装置、电子设备
技术领域
本申请涉及半导体
技术领域
,具体而言,涉及一种加快NOR FLASH编程速度的方法、装置、电子设备。背景技术
在传统的NOR Flash 在编程中,如图4所示,为了判断被编程单元是否达到阈值电压,在每次编程之后都需对编程单元进行编程校验判断其是否已经达到阈值电压,若没达到,则需要继续编程,编程后继续判断是否达到阈值电压,直到所有需要被编程的单元的电压都达到预期的阈值电压,才能够通过编程校验,然后进行下一地址的编程。
在每次编程后都编程校验就造成了flash编程时间过长,增加flash编程功耗。
针对上述问题亟需进行改进。
发明内容
本申请实施例的目的在于提供一种加快NOR FLASH编程速度的方法、装置、电子设备,具有减少传统编程流程中冗余的编程校验次数、提高编程效率的优点。
第一方面,本申请实施例提供了一种加快NORFLASH编程速度的方法,技术方案如下:
包括:
获取对上一编程地址的编程过程中成功进行编程所需要的编程次数A;
根据所述编程次数A,在对本次编程地址的编程过程中的第A次编程时进行编程校验,并将A更新为本次编程地址的编程过程中成功编程所需要的编程次数。
进一步地,在本申请实施例中,还包括:
对本次编程地址的编程过程中的首次编程的编程电压与对上一编程地址的编程过程中首次编程的编程电压保持相同。
进一步地,在本申请实施例中,所述获取对上一编程地址的编程过程中成功进行编程所需要的编程次数A的步骤包括:
判断是否存在对上一编程地址的编程;
如果存在,则获取对上一编程地址的编程过程中成功进行编程所需要的编程次数A;
如果不存在,则按照正常的编程、编程校验、编程、编程校验......流程进行编程,并记录成功进行编程所需要的编程次数A。
进一步地,在本申请实施例中,所述如果不存在,则按照正常的编程、编程校验、编程、编程校验......流程进行编程,并记录成功进行编程所需要的编程次数A的步骤包括:
设置cnt计数器,所述cnt计数器=1;
每经过一次编程校验失败所述cnt计数器加1;
A=cnt计数器。
进一步地,在本申请实施例中,所述并将A更新为本次编程地址的编程过程中成功编程所需要的编程次数的步骤包括:
设置cnt计数器,所述cnt计数器=上一编程地址的编程过程中成功进行编程所需要的编程次数A;
每经过一次编程校验失败所述cnt计数器加1;
A=cnt计数器。
进一步地,在本申请实施例中,还包括:
获取对多个编程地址成功进行编程的编程次数;
根据所述对多个编程地址成功进行编程的编程次数对所述cnt计数器的数值进行调整。
进一步地,在本申请实施例中,所述根据所述对多个编程地址成功进行编程的编程次数对cnt计数器的数值进行调整的步骤包括:
根据所述对多个编程地址成功进行编程的编程次数得到多个编程地址成功进行编程的编程次数的变化量;
根据所述变化量对所述cnt计数器的数值进行调整。
第二方面,本申请还提供一种加快NORFLASH编程速度的装置,包括:
第一获取模块,用于获取对上一编程地址的编程过程中成功进行编程所需要的编程次数A;
第一处理模块,用于根据所述编程次数A,在对本次编程地址的编程过程中的第A次编程时进行编程校验,并将A更新为本次编程地址的编程过程中成功编程所需要的编程次数。
第三方面,本申请还提供一种电子设备,包括处理器以及存储器,所述存储器存储有计算机可读取指令,当所述计算机可读取指令由所述处理器执行时,运行如上所述方法中的步骤。
第四方面,本申请还提供一种存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,运行如上所述方法中的步骤。
由上可知,本申请实施例提供的一种加快NOR FLASH编程速度的方法、装置、电子设备及存储介质,通过获取对上一地址编程过程中成功编程所需要的编程校验次数;然后根据编程校验次数在对本次地址编程过程中经过编程校验次数的编程后再进行编程校验,并记录本次地址编程过程所需要的编程校验次数,从而减少传统编程流程中冗余的编程校验次数,具有提高编程效率的有益效果。
本申请的其他特征和优点将在随后的说明书阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请实施例了解。本申请的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
图1为本申请实施例提供的一种加快NORFLASH编程速度的方法的流程图。
图2为本申请实施例提供的一种加快NORFLASH编程速度的装置结构示意图。
图3为本申请实施例提供的一种电子设备示意图。
图4为传统编程的流程图。
图中:210、第一获取模块;220、第一处理模块;300、电子设备;310、处理器;320、存储器。
具体实施方式
下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
请参照图1至图4,一种加快NORFLASH编程速度的方法,技术方案具体包括:
S110、获取对上一编程地址的编程过程中成功进行编程所需要的编程次数A;其中,成功进行编程指的是使编程单元的电压达到阈值电压,然后通过编程校验,在对编程地址进行编程时,往往不会一次就达到阈值电压,因此需要进行多次编程。
S120、根据编程次数A,在对本次编程地址的编程过程中的第A次编程时进行编程校验,并将A更新为本次编程地址的编程过程中成功编程所需要的编程次数。
通过上述技术方案,将上一编程地址的编程过程中成功进行编程所需要的编程次数A作为对本次编程地址进行编程次数的基准,在本次编程地址的编程中,进行第A次编程时才开始进行编程校验,在第A次编程之前则不进行编程校验,并在第A次之后的每一次编程均进行编程校验,最终记录下本次编程地址的编程过程成功进行编程所需要的编程次数。相对于传统的每次编程都必须伴随着编程校验而言,通过本申请的方案可以有效的减少编程过程中冗余的编程校验步骤,从而缩短编程时间,并且随着一次完整编程指令发送的编程地址越多,节约的校验次数也越多,编程时间的节省效果越明显。
例如,在一些具体实施方式中,在上一地址的编程过程中,一共经过了5次编程和5次编程校验,则A等于5,那么在本次编程地址的编程中,直接进行5次编程,然后在第5次编程进行第1次编程校验,如果该编程校验通过,则对下一编程地址进行编程,如果该编程校验不通过,则继续对该编程地址进行编程,并在第6次编程、第7次编程......中的每一次编程都进行编程校验,直至编程校验成功,例如在第10次编程后的编程校验成功通过,则将A更新为10,即,在对下一编程地址进行编程时,进行第10次编程时才开始进行编程校验。
此外,在另外一些实施方式中,也可以不对A进行更新,例如,在上一地址的编程过程中,一共经过了5次编程和5次编程校验,则A等于5,那么在本次编程地址的编程中,直接进行5次编程,然后在第5次编程后进行第1次编程校验,在对下一编程地址乃至于后续的编程地址进行编程时,仍然是在第5次编程时才开始进行编程校验.
进一步地,在其中一些实施例中,还包括:
对本次编程地址的编程过程中的首次编程的编程电压与对上一编程地址的编程过程中首次编程的编程电压保持相同。
通过上述技术方案,保持对每个编程地址的首次编程电压相同是为了控制变量,因为调整电压的大小与减少编程校验次数是在两个维度上来提高编程速度。
例如,在对第一个编程地址进行编程时,首次编程电压为1.5v,2v为阈值电压,每次编程增加0.1v,则需要编程5次才会编程校验成功,在对第二个编程地址进行编程时,如果首次编程电压为1.0v,2v为阈值电压,每次编程增加0.1v,则需要编程10次就可以编程校验成功,并且会将A更新成10,而如果保持电压相同,则A任然是5,因此,如果不保证首次编程电压相同,会导致后续的编程次数发生混乱。
进一步地,在其中一些实施例中,获取对上一编程地址的编程过程中成功进行编程所需要的编程次数A的步骤包括:
判断是否存在对上一编程地址的编程;
如果存在,则获取对上一编程地址的编程过程中成功进行编程所需要的编程次数A;
如果不存在,则按照正常的编程、编程校验、编程、编程校验......流程进行编程,并记录成功进行编程所需要的编程次数A。
通过上述技术方案,如果是对第一个编程地址进行编程,那么就不存在上一编程地址,此时的编程会按照传统的编程方式进行,在每一次编程后都会进行一次编程校验直至编程成功,然后记录成功进行编程所需要的编程次数A,然后在对第二个编程地址进行编程时,就可以获取第一个编程地址的编程过程中,成功进行编程所需要的的编程次数A了。
进一步地,在其中一些实施例中,如果不存在,则按照正常的编程、编程校验、编程、编程校验......流程进行编程,并记录成功进行编程所需要的编程次数A的步骤包括:
设置cnt计数器,所述cnt计数器=1;
每经过一次编程校验失败所述cnt计数器加1;
A=cnt计数器。
通过上述技术方案,在对第一个编程地址进行编程时,通过cnt计数器对编程次数进行计数。例如第5次编程成功,则有4次编程校验失败,则A=cnt计数器=1+1+1+1+1=5。
进一步地,在其中一些实施例中,并将A更新为本次编程地址的编程过程中成功编程所需要的编程次数的步骤包括:
设置cnt计数器,cnt计数器=上一编程地址的编程过程中成功进行编程所需要的编程次数A;
每经过一次编程校验失败cnt计数器加1;
A=cnt计数器。
通过上述技术方案,在对编程地址进行编程时,通过cnt计数器对编程次数进行计数。例如,在第一个编程地址进行编程时,第5次编程成功,在对第二编程地址进行编程时,第7次编程成功,则经过了2次编程校验失败,则cnt计数器=5;cnt计数器=5+1+1=7;A=7。
值得注意的是,对于一个成熟稳定的工艺产品而言,大部分编程单元的阈值电压的波动幅度会很小,即编程单元的阈值电压是相同或相近的,因此采用本申请的方案可以有效减少编程过程中冗余的编程校验步骤,从而缩短编程时间。
但是,同样的,也会存在编程单元的阈值电压的差别很大的情况,当阈值电压大的编程单元在靠前的编程地址的时候,会存在将编程校验的次数拉高的情况。
进一步地,在其中一些实施例中,还包括:
获取对多个编程地址成功进行编程的编程次数;
根据对多个编程地址成功进行编程的编程次数对cnt计数器的数值进行调整。
具体的,根据对多个编程地址成功进行编程的编程次数得到多个编程地址成功进行编程的编程次数的变化量;
根据变化量对cnt计数器的数值进行调整。
例如,连续出现了N个相同的编程次数的编程地址,对cnt计数器的数值减1,对于一个成熟稳定的工艺产品而言,其编程单元的阈值电压是相同或相近的,即,对cnt计数器的数值减1的操作也会被很快的校正回来。
例如,第一编程地址的某个编程单元的阈值较大,会导致编程次数增多,进而影响后续编程地址的编程次数,当第一编程地址成功进行编程的编程次数为10、第二编程地址成功进行编程的编程次数为10、第三编程地址成功进行编程的编程次数为10、第四编程地址成功进行编程的编程次数为10时,第二编程地址、第三编程地址、第四编程地址的实际编程次数有可能是10,也有可能小于10,因此需要根据对多个编程地址成功进行编程的编程次数对cnt计数器的数值进行调整。
例如,当多个编程地址的编程次数相同的时候,则有可能出现编程次数过高的情况,此时可以使cnt计数器减1来调整A值,例如、第一编程地址、第二编程地址、第三编程地址、第四编程地址的编程次数均为10,连续出现了4个相同的编程次数的编程地址,可以使cnt计数器减1,那么在对第五编程地址进行编程的时候,则会在其第9次编程的时候进行编程校验,同理对后续的编程地址进行同样的操作,通过该方案就可以解决当阈值电压大的编程单元在靠前的编程地址的时候,会存在将编程校验的次数拉高的问题。
在一些具体实施方式中,假设在一次编程指令中需要依次对十个编程地址进行编程,十个编程地址为A1~A10,对地址A1进行编程和传统编程流程相同,但需要cnt计数器记录编程A1成功编程所需要的编程次数,假设cnt计数器=5时,表示A1成功编程所需要的编程次数为5,编程校验通过,开始编程A2,直接对A2进行cnt次编程后再进行编程校验,若校验不通过,则继续对A2进行编程,编程后对其进行编程校验直至A2编程校验通过,若编程校验通过,则以A2的编程流程分别对A3~A10进行编程。
例如,在传统的编程流程中,对A1~A10编程地址进行编程所需要的编程均为5次,编程校验也需要5次,则总共需要50次的编程时间和50次的编程校验时间。
通过本申请提供的方案,对A1编程的次数为5次,编程校验次数为5次,对A2~A10的编程次数为9*5=45次,对A2~A10的编程校验次数为9次,即总共的需要5+45=50次的编程时间、5+9=14次的编程校验时间。
综上所述,传统编程流程编程A1~A10需要50次编程和50次编程校验时间,而本申请只需要50次编程和14次编程校验时间,大大减小了编程校验次数,若一次编程指令发送的地址越多,则节约的校验次数也越多,节约完整的编程时间的效果越明显。
第二方面,本申请还提供一种加快NOR FLASH编程速度的装置,包括:
第一获取模块210,用于获取对上一编程地址的编程过程中成功进行编程所需要的编程次数A;
第一处理模块220,用于根据编程次数A,在对本次编程地址的编程过程中的第A次编程时进行编程校验,并将A更新为本次编程地址的编程过程中成功编程所需要的编程次数。
通过上述技术方案,第一获取模块210将上一编程地址的编程过程中成功进行编程所需要的编程次数A作为对本次编程地址进行编程次数的基准,在本次编程地址的编程中,第一处理模块220根据编程次数A,在进行第A次编程时才开始进行编程校验,在第A次编程之前则不进行编程校验,并在第A次之后的每一次编程均进行编程校验,最终记录下本次编程地址的编程过程成功进行编程所需要的编程次数。相对于传统的每次编程都必须伴随着编程校验而言,通过本申请的方案可以有效的减少编程过程中冗余的编程校验步骤,从而缩短编程时间,并且随着一次完整编程指令发送的编程地址越多,节约的校验次数也越多,编程时间的节省效果越明显
第三方面,本申请还提供一种电子设备300,包括处理器310以及存储器320,所述存储器320存储有计算机可读取指令,当所述计算机可读取指令由所述处理器310执行时,运行如上所述方法中的步骤。
通过上述技术方案,处理器310和存储器320通过通信总线和/或其他形式的连接机构(未标出)互连并相互通讯,存储器320存储有处理器310可执行的计算机程序,当计算设备运行时,处理器310执行该计算机程序,以执行时执行上述实施例的任一可选的实现方式中的方法,以实现以下功能:获取对上一编程地址的编程过程中成功进行编程所需要的编程次数A;根据编程次数A,在对本次编程地址的编程过程中的第A次编程时进行编程校验,并将本次编程地址的编程过程中成功编程所需要的编程次数更新为A。
第四方面,本申请还提供一种存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,运行如上所述方法中的步骤。
通过上述技术方案,计算机程序被处理器执行时,执行上述实施例的任一可选的实现方式中的方法,以实现以下功能:获取对上一编程地址的编程过程中成功进行编程所需要的编程次数A;根据编程次数A,在对本次编程地址的编程过程中的第A次编程时进行编程校验,并将本次编程地址的编程过程中成功编程所需要的编程次数更新为A。
其中,存储介质可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(Static Random Access Memory, 简称SRAM),电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory, 简称EEPROM),可擦除可编程只读存储器(Erasable Programmable Read Only Memory, 简称EPROM),可编程只读存储器(Programmable Red-Only Memory, 简称PROM),只读存储器(Read-OnlyMemory, 简称ROM),磁存储器,快闪存储器,磁盘或光盘。
在本申请所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
另外,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
再者,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。