基于NandFlash的数据写入方法

文档序号:6486359阅读:188来源:国知局
基于Nand Flash的数据写入方法
【专利摘要】本发明实施例提供一种基于Nand?Flash的数据写入方法及其装置,该数据写入方法包括:在内存中建立缓冲区;将所述内存中需要回写至Nand?Flash的数据划分为多个缓冲阵列数据;依据第一映射关系,将所述多个缓冲阵列数据依次写入所述缓冲区;依据第二映射关系,将所述缓冲区中的单个缓冲阵列数据写入Nand?Flash内的保存区;根据本发明实施例提供的数据写入方法及其装置,将缓冲区中的单个缓冲阵列数据回写至Nand?Flash内的保存区,能够减少单次从内存回写至Nand?Flash的数据量,从而能够缩短单次回写的时间,进而提高系统的实时性。
【专利说明】基于Nand Flash的数据写入方法
【技术领域】
[0001]本发明涉及数据存储【技术领域】,具体涉及一种基于Nand Flash的数据写入方法及
其装置。
【背景技术】
[0002]目前市面上嵌入式电子产品普遍采用Nand Flash作为存储设备,这是Nand Flash的成本优势所致,Nand Flash访问特性比较特殊,数据读写按页长度进行,写数据之前需要对块进行擦除,在块内部页要按顺序写。
[0003]基于这些特性,Nand Flash写入过程普遍采用均衡写入的方法。通常,程序的正常运行需要一系列的数据和/或代码,所以保存程序运行所需要的数据和/或代码所需的空间较大。对于采用了虚拟内存的小内存产品,为了保证小内存产品中内存的空间,通常仅将程序当前运行所需要的数据和/或代码保存在内存中,而将程序后续运行所需要的数据和/或代码保存在该小内存产品中的Nand Flash中。当程序即将进行后续运行时,如果内存中没有程序后续运行所需要的数据和/或代码,则需要将保存在Nand Flash中的后续运行所需要的数据和/或代码写入内存,以保证程序后续运行的正常进行。此时,需要首先读取内存中暂时不用的数据和/或代码并将这些数据和/或代码写入Nand Flash保存;然后再读取Nand Flash中程序后续运行所需要的数据和/或代码并将该数据和/或代码写入内存。该倒换过程主要包括“换出”即将数据和/或代码从内存回写到Nand Flash以及“换入”即将Nand Flash内的数据和/或代码写入内存两个步骤,倒换过程中数据和/或代码以页的方式读取或写入。
[0004]内存中的数据回写到Nand Flash的过程通常采用顺序循环擦写块的方式,在此过程中,通常将内存中的数据和/或代码一次性写入Nand Flash,由于内存中的数据和/或代码通常包含若干页,所以单次从内存回写至Nand Flash的数据和/或代码的数据量非常大,导致单次倒换的时间较长,对于一些对实时性要求较高的系统来说,这种回写方式无法满足系统实时性的需要。

【发明内容】

