CN112162933B - 一种闪存的数据结构、存储方法、读取方法及转移方法 - Google Patents
一种闪存的数据结构、存储方法、读取方法及转移方法 Download PDFInfo
- Publication number
- CN112162933B CN112162933B CN202010933886.0A CN202010933886A CN112162933B CN 112162933 B CN112162933 B CN 112162933B CN 202010933886 A CN202010933886 A CN 202010933886A CN 112162933 B CN112162933 B CN 112162933B
- Authority
- CN
- China
- Prior art keywords
- data
- page
- data unit
- bits
- unit
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Read Only Memory (AREA)
Abstract
本申请公开了闪存的数据结构、存储方法、读取方法及转移方法,所述数据结构包括:所述闪存包括n页数据,每页数据含有m位数据,每页所述m位数据中的前32位数据存储本页的相关信息,第33‑64位存储数据单元的数据头;当m=64时,本页不存储数据单元的数据,当m>64时,本页从第65位开始存储数据单元的数据;其中,n为自然数,m≥64。
Description
技术领域
本申请涉及数据存储领域,具体而言,涉及一种闪存的数据结构存储方法、读取方法及转移方法。
背景技术
闪存(Flash)是一种非易失性(Non-Volatile)存储媒介,它的存储特性类似于硬盘,在没有电流供应的情况下也能够长久地保存数据,这项特性使其成为各类便携式数字设备的存储介质。较之传统的EEPROM存储媒介,闪存的结构简单,速度更快,成本更低,但是也存在操作繁琐的缺点:
最小擦除单位为页(2k/4k/8k字节,随芯片不同而异);所有擦除后bit的值为1,每个bit只能由1写为0;写入速度快,以页为单位的擦除时间相对较长;每页的擦除次数有限,随芯片不同而异。
因此,现有技术中的闪存不能够像EEPROM一样对每个bit进行独立的擦除和写入操作,如果要修改例如16字节这种少量数据,也必须擦除其对应的整个页(一般来说1页在512字节,即4069位以上),这不仅由于擦除速度对软件性能产生影响,而且对Flash本身的擦除次数也是一种严重的浪费。
发明内容
本申请的主要目的在于提供一种闪存的数据结构,所述闪存包括n页数据,每页数据含有m位数据,每页所述m位数据中的前32位数据存储本页的相关信息,第33-64位存储数据单元的数据头;当m=64时,本页不存储数据单元的数据,当m>64时,本页从第65位开始存储数据单元的数据;
其中,n为自然数,m≥64。
可选地,所述本页的相关信息包括:
页占用标志,占位为1位;
页写满标志,占位为1位;
保留标志,占位为10位;
页擦除次数统计标志,占位为20位。
可选地,所述数据头包括:
数据单元占用标志,占位为1位;
数据单元有效标志,占位为1位;
保留标志,占位为6位;
数据单元编号,占位为16位;
数据单元长度,占位为8位。
根据本申请的另一个方面,还提供了一种闪存的数据存储方法,使用如上述任意一项所述闪存的数据结构;
当初次写入数据时,在闪存中存储页的前32位写入页相关信息;
在所述存储页的其它位写入数据单元;
当写入新数据时,读取已有所述数据单元的数据头;
判断已有有效数据单元的数据单元编号是否与新数据单元的数据单元编号重复,如果重复,改变所述已有有效数据单元的数据单元有效标志值为无效,写入新数据至所述有效数据单元,如果不重复,直接写入新数据至所述有效数据单元。
可选地,当写入新数据失败时,使用空数据单元填充所述有效数据单元的尾部;
写入所述新数据至下一存储页;
当写入所述新数据至下一存储页时,在所述下一存储页的前32位写入页相关信息,在所述下一存储页的其它位写入所述新数据。
根据本申请的另一个方面,还提供了一种闪存的数据读取方法,使用上述的数据存储方法,根据给定的数据单元编号依次读取已有数据单元的数据头,将读取到的数据单元有效标志值为有效的数据的数据单元编号与给定的数据单元编号进行比较,如果相同,则读取该数据头对应的数据内容。
根据本申请的另一个方面,还提供了一种闪存的数据转移方法,使用上述的数据读取方法;
当前一页写满数据,而当前页为空闲页时,轮询第一页的数据的单元,并依次读取第一页上的数据单元;
当所述第一页的数据单元有效时,转移所述第一页的数据单元至所述当前页上;当所述第一页的数据单元无效,则忽略;
当所述第一页上的数据单元轮询结束时,则擦除所述第一页,且页擦除次数加1,页占用标志为无效;
轮询第二页的数据的单元,并依次读取第二页上的数据单元;
当所述第二页的数据单元有效时,转移所述第二页的数据单元至所述第一页上;当所述第二页的数据单元无效,则忽略;
当所述第二页上的数据单元轮询结束时,则擦除所述第二页,且页擦除次数加1,页占用标志为无效;
依次移动所有页的数据至其前一页上,直至当前页。
本申请还公开了一种计算机设备,包括存储器、处理器和存储在所述存储器内并能由所述处理器运行的计算机程序,所述处理器执行所述计算机程序时实现上述任一项所述的方法。
本申请还公开了一种计算机可读存储介质,非易失性可读存储介质,其内存储有计算机程序,所述计算机程序在由处理器执行时实现上述任一项所述的方法。
本申请还公开了一种计算机程序产品,包括计算机可读代码,当所述计算机可读代码由计算机设备执行时,导致所述计算机设备执行上述任一项所述的方法。
与现有技术相比,本申请具有如下有益效果:
1.每一页中只有前64位(32位页相关信息+32位数据头)是固定不可写入擦除,除此之外均可以进行独立的写入或读取。因此,本申请能够擦除的最小位数为64位(当不存储数据单元而整页擦除时)或者65位(当存储数据单元而整页擦除或写入时)而不像现有技术中只能一次性的擦除4069位,减少了闪存的整页存储的次数。
2.本申请通过数据头中的数据单元有效标志的设置,只要当数据单元有效标志为无效(0)时,即可覆盖其对应的数据单元,而不需要真的将该数据单元删除之后才可以写入新的数据。如此,同样减少的数据的擦除次数。
附图说明
构成本申请的一部分的附图用来提供对本申请的进一步理解,使得本申请的其它特征、目的和有益效果变得更明显。本申请的示意性实施例附图及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据本申请一个实施例的闪存的数据结构区域划分示意图;
图2是根据本申请一个实施例的闪存的数据结构页相关信息示意图;
图3是根据本申请一个实施例的闪存的数据结构区域划分示意图;
图4是根据本申请一个实施例的计算机设备的示意图;以及
图5是根据本申请一个实施例的计算机可读存储介质的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
请参照图1-图3,本申请一实施例提供了一种闪存的数据结构,所述闪存包括n页数据,每页数据含有m位数据,每页所述m位数据中的前32位数据存储本页的相关信息,第33-64位存储数据单元的数据头;当m=64时,本页不存储数据单元的数据,当m>64时,本页从第65位开始存储数据单元的数据;
其中,n为自然数,m≥64。
例如,Flash的最小擦除单位是页(有些文档中称为扇区,为方便叙述,下文都称为页),所以本算法首先将要操作的Flash区域分为page-0、page-1、…、page-n共n页,如图1所示。
每页的前32bit用来存储本页的相关信息,如图2所示,其中包括:
occupy:1bit,页占用标志
full:1bit,页写满标志
reserve:10bit,保留
erase count:20bit,页擦除次数统计
每页的其余部分用来存储数据单元,每个数据单元分为两部分,第一部分为数据头,第二部分为数据,数据头包含该数据单元的相关信息,如图3所示,其中包括:
used:1bit,数据单元占用标志
valid:1bit,数据单元有效标志
reserve:6bit,保留
data_id:16bit,数据单元编号
data_len:8bit,数据单元长度
无论本页是否存储数据,均会存储数据头。
本申请一实施例中,所述本页的相关信息包括:
页占用标志,占位为1位;
页写满标志,占位为1位;
保留标志,占位为10位;
页擦除次数统计标志,占位为20位。
本申请一实施例中,所述数据头包括:
数据单元占用标志,占位为1位;
数据单元有效标志,占位为1位;
保留标志,占位为6位;
数据单元编号,占位为16位;
数据单元长度,占位为8位。
本申请一实施例中还提供了一种闪存的数据存储方法,当初次写入数据时,在闪存中存储页的前32位写入页相关信息;
在所述存储页的其它位写入数据单元;
当写入新数据时,读取已有所述数据单元的数据头;
判断已有有效数据单元的数据单元编号是否与新数据单元的数据单元编号重复,如果重复,改变所述已有有效数据单元的数据单元有效标志值为无效,写入新数据至所述有效数据单元,如果不重复,直接写入新数据至所述有效数据单元。
例如,根据上述的数据结构,初次写入数据,从page-0开始,首先写入该页的前32位页相关信息,紧接着写入数据单元;接下来每次写入新数据,都需要依次读取已有数据单元的数据头,并判断已有有效数据单元的data_id是否与新数据单元的data_id重复,如果重复,则需要先作废旧的数据单元(valid=0),然后在新的区域写入同一data_id的新数据,否则直接在新区域写入新数据。
如果写入失败,则说明该页空闲区域已不足,此时需要进行换页操作,在换页之前,需要对该页的尾部使用空数据(0xFF)单元进行填充,用以保证该页写满,之后进行换页操作,写入page-1的前32位页相关信息,紧接着写入新的数据单元,以此类推。
如果page-(n-1)也已经写满,则需要进行数据单元的转移操作,该操作将在下文进行详述。
本申请一实施例中还提供了,一种闪存的数据读取方法,根据给定的数据单元编号依次读取已有数据单元的数据头,将读取到的数据单元有效标志值为有效的数据的数据单元编号与给定的数据单元编号进行比较,如果相同,则读取该数据头对应的数据内容。
例如,根据上述的数据结构和存储方法,读取操作相对于写入操作来说简单得多,根据给定的data_id,依次读取已有数据单元的数据头,将读取到的有效数据(valid=1)的data_id与给定的data_id进行比较,如果相同,则读取该数据头对应的数据内容。
本申请一实施例还提供了一种闪存的数据转移方法,使用上述的数据读取方法;
当前一页写满数据,而当前页为空闲页时,轮询第一页的数据的单元,并依次读取第一页上的数据单元;
当所述第一页的数据单元有效时,转移所述第一页的数据单元至所述当前页上;当所述第一页的数据单元无效,则忽略;
当所述第一页上的数据单元轮询结束时,则擦除所述第一页,且页擦除次数加1,页占用标志为无效;
轮询第二页的数据的单元,并依次读取第二页上的数据单元;
当所述第二页的数据单元有效时,转移所述第二页的数据单元至所述第一页上;当所述第二页的数据单元无效,则忽略;
当所述第二页上的数据单元轮询结束时,则擦除所述第二页,且页擦除次数加1,页占用标志为无效;
依次移动所有页的数据至其前一页上,直至当前页。
例如,数据转移的前提条件是page-(n-1)写满,此时只有page-n一块空闲页。首先对page-0上的数据单元进行轮询,依次读取page-0上的数据单元,如果数据单元有效,则转移到page-n上,如果数据单元无效,则忽略。当page-0上的数据单元轮询结束,则擦除page-0,页擦除次数加1,页占用标志无效。
此后,page-n→page-(n-1),…,page-2→page-1,page-1→page-0,page-0→page-n,重复上述过程。
本申请中的,相关信息和数据头中的数据所对应的位数并不以本申请中所列举所占的位数为限。上述实施例中的相关信息和数据头中的数据类型和所占位数仅用于举例说明,并不能限定本技术方案所涵盖的范围。另外,在数据转移时,并不一定从页面的头部开始轮询,也可以从尾部开始轮询。当从尾部开始轮询时,其转移方法与从头部轮询类似,在此不再赘述。
与现有技术相比本申请具有如下有益效果:
1.每一页中只有前64位(32位页相关信息+32位数据头)是固定不可写入擦除,除此之外均可以进行独立的写入或读取。因此,本申请能够擦除的最小位数为64位(当不存储数据单元而整页擦除时)或者65位(当存储数据单元而整页擦除或写入时)而不像现有技术中只能一次性的擦除4069位,减少了闪存的整页存储的次数。
2.本申请通过数据头中的数据单元有效标志的设置,只要当数据单元有效标志为无效(0)时,即可覆盖其对应的数据单元,而不需要真的将该数据单元删除之后才可以写入新的数据。如此,同样减少的数据的擦除次数。
请参照图4,本申请还提供了一种计算机设备,包括存储器、处理器和存储在所述存储器内并能由所述处理器运行的计算机程序,所述处理器执行所述计算机程序时实现上述任一项所述的方法。
请参照图5,一种计算机可读存储介质,非易失性可读存储介质,其内存储有计算机程序,所述计算机程序在由处理器执行时实现上述任一项所述的方法。
一种计算机程序产品,包括计算机可读代码,当所述计算机可读代码由计算机设备执行时,导致所述计算机设备执行上述任一项所述的方法。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (4)
1. 一种闪存的数据转移方法,其特征在于,所述闪存包括n页数据,每页数据含有m位数据,每页所述m位数据中的前32位数据存储本页的相关信息,第33-64位存储数据单元的数据头;当m=64时,本页不存储数据单元的数据,当m>64 时,本页从第65位开始存储数据单元的数据;
其中,n为自然数,m≥64;
所述本页的相关信息包括:
页占用标志,占位为1位;
页写满标志,占位为1位;
保留标志,占位为10位;
页擦除次数统计标志,占位为20位;
所述数据头包括:
数据单元占用标志,占位为1位;
数据单元有效标志,占位为1位;
保留标志,占位为6位;
数据单元编号,占位为16位;
数据单元长度,占位为8位;
所述方法包括:
当初次写入数据时,在闪存中存储页的前32位写入页相关信息;
在所述存储页的其它位写入数据单元;
当写入新数据时,读取已有所述数据单元的数据头;
判断已有有效数据单元的数据单元编号是否与新数据单元的数据单元编号重复,如果重复,改变所述已有有效数据单元的数据单元有效标志值为无效,写入新数据至所述有效数据单元,如果不重复,直接写入新数据至所述有效数据单元;
根据给定的数据单元编号依次读取已有数据单元的数据头,将读取到的数据单元有效标志值为有效的数据的数据单元编号与给定的数据单元编号进行比较,如果相同,则读取该数据头对应的数据内容;
当前一页写满数据,而当前页为空闲页时,轮询第一页的数据的单元,并依次读取第一页上的数据单元;
当所述第一页的数据单元有效时,转移所述第一页的数据单元至所述当前页上;当所述第一页的数据单元无效,则忽略;
当所述第一页上的数据单元轮询结束时,则擦除所述第一页,且页擦除次数加1,页占用标志为无效;
轮询第二页的数据的单元,并依次读取第二页上的数据单元;
当所述第二页的数据单元有效时,转移所述第二页的数据单元至所述第一页上;当所述第二页的数据单元无效,则忽略;
当所述第二页上的数据单元轮询结束时,则擦除所述第二页,且页擦除次数加1,页占用标志为无效;
依次移动所有页的数据至其前一页上,直至当前页。
2.根据权利要求1所述的闪存的数据转移方法,其特征在于,当写入新数据失败时,使用空数据单元填充所述有效数据单元的尾部;
写入所述新数据至下一存储页;
当写入所述新数据至下一存储页时,在所述下一存储页的前32位写入页相关信息,在所述下一存储页的其它位写入所述新数据。
3.一种计算机设备,包括存储器、处理器和存储在所述存储器内并能由所述处理器运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1或2所述的方法。
4.一种计算机可读存储介质,非易失性可读存储介质,其内存储有计算机程序,其特征在于,所述计算机程序在由处理器执行时实现如权利要求1或2所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010933886.0A CN112162933B (zh) | 2020-09-08 | 2020-09-08 | 一种闪存的数据结构、存储方法、读取方法及转移方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010933886.0A CN112162933B (zh) | 2020-09-08 | 2020-09-08 | 一种闪存的数据结构、存储方法、读取方法及转移方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112162933A CN112162933A (zh) | 2021-01-01 |
CN112162933B true CN112162933B (zh) | 2023-07-21 |
Family
ID=73859238
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010933886.0A Active CN112162933B (zh) | 2020-09-08 | 2020-09-08 | 一种闪存的数据结构、存储方法、读取方法及转移方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112162933B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1805049A (zh) * | 2005-11-22 | 2006-07-19 | 武汉国光通信有限公司 | 一种嵌入式系统中非易失性存储器的数据存取方法 |
CN101060014A (zh) * | 2007-05-08 | 2007-10-24 | 北京中星微电子有限公司 | 一种探测闪存物理参数的方法及装置 |
CN104615546A (zh) * | 2015-02-13 | 2015-05-13 | 小米科技有限责任公司 | 文件数据管理方法及装置 |
-
2020
- 2020-09-08 CN CN202010933886.0A patent/CN112162933B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1805049A (zh) * | 2005-11-22 | 2006-07-19 | 武汉国光通信有限公司 | 一种嵌入式系统中非易失性存储器的数据存取方法 |
CN101060014A (zh) * | 2007-05-08 | 2007-10-24 | 北京中星微电子有限公司 | 一种探测闪存物理参数的方法及装置 |
CN104615546A (zh) * | 2015-02-13 | 2015-05-13 | 小米科技有限责任公司 | 文件数据管理方法及装置 |
Non-Patent Citations (1)
Title |
---|
孙弋主编.扩展位.《ARM-Linux嵌入式系统开发基础》.2008, * |
Also Published As
Publication number | Publication date |
---|---|
CN112162933A (zh) | 2021-01-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113138713B (zh) | 存储器系统 | |
US8041884B2 (en) | Controller for non-volatile memories and methods of operating the memory controller | |
CN108710578B (zh) | 基于闪存的数据存储方法和装置 | |
US10120615B2 (en) | Memory management method and storage controller using the same | |
US7409490B2 (en) | Method of flash memory management | |
US6477616B1 (en) | Storage device, storage system, memory management method, recording medium, and computer data signal | |
US7725646B2 (en) | Method of using a flash memory for a circular buffer | |
US6034897A (en) | Space management for managing high capacity nonvolatile memory | |
US5953737A (en) | Method and apparatus for performing erase operations transparent to a solid state storage system | |
US7680977B2 (en) | Page and block management algorithm for NAND flash | |
US6742078B1 (en) | Management, data link structure and calculating method for flash memory | |
US11182105B2 (en) | Storage devices, storage systems including storage devices, and methods of accessing storage devices | |
WO2000060605A1 (en) | Space management for managing high capacity nonvolatile memory | |
US8140737B2 (en) | Method for enhancing life cycle of memory | |
CN107045423B (zh) | 存储器装置及其数据存取方法 | |
US9489300B2 (en) | Data encoding for non-volatile memory | |
CN112463020A (zh) | 基于Flash的数据存取方法、装置及设备 | |
US9223688B2 (en) | Data storing method and memory controller and memory storage device using the same | |
JPH07302175A (ja) | 半導体ディスク装置 | |
CN112162933B (zh) | 一种闪存的数据结构、存储方法、读取方法及转移方法 | |
CN108376121B (zh) | 一种Flash存储器的数据存储方法 | |
US20100306455A1 (en) | Method for managing a plurality of blocks of a flash memory, and associated memory device and controller thereof | |
US20090055574A1 (en) | NAND Flash Memory Device And Related Method Thereof | |
US9405674B2 (en) | Address generating circuit and address generating method | |
CN108461105B (zh) | 管理半导体存储器的方法、相应的接口、存储器和设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |