专利名称:提高flash使用寿命的方法
技术领域:
本发明涉及数据存储技术领域,特别是涉及一种提高FLASH使用寿命的方法。
背景技术:
随着电子技术的发展,电子设备的功能日益丰富,为了实现电子设备的功能,人们需要把各种的数据存储到相应的电子设备的存储芯片中,一般采用FLASH存储器进行存储。FLASH存储器又称闪存,是一种非易失性存储器,广泛应用于嵌入式系统中,集合了只读内存(ROM)和随机存储器(RAM)的长处,不仅具备电子可擦除可编程的性能,还可以快速读取数据,使数据不会因为断电而丢失。
·
FLASH存储器可以进行读写操作,在进行写操作之前要先进行擦除,FLASH存储器按照块为单位进行擦除,当对FLASH进行同一地址高频率的擦写操作后,FLASH会很快出现坏扇区从而影响存储器的正常使用。
发明内容
基于上述不足,有必要提供一种提高FLASH使用寿命的方法,以解决高频率的擦写操作影响FLASH使用寿命的问题。一种提高FLASH使用寿命的方法,所述FLASH用于存储用户数据,包括以下步骤从FLASH中划出两个以上的存储单元,所述每一存储单元的数据存储区能够完整存储所述用户数据;每一次更新所述用户数据时,将更新后的用户数据存储在另一非当前存储单元中;所述两个以上的存储单元依次轮流存储所述用户数据。在其中一个实施例中,所述每个存储单元还包括身份编码存储区和状态标识存储区,分别用于存储身份编码和状态标识;其中,当所述存储单元的数据存储区为空时,所述状态标识为全新;写准备工作就绪时,所述状态标识为准写;写工作完成后,所述状态标识为写完;存储单元被废弃时,所述状态标识为废弃。在其中一个实施例中,所述状态标识全新的数据标识为OxFF,所述状态标识准写的数据标识为OxFC,所述状态标识写完的数据标识为OxR),所述状态标识废弃的数据标识为 0x00。在其中一个实施例中,所述更新用户数据的步骤具体包括以下步骤写数据初始化,读取所述状态标识为写完的存储单元的地址;读取下一个存储单元状态标识;如果所述下一个存储单元的状态标识位全新,则将所述下一个存储单元状态标识为准写,写入存储数据以及身份编码,然后将所述状态标识为写完,最后将上一次状态标识为写完的存储单元的状态标识置为废弃;如果所述下一个存储单元的状态标识位不为全新,则继续判断与所述下一个存储单元相邻的下一存储单元的状态标识。在其中一个实施例中,如果所述下一个存储单元的状态标识位不为全新并且为准写时,将所述存储单元状态标识为废弃。在其中一个实施例中,进一步包括以下步骤将所述FLASH划分为一个以上的逻辑块,每个所述逻辑块包括一个以上的所述存储单元;判断所述状态标识为写完的存储单元所在的逻辑块是否已写满; 如果未写满,则查找该逻辑块中状态标识为全新的存储单元,并将用户数据存储在该全新的存储单元中;如果已写满,则查找并擦除下一个逻辑块,并将用户数据存储在该下一个逻辑块的第一个存储单元中。在其中一个实施例中,还包括读数据的步骤,具体为读数据初始化;扫描状态标识,判断所述状态标识是否为写完;如果否,则继续扫描下一个存储单元,如果扫描全部存储单元未扫描到状态标识为写完的存储单元,则提供默认数据;如果是,则检验身份编码是否合法;如果合法,则读取相应数据并返回存储单元的地址;如果不合法,则将其状态标识为废弃,继续扫描下一个存储单元。在其中一个实施例中,对每个存储单元进一步设置擦写次数状态位,所述擦写次数状态位存放于所述存储单元,记录所在存储单元的擦写次数;写数据时,初始化过程读取上一次存储单元的擦写次数;每次写入数据后擦写次数加I。在其中一个实施例中,所述各个逻辑块大小相同,所述各个存储单元大小相同。上述提高FLASH使用寿命的方法,所述FLASH用于存储用户数据,将FLASH划分为两个以上的能够完整存储所述用户数据存储单元,两个以上的存储单元轮流存储数据,而不再对固定存储单元存储内容,造成某一个存储单元被多次反复读写,使存储单元被循环使用,避免了某个存储单元被多次使用造成FLASH存储器出现坏扇区,提高了 FLASH存储器的使用寿命。
图I为本发明提高FLASH存储器使用寿命方法的较佳实施例的流程图;图2为图I中的FLASH存储器一较佳实施例的数据结构图;图3为本发明提高FLASH存储器使用寿命方法的较佳实施例中写数据流程图;图4为本发明提高FLASH存储器使用寿命方法的较佳实施例中读数据流程图。
具体实施例方式一种提高FLASH使用寿命的方法,该FLASH用于存储用户数据。该方法包括将FLASH划分为两个以上的存储单元,每一存储单元的数据存储区能够完整存储用户数据,每一次更新所述用户数据时,将更新后的用户数据存储在另一非当前存储单元中,用两个以上的存储单元依次轮流存储用户数据,而不再对固定存储单元存储内容,造成某一个存储单元被多次反复读写, 使存储单元被循环使用,避免了某个存储单元被多次使用造成FLASH存储器出现坏扇区,提高FLASH存储器使用寿命。上述提高FLASH使用寿命的方法可以应用于使用FLASH存储数据的电视机,以及其它有数据读写频繁,数据长度相对固定,使用FLASH存储等特点的嵌入式设备,可提高设备使用寿命。如图I所示,为本发明提高FLASH存储器使用寿命方法的较佳实施例的流程图。该方法包括以下步骤步骤S110,从FLASH存储器中划出两个以上的存储单元,每一存储单元的数据存储区能够完整存储所述用户数据。步骤S120,每一次更新用户数据时,将更新后的用户数据存储在另一非当前存储单元中。步骤S130,利用两个以上的存储单元依次轮流存储所述用户数据。上述提高FLASH存储器使用寿命的方法,利用两个以上的存储单元依次轮流存储所述用户数据,而不再对固定存储单元存储内容,造成某一个存储单元被多次反复读写,使存储单元被循环使用,避免了某个存储单元被多次使用造成FLASH存储器出现坏扇区,提高了 FLASH存储器使用寿命。请参照图2,图2为图I中的FLASH存储器一较佳实施例的数据结构图。如图2所示,在FLASH存储器中,按照FLASH的物理结构,将FLASH划分为一个以上的逻辑块(BANK),每个逻辑块划分为一个以上的存储单元。当前逻辑块写满时,继续在下一个逻辑块存储。将FLASH存储器划分为若干个逻辑块,当一个逻辑块中所有的存储单元都存满时,判断与该逻辑块相邻的下一逻辑块的存储单元是否都存满,如果没有存满则存储在该下一逻辑块的存储单元中,如果存满,则擦除该下一逻辑块,包括擦除逻辑块包含的所有存储单元数据存储区中存储的数据,这样避免了对某个存储单元进行频繁的写入擦除操作,减少FLASH的磨损,延长FLASH存储器的使用寿命。每个存储单元设置身份编码存储区和状态标识存储区,分别用于存储身份编码和状态标识。当存储单元的数据存储区为空时,状态标识为全新;写准备工作就绪时,状态标识为准写;写工作完成时,状态标识为写完;存储单元被废弃时,状态标识为废弃。上述身份编码,用于在读取数据时判断该存储单元是否合法,合法则读取数据,不合法则将该存储单元状态标识为废弃,并重新查找新的有合法的身份编码的存储单元,如果查找完所有的存储单元未找到有合法的身份编码的存储单元则导入程序的默认值。上述状态标识包括全新、准写、写完和废弃四个状态,若为全新,表示该存储单元的数据存储区为空,可以写入数据;准写表示该存储单元的数据存储区正在被写入数据;写完表示该存储单元的数据存储区存储有效的已写完的数据;废弃表示该存储单元的数据存储区存储的数据已过时,可以擦除。在读数据时,先判断状态标识,如果该状态标识为写完,再判断身份编码,无误则读取数据。
进一步地,因为FLASH的位只从I写成0,要把O变成I,只能擦除,擦除部分都会变成1,所以将上述状态标识全新、准写、写完和废弃的分别标识为OxFF、OxFC、OxR)和0x00,四种状态标识数据标识依次写O。按照顺序写入0XFF,0XFC,0XR),0X00,可只擦除一次就可以保证后面三次写的正确性,保证每次数据都能正确写入存储单元中,可有效提高FLASH的使用寿命,分四种状态可以防止写的过程中意外掉电而导致数据没写完全的问题发生。进一步地,对每个存储单元进一步设置擦写次数状态位,擦写次数状态位存放于所在的存储单元,用于记录所在存储单元一共擦写的次数,每次用户存储数据都会加I。在优选的实施例中,各个逻辑块大小相同,各个存储单元大小相同。请参见图3,图3为本发明提高FLASH存储器使用寿命方法的较佳实施例中写数据流程图。如图3所示,在上述提高FLASH存储器使用寿命的方法中,按照存储单元和逻辑 块的地址依次存储用户数据,从第一个BANK开始存储用户数据,到最后一个BANK,最后一个BANK写满后从第一个BANK开始继续存储,BANK之间循环存储,减少FLASH的磨损,延长FLASH的使用寿命。当前BANK写满时,定位到下一个BANK的第一个存储单元并擦除该当前BANK。进一步地,写数据时包括以下步骤步骤S301,写数据初始化,读取状态标识为写完的存储单元的地址。上电开机第一次的写都会经过一次读过程,通过读获取上一次有效数据存储的地址和擦写次数,之后在记住了上述地址和擦写次数后可以不经过读的过程,然后执行步骤S302。步骤S302,判断当前逻辑块是否已写满。如果已满则执行步骤S309,如果未满则执行步骤S303。可以使用一个标志位来表示逻辑块是否写满,在条件满足时改变标志位的值来表示逻辑块的状态。如果当前BANK已经写满,表示此BANK中所有存储单元已经经过写处理,不存在全新的存储单元,则需要将用户数据存储在下一个BANK中;如果当前BANK未写满,表示还有状态标识为全新的存储单元,可以将用户数据存储到该全新的存储单元的数据存储区。步骤S303,指针指向下一个存储单元。将指针指向该当前逻辑块中的下一个存储单元。当前BANK未写满,表示还有状态标识为全新的存储单元,查找状态标识为全新的存储单元。步骤S304,判断该存储单元的状态标识是否为全新,如果是则执行步骤S305,否则返回步骤302。如上所述,存储单元的状态标识为全新表示该存储单元的数据存储区为空,此时可以在该存储单元的数据存储区写入用户数据。如果存储单元的状态标识不为全新,则可能是准写、写完或者废弃。若该准写状态并非本次写入过程标识的状态,则很可能是由于某些写数据的过程没有完成造成的;如果状态为写完表示上次写操作时,将用户数据存储在此存储单元的数据存储区,将此存储单元的状态标识为写完造成的;如果状态为废弃,表示此存储单元数据存储区存储已经过时的用户数据,此状态为进行存储数据操作时将写入操作之前存储用户数据的存储单元标记为废弃造成的。步骤S305,将该存储单元状态标识置为准写。如果该存储单元的状态标识是全新,则表示该存储单元的数据存储区为空,此时可将用户数据存储到该存储单元的数据存储区,将该存储单元的状态标识置为准写,在存储单元的状态标识由全新变为准写后,此时的准写状态表示该存储单元的数据存储区可以被写入数据。步骤S306,写入用户数据及身份编码。如上所述,身份编码用于标识存储单元数据存储区存储的数据是否合法,如果存储数据有效则身份编码合法,如果存储的数据无效,则身份编码不合法。步骤S307,将该存储单元的状态标识置为写完。如上所述,状态标识为写完表示写入工作已完成,已经将用户数据存储到存储单元数据存储区。步骤S308,将上一次状态标识为写完的存储单元的状态标识置为废弃。如上所述,已经将新的用户数据存储到上述查找到的状态标识为全新且身份编码合法的存储单元的数据存储区,之前存储的用户数据作废,则将之前存储用户数据的存储单元状态标识置为废弃,表示该存储单元存储数据作废,此存储单元可擦除。上述过程是在一个逻辑块中寻址一个全新的存储单元并将用户数据存储到该全新的存储单元中的步骤。由于一个逻辑块中的存储单元可能最终用尽,也即被写满,因此需要将数据写入下一个逻辑块,也即执行下述步骤。步骤S309,定位并擦除下一个逻辑块。逻辑块之间的地址可能不是连续的,因此需 要先定位下一个逻辑块,并且在其擦除后才能将数据写入。在该FLASH存储系统中,至少开辟了两个逻辑块,因此当一个逻辑块写满时,需要擦除另一个逻辑块才能写入新的用户数据。当一个逻辑块被擦除时,其中的所有存储单元的擦除次数累加I。当逻辑块的数量为两个以上时,在一个逻辑块写满后,新的逻辑块可以根据挑选策略进行选择,优选为大致上使所有的逻辑块中的存储单元被均匀地使用。步骤S310,定位到下一个逻辑块的第一个存储单元。找到该下一个逻辑块的第一个存储单元,用于存储用户数据,之后即执行上述步骤S305至S308。进一步地,在步骤S304中,判断指针指向的下一个存储单元状态是否为全新,如果不是全新,则状态可能为准写。若上一次写的过程中数据没写完就掉电,没能及时把前一次的状态标识置为写完,这样读数据时就会读到最近一次写完的存储单元,这种情况下读到的存储单元的下一个存储单元的状态标识很可能为准写。若读到的状态标识为写完的存储单元的下一个存储单元状态标识为准写时,则将上述下一个存储单元状态标识为废弃。上述写入数据时按照顺序写入准写、写完和废弃,只要擦除一次就保证每次数据都能正确写入相应存储单元中,这样做也可以有效提高FLASH存储器的使用寿命,并且可以防止写的过程中意外掉电而导致数据没写全的问题发生。此外,在一个变形实施例中,在步骤S302与步骤S309之间还包括一判断步骤,判断下一逻辑块是否写满,如果写满则执行步骤S309,如果未写满则直接将数据写入到该下一逻辑块的存储单元中。这可以进一步减少对逻辑块的擦除次数,提高FLASH的使用寿命,从而提闻了设备的使用寿命。如图4所示,为图2所示实施例的读数据流程图。在上述提高FLASH存储器使用寿命的方法中,读数据时,进一步包括以下步骤步骤S410,读数据初始化,主要包括FLASH初始读入地址,各种程序变量的初始化等,然后执行步骤S420。步骤S420,扫描存储单元的状态标识。如上所述,状态标识若为全新,表示该存储单元的数据存储区为空,没有存储用户数据;准写表示该存储单元的数据存储区正在被写入数据,也没有存储用户数据;写完表示该存储单元的数据存储区存储有效的已写完的数据;废弃表示该存储单元的数据存储区存储的数据已过时。根据扫描出的状态标识,然后执行步骤S430。步骤S430,判断状态标识是否为写完。如果状态标识为写完则执行步骤S440,如果状态标识不为写完,则执行步骤S470。如上所述,如果状态标识为写完,表示该存储单元的数据存储区存储有效的已写完的数据,然后进一步判断该存储单元的身份编码是否合法,即执行步骤S440。如果状态标识不为写完,则判断是否已将所有的存储单元全部扫描完,即执行步骤S470,继续寻找状态标识为写完的存储单元。步骤S440,判断身份编码是否合法,是则执行步骤S450,否则执行步骤S460。如果身份编码合法,表示找到上次成功存储的存储单元,读取数据,即执行步骤S450 ;如果不合法,表示该存储单元存储的数据无效,将存储无效数据的存储单元状态标识置为废弃,表示该存储单元可以擦除,即执行步骤S460。步骤S450,读取存储单元数据存储区内的存储数据,并返回存储单元的地址和擦写次数。
·
步骤S460,如果身份编码不合法则将此存储单元状态标识为废弃,然后执行步骤S470。如上所述,如果身份编码不合法,将此存储单元状态标识置为废弃,然后判断是否已将所有的存储单元全部扫描完,即执行步骤S470,继续寻找状态标识为写完的存储单元。步骤S470,判断是否已经将全部存储单元扫描完,是则执行步骤S480,否则执行步骤S420。判断是否将全部存储单元扫描完,如果未扫描完则继续扫描状态标识为写完的存储单元,如果已经全部扫描完也没有发现状态标识为写完的存储单元,则写入系统默认的数据,即执行步骤S480。步骤S480,全部存储单元都扫描完还未找到有效数据,则写入默认数据,然后返回存储单元的地址和擦写次数。在其他实施例中,可以理解,当用户数据较大时,存储该用户数据的一个存储单元可能包括若干个物理块,存储单元存储的数据跨物理块存储,当需要擦除存储数据时,擦除整个存储单元,包括擦除该存储单元包含的所有物理块中存储的用户数据。本发明可应用于有数据读写频繁,数据长度固定,使用FLASH存储等特点的嵌入式设备,如视频播放设备,通讯设备等,提高了 FLASH的使用寿命,从而提高了设备的使用寿命。以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
权利要求
1.一种提高FLASH使用寿命的方法,所述FLASH用于存储用户数据,其特征在于,包括以下步骤 从FLASH中划出两个以上的存储单元,所述每一存储单元的数据存储区能够完整存储所述用户数据; 每一次更新所述用户数据时,将更新后的用户数据存储在另一非当前存储单元中; 所述两个以上的存储单元依次轮流存储所述用户数据。
2.根据权利要求I所述的提高FLASH使用寿命的方法,其特征在于,所述每个存储单元还包括身份编码存储区和状态标识存储区,分别用于存储身份编码和状态标识;其中, 当所述存储单元的数据存储区为空时,所述状态标识为全新; 写准备工作就绪时,所述状态标识为准写; 写工作完成后,所述状态标识为写完; 存储单元被废弃时,所述状态标识为废弃。
3.根据权利要求2所述的提高FLASH使用寿命的方法,其特征在于,所述状态标识全新的数据标识为OxFF,所述状态标识准写的数据标识为OxFC,所述状态标识写完的数据标识为OxFO,所述状态标识废弃的数据标识为0x00。
4.根据权利要求2所述的提高FLASH使用寿命的方法,其特征在于,所述更新用户数据的步骤具体包括以下步骤 写数据初始化,读取所述状态标识为写完的存储单元的地址; 读取下一个存储单元状态标识; 如果所述下一个存储单元的状态标识位全新,则将所述下一个存储单元状态标识为准写,写入存储数据以及身份编码,然后将所述状态标识为写完,最后将上一次状态标识为写完的存储单元的状态标识置为废弃; 如果所述下一个存储单元的状态标识位不为全新,则继续判断与所述下一个存储单元相邻的下一存储单元的状态标识。
5.根据权利要求4所述的提高FLASH使用寿命的方法,其特征在于,如果所述下一个存储单元的状态标识位不为全新并且为准写时,将所述存储单元状态标识为废弃。
6.根据权利要求4所述的提高FLASH使用寿命的方法,其特征在于,进一步包括以下步骤 将所述FLASH划分为一个以上的逻辑块,每个所述逻辑块包括一个以上的所述存储单元; 判断所述状态标识为写完的存储单元所在的逻辑块是否已写满; 如果未写满,则查找该逻辑块中状态标识为全新的存储单元,并将用户数据存储在该全新的存储单元中; 如果已写满,则查找并擦除下一个逻辑块,并将用户数据存储在该下一个逻辑块的第一个存储单元中。
7.根据权利要求2至6中任意一项所述的提高FLASH使用寿命的方法,其特征在于,还包括读数据的步骤,具体为 读数据初始化; 扫描状态标识,判断所述状态标识是否为写完;如果否,则继续扫描下一个存储单元,如果扫描全部存储单元未扫描到状态标识为写完的存储单元,则提供默认数据; 如果是,则检验身份编码是否合法; 如果合法,则读取相应数据并返回存储单元的地址; 如果不合法,则将其状态标识为废弃,继续扫描下一个存储单元。
8.根据权利要求4所述的提高FLASH使用寿命的方法,其特征在于,对每个存储单元进一步设置擦写次数状态位,所述擦写次数状态位存放于所述存储单元,记录所在存储单元的擦与次数; 写数据时,初始化过程读取上一次存储单元的擦写次数; 每次写入数据后擦写次数加I。
9.根据权利要求6所述的提高FLASH使用寿命的方法,其特征在于,所述各个逻辑块大小相同,所述各个存储单元大小相同。
全文摘要
本发明公开了一种提高FLASH使用寿命的方法,所述FLASH用于存储用户数据,将FLASH划分为两个以上的能够完整存储所述用户数据存储单元,两个以上的存储单元轮流存储数据,而不再对固定存储单元存储内容,造成某一个存储单元被多次反复读写,使存储单元被循环使用,避免了某个存储单元被多次使用造成FLASH出现坏扇区,提高了FLASH的使用寿命。
文档编号G06F12/06GK102890656SQ201210362510
公开日2013年1月23日 申请日期2012年9月25日 优先权日2012年9月25日
发明者李新乐, 康婷霞 申请人:Tcl光电科技(惠州)有限公司