[0005]有鉴于此,本发明的目的在于提供一种单次回写数据量少、单次回写时间短的数据写入方法,以提高系统的实时性。
[0006]为实现上述目的,本发明实施例提供一种基于Nand Flash的数据写入方法,包括:
[0007]在内存中建立缓冲区;将所述内存中需要回写至Nand Flash的数据划分为多个缓冲阵列数据;依据第一映射关系,将所述多个缓冲阵列数据依次写入所述缓冲区,其中所述第一映射关系为所述内存中存储所述数据的存储区与所述缓冲区之间的映射关系;依据第二映射关系,将所述缓冲区中的单个缓冲阵列数据写入Nand Flash内的保存区,其中所述第二映射关系为所述缓冲区与所述保存区之间的映射关系。[0008]优选地,所述Nand Flash内设有备份区,所述方法还包括:
[0009]依据第三映射关系,将所述缓冲区中的单个缓冲阵列数据写入所述备份区,其中,所述第三映射关系为所述缓冲区与所述备份区之间的映射关系。
[0010]优选地,所述将所述缓冲区中的单个缓冲阵列数据写入所述备份区,包括:
[0011]判断所述备份区中的第一物理块是否有效,如果是,将所述单个缓冲阵列数据写入所述第一物理块;如果否,将所述单个缓冲阵列数据写入第二物理块,其中所述第二物理块为所述备份区中按顺序循环擦写方式时所述第一物理块之后的第一个有效的物理块。
[0012]优选地,所述方法还包括对所述缓冲区进行优化:
[0013]对保存在所述缓冲区中的所述缓冲阵列数据进行压缩;和/或,
[0014]根据当前信息更新所述缓冲区的空间大小,其中所述当前信息为当前状态下所述缓冲区中的单个缓冲阵列数据写入Nand Flash内的保存区的频率。
[0015]优选地,所述将所述内存中的数据分为多个缓冲阵列数据,包括:
[0016]将所述内存中的数据以单页的写入量为单位分为多个缓冲阵列数据。
[0017]优选地,所述将所述缓冲区中的单个缓冲阵列数据写入Nand Flash内的保存区,包括:
[0018]判断所述保存区中的第三物理块是否有效,如果是,将所述单个缓冲阵列数据写入所述第三物理块;如果否,将所述单个缓冲阵列数据写入第四物理块,其中所述第四物理块为所述保存区中按顺序循环擦写方式时所述第三物理块之后的第一个有效的物理块。
[0019]另外,本发明实施例还提供一种基于Nand Flash的数据写入装置,所述装置包括:
[0020]建立单元,用于在内存中建立缓冲区;划分单元,用于将所述内存中需要回写至Nand Flash的数据划分为多个缓冲阵列数据;第一写入单元,用于依据第一映射关系,将所述多个缓冲阵列数据依次写入所述缓冲区,其中所述第一映射关系为所述内存中存储所述数据的存储区与所述缓冲区之间的映射关系;第二写入单元,用于依据第二映射关系,将所述缓冲区中的单个缓冲阵列数据写入Nand Flash内的保存区,其中所述第二映射关系为所述缓冲区与所述保存区之间的映射关系。
[0021 ] 优选地,所述装置还包括:
[0022]第三写入单元,用于依据第三映射关系,将所述缓冲区中的单个缓冲阵列数据写入所述备份区,其中所述第三映射关系为所述缓冲区与所述备份区之间的映射关系。
[0023]优选地,所述第三写入单元包括:
[0024]第一判断单元,用于判断所述备份区中的第一物理块是否有效;
[0025]第一写入子单元,用于在所述第一判断单元确认所述第一物理块有效时,将所述单个缓冲阵列数据写入所述第一物理块;
[0026]第二写入单元,用于在所述第一判断单元确认所述第一物理块无效时,将所述单个缓冲阵列数据写入第二物理块,其中所述第二物理块为所述备份区中按顺序循环擦写方式时所述第一物理块之后的第一个有效的物理块。
[0027]优选地,所述装置还包括优化单元,
[0028]所述优化单元,用于对所述缓冲区进行优化;
[0029]其中,所述优化单元包括压缩单元和/或更新单元,[0030]所述压缩单元,用于对保存在所述缓冲区中的所述缓冲阵列数据进行压缩;
[0031]所述更新单元,用于根据当前信息更新所述缓冲区的空间大小,其中所述当前信息为当前状态下所述缓冲区中的单个缓冲阵列数据写入Nand Flash内的保存区的频率。
[0032]优选地,所述划分单元用于将所述内存中的数据以单页的写入量为单位分为多个缓冲阵列数据。
[0033]优选地,所述第二写入单元包括:
[0034]第二判断单元,用于判断所述保存区中的第三物理块是否有效;
[0035]第三写入子单元,用于在所述第二判断单元确认所述第三物理块有效时,将所述单个缓冲阵列数据写入所述第三物理块;
[0036]第四写入单元,用于在所述第二判断单元确认所述第三物理块无效时,将所述单个缓冲阵列数据写入第四物理块,其中所述第四物理块为所述保存区中按顺序循环擦写方式时所述第三物理块之后的第一个有效的物理块。
[0037]根据本发明实施例提供的数据写入方法及其装置,先将内存中的数据划分成多个缓冲阵列数据,并将这些缓冲阵列数据依次写入内存中的缓冲区,然后再将缓冲区中的单个缓冲阵列数据回写至Nand Flash内的保存区,与现有技术中将内存中的数据一次回写至Nand Flash的方式相比,采用本发明实施例提供的数据写入方法能够减少单次从内存回写至Nand Flash的数据量,从而能够缩短单次回写的时间,进而提高系统的实时性。
【专利附图】

