CN100555246C - 一种在闪存上存取数据的系统及方法 - Google Patents

一种在闪存上存取数据的系统及方法 Download PDF

Info

Publication number
CN100555246C
CN100555246C CNB2007101615249A CN200710161524A CN100555246C CN 100555246 C CN100555246 C CN 100555246C CN B2007101615249 A CNB2007101615249 A CN B2007101615249A CN 200710161524 A CN200710161524 A CN 200710161524A CN 100555246 C CN100555246 C CN 100555246C
Authority
CN
China
Prior art keywords
piece
page
index
copy
storage block
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.)
Expired - Fee Related
Application number
CNB2007101615249A
Other languages
English (en)
Other versions
CN101127004A (zh
Inventor
朱晓斌
侯建文
廖粤东
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing ZTE New Software Co Ltd
Original Assignee
ZTE Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by ZTE Corp filed Critical ZTE Corp
Priority to CNB2007101615249A priority Critical patent/CN100555246C/zh
Publication of CN101127004A publication Critical patent/CN101127004A/zh
Application granted granted Critical
Publication of CN100555246C publication Critical patent/CN100555246C/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

一种在闪存上存取数据的方法,包括步骤:a)划分闪存,将闪存分成块,每块在首页的一字节存储有关块擦除次数信息的磨损计数;再将块分成页,每页在起始字节存储页占用标志;为顺序存储的每一数据副本安置一经过校验的有效索引,以存储副本的页地址及长度信息;b)初始化,据块磨损计数确定头、尾块的位置,再据头或尾块的磨损计数确定系统磨损计数;c)在闪存上写入或读取数据,据尾块状况分配空页,并将副本与索引一起顺序写入该页中;或据尾块位置找到有效索引,并据此读取副本。本方法适于NOR FLASH和NAND FLASH,通过磨损计数实现磨损平衡,并通过对副本索引的校验实现掉电保护。

Description

一种在闪存上存取数据的系统及方法
技术领域
本发明涉及数字信息存储领域,尤其涉及一种在闪存上存取数据的系统及方法。
背景技术
随着信息技术的发展,内置处理器的智能设备越来越多,半导体技术的进步又使闪存(FLASH)的价格不断降低,而智能设备使用FLASH来存储数据则成为一种自然而然的趋势。
目前的FLASH主要分为NOR FLASH和NAND FLASH两种,两者都以块为单位进行擦除,但NOR FLASH能够以字节为单位进行写入,且其内的数据可以直接读取;NAND FLASH则将一块分为多个页并以页为单位进行写入,对数据的任何访问都必须通过专门的接口。由于FLASH这些特性,在其上存储数据需要进行有针对性的设计。
FLASH块的擦除寿命有限,使用时必须保证各块的擦除次数一致或比较接近,这称之为磨损平衡;对于很多智能设备来说,软件运行时的意外掉电是很正常的,有必要实现对意外掉电时的数据保护;另外,很多智能设备的处理器能力、存储器容量等资源有限,还要求代码(FLASH的管理软件或文件系统的程序代码)尺寸(即长度)能够尽量小一点。
JFFS(The Journalling Flash File System:日志FLASH文件系统)是一个面向FLASH设计的文件系统,具备通用文件系统的所有功能,但其采用日志的形式存储数据,随着修改次数的增长,加载时间会越来越长,影响整个设备的启动速度。YAFFS(Yet Another Flash File System:另一种FLASH文件系统)具有和JFFS同样的功能,但其专门针对NAND FLASH设计,无法应用于NOR FLASH。除了以上的问题之外,这些文件系统为了实现通用文件系统的所有功能,软件的代码尺寸也非常大,启动速度较慢,无法应用在一些对功能要求不高但要求代码体积高度紧凑的场合。
中国专利CN200610069707“一种对NAND FLASH存储器进行虚拟空间管理的方法”采用映射表,把虚拟的连续可用的逻辑块映射到非连续的可用物理块上,并将映射表存储到虚拟空间管理模块中,可以将不相关的各个程序模块的坏块处理部分省略,简化了上层应用的开发。该专利重点在于FLASH坏块的管理,未能对可用逻辑块的磨损平衡以及意外掉电时的数据保护给出解决方案。
中国专利CN200610104289“一种闪存中的FLASH文件的管理方法及系统”根据文件的属性建立对应的索引,为每个文件静态地在FLASH上分配存储空间,避免了文件修改时产生的FLASH空间碎片。该专利重点在于各文件在FLASH上的存储空间分配,未能对文件所使用的FLASH块的磨损平衡以及意外掉电时的数据保护给出解决方案。
中国专利CN01142240“FLASH存储文件管理方法”将FLASH划分为文件索引区和文件数据区,索引区保存各文件所使用的FLASH块的分配信息,而文件数据区则用于存储文件数据。该专利同样未对磨损平衡和掉电数据保护给出解决方案。
美国专利WO2007028026“FLASH DRIVE FAST WEAR LEVELING”采用磨损平衡表来存储与FLASH磨损平衡相关的信息,以便实现磨损平衡。该专利需要将磨损平衡表进行单独保存,而且也未涉及意外掉电时的数据保护。
美国专利US2006069847“Corruption tolerant method and system fordeploying and modifying data in flash memory”将文件内容封装成统一格式的数据结构存储到FLASH上,并通过一个原子操作来确定对文件的修改,能够在意外掉电时保证文件数据的完整性。该专利每次写入到FLASH上的数据长度是变化的,故无法在NAND FLASH上实施。
欧洲专利EP1351151A2“System and method for achieving uniform wearlevels in a flash memory device”循环使用各FLASH块,能够确保磨损平衡,但掉电保护功能需要对同一sector进行至少两次的写操作,故其掉电保护功能无法在NAND FLASH上实现。
总的来说,目前在FLASH上存储数据的解决方案中,FLASH文件系统实现复杂且体积庞大,不适用于一些要求不高的轻量级应用场合;而一些较为简单的实现方案又往往未实现磨损平衡和掉电时的数据保护。
发明内容
本发明所要解决的技术问题是提供一种在闪存上存取数据的系统及方法,能够克服现有技术在闪存上存取数据实现起来复杂庞大,或者功能不完整等缺点,本发明提供的系统及方法简单易行,通用于NOR FLASH和NANDFLASH;且同时具有磨损平衡和掉电保护功能。
为了解决上述技术问题,本发明提供的一种在闪存上存取数据的系统,包括分别与闪存连接的闪存结构划分模块和初始化模块,以及分别与初始化模块连接的数据写入模块和数据读取模块;其中:
闪存结构划分模块,用于将闪存划分为多个存储块,作为擦除操作的基本单位,再将存储块划分成多个存储页,作为每次写入操作的基本单位,并在其中第一存储页内的一个固定位置保存存储块的磨损计数;以及在存储页起始的一或多个存储单元内保存存储页的占用标志;为顺序存储在闪存上的每一个数据副本安置一索引,用以存储副本占用的页地址以及副本的长度信息;
初始化模块,用于对闪存进行初始化操作,即根据闪存上存储块的磨损计数确定头块和尾块的位置,再根据头块或尾块的磨损计数确定系统磨损计数;具体地:
当闪存不存在空块,以尾块的磨损计数为系统磨损计数;其中:当存在两个相邻存储块磨损计数变小的分界处时,该分界处前面的存储块为尾块,该分界处后面的存储块为头块;当不存在分界处,则以最后一个存储块为尾块,以第一个存储块为头块;
当闪存存在空块,将闪存的第一个空块作为尾块,若尾块后的存储块仍为空块,则闪存的第一个存储块为头块,系统磨损计数为1;若尾块后的存储块不为空块:当空块不是最后一个存储块,则空块后的存储块为头块,该头块的磨损计数加1即为系统磨损计数;当空块是最后一个存储块,则第一个存储块为头块,该头块的磨损计数即为系统磨损计数;
数据写入模块,用于根据闪存当前尾块状况为数据副本分配空页,并将数据副本与索引一起顺序写入分配的所述空页中;分配空页即当尾块不是满块时,将尾页作为分配的空页;当尾块是满块时,申请分配一个空块,并将分配的空块中的第一页作为分配的空页;
数据读取模块,用于根据闪存当前尾块位置找到要读取的数据副本的索引,并根据索引中的信息读取数据副本。
进一步地,闪存结构划分模块采用空块顺序分配机制,即存储页在存储块内顺序分配,在存储块内所有存储页均已分配需要分配一个新的存储块时,存储块也采用顺序分配的方式;如果已经分配到最后一个存储块,则擦除第一存储块用于分配。
进一步地,数据写入模块进一步包括依次连接的副本分段写入模块、页分配模块及块分配模块,还包括与副本分段写入模块连接的副本索引生成及校验模块,其中:
副本分段写入模块与闪存连接,用于按照存储页的容量将数据副本内容切分成若干段,然后向页分配模块申请为每个段分配一个空页,将段中内容连同系统磨损计数或占用标志一起写入空页;并保存第一段首字节和最后一段尾字节所占用的页的地址信息;在副本索引生成及校验模块生成副本索引及其校验信息后,将副本索引及其校验信息写入又分配的一个空页中;
页分配模块,与初始化模块连接,用于为副本分段写入模块顺序分配空页,当尾块是满块时,向块分配模块申请分配空块,以用于分配空页;
块分配模块,与初始化模块连接,用于在页分配模块申请空块分配时,为其顺序分配一个存储块:即当尾块不是最后一个存储块,将其后的一个存储块作为分配的块;当尾块是所述最后一个存储块,则将第一个存储块作为分配的块,并将系统磨损计数加1;若分配的块是当前的头块,则将头块移动到分配的块的下一个存储块;最后将分配的块进行擦除后作为新的尾块分配出去;
副本索引生成及校验模块,用于根据副本分段写入模块保存的页地址信息以及副本的长度信息生成关于副本的索引,同时对副本的索引进行校验以形成有效索引,并据此生成校验信息,随同副本索引一起传给副本分段写入模块。
进一步地,数据读取模块进一步包括依次连接的索引搜索模块、索引读取模块以及副本读取模块,其中:
索引搜索模块,用于从尾块开始向头块搜索,遍历其中每个存储页,直至找到第一个有效索引为要读取的数据副本的索引;
索引读取模块,用于从有效索引中读取最新的数据副本的索引,获取副本首字节占用的页地址及所述副本的长度信息,或者获取所述副本首字节占用的页地址和其最后字节占用的页地址信息;
副本读取模块,与闪存连接,用于根据获取的索引中的信息,从对应的存储页中读取副本的内容。
进一步地,索引搜索模块如果一直搜索到头块都没有找到有效索引,则报告读取失败;或者,如果读取到的副本占用的第一个页地址超出了当前头块到尾块覆盖的范围,则报告读取失败。
为了解决上述技术问题,本发明提供的一种在闪存上存取数据的方法,包括如下步骤:
(a)划分闪存,确定数据结构,即
将闪存划分为多个存储块,作为每次擦除操作的基本单位;再将存储块划分成多个存储页,作为每次写入操作的基本单位,每块在第一存储页内的一个固定位置分配一或多个字节用于磨损计数,存储有关存储块擦除次数的信息;以及每一存储页使用起始的字节单元作为该页的占用标志,用以识别该页是否已被写入数据;
为顺序存储在闪存上的每一个数据副本安置一索引,用以存储副本占用的页地址以及副本的长度信息;
(b)系统初始化,即根据闪存上存储块的磨损计数确定头块和尾块的位置,再根据头块或尾块的磨损计数确定系统磨损计数;具体地:
当闪存不存在空块,以尾块的磨损计数为系统磨损计数;其中:当存在两个相邻存储块磨损计数变小的分界处时,该分界处前面的存储块为尾块,该分界处后面的存储块为头块;当不存在分界处,则以最后一个存储块为尾块,以第一个存储块为头块;
当闪存存在空块,将闪存的第一个空块作为尾块,若尾块后的存储块仍为空块,则闪存的第一个存储块为头块,系统磨损计数为1;若尾块后的存储块不为空块:当空块不是最后一个存储块,则空块后的存储块为头块,该头块的磨损计数加1即为系统磨损计数;当空块是最后一个存储块,则第一个存储块为头块,该头块的磨损计数即为系统磨损计数;
(c)在闪存上根据尾块进行数据副本的写入或读取操作,即根据尾块的状况分配空页,并将数据副本与索引一起顺序写入分配的空页中;分配空页即当尾块不是满块时,将尾页作为分配的空页;当尾块是满块时,申请分配一个空块,并将分配的空块中的第一存储页作为分配的空页;或者,根据尾块位置找到要读取的数据副本的索引,并根据该索引中的信息读取数据副本。
进一步地,步骤(a)划分闪存采用空块顺序分配机制,即存储页在存储块内顺序分配,在存储块内所有存储页均已分配需要分配一个新的存储块时,存储块也采用顺序分配的方式;如果已经分配到最后一个存储块,则擦除第一存储块用于分配。
进一步地,步骤(c)数据副本写入操作还包括如下步骤:
(c1)按照存储页的容量将数据副本内容切分成多个段,然后依次为每个段分配一个空页,并将段中内容连同系统磨损计数或占用标志一起写入空页,同时,保存第一段首字节和最后一段尾字节占用的页地址信息,或保存第一段首字节和副本的长度信息;
(c2)根据副本的首字节占用的页地址及副本的长度信息生成关于所述副本的索引,或根据副本的首字节占用的页地址及其最后字节占用的页地址信息生成关于副本的索引;同时,对索引进行的校验并生成相关的校验信息;
(c3)分配一个空页,并将索引及校验信息写入该空页,形成有效索引。
进一步地,在步骤(c1)前还包括步骤:根据有效索引读取数据副本内容并进行修改。
进一步地,初始化以搜索所述分界处为主,在搜索过程中遇到空块,则按闪存存在空块的情况处理;或者,初始化以搜索闪存的空块为主,在不存在空块的情况下搜索所述分界处;或者,初始化将搜索所述分界处和空块结合起来,遇到空块,则按闪存存在空块的情况处理,遇到所述分界处则按处理分界处的方式处理。
进一步地,步骤(c)分配一个空块的操作包括如下步骤:
(1)若尾块不是最后一个存储块,则将其后的一个存储块作为分配的块;若尾块是最后一个存储块,则将第一个存储块作为分配的块,并将系统磨损计数加1;
(2)将分配的块进行擦除后作为新的尾块分配出去。
进一步地,步骤(1)还包括步骤:若分配的块是当前的头块,则将头块移动到分配的块的下一个存储块。
进一步地,步骤(c)数据副本读取操作还包括如下步骤:
(c1)从尾块开始向头块搜索,遍历其中的每个存储页,直到找到第一个通过校验的有效索引;
(c2)从有效索引中读取最新的索引,获取副本首字节占用的页地址及副本的长度信息,或者获取副本首字节占用的页地址和其最后字节占用的页地址信息;
(c3)根据读取的索引中的信息从对应的存储页中读取所述数据副本的内容。
进一步地,步骤(c1)从尾块的最后一页开始,每次向前移动一页逆序向头块的方向搜索,直到找到一已被占用的存储页,并依据存储页的索引标志值判断存储页的内容为索引,且依据该索引的校验信息判断其为有效索引;如果一直搜索到头块都没有找到有效索引,则报告读取失败;或者,如果读取到的所述副本占用的第一个页地址超出了当前头块到尾块覆盖的范围,则报告读取失败。
进一步地,步骤(c3)从副本占用的第一个页开始依次向尾块的方向读取各存储页,剥离占用标志和索引标志之后,把剩余的字节进行拼装而恢复副本内容,最后一页参与拼装的字节数由有效索引中保存的副本的长度或副本的最后字节占用页地址计算得到。
进一步地,将存储块第一存储页的起始两个字节用于存储磨损计数,采用各位取反再写入的存储方式;将存储页的起始两个字节用于占用标志,只要其中内容不为全1,即表明该页已被占用;磨损计数同时作为第一存储页的占用标志;存储页的第三个字节作为索引的标志值,其中,以第一值表示该页存储的是一条索引,以第二值表示该页存储的是副本内容;数据副本的内容或索引从每个存储页的第四个字节开始存储。
进一步地,对索引的校验采用32位循环冗余校验机制。
用本发明提供的系统及方法进行闪存数据存储,原理简单,采用块、页分层数据结构并内置块磨损计数的数据存储方法可通用于NOR FLASH和NAND FLASH;同时还提供磨损平衡和掉电保护功能,即采用顺序分配页、块及磨损计数来实现FLASH的磨损平衡,采用副本索引及其校验机制提供掉电保护功。本发明与现有技术相比,能够节省开发时间,降低产品成本,提高产品性能,非常适合于智能设备中需要频繁修改的少量数据的存储。
附图说明
图1a是本发明提供的在FLASH上存储数据的系统结构框图;
图1b是本发明对FLASH划块分页所形成的层次结构图;
图2给出了本发明头块、尾块及其磨损计数与各存储块之间的关系;
图3给出了本发明数据副本在页中存储时的映射关系;
图4是本发明确定头块、尾块和系统磨损计数的流程图;
图5是本发明分配空页的流程图。
具体实施方式
本发明所述在闪存(FLASH)上存取数据的方法基于这样一种思路:
(1)采用块、页分层数据结构并内置块磨损计数:将用于数据存储的FLASH划分为若干个“存储块”,作为每次擦除操作的基本单位;再将存储块进一步划分成若干个“存储页”,作为每次写入操作的基本单位。其中,每块在第一页内分配若干字节用于“磨损计数”,存储有关该块擦除次数的信息;每页也要使用起始的若干字节作为该页的“占用标志”,用以识别该页是否已被写入数据。
(2)采用空块顺序分配机制:页在块内顺序分配,如果块内所有页均已分配,则需要分配一个新块,块也采用顺序分配的方式;如果已经分配到最后一块,则擦除第一块用于分配。
(3)采用副本索引及其校验机制:数据以副本的形式保存在FLASH上,若对数据进行了任何修改,须将所有数据重新保存到一个新的副本中,各个副本在FLASH上顺序存储。每个副本均有一个对应的索引,含有该副本占用的页地址等相关信息。索引写入时采取校验机制以便以后读取时验证该索引的有效性。
读取数据时,先根据副本的有效索引,获取副本长度及其占用的页地址等信息,然后根据该获取的信息从对应的页中读取副本的内容。
写入数据时,按照页的容量将副本内容切分成若干段,然后依次为每段分配一个空页并将段中内容写入该页,同时分别保存第一和最后一段所占用页的地址信息;根据该页地址信息以及副本的长度等信息生成关于该副本的索引,同时根据所采取的校验机制生成关于该索引的校验信息;最后,分配一个空页,并将索引及其校验信息写入该页。
本发明通过磨损计数实现FLASH的磨损平衡,即磨损计数可以在任何情况下(包括异常掉电)定位头块及尾块,而空块的分配机制可以保证各块被循环顺序擦除,从而保证各块擦除次数大致相等。另外,本发明通过副本索引及其校验机制提供针对数据的掉电保护功能,即在副本写入过程中掉电,由于没有写入索引;或在副本索引写入过程中掉电,由于该索引无法通过数据校验信息,均会使得对应的副本不会被读取。
以下结合具体实施例和附图,详细阐述本发明上述技术方案。
在详细叙述本发明技术方案之前,先来定义几个技术术语:
头块:表示FLASH上内容最旧的存储块;
尾块:表示FLASH上内容最新或可为下次写入操作提供存储页的存储块;
块回绕:表示FLASH上从头块顺序向后操作完最后一个存储块后,又转到第一个存储块上进行操作的过程,以及上述过程的逆过程;
空块:表示擦除FLASH后尚未写入任何内容的存储块;
空页:表示擦除FLASH后尚未写入任何内容的存储页;
满块:表示FLASH上不包含空页的存储块;
尾页:表示FLASH上尾块内的第一个空页;
磨损计数:表示有关存储块被擦除次数的信息,用若干字节存储;
系统磨损计数:表示当前分配的存储块(尾块)的磨损计数;
占用标志:表示存储页是否已被写入数据的信息,用若干字节存储;
副本:表示在FLASH上保存数据的形式;
对FLASH上数据的任何修改都必须在FLASH上存储为一个新的副本;
副本索引:由副本首字节占用的页地址和副本的长度(以字节为单位)组成;或者由副本首字节占用的页地址及副本最后字节占用的页地址组成;
索引写入时必须对索引进行校验,并据此生成关于该索引的校验信息,以便以后读取索引时验证该索引的有效性。
有效索引:能够正确通过数据校验的索引。
如图1a所示,本发明提供的在FLASH上存储数据的系统100(图中虚框所示)包括:分别与闪存连接的闪存结构划分模块110和初始化模块120,以及分别与初始化模块120连接的数据读取模块130和数据写入模块140。其中:
闪存结构划分模块110,用于将FLASH划分为若干个存储块,作为每次擦除操作的基本单位,并在其第一页内保存磨损计数,如图1b所示;将存储块再划分成若干个存储页,作为每次写入操作的基本单位,并在其起始的若干个存储单元内保存占用标志;
图1b给出了对本发明FLASH划分块和页所形成的层次结构。整个用于数据存储的FLASH 101被划分为若干个存储块103,并在其第一页内保存磨损计数102;每个存储块又被进一步划分为若干个存储页105,且在其起始的若干个存储单元内保存占用标志104。
初始化模块120,用于在FLASH上电时对其进行初始化操作,确定FLASH的头块、尾块及系统磨损计数;即根据存储块上的磨损计数来找到头块和尾块的位置,再根据头块或尾块的磨损计数确定系统磨损计数。
本发明头块、尾块在FLASH中的位置以及相应的磨损计数请参见图2。第一个存储块201及随后的若干个存储块202直到第M块203的磨损计数均为N;第M+1块204及随后的若干个存储块205直到最后一个存储块206的磨损计数均为N-1;其中,第M块203为尾块,第M+1块204为头块,第一个存储块201和最后一个存储块206之间的双向箭头207表示头块和尾块之间的块回绕。图2给出的是通常情况下的头块和尾块的分布,在FLASH刚开始使用或异常掉电时,情形将会变得复杂。
因此,初始化模块120需要在FLASH一上电时,能够针对各种情况(如后面表1中所示)准确定位FLASH的头块、尾块及系统磨损计数,以便为后续顺序分配存储页及存储块而做充分准备。
本发明提出一种但不限于这种初始化模块120的实现方式:
将FLASH的第一个空块作为尾块;若该第一个空块后的存储块不为空块(即只存在一个空块),分两种情况:当该空块不是最后一个存储块,则该空块后的存储块为头块,该头块的磨损计数加1即为系统磨损计数;而当该空块是最后一个存储块,则第一个存储块为头块(发生块回绕),该头块的磨损计数即为系统磨损计数;若该第一个空块后的存储块仍为空块(至少存在两个空块),则第一个存储块为头块,系统磨损计数为1;
或者,若FLASH不存在空块,以尾块的磨损计数为系统磨损计数;当存在两个相邻存储块磨损计数变小的分界处时,该分界处前面的存储块为尾块,该分界处后面的存储块为头块;若不存在该分界处,则以最后一个存储块为尾块,第一个存储块为头块。
数据写入模块130,用于根据FLASH当前尾块将数据副本与副本索引一起写入存储块中的存储页;该模块进一步包括依次连接的副本分段写入模块131、页分配模块132及块分配模块133,还包括与副本分段写入模块131连接的副本索引生成及校验模块134,其中:
副本分段写入模块131与FLASH连接,用于按照FLASH存储页的容量将数据副本内容切分成若干段,然后向页分配模块132申请为每个段分配一个空页,并将段中副本内容连同系统磨损计数或占用标志一起写入该空页,同时分别保存第一段和最后一段所占用的页的地址信息;在副本索引生成及校验模块134生成副本索引及其校验信息后,又为其分配一个空页而将其写入该页;
本发明数据以副本的形式保存在FLASH上,如果对数据进行了任何修改(不管是修改一部分还是全部),都必须将所有数据重新保存到一个新的副本中,各个副本在FLASH上顺序存储。每个副本均有一个对应的索引,其中含有该副本占用的页地址等相关信息,索引单独占用一页,紧接着其指向的副本存储,并通过页内的标志加以区分,索引写入时必须采取校验机制,以便以后读取时验证该索引的有效性。
页分配模块132,与初始化模块120连接,用于为副本分段写入模块131顺序分配空页;当尾块不是满块时,将尾页作为分配的结果;当尾块是满块时,向块分配模块133申请分配一个空块,并将该空块中的第一页作为分配结果;
本发明页作为存储空间的基本分配单元在块内顺序分配,如果块内所有页均已分配,则需要分配一个新块,块也采用顺序分配的方式,如果已经分配到最后一块,则擦除第一块用于分配。
块分配模块133,与初始化模块120连接,用于在页分配模块132申请空块时,为其顺序分配一个空块;
当尾块不是最后一个存储块,将其后的一个块作为分配的结果;当尾块是最后一个存储块,则将第一个存储块作为分配的结果,并将系统磨损计数加1;若分配的块是当前的头块,则将头块移动到分配的块的下一个块(可能发生块回绕);最后将分配的块进行擦除后作为新的尾块分配出去。
副本索引生成及校验模块134,用于根据副本分段写入模块131保存的页地址信息以及副本的长度等信息生成关于该副本的索引,同时对该索引进行校验,譬如采用采用32位循环冗余校验,并据此生成关于该索引的校验信息,随同副本索引一起传给副本分段写入模块131。
数据读取模块140,用于从FLASH上读取存取的数据副本;该模块进一步包括依次连接的:
索引搜索模块141,用于从初始化模块120确定的尾块开始向头块搜索(可能发生块回绕),遍历其中每个存储页,直至找到第一个通过校验的有效索引;
索引读取模块142,用于从有效索引中读取最新的数据副本的索引,获取副本长度及其占用的页地址等信息;
副本读取模块143,与FLASH连接,用于根据读取的副本首字节占用的页地址和副本长度信息从对应的存储页中读取副本的内容;或者根据读取的副本页地址(包括首字节占用和最后字节占用)信息读取副本内容。
本发明在闪存上存储数据的方法步骤如下:
步骤1:划分FLASH,确定数据结构,包括如下子步骤:
将用于数据存储的FLASH划分为若干个“存储块”,作为每次擦除操作的基本单位;每块在第一页内分配若干字节用于“磨损计数”,存储有关该块擦除次数的信息;再将存储块进一步划分成若干个“存储页”,作为每次写入操作的基本单位;每页也要使用起始的若干字节作为该页的“占用标志”用以识别该页是否已被写入数据;磨损计数也可同时作为页的占用标志;
数据以副本的形式保存在FLASH上,各个副本在FLASH上顺序存储。每个副本均有一个对应的索引,其中含有该副本占用的页地址以及副本的长度等相关信息,索引单独占用一页,紧接着其指向的副本存储,并通过页内的标志加以区分,索引写入时必须采取校验机制,以便以后读取时验证该索引的有效性;
图3给出了本发明数据副本在页中存储时的映射关系,图中的副本A和副本B分别代表了两种不同的映射模式:
副本A在FLASH中是作为一个整体顺序连续存储的,其占据了从第L页305到第M+1页308之间的若干页,其中第L页305存储其第1页,第L+1页306存储第2页......第M页307存储最后1页,而第M+1页308则存储了副本A的索引;
副本B则被分成两个部分存储在FLASH中,从第N页309到最后1页311存储了副本B的前一部分,其中第N页309存储副本B的第1页,第N+1页存储第2页......最后一页311存储第H页。而从第1页301直到第K+1页304则存储了后一部分,其中第1页301存储副本B的第H+1页,第2页302存储第H+2页......第K页303存储最后1页,第K+1页304存储副本B的索引,显然,副本B在存储过程中经历了块回绕。
譬如本实施例选用NAND FLASH作为存储介质,直接按照其物理块的长度来划分存储块,而存储页也是按照其物理页的长度来划分,即存储块和存储页与FLASH物理上的块和页是一致的。
将每块起始的两个字节作为磨损计数,将其定义为当前向该块写入数据的次数,正常情况下磨损计数就是该块的擦除次数,而在异常掉电等情况下,则可能多次擦除同一个块然后才写入数据。磨损计数的存储采用各位取反再写入FLASH的方式,这样对于空块来说,其读取到的磨损计数将为零值,据此可以识别出空块。
将每页起始的两个字节作为占用标志,只要其中内容不为全1,即表明该页已被占用。根据磨损计数的定义及其存储方式,其可以同时充当块内第一页的占用标志。
副本的索引由该副本的长度(以字节为单位)、其首字节占用的页地址、其最后字节占用的页地址组成,使用每页的第三个字节来作为区分副本索引和内容的标志即索引标志,零值表示该页存储的是一条索引,而非零值则表示存储的是副本内容的一部分,索引的校验机制采用32位循环冗余校验即CRC32。由于页的前两个字节已经用于占用标志,第三个字节用于索引标志,故副本的内容和索引都只能从每页的第四个字节开始存储。
相对于副本的长度来说,FLASH的容量必须足够大,以使得擦除某块用于再分配时,该块存储的副本已经过时,在其后的块中已经存储了较新的完整副本。
步骤2:系统初始化,确定FLASH的头块、尾块及系统磨损计数,即根据存储块的磨损计数搜索到头块和尾块的位置,再根据头块或尾块的磨损计数确定系统磨损计数;
由于本发明通过将存储页、存储块顺序分配和磨损计数来保持FLASH的磨损平衡,因此,本发明的步骤2通过下述子步骤但不限于这样的子步骤,来实现FLASH在包括意外掉电的任何情况下的上电初始化,从而为写入数据副本时顺序分配存储页、存储块以及读出数据副本做好准备:
若FLASH存在空块,将FLASH的第一个空块作为尾块;若该第一个空块后的存储块不为空块(即只存在一个空块),分两种情况:当该空块不是最后一个存储块,则该空块后的存储块为头块,该头块的磨损计数加1即为系统磨损计数;而当该空块是最后一个存储块,则第一个存储块为头块(发生块回绕),该头块的磨损计数即为系统磨损计数;若该第一个空块后的存储块仍为空块(即至少存在两个空块),则第一个存储块为头块,系统磨损计数为1;
若FLASH不存在空块,以尾块的磨损计数为系统磨损计数;当存在两个相邻存储块磨损计数变小的分界处时,该分界处前面的存储块为尾块,该分界处后面的存储块为头块;若不存在该分界处,则以最后一个存储块为尾块,第一个存储块为头块。
对于以上初始化子步骤,可以有多种实施方式:
(a)一种是以搜索两个相邻存储块磨损计数变小的分界处为主,在搜索过程中遇到空块,则按上述空块处理方式进行处理,譬如下列子步骤:
(1)从第一个存储块开始依次向后搜寻,定位到前后两个相邻块磨损计数变小的分界处,则该分界处前面的块为尾块,后面的块为头块,尾块的磨损计数作为系统磨损计数;
(2)如果在子步骤(1)的搜寻过程中遇到了一个空块(空块的磨损计数将是一个特殊值,譬如0xFF),则该空块为尾块,后一块(可能发生块回绕)为头块,如果该空块是最后一个存储块,就直接将头块的磨损计数作为系统磨损计数,否则将头块的磨损计数加上1作为系统磨损计数;
(3)如果在子步骤(1)中发现了连续两个以上的空块,则第一个存储块为头块,第一个空块为尾块,如果头块就是空块,则设置系统磨损计数为1,否则取头块的磨损计数作为系统磨损计数。
这样处理是因为实际搜索到空块的概率是很少的:一种情况是设备开始使用还没发生过块回绕,再一种情况就是刚好在擦完空块后掉电。因而,以搜索分界处为主进行处理会使系统初始化的效率较高。
(b)另一种是先搜索FLASH上有无空块,然后在不存在空块的情况下再搜索是否存在前后两个相邻块磨损计数变小的分界处。因为空块的磨损计数是一个特殊值(譬如为0xFF,0x00取反获得),故这种搜索动作比较简单,在设备开始使用还没发生过块回绕以及发生过刚好在擦除完空块后掉电的情况,采用这种方式速度比较快。但当FLASH上不存在空块(已发生过块回绕且未发生过擦除完空块后掉电的情况)时,则这种方式可能会导致每回要遍历两次才能完成初始化操作。
(c)再一种就是将上述两种方式结合使用,譬如图4中所示的流程,该流程将在后面应用实例中详述。或者,在发生块回绕之前(用一标志位表示)以方式b为主,而在发生块回绕之后(清除该标志位)以方式a为主。这样结合两种方式的优势,均会使得系统的初始化效率更优。
本发明提供了上述初始化的多种实施方式,但不限于这些方式,任何体现本发明实质精神的实施方式,均在本发明保护范围之内。
以下结合一个具体应用实例来讲述上述初始化操作的实施。
在FLASH刚开始使用或异常掉电时,情况会与正常使用有所不同。在表1中,根据磨损计数的定义及其存储方式,再考虑到操作过程中的异常掉电,将各块的磨损计数取值组合划分成如下几种模式:
表1(表中的N为大于1的自然数)
Figure C20071016152400241
Figure C20071016152400251
表1中所示的各块的磨损计数的几种模式,可以根据图4所示的确定头块、尾块和系统磨损计数的流程进行处理,它是对上述初始化操作方式c的具体化,该流程包括如下步骤:
401:开始;
402:将第一个块作为当前块,开始遍历;
403:判断当前块是否为空块,是则转404,否则转419;
404:判断当前块是否为最后一块,是则转405,否则转406;
405:将当前块作为尾块,第一块为头块,头块磨损计数加1作为系统磨损计数,转414;
406:判断后一块是否也是空块,是则转407,否则转408;
407:将当前块作为尾块,第一块为头块,设置系统磨损计数为1,转414;
408:将当前块作为尾块,后一块为头块,头块磨损计数加1作为系统磨损计数,转414;
409:判断当前块是否为第1块且磨损计数比前一块小,是则转410,否则转411;
410:将当前块为头块,前一块为尾块,尾块的磨损计数作为系统磨损计数,转414;
411:判断当前块是否为最后一块,是则转413,否则转412;
412:将下一块作为新的当前块,转403;
413:将第一块作为头块,当前块为尾块,尾块的磨损计数作为系统磨损计数;
414:结束。
步骤3:写入、读取数据的实际操作
本发明写入数据可细分为如下子步骤:
(1)按照页的容量将副本内容切分成若干段,然后依次为每个段分配一个空页并将段内容写入该页,同时分别保存第一个和最后一个段所占用的页的地址信息;
(2)根据子步骤(1)所保存的页地址信息以及副本的长度等信息生成关于该副本的索引,同时根据所采取的校验机制生成关于该索引的校验信息;
(3)分配一个空页,并将索引极其校验信息写入该页。
注意:在上述子步骤(1)和(3)中,“写入该页”时要将系统磨损计数和占用标志一起写入。
由于本发明的页作为存储空间的基本分配单元在块内顺序分配,如果块内所有页均已分配,则需要分配一个新块,块也采用顺序分配的方式,如果已经分配到最后一块,则擦除第一块用于分配。因此,需按下列规则分配空页或空块。
前述子步骤1和3申,“分配一个空页”包括的子步骤如下:
(1)如果尾块不是满块,则将尾页作为分配的结果;
(2)如果尾块是满块,则分配一个空块,将该块的第一个页作为分配的结果。
图5为本发明分配空页的流程图,它是对上述子步骤的具体化,图中流程包括如下步骤:
501:开始;
502:判断尾块是否已被写满,是则转504,否则转503;
503:将尾页作为分配结果,并转510;
504:判断尾块是否是最后一个存储块,是则转506,否则转505;
505:将尾块后的下一个块作为新的尾块,并转507;
506:将第一个存储块作为新的尾块并递增系统磨损计数;
507:判断尾块是否与头块重合,是则转508,否则转509;
508:将头块向尾块的方向调整一个块(可能发生块回绕);
509:查出新的尾块并将尾块第一页作为分配结果;
510:结束。
上述分配空页过程中“分配一个空块”的子步骤如下:
(1)如果尾块不是最后一个存储块,则将其后的一个块作为分配的结果;如果尾块是最后一个存储块,则将第一个存储块作为分配的结果,并将系统磨损计数加1;
(2)如果子步骤(1)分配的块是当前的头块,则将头块移动到分配的块的下一个块(可能发生块回绕);
(3)将子步骤(1)分配的块进行擦除后作为新的尾块分配出去。
需要注意的是由于块回绕机制的存在,需要对副本的长度加以限制,简单起见,可限制其不超过FLASH容量三分之一。
本发明读取数据可细分为如下子步骤:
(1)从尾块开始向头块搜索(可能发生块回绕),遍历其中的每个页,直到找到第一个通过校验的有效索引;
即从尾块的最后一页开始,每次向前移动一页逆序向头块的方向搜索(可能发生块回绕),直到找到了某页已被占用、索引标志为零(表示是一条索引)且具有表示通过CRC32校验的校验信息为止。
如果一直搜索到头块都没有找到符合要求的索引,则读取失败。
如果读取到的副本占用的第一个页地址超出了当前头块到尾块覆盖的范围,则读取失败。
(2)从有效索引中读取最新的数据副本的索引,获取副本长度及其占用的页地址等信息,或者获取副本首字节占用的页地址和其最后字节占用的页地址信息;
(3)根据读取到的索引信息从对应的页中读取副本的内容。
从副本占用的第一个页开始依次向尾块的方向读取各FLASH页,剥离前三字节的占用标志和索引标志之后,把剩余的字节进行拼装从而恢复副本内容,最后一页参与拼装的字节数由索引中保存的副本大小计算得到。
本发明通过FLASH的块/页分层数据结构实现通用于NOR FLASH和NAND FLASH的数据存储;采用磨损计数和空块的分配机制实现FLASH的磨损平衡,即可以保证在任何情况下(包括异常掉电)各块被循环顺序擦除,从而保证各块擦除次数大致相等;另外,采用副本索引及其校验机制提供针对数据的掉电保护功能,即副本写入过程中掉电,由于没有写入索引,故该副本不会被读取,而只能转而读取存在副本索引的副本;而索引写入过程中掉电的话,由于未生成关于该索引的校验信息,故该索引将无法通过数据校验,对应的副本也不会被读取。
虽然本发明已以较佳实施例揭露如上,然其并非用以限定本发明,任何熟习此技艺者,在不脱离本发明的精神和范围内,当可作些许的更动与润饰,因此本发明的保护范围当以前述权利要求书所界定者为准。

