一种提高编程效率的方法、装置、存储介质和终端
技术领域
本发明涉及flash
技术领域
,尤其涉及的是一种提高编程效率的方法、装置、存储介质和终端。背景技术
如图1所示,为Nor flash一般的编程过程,接收编程指令和数据,然后验证数据并记录需要编程的地址,再进行编程。
为保证编程效率,通常一次编程多位地址的数据(称为编程带宽,即芯片每次编程可以执行的最大数据位数)。如图1所示,将编程数据缓存至数据锁存器中(缓存的数据宽度一般大于编程带宽),Nor flash每次都从缓存的数据中读取一个编程带宽的数据进行编程,即便一个编程带宽范围内只有1位地址需要编程,控制机也会按既定的流程执行一遍,如缓存的数据宽度为32位bit,编程带宽为8位bit,Nor flash每次都从缓存的数据中读取8位bit的数据进行编程,需要按既定的流程执行4遍才能完成。如果每个编程带宽内都只有1位地址需要编程,但仍然需要按既定的流程执行一遍,这样会严重影响编程的效率,这种情况(指每个编程带宽内都只有1位地址需要编程)在Nor flash经过多次编程擦除之后更容易出现。
因此,现有的技术还有待于改进和发展。
发明内容
本发明的目的在于提供一种提高编程效率的方法、装置、存储介质和终端,旨在解决现有的flash编程每次只对编程带宽的地址数据进行编程,编程效率低的问题。
本发明的技术方案如下:本技术方案提供一种提高编程效率的方法,具体包括以下步骤:
接收编程指令和需要编程的数据,并对所述需要编程的数据进行缓存;
读取至少一个锁存器内缓存的编程数据;
判断芯片内与所述编程数据对应的地址中需要编程的数据位数是否大于编程带宽,得出判断结果;
根据所述判断结果对芯片内与所述编程数据对应的地址执行编程操作。
本技术方案中,每次读取至少一个锁存器内缓存的编程数据,然后判断芯片内与所述编程数据对应的地址中需要编程的数据位数是否大于编程带宽,根据判断结果对芯片内对应的地址进行编程;相对于现有技术中每次都从缓存的数据中读取一个编程带宽的数据进行编程的做法,不但保证芯片编程的正常进行,还提高了编程的效率。
进一步地,根据所述判断结果对芯片内与所述编程数据对应的地址执行编程操作,具体包括以下过程:若芯片内与所述编程数据对应的地址中需要编程的数据位数大于编程带宽,则将所述编程数据按照芯片内对应的地址中需要编程的数据位数分成多段,并根据所述编程指令和每段编程数据逐一对芯片内对应的地址执行编程操作,直至芯片内与所述编程数据对应的地址全部编程完毕,芯片内与每段所述编程数据对应的地址中需要编程的数据位数不大于编程带宽;若芯片内与所述编程数据对应的地址中需要编程的数据位数不大于编程带宽,则根据所述编程指令和所述编程数据对芯片内对应的地址执行一次编程操作,使芯片内与所述编程数据对应的地址全部编程完毕。
进一步地,所述编程指令包括编程操作指令和需要编程的地址。
进一步地,对所述需要编程的数据进行缓存,具体过程如下:所述需要编程的数据根据数据宽度分别缓存在flash中至少一个数据锁存器中。
进一步地,对所述需要编程的数据进行缓存后,还包括以下过程:读取flash内部与所述编程指令的地址对应的地址的数据;将flash内部对应的地址的数据与所述缓存的需要编程的数据进行比较,根据比较得出flash内部与所述编程指令的地址对应的地址需要编程的位数,并记录flash内部需要编程的地址。
进一步地,所述芯片内与所述编程数据对应的地址全部编程完毕后,还包括以下过程:
判断所述需要编程的数据是否已经读取完毕,
是,则结束编程操作;
否,则再次跳转至读取缓存中的编程数据。
本技术方案还提供一种提高编程效率的装置,包括:
接收模块,接收编程指令和需要编程的数据,并对所述需要编程的数据进行缓存;
读取模块,读取至少一个锁存器内缓存的编程数据;
判断模块,判断芯片内与所述编程数据对应的地址中需要编程的数据位数是否大于编程带宽,得出判断结果;
编程模块,根据所述判断结果对芯片内与所述编程数据对应的地址执行编程操作。
进一步地,所述判断模块判断芯片内与所述编程数据对应的地址中需要编程的数据位数是否大于编程带宽,得出数据分段索引并输出;分段编程模块或单次编程模块根据所述分段索引将所述编程数据进行分段。
本技术方案还提供一种存储介质,所述存储介质中存储有计算机程序,当所述计算机程序在计算机上运行时,使得所述计算机执行上述任一项所述的方法。
本技术方案还提供一种终端,包括处理器和存储器,所述存储器中存储有计算机程序,所述处理器通过调用所述存储器中存储的所述计算机程序,用于执行上述任一项所述的方法。
由上述可知, 每次读取至少一个锁存器内缓存的编程数据,将芯片内与一次读取的缓存的编程数据对应的地址中需要编程的数据位数与编程带宽进行比较,若需要编程的数据位数小于编程带宽,则直接将对芯片内与一次读取的缓存的编程数据对应的地址执行一次编程,而不管这些缓存数据中需要编程的地址的分布是集中还是分散,极大缩短了整个编程时间,提升编程效率的效果明显;若需要编程的数据位数大于编程带宽,则将编程数据按照芯片内对应的地址中需要编程的数据位数分成多段,并根据所述编程指令和每段编程数据逐一对芯片内对应的地址执行编程操作,直至芯片内与分段后的编程数据对应的地址全部编程完毕;因为芯片的编程能力只是受限于每次执行编程时实际需要编程的地址的位数而不是每次执行编程时跨越的数据位数,只要每次执行编程时实际需要编程的地址的位数在编程带宽内,芯片就可以执行,既保证芯片编程的正常进行,还提高了编程的效率。
附图说明
图1是现有技术中Nor flash的编程过程示意图。
图2是本发明中提高编程效率的方法的步骤流程图。
图3是本发明中提高编程效率的装置的示意图。
图4是本发明中终端的示意图。
具体实施方式
下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
如图2所示,一种提高编程效率的方法,适用于Nor flash,具体包括以下步骤:
S1:接收编程指令和需要编程的数据,并对所述需要编程的数据进行缓存。
其中,所述编程指令包括编程操作指令和需要编程的地址。
其中,所述需要编程的数据根据数据宽度分别缓存在flash中至少一个数据锁存器中。
其中,对于缓存至数据锁存器中的需要编程的数据,还包括以下验证过程:
s11:读取flash内部与所述编程指令的地址对应的地址的数据;
s12:将flash内部对应的地址的数据与所述缓存的需要编程的数据进行比较,根据比较得出flash内部与所述编程指令的地址对应的地址需要编程的位数,并记录flash内部需要编程的地址。
如,若flash内部与所述编程指令的地址对应的地址的数据是0,则flash内部对应的地址就不需要编程。如果flash内部与所述编程指令的地址对应的地址的数据是1,而需要编程的数据是0,则flash内部对应的地址就需要编程;若需要编程的数据是1,flash内部对应的地址就不需要编程。
S2:读取至少一个锁存器内缓存的编程数据。
其中,每次读取flash中至少一个数据锁存器中的编程数据。数据锁存器中可以缓存的编程数据一般都大于编程带宽,如一个数据锁存器中可以缓存的编程数据为32位或者64位,而编程带宽为8位。
S3:判断芯片内与所述编程数据对应的地址中需要编程的数据位数是否大于编程带宽,是则跳转至S4,否则跳转至S5。
其中,一个数据锁存器可以缓存的编程数据中,需要编程的数据位数可能大于编程带宽,也有可能小于编程带宽。如一个数据锁存器中可以缓存的编程数据为32位,但缓存的32位编程数据中需要编程的数据位数仅为8位或者少于8位,或者缓存的32位编程数据中需要编程的数据位数大于8位。
S4:将所述编程数据按照芯片内对应的地址中需要编程的数据位数分成多段,并根据所述编程指令和每段编程数据逐一对芯片内对应的地址执行编程操作,直至芯片内与所述编程数据对应的地址全部编程完毕,芯片内与每段所述编程数据对应的地址中需要编程的数据位数不大于编程带宽;
当所述编程数据需要编程的数据位数大于编程带宽时,按照需要编程的数据位数将是所述编程数据分成多段,如32位编程数据中,需要编程的数据位数为16位,则将32位编程数据分成2段,每段编程数据包括8位需要编程的数据位数,根据编程指令和第一段编程数据对芯片内对应的地址进行编程,再根据编程指令和第二段编程数据对芯片内对应的地址进行编程,共执行两次编程操作;或者32位编程数据中,需要编程的数据位数为12位,则将32位编程数据分成2段,第一段编程数据包括8位需要编程的数据位数,第二段编程数据包括4位需要编程的数据位数,根据编程指令和第一段编程数据对芯片内对应的地址进行编程,再根据编程指令和第二段编程数据对芯片内对应的地址进行编程,共执行两次编程操作;或者32位编程数据中,需要编程的数据位数为26位,则将32位编程数据分成4段,第一段编程数据包括8位需要编程的数据位数,第二段编程数据包括8位需要编程的数据位数,第三段编程数据包括8位需要编程的数据位数,第四段编程数据包括2位需要编程的数据位数,根据编程指令和第一段编程数据对芯片内对应的地址进行编程,然后根据编程指令和第二段编程数据对芯片内对应的地址进行编程,再根据编程指令和第三段编程数据对芯片内对应的地址进行编程,最后根据编程指令和第四段编程数据对芯片内对应的地址进行编程,共执行四次编程操作;等等。
S5:根据所述编程指令和所述编程数据对芯片内对应的地址执行一次编程操作,使芯片内与所述编程数据对应的地址全部编程完毕。
现有技术中,每次只读取一个编程带宽长度的缓存数据,若该缓存数据中存在需要编程的数据位数(不管是多少位,即使只有1位数据位数需要编程),系统都会执行一次编程操作,导致存储在一个数据锁存器里的缓存数据(即相同长度的缓存数据),其编程时间的长短取决于各个需要编程的数据位数的分布,若各个需要编程的数据位数的分布相对集中(即都比较集中分布在同一个被读取的编程带宽里面),则编程的次数就少,编程时间就少,反之如果各个需要编程的数据位数的分布分散,则系统需要严格执行每次只读取一个编程带宽的数据以及对需要编程的数据位数进行编程,导致编程时间拉得很长。本技术方案中,每次直接读取至少一个锁存器里面的缓存数据,只要这些缓存数据中需要编程的数据位数少于编程带宽,则系统就可以将这些读取的缓存数据全部通过一次编程操作处理完毕,而不管这些缓存数据中需要编程的数据位数的分布是集中还是分散,极大缩短了整个编程时间,提升编程效率的效果明显。
在步骤S4或S5之后,还包括以下步骤:
S6:判断所述需要编程的数据是否已经读取完毕,是则跳转至S7,否则跳转至S2;
S7:编程操作完成。
因为在实际操作中,假设32位编程数据中,需要编程的数据位数为12位,现有技术中,根据编程带宽将32位编程数据分为4段读取,分别为第1段、第2段、第3段和第4段,芯片中与第1段编程数据对应的地址中需要编程的数据位数为2位,芯片中与第2段编程数据对应的地址中需要编程的数据位数为3位,芯片中与第3段编程数据对应的地址中需要编程的数据位数为4位,芯片中与第4段编程数据对应的地址中需要编程的数据位数为3位,按照传统的做法(为了避免每次执行编程时实际需要编程的地址的位数超出编程带宽,所以传统做法严格将每次执行编程跨越的数据位数控制在8位),对这32位编程数据,需要执行4次编程操作才能完成。而在本申请中,则直接将32位编程数据分成2段,第一段编程数据包括8位需要编程的数据位数,第二段编程数据包括4位需要编程的数据位数,根据编程指令和第一段编程数据对芯片内对应的地址进行编程,再根据编程指令和第二段编程数据对芯片内对应的地址进行编程,共执行两次编程操作即可完成,极大地提高了编程的速度。
本技术方案中,每次读取至少一个锁存器内缓存的编程数据,将芯片内与一次读取的缓存的编程数据对应的地址中需要编程的数据位数与编程带宽进行比较,若需要编程的数据位数小于编程带宽,则直接将对芯片内与一次读取的缓存的编程数据对应的地址执行一次编程,而不管这些缓存数据中需要编程的地址的分布是集中还是分散,极大缩短了整个编程时间,提升编程效率的效果明显;若需要编程的数据位数大于编程带宽,则将编程数据按照芯片内对应的地址中需要编程的数据位数分成多段,并根据所述编程指令和每段编程数据逐一对芯片内对应的地址执行编程操作,直至芯片内与分段后的编程数据对应的地址全部编程完毕;因为芯片的编程能力只是受限于每次执行编程时实际需要编程的地址的位数而不是每次执行编程时跨越的数据位数,只要每次执行编程时实际需要编程的地址的位数在编程带宽内,芯片就可以执行,既保证芯片编程的正常进行,还提高了编程的效率。
如图3所示,一种提高编程效率的装置,包括:
接收模块101,接收编程指令和需要编程的数据,并对所述需要编程的数据进行缓存;
读取模块102,读取至少一个锁存器内缓存的编程数据;
判断模块103,判断芯片内与所述编程数据对应的地址中需要编程的数据位数是否大于编程带宽,得出判断结果;
编程模块104,根据所述判断结果对芯片内与所述编程数据对应的地址执行编程操作。
本技术方案中,所述判断模块103判断芯片内与所述编程数据对应的地址中需要编程的数据位数是否大于编程带宽,判断完毕后输出“完成标志”,编程控制机根据“完成标志”使能判断模块103输出数据分段索引,并更新“完成标志”;分段编程模块104或单次编程模块105根据分段索引将所述编程数据进行分段(分段编程模块104根据分段索引将编程数据分成多段,单次编程模块105根据分段索引将编程数据分成1段),然后分段编程模块104或单次编程模块105根据分段后的编程数据和编程指令对芯片内对应的地址执行编程操作(即对芯片内对应的地址施加编程电压实现编程)。
请参照图4,本发明实施例还提供一种终端。如示,终端300包括处理器301和存储器302。其中,处理器301与存储器302电性连接。处理器301是终端300的控制中心,利用各种接口和线路连接整个终端的各个部分,通过运行或调用存储在存储器302内的计算机程序,以及调用存储在存储器302内的数据,执行终端的各种功能和处理数据,从而对终端300进行整体监控。
在本实施例中,终端300中的处理器301会按照如下的步骤,将一个或一个以上的计算机程序的进程对应的指令加载到存储器302中,并由处理器301来运行存储在存储器302中的计算机程序,从而实现各种功能:接收编程指令和需要编程的数据,并对所述需要编程的数据进行缓存;读取至少一个锁存器内缓存的编程数据;判断芯片内与所述编程数据对应的地址中需要编程的数据位数是否大于编程带宽,得出判断结果;根据所述判断结果对芯片内与所述编程数据对应的地址执行编程操作。
存储器302可用于存储计算机程序和数据。存储器302存储的计算机程序中包含有可在处理器中执行的指令。计算机程序可以组成各种功能模块。处理器301通过调用存储在存储器302的计算机程序,从而执行各种功能应用以及数据处理。
本申请实施例提供一种存储介质,所述计算机程序被处理器执行时,执行上述实施例的任一可选的实现方式中的方法,以实现以下功能:接收编程指令和需要编程的数据,并对所述需要编程的数据进行缓存;读取至少一个锁存器内缓存的编程数据;判断芯片内与所述编程数据对应的地址中需要编程的数据位数是否大于编程带宽,得出判断结果;根据所述判断结果对芯片内与所述编程数据对应的地址执行编程操作。其中,存储介质可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(Static Random Access Memory, 简称SRAM),电可擦除可编程只读存储器(ElectricallyErasable Programmable Read-Only Memory, 简称EEPROM),可擦除可编程只读存储器(Erasable Programmable Read Only Memory, 简称EPROM),可编程只读存储器(Programmable Red-Only Memory, 简称PROM),只读存储器(Read-Only Memory, 简称ROM),磁存储器,快闪存储器,磁盘或光盘。
在本申请所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
另外,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
再者,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。