一种提高flash使用寿命的方法

文档序号:6783110阅读:140来源:国知局

专利名称::一种提高flash使用寿命的方法
技术领域
:本发明涉及数据存储领域,具体涉及一种提高Hash使用寿命的方法。
背景技术
:Flash存储器由于具有掉电可保存数据的特点,在数据存储领域得到了广泛的应用。Flash在读数据方面没有什么限制,但在写数据方面有很多限制。一般flash都以512bytes128Kbyte或其他大小为单位构成一个块。写操作分为两种编程、擦除。编程操作以字节为单位,可以把字节内的每个比特从1变为0,或者维持原来值,但不能把为O的比特变为1。擦除操作以块为单位,把块内的所有比特变为l。但是Flash存储器有寿命方面的限制,每个块的擦除次数一般不能超过IO万次。针对普通的写操作不能把为O的比特变为1的限制,目前主要采用的方法是-先读出块内原先保存的数据到RAM缓冲区,修改为新的数据;然后擦除原来的块;再把新的数据写入。这种方法的缺点在于即使只有一个比特的数据需要从O修改为l,也需要读写整个块的数据,并且需要擦除整个块一次。一般读flash的时间是纳秒级,编程flash的时间是微秒级,而擦除flash的时间则为毫秒甚至秒级。因此,这种方法既增加了操作时间,又縮短了Flash的寿命。另外一种方法是把写flash的数据缓冲在RAM缓冲区中,一段时间后,再集中写到flash中。这种方法,可以避免每次修改都花很长时间更新flash中的内容。这种方法仍然无法克服编程时不能把为0的比特修改为1的限制,只是可以一定程度缓解此问题。同时引入了另外一个问题,即在缓冲数据的这段时间,如果系统掉电,则未写入flash的所有数据都会丢失。针对flash擦除次数不能超过10万次左右的限制,目前通用的方法为磨损均衡。如果需要修改某flash块的数据,假设所修改数据对应块号为A,此时,先在整个flash中査找擦除次数最少的块B;如果B块有数据,则在空闲块中査找擦除次数最少的块C,将B块数据复制到C块并擦除B块使其成为空闲块;再将A块中的数据读到RAM,修改为新的数据,写到B块相应扇区;最后擦除A块。上迷处理过程中,如果B块没有数据,可以把新的数据直接写入B块。采用磨损均衡方法更新一个flash块的数据,需要进行两次读块、写块、擦除块操作,操作时间很长。
发明内容本发明要解决的技术问题是提供一种提高flash使用寿命的方法,可以减少擦除flash块的次数,大幅度提高flash的寿命。本发明提供了一种提高flash使用寿命的方法,包括如下步骤读flash中的数据{T〈i,j〉}根据映射关系计算得到对应的老的原始数据Bi,其中i为自然数,j=(n-l)0,n为偶数;比较待写入数据Bi与老的原始数据Bi是否相同,如果相同,则不需要更新flash中此字节的数据;如果待写入数据Bi值与老的原始数据Bi值不相同,检査是否可以直接写入flashu如果可以,则直接写入flash;如果不可以直接写入flash,执行擦除块操作。进一步地,如果可以将数据HXi,j》中某些值为1的比特变为0,然后根据映射关系计算得到待写入数据Bi值,则可以直接写入flash。进一步地,如果Flash块中数据,从上次擦除后直接写入的次数小于等于n次,则可以直接写入flash。进一步地,将数据HXi,j"中一位或多位为1的比特变为0,使得新的{T〈i,j》值映射后得到待写入数据Bi值,则完成flash的直接写入。进一步地,映射关系指原始数据与Flash中的比特串的对应关系,原始数据比特取值范围为,Flash中的比特串取值范围为,映射关系用于确定比特串各比特数据经过运算后对应的原始数据比特值是0还是1。进一步地,flash中的没有数据时,按照映射关系将待写入数据比特转换为n比特数据{T<i,j〉}写入flash。本发明通过将待写入数据比特Bi转换为n比特数据{T〈i,j>},更新falsh中(T〈i,jM合适的值为1的比特为0,映射后得到待写入的Bi值,从而无需进行擦除操作而直接写入flash,既避免flash在编程方面的限制,提高更新flash中数据的速度,又可以极大地减少擦除flash块的次数,大幅度提高flash的寿图l是写入flash的处理流程图2是一种flash中数据变化的状态具体实施例方式下面结合具体实施方式对本发明所述方法作进一步的描述。本发明提出的一种提高flash使用寿命的方法,具体如下将待写入数据比特Bi转换为n比特数据{T<i,j>}写入flash,其中,其中i为自然数,j:(n-l)0,选择n为偶数,或者记为{T〈'i,j〉h^、以下用符号{T<i,j〉l表示。原始数据的比特数据Bi对应转换后的数据为T〈i,n-1>,T〈i,n-2〉…T〈i,1>,T〈i,0〉,以下用符号{T〈i,j〉)表示。Bi与{T〈i,j"之间存在一对多的映射关系。当flash中已有数据,则读flash中的数据(T〈i,jM根据映射关系计算得到对应的老的原始数据Bi;比较待写入数据Bi与老的原始数据Bi是否相同,如果相同,则flash中此字节的数据不需要更新;如果待写入数据Bi值与老的原始数据Bi值不相同,检査是否可以直接写入flash;如果可以则直接写入flash,如果不可以直接写入flash,执行擦除块操作后再写入。结合附图l所示,具体包含如下步骤101.从flash中读出原始数据Bi对应的{T〈i,j〉}j=n-r。。102.根据映射规则,计算(T〈i,jMj吣。对应的当前原始数据Bi。计算的目的,是利用统计规则,减少写入flash的次数。103.比较老的原始数据Bi与新的待写入数据Bi。根据统计规则,每次写入一字节的原始数据时,其每比特值发生改变的概率只有50%.。从flash中读回{T〈i,j"值,根据映射关系,计算得到Bi值。如果与当前新的Bi值相等,则不需要进行写flash的操作。否则,需要继续104处理。104.检查是否可以直接写入flash。如果可以将数据{T〈i,j"中某些值为1的比特变为0,然后根据映射关系计算得到待写入数据Bi值,则可以直接写入flash。或者简单地根据擦除后写入次数计数,记录Flash块中某个范围的数据,从上次擦除后直接写入的次数。如果写入次数小于n次,则可以直接写入flash。本方法支持在一次块擦除后,至少可以直接写入n次。之后,则可能需要再次擦除块。如果可以直接写入,则转107进行写入操作。否则,需要继续105处理。105.在擦除块之前,保存块中数据到缓冲区,并与待写入数据合并。106.执行块擦除操作。擦除完成后,块中所有字节均恢复为8,bimmi。107.根据当前T〈i,j》的值,及待写入的Bi值,通过映射规则确定新的T〈i,j〉H直。要求满足flash编程的特性要求,原来为O的比特不发生变化,原来为1的比特,可以有1位或多位变为0。108.完成的比特数据Bi的编程写入。在写flash数据时,根据当前T〈i,j》的值,及Bi的值,确定新的值。确定新的T〈i,jM值时,要求既满足确定的映射规则,又满足flash编程的特性要求,原来为O的比特不发生变化,原来为l的比特,根据映射关系,可以有l位或多位变为0。本发明中的映射关系,指的是原始数据比特与在Flash中的比特串(T〈i,j>}的对应关系。原始数据比特取值范围为[O,l],Flash中的比特串取值范围为。映射关系用于确定比特串各比特数据经过运算后对应的原始数据比特值是0还是1。映射关系可以有多种,例如,可以通过计算比特串中为所有位相加的和,确定原始数据比特的值,如数据8,b皿01010的所有位相加为0,对应原始数据比特为O,数据8'bl0101000的所有位相加为1,对应原始数据比特为l;或者是把比特串均分为两串(或四串),按位进行同或/异或运算,运算结果为4'bOOOO则认为对应的原始数据比特为O,否则为l。下面举例说明一种比较简单的Bi与{T〈i,j》之间的映射关系。l)在原始数据比特转换为n比特数据时,选择n为偶数。在本例子中,取n=8。一比特数据,转换后,占用flash中的一字节。即Bi转换后的比特串为T〈i,7〉,T〈i,6》"T〈i,1>,T〈i,0〉。2)转换后的比特串分为前半部分{T〈i,j〉h-n,与后半部分(T〈i,j〉h《。。3)在读flash数据时,通过{T〈i,」〉}」=广4与{T〈i,j〉L《。进行异或运算,得到Bi的值。如果每一位结果都是0,则对应的Bi值为0,否则对应的Bi值为1,即为4,b0000,则Bi二l,bO;否则,Bi二l'bl。当写flash数据时,首先检查是否需要更新flash中的数据。读flash中的数据{T〈i,j〉h(。,根据上述映射关系计算得到对应的老的Bi值。如果新的Bi值与老的Bi值相同,则flash中此字节的数据不需要更新。否则,继续进行处理。如果需要更新flash中的数据,则先检查是否需要执行擦除操作。如果可以找到(T〈i,j"m中合适的值为1的比特,变为0,再次映射后与新的Bi值相同,则无需进行擦除操作。例如flash中的数据为11111111,按照上述映射关系,对应的老的Bi值为0,我们只需改变(T〈i,j〉hw中任意一位1为0,例如把T〈i,0〉改为0,则flash中的数据更新为11111110,按照上述映射关系,新的Bi值为l,则无需进行擦除操作实现了写入新的Bi值。或者把T〈i,6〉改为0,则flash中的数据更新为10111111,按照上述映射关系,新的Bi值也为1,也可以实现无需进行擦除操作实现了写入新的Bi值。<table>tableseeoriginaldocumentpage7</column></row><table>表1原始数据与flash中数据的对应关系之一'表1是按照比特0、4、1、5、2、6、3、7的顺序,查找值为l的比特,找到就将此比特变为0。flash中与一比特原始数据对应的字节数据,在多次编程操作及擦除操作时,其状态变化如图2所示。当然,也可以采用其它满足要求的规则,如0、4、5、1、6、2、3、7的顺序,查找值为1的比特,找到就将此比特变为0,见表2。<table>tableseeoriginaldocumentpage8</column></row><table>表2原始数据与flash中数据的对应关系之二其中,将(T〈i,j》,。中哪些值为1的比特变为0的顺序并不重要,只要满足映射后与新的Bi值相同即可。Flash不需要执行块擦除而直接写入的次数只与n有关,与顺序无关。综上所述,通过本发明的上述技术方案,既极大地提高了每次编程写入的速度,又减少了块擦除的次数,提高了flash的使用寿命。如果原始比特数据Bi映射为flash中的8比特数据,则在一次块擦除后,可以直接写入8次,中间不需要执行块擦除。直到flash中8比特数据变为0,即8'b00000000,才需要执行一次块擦除。如果原始比特数据Bi映射为flash中的n比特数据,则可以达到直接写入n次才执行一次块擦除,n的上限可根据实际需要及芯片的实际情况选择。比特数n与flash寿命之间的关系(假设flash原有寿命为10万次),如表3所示。<table>tableseeoriginaldocumentpage8</column></row><table>表3n与flash寿命的对应关系当然,flash中的没有数据时,可按照映射关系将待写入数据比特直接转换为n比特数据{T<i,j〉}写入flash。本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明做出各种相应的改变和变形,这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。权利要求1、一种提高flash使用寿命的方法,包括如下步骤读flash中的数据{T<i,j>}根据映射关系计算得到对应的老的原始数据Bi,其中i为自然数,j=(n-1)~0,n为偶数;比较待写入数据Bi与老的原始数据Bi是否相同,如果相同,则flash中此字节的数据不需要更新;如果待写入数据Bi值与老的原始数据Bi值不相同,检查是否可以直接写入flash;如果可以,则直接写入flash;如果不可以直接写入flash,执行擦除块操作。2、如权利要求l所述的方法,其特征在于,检査是否可以直接写入flash的步骤如下将数据OXi,j》中某些值为l的比特变为0,然后根据映射关系计算得到待写入数据Bi值,则可以直接写入flash,否则,不能直接写入flash。3、如权利要求1或2所述的方法,其特征在于,如果Flash块中数据,从上次擦除后直接写入的次数小于等于n次,则可以直接写入flash。4、如权利要求3所述的方法,其特征在于,直接写入flash的步骤具体为将数据{T<i,jM中一位或多位为1的比特变为O,使得新的nXi,j"值映射后得到待写入数据Bi值,则完成flash的直接写入。5、权利要求1或4所述的方法,其特征在于,映射关系指原始数据与Flash中的比特串(T〈i,j〉)的对应关系,原始数据比特取值范围为,Flash中的比特串取值范围为,映射关系用于确定比特串各比特数据经过运算后对应的原始数据比特值是0还是1。6、如权利要求5所述的方法,其特征在于,比特串rr〈i,j"中所有比特位进行相加,确定对应的Bi值。7、如权利要求5所述的方法,其特征在于,把比特串均分为两串或四串,按位进行同或/异或运算确定对应的Bi值。8、如权利要求l所述的方法,其特征在于,在擦除块之前,保存块中数据到缓冲区,并与待写入数据合并。9、如权利要求1所述的方法,其特征在于,flash中的没有数据时,按照映射关系将待写入数据比特直接转换为n比特数据(T〈i,j》写入flash。全文摘要本发明通过将待写入数据比特Bi转换为n比特数据{T<i,j>},更新flash中比特串数据{T<i,j>}合适的值为1的比特为0,映射后得到待写入的Bi值,从而无需进行擦除操作而直接写入flash,既避免flash在编程方面的限制,提高更新flash中数据的速度,又可以极大地减少擦除flash块的次数,大幅度提高flash的寿命。文档编号G11C16/06GK101419838SQ20081016571公开日2009年4月29日申请日期2008年9月12日优先权日2008年9月12日发明者官华伯申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1