一种闪存管理方法和装置制造方法

文档序号:6520875阅读:221来源:国知局
一种闪存管理方法和装置制造方法
【专利摘要】本发明实施例公开了一种闪存管理方法和装置,以解决SPI?Flash寿命低的问题。所述方法包括:对目标数据进行分段得到各目标数据段;计算各目标数据段的数据校验值;针对各目标数据段中的每一段目标数据段,当目标数据段的数据校验值与目标数据段的对应子块的数据校验值不同时,确定对应子块的可用子块,并将目标数据段的数据写入可用子块;子块为闪存中的存储单元,多个子块组成一个块;当目标数据段的数据校验值与目标数据段的对应子块的数据校验值相同时,保持对应子块的数据不变。本发明实施例只在目标数据与当前数据不同的情况下,对相关的子块进行处理和写入操作,减少了不必要的子块操作,延长SPI?Flash的使用寿命。
【专利说明】一种闪存管理方法和装置
【技术领域】
[0001 ] 本发明实施例涉及存储器【技术领域】,特别是涉及一种闪存管理方法和装置。
【背景技术】
[0002]使用串行外设接口(SerialPeripheral Interface ;SPI)闪存(Flash)作为数据存储介质,目前比较常用的数据处理方法包括两种。一是使用裸接口直接操作SPIFlash,用户自行对SPI Flash上的存储区域进行划分,由用户组织并使用整块SPI Flash上的所有存储区域;二是在存储系统中实现文件管理系统,常用的是闪存设备日志型文件系统(Journalling Flash File System ;jffs)和第二版闪存设备日志型文件系统(Journalling Flash File System Version2 ;jffs2),数据的具体存放位置以及数据的处理操作由文件系统自行管理。
[0003]当采用第一种组织方法时,不同作用的数据只能存放在SPI Flash的不同块(block)里,每个block中包含多个子块。通常,数据可能存放在几个连续的block中,如果需要对数据进行修改,只能对欲修改的数据所占用的全部block进行擦除后,再全部重新写入。无论欲修改的数据所占用的子块的数据在修改前后是否相同,都要进行擦除和写入的操作,容易造成对同一个子块反复进行擦除和写入操作,其他子块擦除和写入的操作次数较少,整片SPI Flash中的全部子块的使用概率不平衡,降低了整片SPI Flash的寿命。

【发明内容】

[0004]本发明实施例公开一种闪存管理方法和装置,以解决SPI Flash寿命低的问题。
[0005]为了解决上述问题,本发明实施例公开了一种闪存管理方法,包括:
[0006]对目标数据进行分段得到各目标数据段;
[0007]计算各上述目标数据段的数据校验值;
[0008]针对各上述目标数据段中的每一段上述目标数据段,当上述目标数据段的上述数据校验值与上述目标数据段的对应子块的数据校验值不同时,确定上述对应子块的可用子块,并将上述目标数据段的数据写入上述可用子块;上述子块为上述闪存中的存储单元,多个上述子块组成一个块;
[0009]当上述目标数据段的上述数据校验值与上述目标数据段的对应子块的数据校验值相同时,保持上述对应子块的数据不变。
[0010]优选的,上述对目标数据进行分段得到各目标数据段,包括:
[0011]按照上述目标数据段的对应子块的长度将上述目标数据划分为各目标数据段。
[0012]优选的,上述对目标数据进行分段得到各目标数据段之前,上述方法还包括:
[0013]存储各块和各子块的管理信息至管理结构体中;
[0014]其中,各上述子块的管理信息包括子块的状态和子块的数据信息;上述子块的数据信息包括数据校验值、数据版本号和数据位置号;各上述块的管理信息包括块的状态和不同状态的子块的数量。[0015]优选的,上述确定上述对应子块的可用子块,包括:
[0016]获取上述对应子块之后的各子块的状态,上述子块的状态包括可写入状态、可擦除状态和使用中状态;
[0017]选择可写入状态的子块作为可用子块;其中,上述对应子块的状态为使用中状态,且上述对应子块的数据版本号为最新版本;
[0018]上述将上述目标数据段的数据写入上述可用子块之后,上述方法还包括:
[0019]修改上述对应子块的状态为可擦除状态,并修改上述可用子块的状态为使用中状态。
[0020]优选的,上述方法还包括:
[0021]设置多个中转块;上述中转块的状态为可写入状态;
[0022]对于使用中状态的块,当其中使用中状态的子块的数量占上述使用中状态的块的所有子块的数量比值小于等于搬移阈值时,将上述使用中状态的子块的数据搬移到上述中转块中,并将上述使用中状态的块的状态变更为可擦除状态。
[0023]本发明实施例还公开了一种闪存管理装置,包括:
[0024]分段模块,用于对目标数据进行分段得到各目标数据段;
[0025]校验值计算模块,用于计算各上述目标数据段的数据校验值;
[0026]子块处理模块,用于针对各上述目标数据段中的每一段上述目标数据段,当上述目标数据段的上述数据校验值与上述目标数据段的对应子块的数据校验值不同时,确定上述对应子块的可用子块,并将上述目标数据段的数据写入上述可用子块;上述子块为上述闪存中的存储单元,多个上述子块组成一个块;
[0027]子块保持模块,用于针对各上述目标数据段中的每一段上述目标数据段,当上述目标数据段的上述数据校验值与上述目标数据段的对应子块的数据校验值相同时,保持上述对应子块的数据不变。
[0028]优选的,上述分段模块按照上述目标数据段的对应子块的长度将上述目标数据划分为各目标数据段。
[0029]优选的,上述装置还包括:
[0030]管理信息存储模块,用于在上述分段模块对目标数据进行分段得到各目标数据段之前,存储各块和各子块的管理信息至管理结构体中;
[0031]其中,各上述子块的管理信息包括子块的状态和子块的数据信息;上述子块的数据信息包括数据校验值、数据版本号和数据位置号;各上述块的管理信息包括块的状态和不同状态的子块的数量。
[0032]优选的,上述子块处理模块,包括:
[0033]状态获取子模块,用于获取上述对应子块之后的各子块的状态,上述子块的状态包括可写入状态、可擦除状态和使用中状态;
[0034]子块选择子模块,用于选择可写入状态的子块作为可用子块;其中,上述对应子块的状态为使用中状态,且上述对应子块的数据版本号为最新版本;
[0035]上述装置还包括:
[0036]状态修改模块,用于在上述子块处理模块将上述目标数据段的数据写入上述可用子块之后,修改上述对应子块的状态为可擦除状态,并修改上述可用子块的状态为使用中状态。
[0037]优选的,上述装置还包括:
[0038]中转块设置模块,用于设置多个中转块;上述中转块的状态为可写入状态;
[0039]搬移模块,用于对于使用中状态的块,当其中使用中状态的子块的数量占上述使用中状态的块的所有子块的数量比值小于等于搬移阈值时,将上述使用中状态的子块的数据搬移到上述中转块中,并将上述使用中状态的块的状态变更为可擦除状态。
[0040]与【背景技术】相比,本发明实施例包括以下优点:
[0041]SPI Flash中的数据按照块(块还具体分为各个子块)的形式进行存储,块的状态由其中各子块的状态决定,当块中所有子块为可写入状态时,该块为可写入状态;当块中所有子块为可擦除状态时,该块为可擦除状态;当块中至少存在一个使用中状态的子块时,该块为使用中状态。对于可写入状态的块和子块,其中未包含任何数据,可直接写入数据;对于可擦除状态的块和子块,其中包含过期数据,需要先擦除后再写入数据,而且擦除操作针对块进行,不可以只对子块进行擦除操作;对于使用中状态的子块,其中包含使用中的数据,当该子块的数据为过期数据时,该子块的状态变更为可擦除状态。
[0042]在对SPI Flash中的子块进行管理时,先将目标数据与当前数据进行比较,具体是将分割为各目标数据段之后的目标数据与SPI Flash中对应子块中的当前数据进行比较。如果两种数据的校验值不同,则表示目标数据段中的数据与SPI Flash中对应子块的当前数据不同,需要将对应子块中的当前数据进行处理,并且在对应子块的可用子块中写入匹配的目标数据;如果两种数据的校验值相同,则表示目标数据段与SPI Flash中对应子块的数据相同,不需要处理对应子块中的当前数据。本发明实施例只在目标数据与当前数据不同的情况下,对相关的子块进行处理和写入操作,不需要处理的子块保持当前信息不变,减少了不必要的子块操作,延长了 SPI Flash的使用寿命。
【专利附图】

【附图说明】
[0043]图1是本发明实施例中各块的状态变化示意图;
[0044]图2是本发明实施例中一种闪存管理方法流程图;
[0045]图3是本发明实施例中一种闪存管理方法流程图;
[0046]图4是本发明实施例中一种闪存管理方法的块回收过程流程图;
[0047]图5是本发明实施例中一种闪存管理装置结构图;
[0048]图6本发明实施例中一种闪存管理装置结构图。
【具体实施方式】
[0049]为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和【具体实施方式】对本发明作进一步详细的说明。
[0050]在本发明实施例中,可以将闪存具体为SPI Flash,以SPI Flash为例进行闪存管理方法和装置的说明,同时,闪存也可以为其他规格、类型的存储介质,本发明实施例不对闪存的具体规格、类型或者型号进行限制。
[0051]SPI Flash由块组成,块由更小的子块组成,一片SPI Flash可以包含多个块,其中的块也可以包含多个子块。块的状态由其中子块的状态决定,子块的状态主要可以分为以下三种情况:可写入(Clean)状态、可擦除(Dirty)状态和使用中(Using)状态。当一个块中的全部子块均为Clean状态时,该块为Clean状态,此时该块中无任何数据;当一个块中的全部子块均为Dirty状态时,该块为Dirty状态,此时该块中全部为过期数据;当一个块中至少存在一个Using状态的子块时,该块为Using状态。而且,除上述三种主要的子块状态外,子块还包含一种写入中(Writing)状态,Writing状态为一种瞬间的状态,当一个块为Using状态时,其中可以包含Writing状态的子块,当一个块中的全部子块均为Writing状态时,该块为Writing状态。
[0052]SPI Flash的操作过程主要可以为分为以下三种情况:
[0053]一、擦除:可以在系统空闲时对Dirty状态的块进行擦除操作。
[0054]二、写入:对Clean状态的子块进行写入操作。
[0055]三、标志位改写:在进行上述擦除或者写入操作之后,改变被操作的块或者子块的状态。如果对块进行了擦除操作,则该块由Dirty状态改变为Clean状态;如果对子块进行了写入操作,则该子块由Clean状态改变为Using状态。
[0056]而且,上述写入操作又可以具体分为以下三个步骤:
[0057]步骤1、将待写入的数据顺序写入SPI Flash的子块中;被写入子块由Clean状态改变为Writing状态。
[0058]步骤2、在步骤I完成后,顺序改变被写入子块的状态,由Writing状态改变为Using状态。
[0059]步骤3、在步骤2完成后,顺序改变旧数据子块的状态,由Using状态改变为Dirty状态。
[0060]需要说明的是,上述写入操作过程中设计到旧数据子块和被写入子块,上述写入操作具体为数据更新操作,即将旧数据更新为新数据,但是不是将久数据子块进行擦除,而是将新数据写入到Clean状态的子块中,同时将旧数据子块的状态由Using改变为Dirty。
[0061]除了上述数据更新操作外,还有一种纯粹的数据写入操作,即不存在旧数据,只需要将待写入数据写入到Clean状态的子块中,并将被写入的子块状态由Clean改变为Using。
[0062]在SPI Flash的正常使用过程中,各块的状态是变化的,如图1所示。其中,过程I表示干净的Clean状态的块被写入数据的过程,该块的状态改变为Writing状态;过程2表示该块中存在有效数据,有效数据写入完毕,该快的状态改变为Using状态;过程3表示该块中的有效数据全部过期,该块的状态改变为Dirty状态;过程4表示该块中的数据被更新后,全部数据位过期数据,该块的状态改变为Dirty状态;过程5表示该块的回收过程,对该块进行擦除操作,该块中的全部子块的状态均改变为Clean状态,该块也改变为Clean状态。
[0063]在本发明实施例中,可以将SPI Flash中的块划分为同样大小的多个子块,以一个256Kbytes的块为例进行说明,将该块划分为32个8Kbytes的子块,每个子块的数据结构如下表所示。
[0064]
Header Data[0065]表1
[0066]表1中,Header为子块相关管理信息;Data为子块中保存的真正的数据。
[0067]其中,Header的结构如下表所示。
【权利要求】
1.一种闪存管理方法,其特征在于,包括: 对目标数据进行分段得到各目标数据段; 计算各所述目标数据段的数据校验值; 针对各所述目标数据段中的每一段所述目标数据段,当所述目标数据段的所述数据校验值与所述目标数据段的对应子块的数据校验值不同时,确定所述对应子块的可用子块,并将所述目标数据段的数据写入所述可用子块;所述子块为所述闪存中的存储单元,多个所述子块组成一个块; 当所述目标数据段的所述数据校验值与所述目标数据段的对应子块的数据校验值相同时,保持所述对应子块的数据不变。
2.根据权利要求1所述的方法,其特征在于,所述对目标数据进行分段得到各目标数据段,包括: 按照所述目标数据段的对应子块的长度将所述目标数据划分为各目标数据段。
3.根据权利要求1所述的方法,其特征在于,所述对目标数据进行分段得到各目标数据段之前,所述方法还包括: 存储各块和各子块的管理信息至管理结构体中; 其中,各所述子块的管理信息包括子块的状态和子块的数据信息;所述子块的数据信息包括数据校验值、数据版本号和数据位置号;各所述块的管理信息包括块的状态和不同状态的子块的数量。
4.根据权利要求3所述的方法,其特征在于,所述确定所述对应子块的可用子块,包括: 获取所述对应子块之后的各子块的状态,所述子块的状态包括可写入状态、可擦除状态和使用中状态; 选择可写入状态的子块作为可用子块;其中,所述对应子块的状态为使用中状态,且所述对应子块的数据版本号为最新版本; 所述将所述目标数据段的数据写入所述可用子块之后,所述方法还包括: 修改所述对应子块的状态为可擦除状态,并修改所述可用子块的状态为使用中状态。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括: 设置多个中转块;所述中转块的状态为可写入状态; 对于使用中状态的块,当其中使用中状态的子块的数量占所述使用中状态的块的所有子块的数量比值小于等于搬移阈值时,将所述使用中状态的子块的数据搬移到所述中转块中,并将所述使用中状态的块的状态变更为可擦除状态。
6.一种闪存管理装置,其特征在于,包括: 分段模块,用于对目标数据进行分段得到各目标数据段; 校验值计算模块,用于计算各所述目标数据段的数据校验值; 子块处理模块,用于针对各所述目标数据段中的每一段所述目标数据段,当所述目标数据段的所述数据校验值与所述目标数据段的对应子块的数据校验值不同时,确定所述对应子块的可用子块,并将所述目标数据段的数据写入所述可用子块;所述子块为所述闪存中的存储单元,多个所述子块组成一个块; 子块保持模块,用于针对各所述目标数据段中的每一段所述目标数据段,当所述目标数据段的所述数据校验值与所述目标数据段的对应子块的数据校验值相同时,保持所述对应子块的数据不变。
7.根据权利要求6所述的装置,其特征在于,所述分段模块按照所述目标数据段的对应子块的长度将所述目标数据划分为各目标数据段。
8.根据权利要求6所述的装置,其特征在于,所述装置还包括: 管理信息存储模块,用于在所述分段模块对目标数据进行分段得到各目标数据段之前,存储各块和各子块的管理信息至管理结构体中; 其中,各所述子块的管理信息包括子块的状态和子块的数据信息;所述子块的数据信息包括数据校验值、数据版本号和数据位置号;各所述块的管理信息包括块的状态和不同状态的子块的数量。
9.根据权利要求8所述的装置,其特征在于,所述子块处理模块,包括: 状态获取子模块,用于获取所述对应子块之后的各子块的状态,所述子块的状态包括可写入状态、可擦除状态和使用中状态; 子块选择子模块,用于选择可写入状态的子块作为可用子块;其中,所述对应子块的状态为使用中状态,且所述对应子块的数据版本号为最新版本; 所述装置还包括: 状态修改模块,用于在所述子块处理模块将所述目标数据段的数据写入所述可用子块之后,修改所述对应子块的状态为可擦除状态,并修改所述可用子块的状态为使用中状态。
10.根据权利要求6所述的装置,其特征在于,所述装置还包括: 中转块设置模块,用于设置多个中转块;所述中转块的状态为可写入状态; 搬移模块,用于对于使用中状态的块,当其中使用中状态的子块的数量占所述使用中状态的块的所有子块的数量比值小于等于搬移阈值时,将所述使用中状态的子块的数据搬移到所述中转块中,并将所述使用中状态的块的状态变更为可擦除状态。
【文档编号】G06F12/02GK103617124SQ201310612810
【公开日】2014年3月5日 申请日期:2013年11月26日 优先权日:2013年11月26日
【发明者】王存友, 楼俊青, 李凤庆 申请人:北京创毅视讯科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1