Claims (17)

1、一种在闪存上存取数据的系统,包括分别与所述闪存连接的闪存结构划分模块和初始化模块,以及分别与所述初始化模块连接的数据写入模块和数据读取模块;其中:
所述闪存结构划分模块,用于将所述闪存划分为多个存储块,作为擦除操作的基本单位,再将所述存储块划分成多个存储页,作为每次写入操作的基本单位,并在其中第一存储页内的一个固定位置保存所述存储块的磨损计数;以及在所述存储页起始的一或多个存储单元内保存所述存储页的占用标志;为顺序存储在所述闪存上的每一个数据副本安置一索引,用以存储所述副本占用的页地址以及所述副本的长度信息;
所述初始化模块,用于对所述闪存进行初始化操作,即根据所述闪存上所述存储块的磨损计数确定所述头块和所述尾块的位置,再根据所述头块或所述尾块的磨损计数确定所述系统磨损计数;具体地:
当所述闪存不存在空块,以尾块的磨损计数为所述系统磨损计数;其中:当存在两个相邻存储块磨损计数变小的分界处时,所述分界处前面的存储块为所述尾块,所述分界处后面的存储块为所述头块;当不存在所述分界处,则以所述最后一个存储块为所述尾块,以所述第一个存储块为所述头块;
当所述闪存存在空块,将所述闪存的第一个空块作为所述尾块,若所述尾块后的存储块仍为空块,则所述闪存的第一个存储块为所述头块,所述系统磨损计数为1;若所述尾块后的存储块不为空块:当所述空块不是最后一个存储块,则所述空块后的存储块为所述头块,该头块的磨损计数加1即为所述系统磨损计数;当所述空块是最后一个存储块,则所述第一个存储块为所述头块,该头块的磨损计数即为系统磨损计数;
所述数据写入模块,用于根据所述闪存当前尾块状况为所述数据副本分配空页,并将所述数据副本与所述索引一起顺序写入分配的所述空页中;所述分配空页即当所述尾块不是满块时,将尾页作为分配的空页;当尾块是满块时,申请分配一个空块,并将分配的空块中的第一页作为分配的空页;
所述数据读取模块,用于根据所述闪存当前尾块位置找到要读取的数据副本的索引,并根据所述索引中的信息读取所述数据副本。
2、按照权利要求1所述的系统,其特征在于,所述闪存结构划分模块采用空块顺序分配机制,即存储页在存储块内顺序分配,在存储块内所有存储页均已分配需要分配一个新的存储块时,所述存储块也采用顺序分配的方式;如果已经分配到最后一个存储块,则擦除第一存储块用于分配。
3、按照权利要求1或2所述的系统,其特征在于,所述数据写入模块进一步包括依次连接的副本分段写入模块、页分配模块及块分配模块,还包括与副本分段写入模块连接的副本索引生成及校验模块,其中:
所述副本分段写入模块与所述闪存连接,用于按照所述存储页的容量将所述数据副本内容切分成若干段,然后向所述页分配模块申请为每个段分配一个空页,将所述段中内容连同所述系统磨损计数或所述占用标志一起写入所述空页;并保存第一段首字节和最后一段尾字节所占用的页的地址信息;在所述副本索引生成及校验模块生成副本索引及其校验信息后,将所述副本索引及其校验信息写入又分配的一个空页中;
所述页分配模块,与所述初始化模块连接,用于为所述副本分段写入模块顺序分配空页,当尾块是满块时,向所述块分配模块申请分配所述空块,以用于分配空页;
所述块分配模块,与所述初始化模块连接,用于在所述页分配模块申请空块分配时,为其顺序分配一个存储块:即当所述尾块不是最后一个存储块,将其后的一个存储块作为分配的块;当所述尾块是所述最后一个存储块,则将第一个存储块作为分配的块,并将所述系统磨损计数加1;若所述分配的块是当前的头块,则将所述头块移动到所述分配的块的下一个存储块;最后将所述分配的块进行擦除后作为新的尾块分配出去;
所述副本索引生成及校验模块,用于根据所述副本分段写入模块保存的所述页地址信息以及副本的长度信息生成关于所述副本的索引,同时对所述副本的索引进行校验以形成有效索引,并据此生成校验信息,随同所述副本索引一起传给所述副本分段写入模块。
4、按照权利要求3所述的系统,其特征在于,所述数据读取模块进一步包括依次连接的索引搜索模块、索引读取模块以及副本读取模块,其中:
所述索引搜索模块,用于从所述尾块开始向头块搜索,遍历其中每个存储页,直至找到第一个所述有效索引为所述要读取的数据副本的索引;
所述索引读取模块,用于从所述有效索引中读取最新的数据副本的索引,获取所述副本首字节占用的页地址及所述副本的长度信息,或者获取所述副本首字节占用的页地址和其最后字节占用的页地址信息;
所述副本读取模块,与所述闪存连接,用于根据获取的所述索引中的信息,从对应的存储页中读取副本的内容。
5、按照权利要求4所述的系统,其特征在于,所述索引搜索模块,如果一直搜索到头块都没有找到所述有效索引,则报告读取失败;或者,如果读取到的所述副本占用的第一个页地址超出了当前头块到尾块覆盖的范围,则报告读取失败。
6、一种在闪存上存取数据的方法,包括如下步骤:
(a)划分所述闪存,确定数据结构,即
将所述闪存划分为多个存储块,作为每次擦除操作的基本单位;再将所述存储块划分成多个存储页,作为每次写入操作的基本单位,每块在第一存储页内的一个固定位置分配一或多个字节用于磨损计数,存储有关所述存储块擦除次数的信息;以及每一存储页使用起始的字节单元作为该页的占用标志,用以识别该页是否已被写入数据;
为顺序存储在所述闪存上的每一个数据副本安置一索引,用以存储副本占用的页地址以及副本的长度信息;
(b)对系统进行初始化,即根据所述闪存上所述存储块的所述磨损计数确定所述头块和所述尾块的位置,再根据所述头块或所述尾块的所述磨损计数确定所述系统磨损计数;具体地:
当所述闪存不存在空块,以尾块的磨损计数为所述系统磨损计数;其中:当存在两个相邻存储块磨损计数变小的分界处时,所述分界处前面的存储块为所述尾块,所述分界处后面的存储块为所述头块;当不存在所述分界处,则以所述最后一个存储块为所述尾块,以所述第一个存储块为所述头块;
当所述闪存存在空块,将所述闪存的第一个空块作为所述尾块,若所述尾块后的存储块仍为空块,则所述闪存的第一个存储块为所述头块,所述系统磨损计数为1;若所述尾块后的存储块不为空块:当所述空块不是最后一个存储块,则所述空块后的存储块为所述头块,该头块的磨损计数加1即为所述系统磨损计数;当所述空块是最后一个存储块,则所述第一个存储块为所述头块,该头块的磨损计数即为系统磨损计数;
(c)在所述闪存上根据所述尾块进行数据副本的写入或读取操作,即根据所述尾块的状况分配空页,并将所述数据副本与所述索引一起顺序写入分配的所述空页中;所述分配空页即当所述尾块不是满块时,将尾页作为分配的空页;当尾块是满块时,申请分配一个空块,并将分配的空块中的第一存储页作为分配的空页;或者,根据所述尾块位置找到要读取的数据副本的索引,并根据该索引中的信息读取所述数据副本。
7、按照权利要求6所述的方法,其特征在于,步骤(a)划分所述闪存采用空块顺序分配机制,即存储页在存储块内顺序分配,在存储块内所有存储页均已分配需要分配一个新的存储块时,所述存储块也采用顺序分配的方式;如果已经分配到最后一个存储块,则擦除第一存储块用于分配。
8、按照权利要求6所述的方法,其特征在于,步骤(c)所述数据副本写入操作进一步包括如下步骤:
(c1)按照所述存储页的容量将所述数据副本内容切分成多个段,然后依次为每个段分配一个空页,并将所述段中内容连同所述系统磨损计数或所述占用标志一起写入所述空页,同时,保存第一段首字节和最后一段尾字节占用的页地址信息,或保存第一段首字节和所述副本的长度信息;
(c2)根据所述副本的首字节占用的页地址及所述副本的长度信息生成关于所述副本的所述索引,或根据所述副本的首字节占用的页地址及其最后字节占用的页地址信息生成关于所述副本的所述索引;同时,对所述索引进行的校验并生成相关的校验信息;
(c3)分配一个空页,并将所述索引及所述校验信息写入该空页,形成有效索引。
9、按照权利要求8所述的方法,其特征在于,在步骤(c1)前还包括步骤:根据所述有效索引读取所述数据副本内容并进行修改。
10、按照权利要求6所述的方法,其特征在于,所述初始化以搜索所述分界处为主,在搜索过程中遇到所述空块,则按所述闪存存在空块的情况处理;或者,所述初始化以搜索所述闪存的所述空块为主,在不存在空块的情况下搜索所述分界处;或者,所述初始化将搜索所述分界处和所述空块结合起来,遇到所述空块,则按所述闪存存在空块的情况处理,遇到所述分界处则按处理分界处的方式处理。
11、按照权利要求6所述的方法,其特征在于,步骤(c)所述分配一个空块的操作包括如下步骤:
(1)若所述尾块不是最后一个存储块,则将其后的一个存储块作为分配的块;若所述尾块是最后一个存储块,则将第一个存储块作为分配的块,并将系统磨损计数加1;
(2)将所述分配的块进行擦除后作为新的尾块分配出去。
12、按照权利要求11所述的方法,其特征在于,步骤(1)进一步包括步骤:若所述分配的块是当前的头块,则将所述头块移动到所述分配的块的下一个存储块。
13、按照权利要求6所述的方法,其特征在于,步骤(c)所述数据副本读取操作进一步包括如下步骤:
(c1)从所述尾块开始向头块搜索,遍历其中的每个所述存储页,直到找到第一个通过校验的所述有效索引;
(c2)从所述有效索引中读取最新的所述索引,获取所述副本首字节占用的页地址及所述副本的长度信息,或者获取所述副本首字节占用的页地址和其最后字节占用的页地址信息;
(c3)根据读取的所述索引中的信息从对应的存储页中读取所述数据副本的内容。
14、按照权利要求13所述的方法,其特征在于,步骤(c1)从所述尾块的最后一页开始,每次向前移动一页逆序向头块的方向搜索,直到找到一已被占用的所述存储页,并依据所述存储页的索引标志值判断所述存储页的内容为所述索引,且依据该索引的所述校验信息判断其为所述有效索引;如果一直搜索到头块都没有找到所述有效索引,则报告读取失败;或者,如果读取到的所述副本占用的第一个页地址超出了当前头块到尾块覆盖的范围,则报告读取失败。
15、按照权利要求13所述的方法,其特征在于,步骤(c3)从所述副本占用的第一个页开始依次向所述尾块的方向读取各存储页,剥离所述占用标志和所述索引标志之后,把剩余的字节进行拼装而恢复所述副本内容,最后一页参与拼装的字节数由所述有效索引中保存的所述副本的长度或所述副本的最后字节占用页地址计算得到。
16、按照权利要求6至8或13、14任一项所述的方法,其特征在于,将所述存储块第一存储页的起始两个字节用于存储所述磨损计数,采用各位取反再写入的存储方式;将所述存储页的起始两个字节用于所述占用标志,只要其中内容不为全1,即表明该页已被占用;所述磨损计数同时作为所述第一存储页的所述占用标志;所述存储页的第三个字节作为索引的标志值,其中,以第一值表示该页存储的是一条索引,以第二值表示该页存储的是副本内容;所述数据副本的内容或所述索引从每个存储页的第四个字节开始存储。
17、按照权利要求8所述的方法,其特征在于,所述对索引的校验采用32位循环冗余校验机制。
CNB2007101615249A 2007-09-24 2007-09-24 一种在闪存上存取数据的系统及方法 Expired - Fee Related CN100555246C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2007101615249A CN100555246C (zh) 2007-09-24 2007-09-24 一种在闪存上存取数据的系统及方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2007101615249A CN100555246C (zh) 2007-09-24 2007-09-24 一种在闪存上存取数据的系统及方法

Publications (2)

Publication Number Publication Date
CN101127004A CN101127004A (zh) 2008-02-20
CN100555246C true CN100555246C (zh) 2009-10-28

Family

ID=39095050

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2007101615249A Expired - Fee Related CN100555246C (zh) 2007-09-24 2007-09-24 一种在闪存上存取数据的系统及方法

Country Status (1)

Country Link
CN (1) CN100555246C (zh)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101539891B (zh) * 2008-03-17 2012-12-05 锐迪科微电子(上海)有限公司 一种嵌入式快闪存储器、存储系统及其数据掉电保护方法
TWI386803B (zh) * 2008-07-02 2013-02-21 Silicon Motion Inc 快閃記憶卡及快閃記憶體預防資料毀損的方法
CN101650692B (zh) * 2009-07-02 2011-01-05 北京飞天诚信科技有限公司 一种在存储设备中修改数据的方法和装置
CN102012869B (zh) * 2009-09-04 2012-11-14 威刚科技股份有限公司 闪存储存系统的数据刻录方法
CN102073832B (zh) * 2009-11-24 2014-03-12 中兴通讯股份有限公司 固定式rfid阅读器及其数据存储方法
TWI497293B (zh) 2009-12-17 2015-08-21 Ibm 固態儲存裝置內之資料管理
CN102323907A (zh) * 2011-08-19 2012-01-18 长安大学 嵌入式arm处理器对nandflash数据存储和删除方法
CN102662852B (zh) * 2012-03-20 2015-05-27 山东省科学院自动化研究所 一种利用MCU内部数据Flash存储非易失性数据的方法
US9384125B2 (en) * 2012-06-18 2016-07-05 Silicon Motion Inc. Method for accessing flash memory having pages used for data backup and associated memory device
WO2014109756A1 (en) * 2013-01-11 2014-07-17 Empire Technology Development Llc Page allocation for flash memories
CN103123609B (zh) * 2013-03-13 2015-07-15 中国科学院上海微系统与信息技术研究所 存储器的分块管理方法
CN103559140B (zh) * 2013-10-29 2016-07-20 深圳创维数字技术有限公司 一种用于flash存储数据的方法及装置
JP6241373B2 (ja) * 2014-06-19 2017-12-06 株式会社デンソー 記憶装置、フラッシュメモリ制御装置、及びプログラム
CN104317671A (zh) * 2014-10-24 2015-01-28 杭州帅锐电子科技有限公司 一种提升非易失存储使用寿命的掉电数据保存恢复算法
CN104537075B (zh) * 2014-12-30 2017-11-28 宁波三星医疗电气股份有限公司 Yaffs文件系统在NorFlash中的应用方法
CN106598875A (zh) * 2015-10-19 2017-04-26 深圳市华百安智能技术有限公司 嵌入式系统中快速处理nor flash记录的方法
CN106023342B (zh) * 2016-05-11 2018-04-13 安徽江淮汽车集团股份有限公司 一种自动变速箱的非易失存储器中数据管理方法及系统
CN108664482B (zh) * 2017-03-27 2021-09-07 珠海极海半导体有限公司 Flash存储器及存储文件管理方法
CN107168647B (zh) * 2017-04-17 2020-10-23 武汉永力科技股份有限公司 Flash数据读写方法及系统
CN107256197B (zh) * 2017-05-18 2019-02-01 深圳市晟碟半导体有限公司 一种数据存储方法、存储装置及智能终端
CN108984423B (zh) * 2017-05-31 2020-10-27 龙芯中科技术有限公司 一种系统级芯片的地址空间验证方法和系统
CN108255436A (zh) * 2018-01-25 2018-07-06 广东美的制冷设备有限公司 数据存取方法、存取装置、家电设备和可读存储介质
CN108710578B (zh) * 2018-04-20 2022-07-26 深圳市战音科技有限公司 基于闪存的数据存储方法和装置
CN114303123A (zh) * 2019-08-27 2022-04-08 华为技术有限公司 一种固态硬盘的数据存储方法、装置及固态硬盘ssd
CN111078136B (zh) * 2019-10-22 2023-05-05 力高(山东)新能源技术股份有限公司 一种防止BMS动态数据存储导致flash寿命降低的方法
CN111324488B (zh) * 2020-02-12 2023-12-08 浙江大华技术股份有限公司 一种程序备份处理方法及装置
CN113204316A (zh) * 2021-05-19 2021-08-03 中国人民解放军93216部队 一种使用flash进行高效数据存储的方法
CN113485974B (zh) * 2021-06-02 2023-08-01 翱捷科技股份有限公司 Nor闪存使用yaffs的方法及装置
CN114415942B (zh) * 2021-12-21 2022-11-04 联芸科技(杭州)股份有限公司 L2p映射表重建方法及固态硬盘

Also Published As

Publication number Publication date
CN101127004A (zh) 2008-02-20

Similar Documents

Publication Publication Date Title
CN100555246C (zh) 一种在闪存上存取数据的系统及方法
US10067881B2 (en) Compression and caching for logical-to-physical storage address mapping tables
CN101980177B (zh) 一种操作Flash的方法和装置
US7774565B2 (en) Methods and apparatus for point in time data access and recovery
CN102841851B (zh) 闪存管理方法和闪存设备
CN101501623B (zh) 感知文件系统的块存储系统、装置和方法
CN101221534B (zh) 用于控制计算机可读存储器的方法和系统
CN102779096B (zh) 一种基于页块面三维的闪存地址映射方法
CN101968795B (zh) 一种数据块长度可变的文件系统缓存方法
US10725903B2 (en) Unified paging scheme for dense and sparse translation tables on flash storage systems
US10877898B2 (en) Method and system for enhancing flash translation layer mapping flexibility for performance and lifespan improvements
CN101241471A (zh) 快闪存储器系统及其垃圾收集方法
CN104461391A (zh) 一种存储设备元数据管理处理方法及系统
CN101777017B (zh) 一种连续数据保护系统的快速恢复方法
CN102737715B (zh) 用于nor闪存的数据掉电保护方法
EP1815340A2 (en) Dynamically upgradeable fault-tolerant storage system permitting variously sized storage devices and method
US20220121564A1 (en) Translation lookup and garbage collection optimizations on storage system with paged translation table
EP3062209A1 (en) Method and apparatus for improving disk array performance
CN103455435A (zh) 数据写入方法及装置
CN107239526A (zh) 文件系统实现方法、碎片整理方法、操作位置定位方法
CN103996412A (zh) 一种用于智能卡非易失性存储器的掉电保护方法
WO2012021847A2 (en) Apparatus, system and method for caching data
CN102880553A (zh) 一种基于mcu的片外flash文件系统的读写方法
Xiang et al. A reliable B-tree implementation over flash memory
CN101256536B (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
ASS Succession or assignment of patent right

Owner name: NANJING ZHONGXING NEW SOFTWARE CO., LTD

Free format text: FORMER OWNER: ZTE CORPORATION

Effective date: 20150518

C41 Transfer of patent application or patent right or utility model
COR Change of bibliographic data

Free format text: CORRECT: ADDRESS; FROM: 518057 SHENZHEN, GUANGDONG PROVINCE TO: 210012 NANJING, JIANGSU PROVINCE

TR01 Transfer of patent right

Effective date of registration: 20150518

Address after: Yuhuatai District of Nanjing City, Jiangsu province 210012 Bauhinia Road No. 68

Patentee after: Nanjing Zhongxing New Software Co., Ltd.

Address before: 518057 Nanshan District high tech Industrial Park, Guangdong, South Road, science and technology, ZTE building, legal department

Patentee before: ZTE Corporation

CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20091028

Termination date: 20160924