CN101419838B - 一种提高flash使用寿命的方法 - Google Patents
一种提高flash使用寿命的方法 Download PDFInfo
- Publication number
- CN101419838B CN101419838B CN2008101657161A CN200810165716A CN101419838B CN 101419838 B CN101419838 B CN 101419838B CN 2008101657161 A CN2008101657161 A CN 2008101657161A CN 200810165716 A CN200810165716 A CN 200810165716A CN 101419838 B CN101419838 B CN 101419838B
- Authority
- CN
- China
- Prior art keywords
- data
- flash
- value
- bit
- written
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C16/00—Erasable programmable read-only memories
- G11C16/02—Erasable programmable read-only memories electrically programmable
- G11C16/06—Auxiliary circuits, e.g. for writing into memory
- G11C16/34—Determination of programming status, e.g. threshold voltage, overprogramming or underprogramming, retention
- G11C16/349—Arrangements for evaluating degradation, retention or wearout, e.g. by counting erase cycles
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C16/00—Erasable programmable read-only memories
- G11C16/02—Erasable programmable read-only memories electrically programmable
- G11C16/06—Auxiliary circuits, e.g. for writing into memory
- G11C16/10—Programming or data input circuits
Landscapes
- Techniques For Improving Reliability Of Storages (AREA)
- Read Only Memory (AREA)
Abstract
本发明通过将待写入数据比特Bi转换为n比特数据{T<i,j>},更新falsh中比特串数据{T<i,j>}合适的值为1的比特为0,映射后得到待写入的Bi值,从而无需进行擦除操作而直接写入flash,既避免flash在编程方面的限制,提高更新flash中数据的速度,又可以极大地减少擦除flash块的次数,大幅度提高flash的寿命。
Description
技术领域
本发明涉及数据存储领域,具体涉及一种提高flash使用寿命的方法。
背景技术
Flash存储器由于具有掉电可保存数据的特点,在数据存储领域得到了广泛的应用。Flash在读数据方面没有什么限制,但在写数据方面有很多限制。一般flash都以512bytes~128Kbyte或其他大小为单位构成一个块。写操作分为两种:编程、擦除。编程操作以字节为单位,可以把字节内的每个比特从1变为0,或者维持原来值,但不能把为0的比特变为1。擦除操作以块为单位,把块内的所有比特变为1。但是Flash存储器有寿命方面的限制,每个块的擦除次数一般不能超过10万次。
针对普通的写操作不能把为0的比特变为1的限制,目前主要采用的方法是:先读出块内原先保存的数据到RAM缓冲区,修改为新的数据;然后擦除原来的块;再把新的数据写入。这种方法的缺点在于:即使只有一个比特的数据需要从0修改为1,也需要读写整个块的数据,并且需要擦除整个块一次。一般读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-1)~0,n为偶数;
比较待写入数据Bi与老的原始数据Bi是否相同,如果相同,则不需要更新flash中此字节的数据;
如果待写入数据Bi值与老的原始数据Bi值不相同,检查是否可以直接写入flash;
如果可以,则直接写入flash;如果不可以直接写入flash,执行擦除块操作。
进一步地,如果可以将数据{T<i,j>}中某些值为1的比特变为0,然后根据映射关系计算得到待写入数据Bi值,则可以直接写入flash。
进一步地,如果Flash块中数据,从上次擦除后直接写入的次数小于等于n次,则可以直接写入flash。
进一步地,将数据{T<i,j>}中一位或多位为1的比特变为0,使得新的{T<i,j>}值映射后得到待写入数据Bi值,则完成flash的直接写入。
进一步地,映射关系指原始数据与Flash中的数据{T<i,j>}的对应关系,原始数据比特取值范围为:[0,1],Flash中的数据{T<i,j>}取值范围为:[0,2n-1],映射关系用于确定数据{T<i,j>}各比特数据经过运算后对应的原始数据比特值是0还是1。
进一步地,flash中的没有数据时,按照映射关系将待写入数据比特转换为n比特的数据{T<i,j>}写入flash。
本发明通过将待写入数据比特Bi转换为n比特数据{T<i,j>},更新falsh中{T<i,j>}合适的值为1的比特为0,映射后得到待写入的Bi值,从而无需进行擦除操作而直接写入flash,既避免flash在编程方面的限制,提高更新flash中数据的速度,又可以极大地减少擦除flash块的次数,大幅度提高flash的寿命。
附图说明
图1是写入flash的处理流程图;
图2是一种flash中数据变化的状态图;
具体实施方式
下面结合具体实施方式对本发明所述方法作进一步的描述。
本发明提出的一种提高flash使用寿命的方法,具体如下:
将待写入数据比特Bi转换为n比特数据{T<i,j>}写入flash,其中,其中i为自然数,j=(n-1)~0,选择n为偶数,或者记为{T<i,j>}j=n-1~0,以下用符号{T<i,j>}表示。
原始数据的比特数据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,j>}根据映射关系计算得到对应的老的原始数据Bi;比较待写入数据Bi与老的原始数据Bi是否相同,如果相同,则flash中此字节的数据不需要更新;如果待写入数据Bi值与老的原始数据Bi值不相同,检查是否可以直接写入flash;如果可以则直接写入flash,如果不可以直接写入flash,执行擦除块操作后再写入。
结合附图1所示,具体包含如下步骤:
101.从flash中读出原始数据Bi对应的{T<i,j>}j=n-1~0。
102.根据映射规则,计算{T<i,j>}j=n-1~0对应的当前原始数据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’b11111111。
107.根据当前T<i,j>}的值,及待写入的Bi值,通过映射规则确定新的T<i,j>}值。要求满足flash编程的特性要求,原来为0的比特不发生变化,原来为1的比特,可以有1位或多位变为0。
108.完成的比特数据Bi的编程写入。
在写flash数据时,根据当前T<i,j>}的值,及Bi的值,确定新的值。确定新的T<i,j>}值时,要求既满足确定的映射规则,又满足flash编程的特性要求,原来为0的比特不发生变化,原来为1的比特,根据映射关系,可以有1位或多位变为0。
本发明中的映射关系,指的是原始数据比特与在Flash中的数据{T<i,j>}的对应关系。原始数据比特取值范围为:[0,1],Flash中的比特串取值范围为:[0,2n-1]。映射关系用于确定比特串各比特数据经过运算后对应的原始数据比特值是0还是1。映射关系可以有多种,例如,可以通过计算比特串中为所有位相加的和,确定原始数据比特的值,如数据8’b10101010的所有位相加为0,对应原始数据比特为0,数据8’b10101000的所有位相加为1,对应原始数据比特为1;或者是把比特串均分为两串(或四串),按位进行同或/异或运算,运算结果为4’b0000则认为对应的原始数据比特为0,否则为1。
下面举例说明一种比较简单的Bi与{T<i,j>}之间的映射关系。
1)在原始数据比特转换为n比特数据时,选择n为偶数。在本例子中,取n=8。 一比特数据,转换后,占用flash中的一字节。即Bi转换后的数据为:T<i,7>,T<i,6>…T<i,1>,T<i,0>。
2)转换后的数据分为前半部分{T<i,j>}j=7~4,与后半部分{T<i,j>}j=3~0。
3)在读flash数据时,通过{T<i,j>}j=7~4与{T<i,j>}j=3~0进行异或运算,得到Bi的值。如果每一位结果都是0,则对应的Bi值为0,否则对应的Bi值为1,即为4’b0000,则Bi=1’b0;否则,Bi=1’b1。
当写flash数据时,首先检查是否需要更新flash中的数据。读flash中的数据{T<i,j>}j=7~0,根据上述映射关系计算得到对应的老的Bi值。如果新的Bi值与老的Bi值相同,则flash中此字节的数据不需要更新。否则,继续进行处理。
如果需要更新flash中的数据,则先检查是否需要执行擦除操作。如果可以找到{T<i,j>}j=7~0中合适的值为1的比特,变为0,再次映射后与新的Bi值相同,则无需进行擦除操作。例如flash中的数据为11111111,按照上述映射关系,对应的老的Bi值为0,我们只需改变{T<i,j>}j=7~0中任意一位1为0,例如把T<i,0>改为0,则flash中的数据更新为11111110,按照上述映射关系,新的Bi值为1,则无需进行擦除操作实现了写入新的Bi值。或者把T<i,6>改为0,则flash中的数据更新为10111111,按照上述映射关系,新的Bi值也为1,也可以实现无需进行擦除操作实现了写入新的Bi值。
表1 原始数据与flash中数据的对应关系之一
表1是按照比特0、4、1、5、2、6、3、7的顺序,查找值为1的比特,找到就将此比特变为0。flash中与一比特原始数据对应的字节数据,在多次编程操作及擦除操作时,其状态变化如图2所示。当然,也可以采用其它满足要求的规则,如0、4、5、1、6、2、3、7的顺序,查找值为1的比特,找到就将此比特变为0,见表2。
表2原始数据与flash中数据的对应关系之二
其中,将{T<i,j>}j=7~0中哪些值为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所示。
n比特 | 1 | 2 | 4 | 8 | 16 | 32 | 64 |
可擦除次数:单位:10万次 | 1 | 2 | 4 | 8 | 16 | 32 | 64 |
表3n与flash寿命的对应关系
当然,flash中的没有数据时,可按照映射关系将待写入数据比特直接转换为n比特数据{T<i,j>}写入flash。
本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明做出各种相应的改变和变形,这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
Claims (9)
1.一种提高flash使用寿命的方法,包括如下步骤:
读flash中的数据{T<i,j>}根据映射关系计算得到对应的老的原始数据Bi,其中i为自然数,j=(n-1)~0,n为偶数;
比较待写入数据Bi与老的原始数据Bi是否相同,如果相同,则flash中此字节的数据不需要更新;
如果待写入数据Bi值与老的原始数据Bi值不相同,检查是否可以直接写入flash;
如果可以,则直接写入flash;如果不可以直接写入flash,执行擦除块操作。
2.如权利要求1所述的方法,其特征在于,检查是否可以直接写入flash的步骤如下:将数据{T<i,j>}中某些值为1的比特变为0,然后根据映射关系计算得到待写入数据Bi值,则可以直接写入flash,否则,不能直接写入flash。
3.如权利要求1或2所述的方法,其特征在于,如果Flash块中数据,从上次擦除后直接写入的次数小于等于n次,则可以直接写入flash。
4.如权利要求3所述的方法,其特征在于,直接写入flash的步骤具体为:将数据{T<i,j>}中一位或多位为1的比特变为0,使得新的{T<i,j>}值映射后得到待写入数据Bi值,则完成flash的直接写入。
5.权利要求1或4所述的方法,其特征在于,映射关系指原始数据与Flash中的数据{T<i,j>}的对应关系,原始数据比特取值范围为:[0,1],Flash中的数据{T<i,j>}取值范围为:[0,2n-1],映射关系用于确定比特串各比特数据经过运算后对应的原始数据比特值是0还是1。
6.如权利要求5所述的方法,其特征在于,数据{T<i,j>}中所有比特位进行相加,确定对应的Bi值。
7.如权利要求5所述的方法,其特征在于,把所述数据{T<i,j>}均分为两串或四串,按位进行同或/异或运算确定对应的Bi值。
8.如权利要求1所述的方法,其特征在于,在擦除块之前,保存块中数据到缓冲区,并与待写入数据合并。
9.如权利要求1所述的方法,其特征在于,flash中的没有数据时,按照映射关系将待写入数据比特直接转换为n比特的数据{T<i,j>}写入flash。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008101657161A CN101419838B (zh) | 2008-09-12 | 2008-09-12 | 一种提高flash使用寿命的方法 |
US13/063,625 US20110296082A1 (en) | 2008-09-12 | 2009-09-07 | Method for Improving Service Life of Flash |
PCT/CN2009/073788 WO2010028585A1 (zh) | 2008-09-12 | 2009-09-07 | 提高flash使用寿命的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008101657161A CN101419838B (zh) | 2008-09-12 | 2008-09-12 | 一种提高flash使用寿命的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101419838A CN101419838A (zh) | 2009-04-29 |
CN101419838B true CN101419838B (zh) | 2011-01-19 |
Family
ID=40630590
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008101657161A Active CN101419838B (zh) | 2008-09-12 | 2008-09-12 | 一种提高flash使用寿命的方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20110296082A1 (zh) |
CN (1) | CN101419838B (zh) |
WO (1) | WO2010028585A1 (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101419838B (zh) * | 2008-09-12 | 2011-01-19 | 中兴通讯股份有限公司 | 一种提高flash使用寿命的方法 |
US8769188B2 (en) * | 2009-11-18 | 2014-07-01 | Mediatek Inc. | Nonvolatile memory controller and method for writing data to nonvolatile memory |
CN102646069B (zh) * | 2012-02-23 | 2014-12-10 | 华中科技大学 | 一种延长固态盘使用寿命的方法 |
CN105244057B (zh) * | 2015-09-29 | 2019-12-13 | 北京兆易创新科技股份有限公司 | 一种非易失性存储器写状态寄存器的方法 |
US10585610B1 (en) * | 2016-09-30 | 2020-03-10 | EMC IP Holding Company LLC | Locking data structures with locking structures in flash memory by setting bits in the locking structures |
CN112181303B (zh) * | 2020-09-29 | 2024-08-16 | 广东艾科技术股份有限公司 | 数据存储方法、装置、计算机设备和存储介质 |
CN113053451B (zh) * | 2021-03-05 | 2022-05-10 | 深圳三地一芯电子有限责任公司 | Nandflash内生成softbit的方法、系统、主机以及储存介质 |
CN113488098A (zh) * | 2021-07-20 | 2021-10-08 | 南京冷火电子科技有限公司 | 基于falsh存储器的计数算法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5341339A (en) * | 1992-10-30 | 1994-08-23 | Intel Corporation | Method for wear leveling in a flash EEPROM memory |
US6292012B1 (en) * | 1999-10-06 | 2001-09-18 | Winbond Electronics Corp. | Device for protecting a programmable non-volatile memory |
CN1845082A (zh) * | 2006-04-29 | 2006-10-11 | 北京飞天诚信科技有限公司 | 闪存的安全写入方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1983003912A1 (en) * | 1982-04-30 | 1983-11-10 | Massachusetts Institute Of Technology | Method and apparatus for reusing non-erasable memory media |
JP3175648B2 (ja) * | 1997-07-07 | 2001-06-11 | ソニー株式会社 | 記憶装置及びデータの書込み方法 |
ATE302464T1 (de) * | 2000-12-15 | 2005-09-15 | Koninkl Philips Electronics Nv | Datenverarbeitungseinrichtung mit einer speicherstelle, in der daten gemäss einem wom- code gespeichert werden |
JP5130646B2 (ja) * | 2005-06-06 | 2013-01-30 | ソニー株式会社 | 記憶装置 |
CN101183336A (zh) * | 2007-12-18 | 2008-05-21 | 凌阳科技股份有限公司 | 使用非易失性存储器记录资料的方法及电子装置 |
CN101419838B (zh) * | 2008-09-12 | 2011-01-19 | 中兴通讯股份有限公司 | 一种提高flash使用寿命的方法 |
-
2008
- 2008-09-12 CN CN2008101657161A patent/CN101419838B/zh active Active
-
2009
- 2009-09-07 US US13/063,625 patent/US20110296082A1/en not_active Abandoned
- 2009-09-07 WO PCT/CN2009/073788 patent/WO2010028585A1/zh active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5341339A (en) * | 1992-10-30 | 1994-08-23 | Intel Corporation | Method for wear leveling in a flash EEPROM memory |
US6292012B1 (en) * | 1999-10-06 | 2001-09-18 | Winbond Electronics Corp. | Device for protecting a programmable non-volatile memory |
CN1845082A (zh) * | 2006-04-29 | 2006-10-11 | 北京飞天诚信科技有限公司 | 闪存的安全写入方法 |
Also Published As
Publication number | Publication date |
---|---|
US20110296082A1 (en) | 2011-12-01 |
CN101419838A (zh) | 2009-04-29 |
WO2010028585A1 (zh) | 2010-03-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101419838B (zh) | 一种提高flash使用寿命的方法 | |
US20210133208A1 (en) | Counter-based compaction of key-value store tree data block | |
US11334270B2 (en) | Key-value store using journaling with selective data storage format | |
US11048755B2 (en) | Key-value store tree with selective use of key portion | |
CN1900919B (zh) | 包括多个块的闪速存储器 | |
TWI425357B (zh) | 用來進行區塊管理之方法以及記憶裝置及控制器 | |
US9189389B2 (en) | Memory controller and memory system | |
CN102841852B (zh) | 磨损均衡方法、存储装置及信息系统 | |
CN102779096B (zh) | 一种基于页块面三维的闪存地址映射方法 | |
CN113168408A (zh) | 利用压缩的键值存储树数据块溢出 | |
CN109426622B (zh) | 一种提高闪存固态盘寿命的方法及高寿命闪存固态盘 | |
US20090323419A1 (en) | Read-time wear-leveling method in storage system using flash memory device | |
CN106775476A (zh) | 混合内存系统及其管理方法 | |
TWI434175B (zh) | 用來進行區塊管理之方法以及記憶裝置及控制器 | |
US20120144267A1 (en) | Data reading method, memory storage apparatus, and controller thereof | |
US20130111301A1 (en) | Block management method, memory controller and memory storage device thereof | |
US9009442B2 (en) | Data writing method, memory controller and memory storage apparatus | |
CN103617124A (zh) | 一种闪存管理方法和装置 | |
CN102543196A (zh) | 数据读取方法、存储器储存装置及其控制器 | |
US10713155B2 (en) | Biased sampling methodology for wear leveling | |
CN110532195B (zh) | 存储器系统的工作负荷分簇及执行其的方法 | |
CN102592678B (zh) | 基于动态窗口管理的磨损均衡方法及装置 | |
TWI435216B (zh) | 用來進行超區塊管理之方法以及記憶裝置及控制器 | |
CN112764662B (zh) | 用于存储管理的方法、设备和计算机程序产品 | |
WO2019136978A1 (zh) | 一种提高闪存可利用率的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20230104 Address after: 518055 Zhongxing Industrial Park, Liuxian Avenue, Xili street, Nanshan District, Shenzhen City, Guangdong Province Patentee after: SANECHIPS TECHNOLOGY Co.,Ltd. Address before: 518057 Ministry of justice, Zhongxing building, South Science and technology road, Nanshan District hi tech Industrial Park, Shenzhen, Guangdong Patentee before: ZTE Corp. |