【附图说明】
[0038]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0039]图1是本发明实施例提供的基于Nand Flash的数据写入方法的流程图;
[0040]图2是本发明实施例一提供的基于Nand Flash的数据写入方法的流程图;
[0041]图3是本发明实施例二提供的基于Nand Flash的数据写入方法的流程图;
[0042]图4是本发明实施例提供的基于Nand Flash的数据写入装置的结构示意图。
【具体实施方式】
[0043]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0044]为缩短数据从内存回写到Nand Flash所需要的时间,进而提高系统的实时性,本发明实施例提供一种基于Nand Flash的数据写入方法,如图1所示,为该方法的流程图;该方法包括以下步骤:
[0045]步骤SlOl:在内存中建立缓冲区。
[0046]小内存产品中的内存的容量较小(如为几百K),某一程序的正常运行,通常需要一系列的数据和/或代码。程序的当前运行所需要的数据和/或代码保存在内存中。在程序进行后续运行前需要将后续运行所需要的数据和/或代码写入内存,这之前需要读取内存中暂时不用的数据和/或代码并将这些数据和/或代码写入Nand Flash保存以保证内存具有足够的可用空间,方便程序的后续运行所需要的数据和/或代码写入该内存。在传统技术中,将内存中的数据和/或代码回写至Nand Flash均采用一次性写入的方式,即将这些数据和/或代码同时回写到Nand Flash。
[0047]在本发明实施例提供的数据写入方法中,可以在该内存中建立缓冲区,将需要回写至Nand Flash的数据和/或代码暂时存储在该缓冲区中,然后再将这些数据和/或代码分批次回写至Nand Flash。以下以将内存中的数据回写至Nand Flash为例,对数据回写过程进行详细说明。
[0048]步骤S102:将内存中的数据划分为多个缓冲阵列数据。
[0049]内存中需要回写至Nand Flash内的数据通常包含很多页,在本发明实施例中可以将这些页的数据划分成多个缓冲阵列数据,每个缓冲阵列数据的页数可以不同(即这些缓冲阵列数据的数据量可以不同),也可以相同(即这些缓冲阵列数据的数据量可以相同),例如,每个缓冲阵列数据可以包含3页的数据、2页的数据或者I页的数据。
[0050]具体地,在执行步骤S102之前,还可以包括:
[0051]读取内存中需要回写至Nand Flash的数据;S卩,先读取内存中的数据,然后再将数据划分成多个缓冲阵列数据。
[0052]步骤S103:依据第一映射关系,将多个缓冲阵列数据依次写入缓冲区;其中,第一映射关系是内存中存储该数据的存储区与缓冲区之间的映射关系,这里,假设将数据写入缓冲区之前,这些数据保存在内存中的存储区,该映射关系可以保存在内存中,也可以保存在与该映射关系对应的缓冲阵列数据中。
[0053]需要回写至Nand Flash内的数据可以先写入缓冲区进行缓存,然后再分批次回写至 Nand Flash。
[0054]步骤S104:依据第二映射关系,将缓冲区中的单个缓冲阵列数据写入Nand Flash内的保存区;其中,第二映射关系是内存中的缓冲区与Nand Flash中的保存区之间的映射关系。具体地,第二映射关系可以保存在与该第二映射关系对应的缓冲阵列数据中,也可以保存在Nand Flash内的保存区中。
[0055]本发明实施例中,每次可以将单个(即一个)缓冲阵列数据写入Nand Flash内的保存区,例如,单个缓冲阵列数据可以包括3页的数据、2页的数据或者I页的数据。与现有技术中需要将内存中的若干页的数据一次性回写至Nand Flash相比,本发明实施例提供的数据写入方法,一次只回写少数页的数据或者I页的数据,单次回写的数据量明显减少。
[0056]根据本发明实施例提供的数据写入方法,先将内存中的数据划分成多个缓冲阵列数据,并将这些缓冲阵列数据依次写入内存中的缓冲区,然后再将缓冲区中的单个缓冲阵列数据写入Nand Flash内的保存区,与现有技术中将内存中的数据一次写入Nand Flash的方式相比,采用本发明实施例提供的数据写入方法能够减少单次从内存回写到NandFlash的数据量,从而缩短单次回写的时间,进而提高系统的实时性。
[0057]需要说明的是,本发明实施例中的数据写入可以有多种实现方式,下面通过一些具体实例对本发明实施例的技术方案做详细说明。但是,下面给出的实例仅是示例性的,只用于解释本发明实施例的技术方案,而对本发明实施例的技术方案没有限制,所有基于本发明技术方案的发明思路并且能够实现本发明的发明目的的相关方案都在本发明的保护范围内。
[0058]实施例一
[0059]本发明实施例一提供一种基于Nand Flash的数据写入方法,图2为该数据写入方法的流程图,该方法包括以下步骤:
[0060]步骤S201:对缓冲区进行优化;
[0061]具体可以采用以下两种方式对缓冲区进行优化:
[0062]一种是:对保存在缓冲区中的数据进行压缩,具体地可以采用无损压缩算法对保存在缓冲区中的数据进行压缩;该数据需要回写至Nand Flash时,可以将压缩后的数据直接回写至Nand Flash,也可以将压缩后的数据先进行解压缩然后在回写至Nand Flash,优选采用将压缩后的数据先进行解压缩然后在回写至Nand Flash的方式,具体的回写方式适用本发明实施例提供的数据写入方式。由于缓冲区中的数据是以页为单位进行保存的,所以该无损压缩算法是按页进行的。对保存在缓冲区中的数据进行压缩能够减少该数据在内存中所占用的空间,相应地增大内存中的可用空间,方便程序后续运行所需要的数据等写入内存。
[0063]另一种是:根据当前信息更新缓冲区的空间大小,其中当前信息即为当前状态下缓冲区中的单个缓冲阵列数据写入Nand Flash内的保存区的频率;即根据缓冲阵列数据从缓冲区写入保存区的当前信息增大或者减小缓冲区的空间大小,此处缓冲区的空间大小即缓冲区的长度大小。具体地,当前信息表明当前状态下缓冲区中的单个缓冲阵列数据写ANand Flash内的次数较多(倒换较为频繁)时,减小缓冲区的空间大小(即减小缓冲区的长度),以在内存中预留出足够的可用空间提高系统的运行性能;当前信息表明当前状态下缓冲区中的单个缓冲阵列数据写入Nand Flash内的保存区的次数较少(倒换不太频繁)时,增大缓冲区的空间大小,这样在保证系统运行性能的同时还能增大缓冲区的空间大小。
[0064]由于在内存中建立缓冲区会在一定程度上减少内存中可用空间的大小;对内存中的缓冲区进行优化,能够在一定程度上减小缓冲区对内存空间的占用进而保证内存中有足够的可用空间,从而提高系统的运行性能。
[0065]另外,还可以同时采用上述两种方法对缓冲区进行优化。
[0066]步骤S202:将内存中需要回写到Nand Flash的数据划分成多个缓冲阵列数据;在本发明实施例中,每个缓冲阵列数据可以包含几页的数据,也可以只包含一页的数据;
[0067]本发明实施例以中,可以按如下方式判断内存中哪些数据是需要回写到NandFlash的数据:
[0068]判断内存中依赖一些数据才能进行的程序的当前运行是否结束,如果是,则程序的当前运行所依赖的这些数据即为需要回写到Nand Flash的数据。
[0069]步骤S203:依据第一映射关系,将缓冲阵列数据写入缓冲区;具体地,可以将一个缓冲阵列数据写入缓冲区,该缓冲阵列数据可以包括几页的数据,也可以包括一页的数据;其中,第一映射关系是内存中存储所述数据的存储区与缓冲区之间的映射关系,该映射关系可以保存在内存中,也可以保存在与该映射关系对应的缓冲阵列数据中。
[0070]步骤S204:判断保存区中的第三物理块是否有效,如果是,执行步骤S205,如果否,执行步骤S206。[0071]步骤S205:依据第二映射关系,将单个缓冲阵列数据写入第三物理块;
[0072]步骤S206:依据第二映射关系,将单个缓冲阵列数据写入第四物理块,其中,第四物理块为保存区中按顺序循环擦写方式时第三物理块之后的第一个有效的物理块。
[0073]通常情况下,为减少Nand Flash内物理块的磨损,实现均衡写入,Nand Flash都采用顺序循环擦写的方式写入数据,在数据写入过程中,如果物理块有效,则数据可以直接写入该物理块;但是,在Nand Flash内可能存在无效的物理块(即无效块),如果物理块无效,则数据无法写入该物理块,依据顺序循环擦写方式,可以进一步判断该无效的物理块之后的第一个物理块是否有效,如果该第一个物理块仍然无效,则进一步判断该无效的物理块之后的第二个物理块是否有效,直至找到第一个有效的物理块为止,然后将数据写入该第一个有效的物理块。
[0074]依据本发明实施例提供的数据写入方法,将内存中的数据划分成多个缓冲阵列数据,并将这些缓冲阵列数据依次写入缓冲区;在从内存到Nand Flash的一次回写过程中,只将单个缓冲阵列数据写入缓冲区,相对于现有技术来说,一次回写的数据量大大减少,所以单次回写时间缩短,能够提高系统的实时性。另外,还可以分散写入数据,平衡倒换耗时。此外,在将缓冲阵列数据回写入Nand Flash内的物理块之前,先确定该物理块是否有效(SP该物理块能否使用),能够保证缓冲阵列数据正确地写入Nand Flash,防止缓冲阵列数据无法写入Nand Flash造成数据丢失。
[0075]另外,可以多次重复执行步骤S204至步骤S206,直至所有需要回写到Nand Flash内的保存区的数据都从内存写入Nand Flash内的保存区为止。
[0076]此外,本发明实施例一中,在所有需要回写到Nand Flash的数据都从内存回写到Nand Flash之后,还可以包括以下步骤:
[0077]将Nand Flash内用以执行程序的后续运行所需要的数据和/或代码写入内存,此时,可以读取Nand Flash内保存区中的相应数据和/或代码,根据Nand Flash与内存之间的映射关系将该数据和/或代码写入内存,然后程序的后续运行可以正常进行;
[0078]具体地,在执行该步骤之前,还可以包括以下步骤:
[0079]判断依赖Nand Flash内的该数据和/或代码才能执行的程序的后续运行是否即将开始,如果是,执行上述步骤;或者,
[0080]判断从上次Nand Flash中的某一数据和/或代码写入内存后开始计时后的时间间隔是否不小于预设值,如果是,执行上述步骤;该预设值是相邻两次将Nand Flash中的某些数据和/或代码写入内存所间隔的时间,其中该预设值可以是用户设置的值。
[0081]即本发明实施例中可以在程序的后续运行即将开始之前将与该后续运行有关的数据和/或代码写入内存以保证程序的后续运行正常进行;或者间隔某一固定时间将与程序的后续运行有关的数据和/或代码写入内存以保证程序的后续运行正常进行。
[0082]为了保证从内存回写到Nand Flash的数据的可靠性,本发明实施例还在NandFlash内设置备份区,以将从内存回写到Nand Flash内的数据进行备份。下面对NandFlash内设置有备份区时的数据写入方法做详细说明。
[0083]实施例二
[0084]本发明实施例二提供一种基于Nand Flash的数据写入方法,其中,Nand Flash内设置有保存区和备份区,图3示出了该方法的流程图,该方法可以包括以下步骤:[0085]步骤S301:在内存中建立缓冲区;
[0086]步骤S302:读取内存中需要回写至Nand Flash的数据;
[0087]步骤S303:将内存中需要回写至Nand Flash的数据划分成多个缓冲阵列数据;在本发明实施例中,每个缓冲阵列数据可以包含几页的数据,也可以只包含一页的数据;
[0088]步骤S304:依据第一映射关系,将这些缓冲阵列数据依次写入缓冲区,对这些缓冲阵列数据进行缓存,方便后续将这些缓冲阵列数据分批次回写到Nand Flash。
[0089]步骤S305:判断Nand Flash内保存区中的第三物理块是否有效,如果是,执行步骤S306 ;如果否,执行步骤S307。
[0090]步骤S306:依据第二映射关系,将单个缓冲阵列数据写入第三物理块;
[0091]步骤S307:依据第二映射关系,将单个缓冲阵列数据写入第四物理块,其中,第四物理块为保存区中按顺序循环擦写方式时第三物理块之后的第一个有效的物理块。
[0092]S卩,如果步骤S305中的第三物理块有效(可以使用),则直接将该缓冲阵列数据写入第三物理块;如果步骤S305中的第三物理块无效(无法使用),则按照顺序循环擦写的方式,判断该无效的第三物理块之后的第一个物理块是否有效,如果该第一个物理块仍然无效,则进一步判断该无效的第三物理块之后的第二个物理块是否有效,直至找到第一个有效的物理块为止,然后将数据写入该第一个有效的物理块。
[0093]多次重复执行步骤S305至S307,直至将内存中所有需要回写到Nand Flash内的保存区的数据都写入Nand Flash内的保存区为止。
[0094]为提高从内存回写到Nand Flash的数据的可靠性,避免数据丢失,该数据写入方法还可以包括以下步骤:
[0095]步骤S308:依据第三映射关系,将缓冲区中的单个缓冲阵列数据写入备份区,其中,第三映射关系为缓冲区与备份区之间的映射关系。
[0096]具体地,步骤S308可以与步骤S305同时执行;即,可以将一个缓冲阵列数据同时写入Nand Flash内的保存区和备份区,如果该缓冲阵列数据的页数为一页,则将缓冲阵列数据从内存写回到Nand Flash时需要同时写入两页的数据,分别写入保存区和备份区中。
[0097]可以重复执行步骤S308,直至从内存回写到Nand Flash内的备份区中的数据都写入了备份区为止。
[0098]具体地,步骤S308可以按以下方式进行:首先判断备份区中的第一物理块是否有效,如果是,则依据第三映射关系将单个缓冲阵列数据写入第一物理块;如果否,则依据第三映射关系将单个缓冲阵列数据写入第二物理块,其中,第二物理块为备份区中按顺序循环擦写方式时第一物理块之后的第一个有效的物理块。
[0099]内存的缓冲区中的所有缓冲阵列数据都回写到Nand Flash内的保存区和备份区后,保存区和备份区都保存了回写数据,则缓冲区中的相应数据可以删除。
[0100]本发明实施例提供的数据写入方法,在从内存到Nand Flash的一次回写过程中,只将单个缓冲阵列数据写入缓冲区,相对于现有技术来说,一次回写的数据量大大减少,所以单次回写时间缩短,能够提高系统的实时性。
[0101]例如:某款Nand Flash读取一页数据所用的时间为0.6ms,写入一页数据所用的时间为1.7msο
[0102]对于一组大小为10页的数据,将此数据从内存回写到Nand Flash时:[0103]如果采用本发明实施例提供的数据写入方法,可以先将这10页的数据划分成10个缓冲阵列数据保存至缓冲区,其中,每个缓冲阵列数据包含I页的数据,将这10页的数据回写到Nand Flash时,可以每次只从缓冲区回写I个缓冲阵列数据到Nand Flash,即只写I页数据,这样,每次回写过程所用的时间是1.7ms。而采用现有技术中常用的数据写入方法,需要将这10页的数据一次写入Nand Flash,则每次回写过程所用的时间是
1.7msX10=17mso可见,采用本发明实施例提供的数据写入方法,能够极大地缩短单次回写耗时。
[0104]另外,采用本发明实施例提供的数据写入方法时,即使同时将单个缓冲阵列数据(即I页的数据)写入备份区,则单次回写所需要的时间是1.7msX 2=3.4ms,同样少于采用传统数据写入方法所需要的时间。
[0105]另外,本发明实施例二中,在所有需要回写到Nand Flash的数据都从内存写入Nand Flash之后,还可以包括以下步骤:
[0106]将Nand Flash内用以执行程序的后续运行所需要的数据和/或代码写入内存,此时,可以读取Nand Flash内保存区中的相应数据和/或代码,根据Nand Flash与内存之间的映射关系(即第一映射关系)将该数据和/或代码写入内存,然后程序的后续运行可以正常进行。
[0107]但是,将Nand Flash内的数据写入内存可能会发生如下情况:需要写入内存中的数据在Nand Flash内的保存区已丢失或者损坏,此时,可以执行以下步骤:
[0108]首先,读取Nand Flash内备份区中的数据,根据缓冲区与备份区之间的映射关系将Nand Flash内的备份区中的数据写入内存中的缓冲区;然后再根据缓冲区与保存区之间的映射关系将缓冲区内的数据写入Nand Flash内的保存区中。这样,即使保存区中某个物理块损坏或者丢失,仍然可以将备份区中的原数据写入内存,提高数据的可靠性,保证程序的正常运行。
[0109]如果Nand Flash内的保存区中数据读取出错,则表示存储该数据的物理块丢失或者损坏,该物理块无法继续使用,则将此物理块标记为无效块,此时需要恢复整个物理块的有效数据。可以根据保存在备份区中的第三映射关系,从备份区中读取相应的数据并将这些数据写入缓冲区,同时解除保存区中此无效的物理块与内存之间的映射关系。根据写入时刻判断缓冲区中是否有缓冲阵列数据待写入Nand Flash中的保存区和备份区,如果是,优先将队列较长的缓冲阵列数据写入保存区或者备份区。
[0110]类似于读取出错的情况,出现写入或擦除失败或者覆盖写的情况时,都标记当前物理块为无效块,根据缓冲区与备份区之间的映射关系将Nand Flash内的备份区中的数据写入内存中的缓冲区;然后再根据缓冲区与保存区之间的映射关系将缓冲区内的数据写入Nand Flash内的保存区中。此时,可以检测缓冲区的空间大小(即长度大小),根据缓冲区的空间大小增加或者减小单次队列数据页的数目,保证数据正常的缓冲,并提高缓冲区的利用率。
[0111]此外,在确定Nand Flash内保存区中的数据丢失或者损坏之后,还可以将在保存区中存储该数据的物理块标记为无效块,以后不再使用。
[0112]需要说明的是,本发明实施例主要以数据回写为例对基于Nand Flash的数据写入方法进行了详细说明,上述写入方法对代码的回写同样适用;另外,本发明实施例中的第一映射关系、第二映射关系以及第三映射关系可以均为虚拟地址映射关系。
[0113]此外,本发明实施例还提供一种基于Nand Flash的数据写入装置,图4示出了该装置的结构示意图,该装置包括:
[0114]建立单元401,用于在内存中建立缓冲区;
[0115]划分单元402,用于将内存中需要回写至Nand Flash的数据划分为多个缓冲阵列数据;
[0116]第一写入单元403,用于依据第一映射关系,将多个缓冲阵列数据依次写入缓冲区,其中,第一映射关系为内存中存储所述数据的存储区与缓冲区之间的映射关系;
[0117]第二写入单元404,用于将缓冲区中的单个缓冲阵列数据写入Nand Flash内的保存区,其中,第二映射关系为缓冲区与保存区之间的映射关系。
[0118]另外,本发明实施例提供的基于Nand Flash的数据写入装置还可以包括:
[0119]第三写入单元,用于依据第三映射关系,将缓冲区中的单个缓冲阵列数据写入备份区,其中第三映射关系为缓冲区与备份区之间的映射关系。
[0120]其中,第三写入单元可以包括:
[0121]第一判断单元,用于判断备份区中的第一物理块是否有效;
[0122]第一写入子单元,用于在第一判断单元确认第一物理块有效时,将单个缓冲阵列数据写入第一物理块;
[0123]第二写入单元,用于在第一判断单元确认第一物理块无效时,将单个缓冲阵列数据写入第二物理块,其中第二物理块为备份区中按顺序循环擦写方式时第一物理块之后的第一个有效的物理块。
[0124]本发明实施例提供的基于Nand Flash的数据写入装置还可以包括优化单元,
[0125]优化单元,用于对缓冲区进行优化;
[0126]其中,优化单元包括压缩单元和/或更新单元,
[0127]压缩单元,用于对保存在缓冲区中的缓冲阵列数据进行压缩;
[0128]更新单元,用于根据当前信息更新缓冲区的空间大小,其中当前信息为当前状态下缓冲区中的单个缓冲阵列数据写入Nand Flash内的保存区的频率。
[0129]划分单元可以用于将内存中的数据以单页的写入量为单位分为多个缓冲阵列数据。
[0130]第二写入单元可以包括:
[0131]第二判断单元,用于判断保存区中的第三物理块是否有效;
[0132]第三写入子单元,用于在第二判断单元确认第三物理块有效时,将单个缓冲阵列数据写入第三物理块;
[0133]第四写入单元,用于在第二判断单元确认第三物理块无效时,将单个缓冲阵列数据写入第四物理块,其中第四物理块为保存区中按顺序循环擦写方式时第三物理块之后的第一个有效的物理块。
[0134]以上所述仅是本发明的优选实施方式,应当指出,对于本【技术领域】的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
【权利要求】
1.基于NandFlash的数据写入方法,其特征在于,包括: 在内存中建立缓冲区; 将所述内存中需要回写至Nand Flash的数据划分为多个缓冲阵列数据; 依据第一映射关系,将所述多个缓冲阵列数据依次写入所述缓冲区,其中所述第一映射关系为所述内存中存储所述数据的存储区与所述缓冲区之间的映射关系; 依据第二映射关系,将所述缓冲区中的单个缓冲阵列数据写入Nand Flash内的保存区,其中所述第二映射关系为所述缓冲区与所述保存区之间的映射关系。
2.根据权利要求1所述的数据写入方法,其特征在于,所述NandFlash内设有备份区,所述方法还包括: 依据第三映射关系,将所述缓冲区中的单个缓冲阵列数据写入所述备份区,其中所述第三映射关系为所述缓冲区与所述备份区之间的映射关系。
3.根据权利要求2所述的数据写入方法,其特征在于,所述将所述缓冲区中的单个缓冲阵列数据写入所述备份区,包括: 判断所述备份区中的第一物理块是否有效,如果是,将所述单个缓冲阵列数据写入所述第一物理块;如果否,将所述单个缓冲阵列数据写入第二物理块,其中所述第二物理块为所述备份区中按顺序循环擦写方式时所述第一物理块之后的第一个有效的物理块。
4.根据权利要求1-3任一项所述的数`据写入方法,其特征在于,所述方法还包括对所述缓冲区进行优化: 对保存在所述缓冲区中的所述缓冲阵列数据进行压缩;和/或, 根据当前信息更新所述缓冲区的空间大小,其中所述当前信息为当前状态下所述缓冲区中的单个缓冲阵列数据写入Nand Flash内的保存区的频率。
5.根据权利要求1-3任一项所述的数据写入方法,其特征在于,所述将所述内存中的数据分为多个缓冲阵列数据,包括: 将所述内存中的数据以单页的写入量为单位分为多个缓冲阵列数据。
6.根据权利要求1-3任一项所述的数据写入方法,其特征在于,所述将所述缓冲区中的单个缓冲阵列数据写入Nand Flash内的保存区,包括: 判断所述保存区中的第三物理块是否有效,如果是,将所述单个缓冲阵列数据写入所述第三物理块;如果否,将所述单个缓冲阵列数据写入第四物理块,其中所述第四物理块为所述保存区中按顺序循环擦写方式时所述第三物理块之后的第一个有效的物理块。
7.一种基于Nand Flash的数据写入装置,其特征在于,包括: 建立单元,用于在内存中建立缓冲区; 划分单元,用于将所述内存中需要回写至Nand Flash的数据划分为多个缓冲阵列数据; 第一写入单元,用于依据第一映射关系,将所述多个缓冲阵列数据依次写入所述缓冲区,其中所述第一映射关系为所述内存中存储所述数据的存储区与所述缓冲区之间的映射关系; 第二写入单元,用于依据第二映射关系,将所述缓冲区中的单个缓冲阵列数据写入Nand Flash内的保存区,其中所述第二映射关系为所述缓冲区与所述保存区之间的映射关系O
8.根据权利要求7所述的数据写入装置,其特征在于,所述装置还包括: 第三写入单元,用于依据第三映射关系,将所述缓冲区中的单个缓冲阵列数据写入所述备份区,其中所述第三映射关系为所述缓冲区与所述备份区之间的映射关系。
9.根据权利要求8所述的数据写入装置,其特征在于,所述第三写入单元包括: 第一判断单元,用于判断所述备份区中的第一物理块是否有效; 第一写入子单元,用于在所述第一判断单元确认所述第一物理块有效时,将所述单个缓冲阵列数据写入所述第一物理块; 第二写入单元,用于在所述第一判断单元确认所述第一物理块无效时,将所述单个缓冲阵列数据写入第二物理块,其中所述第二物理块为所述备份区中按顺序循环擦写方式时所述第一物理块之后的第一个有效的物理块。
10.根据权利要求7-9任一项所述的数据写入装置,其特征在于,所述装置还包括优化单元, 所述优化单元,用于对所述缓冲区进行优化; 其中,所述优化单元包括压缩单元和/或更新单元, 所述压缩单元,用于对保存在所述缓冲区中的所述缓冲阵列数据进行压缩; 所述更新单元,用于根据当前信息更新所述缓冲区的空间大小,其中所述当前信息为当前状态下所述缓冲区中的单个缓冲阵列数据写入Nand Flash内的保存区的频率。
11.根据权利要求7-9任一项所述的数据写入装置,其特征在于,` 所述划分单元用于将所述内存中的数据以单页的写入量为单位分为多个缓冲阵列数据。
12.根据权利要求7-9任一项所述的数据写入装置,其特征在于,所述第二写入单元包括: 第二判断单元,用于判断所述保存区中的第三物理块是否有效; 第三写入子单元,用于在所述第二判断单元确认所述第三物理块有效时,将所述单个缓冲阵列数据写入所述第三物理块; 第四写入单元,用于在所述第二判断单元确认所述第三物理块无效时,将所述单个缓冲阵列数据写入第四物理块,其中所述第四物理块为所述保存区中按顺序循环擦写方式时所述第三物理块之后的第一个有效的物理块。
【文档编号】G06F12/02GK103514097SQ201210206632
【公开日】2014年1月15日 申请日期:2012年6月20日 优先权日:2012年6月20日
【发明者】梁雄, 胡胜发 申请人:安凯(广州)微电子技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1