用于提升闪存可靠性的方法和电子设备
文献发布时间:2024-04-18 20:02:18
技术领域
本发明涉及存储器技术领域,尤其涉及用于提升闪存可靠性的方法和电子设备。
背景技术
NAND闪存是一种半导体非易失存储器,其主要结构包括栅极、源极、漏极、衬底、氧化层和存储介质,通过在栅极施加不同电压,可以判断存储单元中存储的信息。
在现在部分闪存产品,如手机、平板、智能家居等,在制造过程中,采用的出产流程是先在机台中将固件写入NAND闪存中,再经回流焊将NAND闪存与其他芯片、元器件焊成板子,最后进行组装。在这个过程中,固件会烧入在NAND闪存中的SLC(Single-Level Cell,单层单元)部分,以确保稳定性。在产品完成以上步骤后,上电时,产品会自动启动初始化程序,从SLC将固件读出,但是初始化程序通常复杂度很低,不能对NAND闪存进行复杂的操作,例如retry(重试)操作,这就需要保证在硬件上电时,SLC中的固件出错数非常低。另外,回流焊会产生高温,可能影响NAND闪存的可靠性,在经过高温后,SCL的阈值电压分布会出现移位和展宽,这就会导致数据无法读出,而固件无法读出所带来的后果是致命的。
另外,在产品售出后会由产品内烧入的固件自动执行巡检策略,常见的闪存巡检策略如图所示,对于出错数超过阈值的block(块),会进行GC(Garbage Collection,垃圾回收),这需要把整个block中有效数据转移到其他block,并且将原来的block重新擦除,该操作会增加系统延时,并减少闪存寿命,导致NAND闪存的可靠性下降。
因此,要如何提升NAND闪存的可靠性成为当前亟需解决的问题。
发明内容
本发明提供用于提升闪存可靠性的方法和电子设备,其能够有效地提升NAND闪存的可靠性。
在本发明的一个方面,提供一种用于提升闪存可靠性的方法。该方法包括:获取闪存的闪存块的出错数;若所述闪存块的出错数超出阈值,则判断针对所述闪存块是否进行过重复编程;若已进行过重复编程,则对所述闪存块进行垃圾回收;以及若未进行过重复编程,则对所述闪存块进行重复编程。
在本发明的又一方面,提供一种电子设备。该电子设备包括多个闪存块,被配置为存储数据;以及控制器,被电耦合到所述多个闪存块,并且被配置为执行上述的用于提升闪存可靠性的方法。
根据本发明,获取闪存(NAND)的闪存块(block)的出错数,当闪存块的出错数超出阈值,则判断针对所述闪存块是否进行过重复编程,若已进行,则对闪存块进行垃圾回收,若未进行,则对闪存块进行重复编程,以此对闪存的巡检策略进行改进,在原本闪存块的出错数超出阈值需要直接进行GC时,通过重复编程来降低出错数,尽量地避免了系统延时的增加,进而增加了闪存块的使用寿命,从而有效地提升NAND闪存的可靠性。
附图说明
图1为根据本发明实施例的用于提升闪存可靠性的方法的流程图;
图2为现有技术中SLC数据出错示意图;
图3为根据本发明实施例的使用本发明方法后的SLC数据出错示意图;
图4为根据本发明实施例的TLC中存储单元的编程态示意图;
图5为现有技术中TLC中存储单元的出错示意图;
图6为根据本发明实施例的使用处于SLC模式的NAND闪存的重复编程方式后的TLC数据出错示意图;
图7为根据本发明实施例的编程态距离读电压近的示意图;
图8为根据本发明实施例的编程态距离读电压近时回流焊后的出错数示意图;
图9为根据本发明实施例的编程态距离读电压远的示意图;
图10为根据本发明实施例的编程态距离读电压远时回流焊后的出错数示意图;
图11为根据本发明实施例的用于提升闪存可靠性的方法的流程示意图;
图12为根据本发明实施例的电子设备的结构示意图。
具体实施方式
为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
在已有技术中,对于出错数超过阈值的block,会进行GC,这需要把整个block中有效数据转移到其他block,并且将原来的block重新擦除,该操作会增加系统延时,并减少闪存寿命,导致NAND闪存的可靠性下降。
为了解决至少上述技术问题,本公开提供了用于提升闪存可靠性的方法。根据本公开的实施例,获取闪存的闪存块的出错数,当闪存块的出错数超出阈值,则判断针对所述闪存块是否进行过重复编程,若已进行,则对闪存块进行垃圾回收,若未进行,则对闪存块进行重复编程。以此方式,对闪存的巡检策略进行改进,在原本闪存块的出错数超出阈值需要直接进行GC时,通过重复编程来降低出错数,尽量地避免了系统延时的增加,进而增加了闪存块的使用寿命,从而有效地提升NAND闪存的可靠性。
下文中,将参考具体实施例并且结合附图描述根据本公开的技术方案。
图1是示出根据本公开的实施例的用于提升闪存可靠性的方法100的流程图。参照图1,该方法100包括以下步骤102至步骤106。
在步骤102,获取闪存的闪存块的出错数。在一些实施例中,在所述闪存的巡检过程中,获取所述闪存块的出错数以判断所述闪存块的出错数是否超出阈值。
在步骤104,若所述闪存块的出错数超出阈值,则判断针对所述闪存块是否进行过重复编程。
在步骤106,若已进行过重复编程,则对所述闪存块进行垃圾回收;以及若未进行过重复编程,则对所述闪存块进行重复编程。
在一些实施例中,对所述闪存块进行重复编程包括将所述闪存块中的数据重新写入所述闪存块。在一些实施例中,该方法还包括:确定所述闪存的当前所处模式,其中对所述闪存块进行重复编程包括:若所述当前所处模式为单层单元(SLC)模式,则对所述闪存块中的数据进行重复编程;以及若所述当前所处模式为多层单元(TLC)模式,则统计所述闪存块中各个编程态的出错数,并基于所述各个编程态的出错数对所述闪存块进行重复编程。以此方式,针对处于不同模式的NAND闪存使用不同的重复编程方法,确保重复编程的效果,从而提高闪存的可靠性。
在一些实施例中,对所述闪存块中的数据进行重复编程包括获取所述闪存块中的原始数据,以及将所述原始数据写入所述闪存块。以此方式,对于处于SLC模式的NAND,由于在SLC中只有0和1两种状态,只需重复编入原始数据即可实现右偏编程态,降低出错数,从而提高闪存的可靠性。
在一些实施例中,基于所述各个编程态的出错数对所述闪存块进行重复编程包括根据所述各个编程态的出错数确定需要重复编程的目标编程态,以及对所述目标编程态进行重复编程。在一些实施例中,若所述各个编程态的出错数大于预设出错数,则将所述出错数大于所述预设出错数的编程态确定为需要重复编程的目标编程态,并将除所述目标编程态以外的其余编程态设置为表示无需操作的擦除态。在一些实施例中,根据所述目标编程态生成重复编程数据;以及将所述重复编程数据写入所述闪存块的所述目标编程态。以此方式,由于在TLC中,每个存储单元需要存储3bit的信息,这就有可能出现8种可能的状态,如果同样使用处于SLC模式的闪存的重复编程方式,可能使得原本出错数较少的编程态的出错数上升,导致重复编程效果不好,因此,只对出错数较多的编程态进行重复编程,将其余编程态确定为擦除态,这样避免影响无需操作的存储单元,从而有效提高NAND闪存的可靠性。
在一些实施例中,在获取所述闪存块的出错数之前,接收针对所述闪存的固件写入请求;若所述闪存的当前所处模式为单层单元模式,则根据所述固件写入请求对所述闪存写入一笔固件数据;获取当前的编程距离,所述编程距离为编程态的位置与读电压的位置之间的距离;若所述编程距离不符合预设距离,则对所述闪存重复写入所述一笔固件数据,并返回执行获取当前的编程距离;以及若所述编程距离符合预设距离,则继续写入下一笔固件数据,并返回执行获取当前的编程距离,直至所有固件数据均已写入完成。在一些实施例中,在所述闪存经过回流焊之前,获取所述编程距离以判断所述编程距离是否符合预设距离。以此方式,对于处于SLC模式的NAND闪存,在写入固件时,在每次写完一笔固件数据之后,都对编程态的位置进行一次校验,若编程距离太近不符合预设距离,则将已写入的数据再重复写入直至编程距离达到预设要求,这样在后续进行回流焊时,即便是高温环境下也能降低出错数,从而进一步提高NAND闪存的可靠性。
在一些实施例中,对所述处于单层单元模式的所述闪存施加不同位置的读电压,得到与每一所述读电压对应的位(bit)信息为1的数目;根据所述数目确定编程态的位置;以及根据所述编程态的位置和所述不同位置的读电压获取当前的编程距离。在一种可选的实施方式中,按照预设的初始电压(default电压)对所述处于单层单元模式的所述闪存施加不同位置的读电压,得到与每一所述读电压对应的位(bit)信息为1的数目。以此方式,利用不同位置的读电压读出的bit1的数目确定编程态的位置,更加简单、可靠,从而更有效地判断编程距离。
图2示出现有技术中SLC数据出错示意图。图3示出使用本发明上述方法后的SLC数据出错示意图。图2和图3中P1和P2为区分度高的阈值电压分布,V
图4示出TLC中存储单元的编程态示意图。V
图7示出编程态距离读电压近的示意图。图8示出编程态距离读电压近时回流焊后的出错数示意图。图9示出编程态距离读电压远的示意图。图10示出编程态距离读电压远时回流焊后的出错数示意图。可以看出,在编程态距离读电压远时,回流焊后的出错数大大降低,因此,每写完一次数据,则对编程态的位置进行一次校验,确保编程距离达到预设要求,从而降低回流焊后的数据出错数。
图11是示出根据本发明实施例的用于提升闪存可靠性的方法的流程图。如图11所示,该方法包括以下步骤1101至步骤1119。
在步骤1101,确定NAND当前所处模式。
在步骤1102,接收所述NAND的固件写入请求。
在步骤1103,若所述NAND当前所处模式为SLC模式,则根据所述固件写入请求对处于SLC模式的NAND写入一笔固件数据。
在步骤1104,获取当前的编程距离,所述编程距离为编程态的位置与读电压的位置之间的距离,具体包括以下步骤(1)-(3):
(1)对所述处于SLC模式的NAND施加不同位置的读电压,得到与每一所述读电压对应的bit1的数目。
(2)根据所述bit1的数目确定编程态的位置。
(3)根据所述编程态的位置和所述不同位置的读电压获取当前的编程距离。
NAND flash会有一个default电压(初始电压),由芯片厂商设定好,在正常情况下,会尽可能贴近SLC编程态和擦除态中间位置,NAND flash可支持调整读电压功能(readoffset),按照一定的步长,将default电压向左或者向右偏移,以实现施加不同位置的读电压。
在步骤1105,判断所述编程距离是否符合预设距离,若不符合,则执行步骤1106,若符合,则执行步骤1107。
在步骤1106,对所述处于SLC模式的NAND重复写入所述一笔固件数据,并返回执行步骤1104。
在步骤1107,继续写入下一笔固件数据,并返回执行步骤1104,直至所有固件数据均已写入完成。
在步骤1108,获取NAND的每一block的出错数。
在步骤1109,判断block的出错数是否超出阈值,若超出,则执行步骤1110,若未超出,则结束流程。
在步骤1110,判断超出阈值的block是否进行过重复编程,若已进行,则执行步骤1111,若未进行,则执行步骤1112。
在步骤1111,对block进行垃圾回收。
在步骤1112,对block进行重复编程,具体包括以下步骤(1)-(2):
(1)若所述当前所处模式为SLC模式,则对所述block中的数据进行重复编程,具体包括以下(1-1)-(1-2):
(1-1)获取所述block中的原始数据。
(1-2)将所述原始数据写入所述block。
(2)若所述当前所处模式为TLC模式,则统计所述block中各个编程态的出错数,并基于所述各个编程态的出错数对所述block进行重复编程,具体包括以下(2-1)-(2-4):
(2-1)统计所述block中各个编程态的出错数。
(2-2)判断所述各个编程态的出错数是否大于预设出错数,若大于,则将所述出错数大于所述预设出错数的编程态确定为需要重复编程的目标编程态,并将除所述目标编程态以外的其余编程态设置为表示无需操作的擦除态。
(2-3)根据所述目标编程态生成重复编程数据。
比如,读取一次NAND flash数据,并判断出错数之后,可以得到三个信息:原本写入页中的数据、当前页中存储数据的出错数、现在页中含有错误的数据;那么对比原本写入页中的数据和现在页中含有错误的数据就可以知道哪些编程态的出错数大于预设出错数,根据这个信息就可以组成重复编程数据,例如经过比对,发现110,101,100三个态的出错数多,那么生成的重复编程数据,就是把原本写入页中的数据中110,101,100三个态保留,其他全部值为111(擦除态)。
(2-4)将所述重复编程数据写入所述闪存块的所述目标编程态。
根据本发明的又一方面,图12是示出根据本发明实施例的电子设备1200的示意图。参照图12,该电子设备1200包括多个闪存块1202和控制器1204。所述多个闪存块1202被配置为存储数据。所述控制器1204被电耦合到所述多个闪存块1202,并且被配置为执行如上面描述的用于提升闪存可靠性的方法的各个步骤。
所述控制器1204被配置为获取闪存的闪存块的出错数。所述控制器1204被配置为若所述闪存块的出错数超出阈值,则判断针对所述闪存块是否进行过重复编程。所述控制器1204被配置为若已进行过重复编程,则对所述闪存块进行垃圾回收。此外,所述控制器1204被配置为若未进行过重复编程,则对所述闪存块进行重复编程。
应当理解的是,在一些实施例中,所述控制器1204还可以进一步被配置为执行如上面描述的用于提升闪存可靠性的方法的其他步骤,在此不再赘述。
综上所述,本发明提供的用于提升闪存可靠性的方法和电子设备,获取闪存的闪存块的出错数,当闪存块的出错数超出阈值,则判断针对所述闪存块是否进行过重复编程,若已进行过重复编程,则对闪存块进行垃圾回收,若未进行过重复编程,则对闪存块进行重复编程,以此对NAND的巡检策略进行改进,在原本闪存块的出错数超出预设出错数需要直接进行GC时,通过重复编程来降低出错数,尽量地避免了系统延时的增加,进而增加了闪存块的使用寿命,从而有效地提升NAND闪存的可靠性。另外,对于处于SLC模式的NAND闪存,在写入固件时,在每次写完一笔固件数据之后,都对编程态的位置进行一次校验,若编程距离太近不符合预设距离,则将已写入的数据再重复写入直至编程距离达到预设要求,这样在后续进行回流焊时,即便是高温环境下也能降低出错数,从而进一步提高NAND闪存的可靠性。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。