一种维持闪存损耗均衡的方法

文档序号:6767263阅读:206来源:国知局
一种维持闪存损耗均衡的方法
【专利摘要】一种维持闪存损耗均衡的方法,包含:S1、扫描闪存的所有块,经过统计分析得出扫描结果,从中挑选出可用块;S2、对闪存中经扫描后挑选出的可用块,统计比特出错情况并分级,针对每个级别设定相应的擦除次数的初始值;S3、根据闪存中每个可用块的擦除次数的初始值,将其归类为空闲块或数据块,形成空闲块组和数据块组;S4、进行损耗均衡处理,将数据块组中当前擦除次数最少的数据块和空闲块组中当前擦除次数最多的空闲块进行交换。本发明尤其针对次片闪存,在进行损耗均衡处理时结合考虑了闪存中每个可用块的实际比特出错情况,减少了比特出错情况较高的可用块的访问次数,提高了闪存的使用寿命和稳定性。
【专利说明】一种维持闪存损耗均衡的方法

【技术领域】
[0001]本发明涉及一种维持闪存损耗均衡的方法,尤其是指一种次片闪存的损耗均衡管理方法,属于存储【技术领域】。

【背景技术】
[0002]闪存(Flash Memory)是一种长寿命的非易失性存储器,即在断电情况下仍能保存所存储的数据信息的存储器,通常被用来保存信息,如被用于在移动电话、数码摄像机、游戏机、MP3播放器、个人数字助理(PDA)、数码相机中保存资料等。
[0003]闪存在结构上是由很多块(Block)所组成的,每个块中又包括很多页(Page),而每个页的基本存储单元是比特(BH)。闪存是以块为单位擦除的,并且是以页为单位读写的。为识别闪存中的块是否可用,需要对闪存中的全部块进行扫描。扫描时对闪存块的每个页写入数据,并读出进行数据校验,通过错误检查纠正技术(ECC, Error Correcting Code)判断每页中有多少个比特出错并纠正错误。当每个页中的错误比特少于某个设定值时,由于有错误检查纠正模块支持,出错比特可以被纠正,所以认为这个页可用。当每个块中不可用的页的数目少于某个设定值时,认为这个块可用,但这个可用块的数据出错几率仍然还是要大于完好的不存在错误比特的可用块。因此通过对闪存中的每个块扫描并统计分析,确认可用页及可用块。
[0004]正常出厂的闪存,坏的页和坏的块都比较少,并且块内的比特出错也较少,但次片闪存(down-grade flash)扫描后通常能发现块内的坏比特较多。由于闪存在写一个块之前必需要先把块内数据擦除,而闪存块的擦除次数又是有一定限制的,也就是使用寿命;因此,当闪存块的擦除次数大于限制时,块内数据的读写就更容易出错。通常为了避免频繁的对闪存中的某一个块进行读写操作,会使用损耗均衡算法(Wear-leveling)将擦除次数较多的块和擦除次数较少的块进行交换,以使得闪存中各个块的擦除次数比较均衡。但是,通常的损耗均衡算法并没有考虑次片闪存的情况,虽然次片闪存的某些有错误比特的块经过扫描后仍然可以使用,但使用时容易出错,比正常块的出错几率大。因此,本发明提出一种尤其针对次片闪存的损耗均衡管理方法。


【发明内容】

[0005]本发明的目的在于提供一种维持闪存损耗均衡的方法,尤其适用于次片闪存,在进行损耗均衡处理时结合考虑了闪存中每个可用块的实际比特出错情况,减少了比特出错情况较高的可用块的访问次数,提高了闪存的使用寿命和稳定性。
[0006]为了达到上述目的,本发明提供一种维持闪存损耗均衡的方法,具体包含以下步骤:
51、扫描闪存的所有块,经过统计分析得出扫描结果,从中挑选出可用块;
52、对闪存中经扫描后挑选出的可用块,统计比特出错情况并进行分级,针对每个级别设定相应的擦除次数的初始值; 53、根据闪存中每个可用块的擦除次数的初始值,将其归类为空闲块或数据块,从而形成空闲块组和数据块组;
54、进行损耗均衡处理,将数据块组中当前擦除次数最少的数据块和空闲块组中当前擦除次数最多的空闲块进行交换。
[0007]所述的SI中,具体包含以下步骤:
511、对闪存的每个块的每个页写入数据,然后读出数据,再利用错误检查纠正技术判断每个页中有多少个比特出错并记录下来;
512、判断每个页的比特出错数目是否小于设定值;如当前页的比特出错数小于等于设定值,则确认当前页可用;如当前页的比特出错数大于设定值,则确认当前页不可用;
513、判断每个块的不可用页的数目是否小于设定值;如当前块的不可用页的数目小于等于设定值,则确认当前块可用;如当前块的不可用页的数目大于设定值,则确认当前块不可用。
[0008]所述的S2中,具体包含以下步骤:
521、统计每个可用块的比特出错情况,并划分错误级别;
522、对每个错误级别分别设定对应的擦除次数的初始值,错误级别越高,设定的擦除次数的初始值越大;
523、按照每个可用块所对应的错误级别,分别设定并记录与该错误级别相对应的每个可用块的擦除次数的初始值。
[0009]所述的S21中,具体包含以下步骤:
5211、针对闪存中的每个可用块,将其中每个页中的比特出错数目相加,计算得到每个可用块的比特出错总数;
5212、根据每个可用块的比特出错总数划分每个可用块的错误级别,比特出错总数越大,错误级别越闻;
5213、记录每个可用块所对应的错误级别。
[0010]所述的S22中,设定的擦除次数的初始值必须小于闪存块预先限定的最大擦除次数。
[0011]所述的S3中,具体为:判断每个可用块的擦除次数的初始值是否小于设定值;若当前块的擦除次数的初始值小于设定值,则将其归类为空闲块,放入空闲块组;若当前块的擦除次数的初始值大于等于设定值,则将其归类为数据块,放入数据块组。
[0012]所述的S3中,还包含将数据写入数据块的步骤,具体为:当要将新数据写入数据块组中的其中一个数据块中时,先从空闲块组中挑选一个当前擦除次数最少的空闲块,对该空闲块进行擦除操作,将该空闲块的当前擦除次数加I并记录;将新数据写入该空闲块中;交换所述的空闲块与数据块的位置,即将该写入了新数据的空闲块作为数据块放入数据块组中,而将需要写入新数据的数据块作为空闲块放入空闲块组中。
[0013]所述的S4中,具体包含以下步骤:
541、从数据块组中挑选一个当前擦除次数最小的数据块;
542、从空闲块组中挑选一个当前擦除次数最大的空闲块;
543、比较挑选出的数据块和空闲块的各自当前擦除次数的大小;如空闲块的当前擦除次数小于等于数据块的当前擦除次数,结束损耗均衡处理;如空闲块的当前擦除次数大于数据块的当前擦除次数,则继续进行步骤S44 ;
544、计算挑选出的空闲块的当前擦除次数与挑选出的数据块的当前擦除次数的差值;
545、比较所述的差值与预先设定的损耗均衡阈值的大小;如所述的差值大于损耗均衡阈值,结束损耗均衡处理;如所述的差值大于等于损耗均衡阈值,则继续进行步骤S46 ;
546、对挑选出的空闲块进行擦除操作,将该空闲块的当前擦除次数加I并记录,将挑选出的数据块中的数据读出并写入至空闲块中,将该数据块作为新的空闲块放入空闲块组,并将写入了数据的空闲块作为新的数据块放入原数据块在数据块组中的位置,结束损耗均衡处理。
[0014]综上所述,本发明所提供的维持闪存损耗均衡的方法,其在进行损耗均衡处理时结合考虑了闪存中每个可用块的实际比特出错情况,减少了比特出错情况较高的可用块的访问次数,提高了闪存的使用寿命和稳定性。尤其对于次片闪存而言,由于其含有较多比特出错情况较高的可用块,本发明能更有效的提高次片闪存的数据读写稳定性和使用寿命。

【专利附图】

【附图说明】
[0015]图1是本发明中的维持闪存损耗均衡的方法流程图;
图2是本发明中的对闪存可用块按出错比特情况分级的方法流程图;
图3是本发明中的对闪存可用块按出错比特情况分级的示意图;
图4是本发明中的进行损耗均衡处理的方法流程图。

【具体实施方式】
[0016]以下根据图1?图4,具体说明本发明的较佳实施例。
[0017]如图1所示,为本发明所提供的维持闪存损耗均衡的方法,具体包含以下步骤:
S1、扫描闪存的所有块,经过统计分析得出扫描结果,从中挑选出可用块。
[0018]所述的SI中,具体包含以下步骤:
511、对闪存的每个块的每个页写入数据,然后读出数据,再利用错误检查纠正技术判断每个页中有多少个比特出错并记录下来;
512、判断每个页的比特出错数目是否小于设定值;如当前页的比特出错数小于等于设定值,则确认当前页可用;如当前页的比特出错数大于设定值,则确认当前页不可用;
513、判断每个块的不可用页的数目是否小于设定值;如当前块的不可用页的数目小于等于设定值,则确认当前块可用;如当前块的不可用页的数目大于设定值,则确认当前块不可用。
[0019]本实施例中,预先设定每个页中可以有3比特出错,并且预先设定每个块中可以有3页不可用,也就是说,如果当前页中的比特出错数目小于等于3的话,那么就可以确认该页是可用的,如果当前块中的不可用页的数目小于等于3的话,同样可以确认该块是可用的。
[0020]S2、为了合理使用闪存中的可用块,对闪存中经扫描后挑选出的被确认为可用的块,统计比特出错情况并进行分级,针对每个级别设定相应的擦除次数的初始值。
[0021]如图2所示,所述的S2中,具体包含以下步骤: 521、统计每个可用块的比特出错情况,并划分错误级别;具体为:
5211、针对闪存中的每个可用块,将其中每个页中的比特出错数目相加,计算得到每个可用块的比特出错总数;
5212、根据每个可用块的比特出错总数划分每个可用块的错误级别,比特出错总数越大,错误级别越闻;
5213、记录每个可用块所对应的错误级别;
522、对每个错误级别分别设定对应的擦除次数的初始值,错误级别越高,设定的擦除次数的初始值越大;并且所述的擦除次数的初始值必须小于闪存块预先限定的最大擦除次数;
523、按照每个可用块所对应的错误级别,分别设定并记录与该错误级别相对应的每个可用块的擦除次数的初始值,以便在后续步骤的损耗均衡处理时使用。
[0022]本实施例中,如图3所示,在对闪存中的8个可用块统计后发现,其中块Al、A2的比特出错总数较少(例如比特出错总数小于10),块B1、B2的比特出错总数稍多(例如比特出错总数的范围为10?20),块C1、C2的比特出错总数比较多(例如比特出错总数的范围为20?30),而块Dl、D2的比特出错总数最多(例如比特出错总数大于30)。在这种情况下,将上述8个可用块归类为4个错误级别,块A1、A2对应错误级别1,块B1、B2对应错误级别2,块C1、C2对应错误级别3,而块D1、D2则对应错误级别4。然后对这4个错误级别分别设定相对应的擦除次数的初始值,错误级别I对应设置擦除次数的初始值为A,错误级别2对应设置擦除次数的初始值为B,错误级别3对应设置擦除次数的初始值为C,错误级别4对应设置擦除次数的初始值的D,并且A、B、C、D为从小到大排列的。接着按照每个可用块所对应的错误级别来设置并记录每个可用块的擦除次数的初始值,即将块Al、A2的擦除次数的初始值设为A,块B1、B2的擦除次数的初始值设为B,块Cl、C2的擦除次数的初始值设为C,块D1、D2的擦除次数的初始值设为D,并记录下来。也就是说,对于出错比特总数越少的块,其对应的错误级别就越低,并且所设置的擦除次数的初始值也越小;而对于出错比特总数越多的块,其对应的错误级别就越高,并且所设置的擦除次数的初始值也越大。
[0023]S3、对闪存中经扫描后挑选出的被确认为可用的块,根据每个可用块的擦除次数的初始值,将其归类为空闲块或数据块,从而形成空闲块组和数据块组。
[0024]具体的、判断每个可用块的擦除次数的初始值是否小于设定值;若当前块的擦除次数的初始值小于设定值,则将其归类为空闲块,放入空闲块组;若当前块的擦除次数的初始值大于等于设定值,则将其归类为数据块,放入数据块组。
[0025]本实施例中,如图3所示,预先设定用于归类空闲块和数据块的设定值为C ;那么对于擦除次数的初始值小于该设定值C的块将被归类为空闲块,也就是块A1、A2、B1、B2被归类为空闲块,形成空闲块组;而对于擦除次数的初始值大于等于该设定值C的块将被归类为数据块,也就是块Cl、C2、Dl、D2被归类为数据块,形成数据块组。
[0026]所述的S3中,还包含将数据写入数据块的步骤,具体为:当需要将新数据写入数据块组中的其中一个数据块中时,由于该数据块中已经存在了之前存储的数据,因此先从空闲块组中挑选一个当前擦除次数最少的空闲块,对该空闲块进行擦除操作,将该空闲块的当前擦除次数加I (如该空闲块是首次被使用,则此时该空闲块的当前擦除次数即为初始值)并记录;将新数据写入该空闲块中;交换所述的空闲块与数据块的位置,即将该写入了新数据的空闲块作为数据块放入数据块组中,而将本该需要写入新数据的数据块作为空闲块放入空闲块组中。
[0027]本实施例中,当需要将新的数据M写入数据块C2中时,先从空闲块组中挑选当前擦除次数最少的空闲块Al,对空闲块Al进行擦除操作,并增加其当前擦除次数,记录为A+1 ;将新的数据M写入该空闲块Al中,并将其作为数据块放入数据块组,而原先的数据块C2则被放入空闲块组中。因此,当完成数据写入步骤之后,目前空闲块组为C2、A2、B1、B2,而数据块组为C1、A1、D1、D2。当然,也可以按照上述方法继续对更多的数据块写入数据。
[0028]S4、进行损耗均衡处理,将数据块组中当前擦除次数最少的数据块和空闲块组中当前擦除次数最多的空闲块进行交换。
[0029]损耗均衡的目的是使闪存的所有可用块的当前擦除次数趋向均匀,因此将其中某些频繁进行擦除和写入操作的数据块与某些使用较少的空闲块进行交换,从而达到提高闪存可用块的使用寿命的目的。由于之前已经将所有可用块按比特出错总数的多少定义了错误级别,并对应设定了擦除次数的初始值,因此比较容易出错的可用块的擦除次数的初始值较大,在此通过损耗均衡处理能减少对这些比较容易出错的可用块的访问(擦除写入),从而提闻其使用寿命。
[0030]如图4所示,所述的S4中,具体包含以下步骤:
541、从数据块组中挑选一个当前擦除次数最小的数据块;
542、从空闲块组中挑选一个当前擦除次数最大的空闲块;c
543、比较挑选出的数据块和空闲块的各自当前擦除次数的大小;如空闲块的当前擦除次数小于等于数据块的当前擦除次数,说明当前还不需要进行损耗均衡处理,因此结束本次损耗均衡处理;如空闲块的当前擦除次数大于数据块的当前擦除次数,则继续进行步骤S44 ;
544、计算挑选出的空闲块的当前擦除次数与挑选出的数据块的当前擦除次数的差值;
545、比较所述的差值与预先设定的损耗均衡阈值的大小;如所述的差值大于损耗均衡阈值,说明当前还不需要进行损耗均衡处理,因此结束本次损耗均衡处理;如所述的差值大于等于损耗均衡阈值,则继续进行步骤S46 ;
546、对挑选出的空闲块进行擦除操作,将该空闲块的当前擦除次数加I并记录,将挑选出的数据块中的数据读出并写入至空闲块中,将该数据块作为新的空闲块放入空闲块组,并将写入了数据的空闲块作为新的数据块放入原数据块在数据块组中的位置,从而完成本次损耗均衡处理,使得错误级别高的可用块从空闲块组中被交换出来,以减少错误级别高的可用块的操作次数,从而提高闪存的使用寿命。
[0031]本实施例中,在进行损耗均衡处理时,首先在数据块组Cl、Al、Dl、D2中挑选当前擦除次数最小的数据块Al,并在空闲块组C2、A2、B1、B2中挑选当前擦除次数最大的空闲块C2,如果空闲块C2的擦除次数大于数据块Al的擦除次数,并且如果空闲块C2的擦除次数C与数据块Al的擦除次数A+1之间的差值C-(A+1) >损耗均衡阈值,则对空闲块C2进行擦除操作,并增加其当前擦除次数,记录为C+1 ;将数据块Al中存储的数据M读出并写入至空闲块C2中,随后将数据块Al最为新的空闲块放入空闲块组,而将写入了数据M的空闲块C2作为数据块放入数据块组,此时,空闲块组为Al、A2、B1、B2,而数据块组为C1、C2、D1、D2。
[0032]综上所述,本发明所提供的维持闪存损耗均衡的方法,其在进行损耗均衡处理时结合考虑了闪存中每个可用块的实际比特出错情况,减少了比特出错情况较高的可用块的访问次数,提高了闪存的使用寿命和稳定性。尤其对于次片闪存而言,由于其含有较多比特出错情况较高的可用块,本发明能更有效的提高次片闪存的数据读写稳定性和使用寿命。
[0033]尽管本发明的内容已经通过上述优选实施例作了详细介绍,但应当认识到上述的描述不应被认为是对本发明的限制。在本领域技术人员阅读了上述内容后,对于本发明的多种修改和替代都将是显而易见的。因此,本发明的保护范围应由所附的权利要求来限定。
【权利要求】
1.一种维持闪存损耗均衡的方法,其特征在于,该方法包含以下步骤: 51、扫描闪存的所有块,经过统计分析得出扫描结果,从中挑选出可用块; 52、对闪存中经扫描后挑选出的可用块,统计比特出错情况并进行分级,针对每个级别设定相应的擦除次数的初始值; 53、根据闪存中每个可用块的擦除次数的初始值,将其归类为空闲块或数据块,从而形成空闲块组和数据块组; 54、进行损耗均衡处理,将数据块组中当前擦除次数最少的数据块和空闲块组中当前擦除次数最多的空闲块进行交换。
2.如权利要求1所述的维持闪存损耗均衡的方法,其特征在于,所述的SI中,具体包含以下步骤: 511、对闪存的每个块的每个页写入数据,然后读出数据,再利用错误检查纠正技术判断每个页中有多少个比特出错并记录下来; 512、判断每个页的比特出错数目是否小于设定值;如当前页的比特出错数小于等于设定值,则确认当前页可用;如当前页的比特出错数大于设定值,则确认当前页不可用; 513、判断每个块的不可用页的数目是否小于设定值;如当前块的不可用页的数目小于等于设定值,则确认当前块可用;如当前块的不可用页的数目大于设定值,则确认当前块不可用。
3.如权利要求2所述的维持闪存损耗均衡的方法,其特征在于,所述的S2中,具体包含以下步骤: 521、统计每个可用块的比特出错情况,并划分错误级别; 522、对每个错误级别分别设定对应的擦除次数的初始值,错误级别越高,设定的擦除次数的初始值越大; 523、按照每个可用块所对应的错误级别,分别设定并记录与该错误级别相对应的每个可用块的擦除次数的初始值。
4.如权利要求3所述的维持闪存损耗均衡的方法,其特征在于,所述的S21中,具体包含以下步骤: 5211、针对闪存中的每个可用块,将其中每个页中的比特出错数目相加,计算得到每个可用块的比特出错总数; 5212、根据每个可用块的比特出错总数划分每个可用块的错误级别,比特出错总数越大,错误级别越闻; 5213、记录每个可用块所对应的错误级别。
5.如权利要求3或4所述的维持闪存损耗均衡的方法,其特征在于,所述的S22中,设定的擦除次数的初始值必须小于闪存块预先限定的最大擦除次数。
6.如权利要求5所述的维持闪存损耗均衡的方法,其特征在于,所述的S3具体为:判断每个可用块的擦除次数的初始值是否小于设定值; 若当前块的擦除次数的初始值小于设定值,则将其归类为空闲块,放入空闲块组; 若当前块的擦除次数的初始值大于等于设定值,则将其归类为数据块,放入数据块组。
7.如权利要求6所述的维持闪存损耗均衡的方法,其特征在于,所述的S3中,还包含将数据写入数据块的步骤,具体为: 当要将新数据写入数据块组中的其中一个数据块中时,先从空闲块组中挑选一个当前擦除次数最少的空闲块,对该空闲块进行擦除操作,将该空闲块的当前擦除次数加I并记录; 将新数据写入该空闲块中; 交换所述的空闲块与数据块的位置,即将该写入了新数据的空闲块作为数据块放入数据块组中,而将需要写入新数据的数据块作为空闲块放入空闲块组中。
8.如权利要求6或7所述的维持闪存损耗均衡的方法,其特征在于,所述的S4中,具体包含以下步骤: .541、从数据块组中挑选一个当前擦除次数最小的数据块; .542、从空闲块组中挑选一个当前擦除次数最大的空闲块; . 543、比较挑选出的数据块和空闲块的各自当前擦除次数的大小;如空闲块的当前擦除次数小于等于数据块的当前擦除次数,结束损耗均衡处理;如空闲块的当前擦除次数大于数据块的当前擦除次数,则继续进行步骤S44 ; .544、计算挑选出的空闲块的当前擦除次数与挑选出的数据块的当前擦除次数的差值; .545、比较所述的差值与预先设定的损耗均衡阈值的大小;如所述的差值大于损耗均衡阈值,结束损耗均衡处理;如所述的差值大于等于损耗均衡阈值,则继续进行步骤S46 ; . 546、对挑选出的空闲块进行擦除操作,将该空闲块的当前擦除次数加I并记录,将挑选出的数据块中的数据读出并写入至空闲块中,将该数据块作为新的空闲块放入空闲块组,并将写入了数据的空闲块作为新的数据块放入原数据块在数据块组中的位置,结束损耗均衡处理。
【文档编号】G11C29/42GK104360957SQ201410689234
【公开日】2015年2月18日 申请日期:2014年11月26日 优先权日:2014年11月26日
【发明者】周玉洁, 韦月 申请人:上海爱信诺航芯电子科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1