一种芯片存储器的读、写数据方法及系统与流程

文档序号:17440885发布日期:2019-04-17 04:44阅读:480来源:国知局
一种芯片存储器的读、写数据方法及系统与流程

本发明属于存储技术领域,具体涉及一种芯片存储器的读、写数据方法及系统。



背景技术:

芯片制造商一般都会提供指定条件下芯片存储器(flash、eeprom)的最小保证写次数,诸如5万次、10万次、50万次等。在该最小保证写次数以内,芯片制造商可以保证芯片存储器数据的读写正确性。当芯片存储器中某个存储单元(可能是某字节、某页或某块地址)的写次数达到或超过该最小保证写次数之后,其可靠性会降低,甚至存储操作会失败。

现有智能卡cos(chipoperatingsystem,芯片操作系统)的设计和实现往往都是被动的接受芯片制造商提供的最小保证写次数,也就是基于芯片存储单元写次数不会超过最小保证写次数,但却未曾考虑写次数达到或超过该次数的情况。在某些应用场景,尤其是m2m(machinetomachine,设备到设备)环境中,卡片中的应用会对芯片存储器进行频繁的擦写,其写次数很可能会达到或超过最小保证写次数。而基于芯片软、硬件设计和制造成本的考虑,芯片制造商一般不会提供额外的预防措施。那么如何延长这种极限情况下芯片存储器中数据的可靠性,提高芯片存储寿命?

针对这一技术问题,现有技术中存在从文件系统角度设计的延长可擦写芯片寿命的方法。然而在native应用和java应用的处理过程中,很多时候并不涉及文件系统,因此从文件系统角度考虑的解决方法具有局限性,并没能够从cos层面和应用层面角度提供好的方法,来延长数据存储的可靠性,提高芯片的使用寿命。

现有的cos层存储方法的设计,是根据芯片制造商提供的读写接口,对需要存储的数据进行直接写数据,也就是所谓的普通写数据。

如图1所示,普通写数据的过程如下:

往目的地址处第一次写数据1;

往目的地址处第二次写数据2,完成数据1更新成数据2的过程。至此,目的地址处的数据1替换成数据2,目的地址处至此被写了2次。

由此可见:在单一存储单元中,数据更新一次,该存储单元就被写了2次,导致频繁更新数据时,该存储单元被频繁写。由于该存储单元的使用寿命有限,只能接近芯片制造商提供的最小保证写次数,并不能延长芯片单一存储单元的使用寿命。



技术实现要素:

针对现有技术中存在的缺陷,本发明所要解决的技术问题是提供一种在芯片操作系统和应用程序中实现的可延长芯片使用寿命的芯片存储器读、写方法及系统。

为解决上述技术问题,本发明采用的技术方案如下:

一种芯片存储器的写数据方法,包括以下步骤:

判断待写数据是普通数据还是均衡数据;所述普通数据是指不需要频繁更新的数据,所述均衡数据是指需要频繁更新的数据;

如果是普通数据,则对待写数据进行普通写;

如果是均衡数据,则判断芯片操作系统是否支持均衡写,如果支持,则芯片操作系统对待写数据进行均衡写;

如果芯片操作系统不支持均衡写,则应用程序对待写数据进行均衡写;

所述均衡写是使用n个存储空间,轮流存储需要频繁更新的数据;所述n为均衡系数,n为正整数,n≥2。

如上所述的芯片存储器的写数据方法,其中,所述芯片操作系统对待写数据进行均衡写的过程包括以下步骤:

将芯片存储器划分为普通区域和均衡区域,所述普通区域用于存储普通数据,所述均衡区域用于存储均衡数据;

在均衡区域中划出n个指定大小的空间区域;

将均衡数据从所述空间区域的起始地址开始写入芯片存储器的n个指定大小的空间区域。

如上所述的芯片存储器的写数据方法,其中,所述将芯片存储器划分为普通区域和均衡区域包括以下四种方式:从地址由低到高将芯片存储器划分为普通区域和均衡区域;或者

从地址由低到高将芯片存储器划分为均衡区域和普通区域;或者

从地址由低到高将芯片存储器划分为普通区域、均衡区域和普通区域;或者

从地址由低到高将芯片存储器划分为均衡区域、普通区域和均衡区域。

如上所述的芯片存储器的写数据方法,其中,所述在均衡区域中划出n个指定大小的空间区域的大小为:

如果芯片存储器支持字节写,则划出的空间大小为:(指定大小+6)×均衡系数n;如果芯片存储器支持页擦页写,当(指定大小+6)是页大小的整数倍时,则划出的空间大小为(指定大小+6)×均衡系数n;当(指定大小+6)不是页大小的整数倍时,则划出的空间大小为:([(指定大小+6)÷页大小]+1)×页大小×均衡系数n。

如上所述的芯片存储器的写数据方法,其中,所述在均衡区域中划出n个指定大小的空间区域采用tlvlist数据结构,所述tlv为taglengthvalue的缩写;所述tag为4字节,用于控制选择哪个tlv来写数据;所述length为2字节,用于表示实际有效数据的长度;所述value是指定大小的实际数据;所述list的个数为均衡系数n。

如上所述的芯片存储器的写数据方法,其中,所述将均衡数据从所述空间区域的起始地址开始写入芯片存储器的n个指定大小的空间区域的过程包括以下步骤:

(1)选择均衡空间区域tlvlist中的第一个tlv1,tlv1的tag加1,写数据的长度到length,写数据到value;

(2)下一次写数据时在均衡空间区域tlvlist中从前往后或者从后往前遍历查找第一个比tlv1的tag小的tlvn,遍历查找时取的数据间隔为tlv的实际大小;

如果未找到满足要求的tlvn,则转至步骤(1);

如果找到了满足要求的tlvn,tlvn的tag加1,写数据的长度到length,写数据到value;下一次写数据时转至步骤(2)。

如上所述的芯片存储器的写数据方法,其中,所述应用程序对待写数据进行均衡写的过程包括以下步骤:

在应用数据空间中划出n个指定大小的空间区域;

将待写数据写入n个指定大小的空间区域中。

如上所述的芯片存储器的写数据方法,其中,所述在应用数据空间中划出n个指定大小的空间区域的方法如下:

对于页擦页写芯片,所述划出n个指定大小的空间区域不连续,所述不连续是指n个指定大小的空间区域中任意两个空间区域不在同一页中;

对于字节写芯片,所述划出n个指定大小的空间区域连续或者不连续。

如上所述的芯片存储器的写数据方法,其中,所述将待写数据写入n个指定大小的空间区域中的过程包括以下步骤:

遍历所述n个指定大小的空间区域,找到最旧数据所在的指定大小的空间区域,所述最旧数据是指最先存储在n个指定大小的空间区域中的数据;

将待写数据写入所述最旧数据所在的指定大小的空间区域;

下一次写数据时,重复以上步骤。

如上所述的芯片存储器的写数据方法,其中,所述遍历的顺序为从前往后或者从后往前。

一种芯片存储器的读数据方法,所述数据是按照上述的方法写入芯片存储器中的数据,包括以下步骤:

在均衡空间区域tlvlist中,遍历查找最后一个与tlv1的tag相同的tlvn,遍历查找时取的数据间隔为tlv的实际大小;

选择找到tlvn,读取该tlvn中的数据。

如上所述的芯片存储器的读数据方法,其中,所述遍历顺序为从前往后或者从后往前。

一种芯片存储器的读数据方法,所述数据是按照上述的方法写入芯片存储器中的数据,包括以下步骤:

遍历所述n个指定大小的空间区域,找到最新数据所在的指定大小的空间区域,所述最新数据是指最后存储在n个指定大小的空间区域中的数据;

从所述最新数据所在的指定大小的空间区域中读取数据;

下一次读数据时,重复以上步骤。

一种芯片存储器的读、写数据的方法,包括上述的写数据方法,以及上述的读数据方法。

一种芯片存储器的写数据系统,包括用于判断待写数据是普通数据还是均衡数据的第一判断装置;所述普通数据是指不需要频繁更新的数据,所述均衡数据是指需要频繁更新的数据;

用于当待写数据是普通数据时调用普通写装置对待写数据进行处理的调用装置;

用于对待写数据进行普通写的普通写装置;

用于判断芯片操作系统是否支持均衡写的第二判断装置;

所述调用装置还用于当芯片操作系统支持均衡写时调用第一均衡写装置对待写数据进行处理,当芯片操作系统不支持均衡写时调用第二均衡写装置对待写数据进行处理;

用于对待写数据进行均衡写的第一均衡写装置;

用于对待写数据进行均衡写的第二均衡写装置;

所述均衡写是使用n个存储空间,轮流存储需要频繁更新的数据;所述n为均衡系数,n为正整数,n≥2。

如上所述的芯片存储器的写数据系统,其中,所述第一均衡写装置包括:

用于将芯片存储器划分为普通区域和均衡区域的第一划分单元;

用于在均衡区域中划出n个指定大小空间区域的第二划分单元;

用于将均衡数据从所述空间区域的起始地址开始写入芯片存储器的n个指定大小空间区域的第一写数据单元。

如上所述的芯片存储器的写数据系统,其中,所述第一写数据单元写数据的过程为:

(1)选择均衡空间tlvlist中的第一个tlv1,tlv1的tag加1,写数据的长度到length,写数据到value;

(2)下一次写数据时在均衡空间tlvlist中从前往后或者从后往前遍历查找第一个比tlv1的tag小的tlvn,遍历查找时取的数据间隔为tlv的实际大小;

如果未找到满足要求的tlvn,则转至步骤(1);

如果找到了满足要求的tlvn,tlvn的tag加1,写数据的长度到length,写数据到value;下一次写数据时转至步骤(2)。

如上所述的芯片存储器的写数据系统,其中,所述第二均衡写装置包括:用于在应用数据空间中划出n个指定大小的空间区域的第三划分单元;

用于将待写数据写入n个指定大小空间区域中的第二写数据单元。

如上所述的芯片存储器的写数据系统,其中,所述第二写数据单元包括:

用于遍历n个指定大小的空间区域,找到最旧数据所在的指定大小的空间区域的第一遍历模块,所述最旧数据是指最先存储在n个指定大小的空间区域中的数据;

用于将待写数据写入所述最旧数据所在的指定大小的空间区域的第一写数据模块。

一种芯片存储器的读数据系统,包括用于读取普通数据的普通数据读取装置,用于读取均衡数据的第一读取装置,所述第一读取装置读取的数据是按照上述系统存储的数据,所述第一读取装置包括:

用于在均衡空间区域tlvlist中,遍历查找最后一个与tlv1的tag相同的tlvn的第二遍历单元,遍历查找时取的数据间隔为tlv的实际大小;

用于选择找到的tlvn,读取该tlvn中数据的第一读取单元。

一种芯片存储器的读数据系统,包括用于读取普通数据的普通数据读取装置,用于读取均衡数据的第二读取装置,所述第二读取装置读取的数据是按照上述系统存储的数据,所述第二读取装置包括:

用于遍历n个指定大小的空间区域,找到最新数据所在的指定大小的空间区域的第三遍历单元,所述最新数据是指最后存储在n个指定大小的空间区域中的数据;

用于从所述最新数据所在的指定大小的空间区域中读取数据的第二读数据单元。

一种芯片存储器的读、写数据系统,包括上述的写数据系统,以及上述的读数据系统。

本发明所述方法及系统,通过芯片操作系统或应用程序均衡写数据,使得单一存储单元中的数据更新次数,被分摊到了多个存储单元,单个存储单元的写次数被直接稀释,稀释程度取决于分摊的存储单元个数,从而变相地延长了芯片存储器单一存储单元的使用寿命。

附图说明

图1是背景技术中普通写数据的示意图;

图2是具体实施方式中芯片存储器读、写数据系统的结构框图;

图3是具体实施方式中写数据系统的结构框图;

图4是具体实施方式中第一均衡写装置的结构框图;

图5是具体实施方式中第二均衡写装置的结构框图;

图6是具体实施方式中读数据系统的结构框图;

图7是具体实施方式中写数据的方法流程图;

图8是具体实施方式中第一均衡写装置对待写数据进行均衡写的方法流程图;

图9是具体实施方式中普通区域与均衡区域的划分示意图;

图10是具体实施方式中均衡区域中划出指定大小空间区域的示意图;

图11是具体实施方式中第一均衡写装置将均衡数据从空间区域的起始地址开始写入芯片存储器的n个指定大小空间区域的方法流程图;

图12是具体实施方式中第二均衡写装置对待写数据进行均衡写的方法流程图;

图13是具体实施方式中第二写数据单元在n个指定大小的空间区域中轮流写数据的方法流程图;

图14是具体实施方式中第一读取装置读取数据的流程图;

图15是具体实施方式中第二读取装置读取数据的流程图。

具体实施方式

下面结合附图对本发明的具体实施方式进行详细描述。

如图2所示,本实施方式中芯片存储器的读、写数据系统包括写数据系统1和读数据系统2。所述写数据系统1用于将待写数据根据数据类型写入芯片存储器的存储单元中,所述读数据系统2用于读取写数据系统1写入芯片存储器存储单元中的数据。

如图3所示,所述写数据系统1包括第一判断装置11、调用装置12、第二判断装置13、普通写装置14、第一均衡写装置15和第二均衡写装置16。第一判断装置11用于判断待写数据是普通数据还是均衡数据;所述普通数据是指不需要频繁更新的数据,所述均衡数据是指需要频繁更新的数据。调用装置12用于当待写数据是普通数据时调用普通写装置14对待写数据进行处理。普通写装置14用于对待写数据进行普通写。第二判断装置13用于判断芯片操作系统是否支持均衡写。所述调用装置12还用于当芯片操作系统支持均衡写时调用第一均衡写装置15对待写数据进行处理,当芯片操作系统不支持均衡写时调用第二均衡写装置16对待写数据进行处理。第一均衡写装置15用于对待写数据进行均衡写。第二均衡写装置16用于对待写数据进行均衡写。所述均衡写是使用n个存储空间,轮流存储均衡数据,即需要频繁更新的数据;所述n为均衡系数,n为正整数,n≥2。

如图4所示,所述第一均衡写装置15包括第一划分单元151、第二划分单元152和第一写数据单元153。第一划分单元151用于将芯片存储器划分为普通区域和均衡区域。第二划分单元152用于在均衡区域中划出n个指定大小的空间区域。第一写数据单元153用于将均衡数据从所述空间区域的起始地址开始写入芯片存储器的n个指定大小空间区域。

如图5所示,所述第二均衡写装置16包括第三划分单元161、第二写数据单元162。其中,第二写数据单元162包括第一遍历模块1621和第一写数据模块1622。第三划分单元161用于在应用数据空间中划出n个指定大小的空间区域。第二写数据单元162用于将待写数据写入n个指定大小空间区域中。第一遍历模块1621用于遍历n个指定大小的空间区域,找到最旧数据所在的指定大小的空间区域,所述最旧数据是指最先存储在n个指定大小的空间区域中的数据。第一写数据模块1622用于将待写数据写入所述最旧数据所在的指定大小的空间区域。

如图7所示,采用上述写数据系统1写数据的方法包括以下步骤:

s1:第一判断装置11判断待写数据是普通数据还是均衡数据;所述普通数据是指不需要频繁更新的数据,所述均衡数据是指需要频繁更新的数据。

s2:如果是普通数据,则调用装置12调用普通写装置14对待写数据进行普通写。

s3:如果是均衡数据,则第二判断装置13判断芯片操作系统是否支持均衡写;

s4:如果支持,则调用装置12调用第一均衡写装置15对待写数据进行均衡写。

s5:如果芯片操作系统不支持均衡写,则调用装置12调用第二均衡写装置16对待写数据进行均衡写。

本实施方式中所述均衡写是使用n个存储空间,轮流存储需要频繁更新的数据;所述n为均衡系数,n为正整数,n≥2。如果均衡系数n为3,则表示同样的数据需要3倍空间来分摊均衡写;如果均衡系数为5,表示同样的数据需要5倍空间来分摊均衡写。均衡系数可以依据芯片存储器的容量和实际需要来设定,本实施方式中不做限定。显然,通过均衡写数据,使得单一存储单元中的数据更新次数,被分摊到了多个存储单元,单个存储单元的写次数被直接稀释,稀释程度取决于分摊的存储单元个数,从而变相地延长了芯片存储器单一存储单元的使用寿命,延长的使用寿命为芯片存储器原使用寿命的均衡系数n倍。

如图8所示,本实施方式中步骤s4进一步包括以下步骤:

s41:第一划分单元151将芯片存储器划分为普通区域和均衡区域,所述普通区域用于存储普通数据,所述均衡区域用于存储均衡数据。

如图9所示,普通区域和均衡区域的划分模型包括以下四种方式:从地址由低到高将芯片存储器划分为普通区域和均衡区域,均衡区域和普通区域,普通区域、均衡区域、普通区域或者均衡区域、普通区域、均衡区域。普通区域和均衡区域的大小、比例、起始地址、结束地址,本实施方式不做限定,可以根据芯片存储器的容量和实际需要自行分配。以下说明仅以普通区域和均衡区域的划分模型为例,其他模型与该模型过程相似,不再一一叙述。

s42:第二划分单元152在均衡区域中划出n个指定大小的空间区域。

在本实施方式中,采用tlv(tag+length+value)list的数据结构来进行均衡分配、均衡写、均衡读数据。数据均衡写时轮流分摊的过程实际上就是tlvlist中的tlv轮流操作的过程。在以下实现例中:tag为4字节,逻辑控制选择哪个tlv来写、读数据,4字节长度的tag已经能够充分满足各种应用需求。length为2字节,表示后面的实际有效数据长度;value就是指定大小的实际数据。每个指定大小的空间实际上就是一个tlv,而list的个数就是均衡系数n值,也就是用于均衡写的分摊个数。

如果芯片存储器支持字节写,则划出的空间大小等于(指定大小+6)×均衡系数n,此时tlvlist中的每个tlv,其占用的实际大小为(指定大小+6);如果芯片支持页擦页写,当(指定大小+6)是页大小的整数倍时,则划出的空间大小为(指定大小+6)×均衡系数n,此时tlvlist中的每个tlv,其占用的实际大小为(指定大小+6),当(指定大小+6)不是页大小的整数倍时,则划出的空间大小为:([(指定大小+6)÷页大小]+1)×页大小×均衡系数n,此时tlvlist中的每个tlv,其占用的实际大小为([(指定大小+6)÷页大小]+1)×页大小。其中,“[]”表示取整。

如图10所示,假设均衡系数n为3,表示同样的数据需要3倍空间来分摊均衡写。以分配200字节为例,对于支持字节写的芯片存储器,实际分配空间大小就是(200+6)×3=618字节,每个tlv的实际大小为(指定大小+6);对于只支持页擦页写的芯片存储器,此处假设页大小为256字节,则实际分配的是([(200+6)÷256]+1)×256×3=768字节,也就是3页数据,每个tlv的实际大小为([(指定大小+6)÷页大小]+1)×页大小,此处的一个tlv实际大小占用了一页256字节。此时每一个tlv中,有部分空间是剩余空间。

s43:第一写数据单元153将均衡数据从所述空间区域的起始地址开始写入芯片存储器的n个指定大小的空间区域。

首先对该空间区域内的值进行初始化,返回该空间区域的起始地址。将均衡数据从所述空间区域的起始地址开始写入芯片存储器的n个指定大小的空间区域。写数据的目标地址实际上是均衡分配出来的空间区域的起始地址,但数据真正写的起始地址并不一定是该目标地址,而可能是从目标地址开始的tlvlist结构中的任何一个tlv的起始地址。均衡写的核心思想是轮流分摊写,那么此处写的过程实际上就是tlvlist轮流存储数据的过程。tlvlist轮流存储数据逻辑上可以从前往后,也可以从后往前。以下实例均衡分配出来的空间区域初始化为全0,并且选择从前往后轮流存储数据。

如图11所示,具体写的过程包括以下步骤:

(1)第一次写时,选择均衡空间tlvlist中的第一个tlv1,tlv1的tag加1,写实际数据的长度到length,写实际数据到value。不管是字节写还是页擦页写,写之前都可以选择先在ram(randomaccessmemory,随机存储内存)中组织好,再一次性写,从而减少写的次数,提高效率。

(2)第一次写之后的写,在均衡空间tlvlist中从前往后或者从后往前遍历查找第一个比tlv1的tag小的tlvn,遍历查找时取的数据间隔为tlv的实际大小。字节写芯片存储器,tlv的实际大小为(指定大小+6),页擦页写芯片存储器,(指定大小+6)为页大小整数倍时,tlv的实际大小为(指定大小+6),(指定大小+6)不为页大小整数倍时,tlv的实际大小为([(指定大小+6)÷页大小]+1)×页大小。本实施方式中,为了尽可能简化逻辑处理流程,大的tag与小的tag实际上只差1。

如果未找到满足要求的tlvn,则表示tlvlist已经被全部轮流写过一次。这个过程也因此实现了原来单一地址的均衡系数n次写,改由均衡系数n个地址空间来分摊写。此时,需要重新返回到tlv1,即转至步骤(1),开始新的一次轮流写数据。

(3)如果找到了满足要求的tlvn,表示tlvlist中还有本次轮流写未曾写过的tlv,tlvn的tag加1,写数据的长度到length,写数据到value;下一次写时转至步骤(2)。

以字节写芯片存储器的第1次写和第2次写为例,对上述步骤做举例说明。第1次写时直接选择tlv1进行写,tag改为0x00000001;第2次写时遍历查找tlvlist,找到tlv2的tag为0,是找到的第一个tag比tlv1小的tlv。所以,第2次写选择tlv2进行写,写完之后tlv2的tag同步tlv1,也改为0x00000001,以此类推。

以页擦页写芯片存储器的第m+1次写为例,对上述步骤做举例说明。假设均衡系数为m,也就是tlvlist的大小为m,之前的m次写已经完成了一次轮流写,此时为第m+1次写。遍历查找tlvlist,一直到最后的tlvm,其tag与tlv1相等,找不到比tlv1tag小的tlv,表示需要开启新的一次轮流写,选择tlv1进行写,并将tag改为0x00000002。

通过tlvlist中tag的数值大小,便可以从逻辑上控制哪个tlv存储单元中的数据是最新被存储的,即是当前有效的数据。

如图12所示,本实施方式中步骤s5进一步包括以下步骤:

s51:第三划分单元161在应用数据空间中划出n个指定大小的空间区域。

n个指定大小的空间区域实际上就是总大小为(指定大小×均衡系数)的空间区域,并对此总空间区域内的值做初始化。该总空间区域中的均衡系数n个指定大小空间区域可能两两连续,也可能两两不连续。均衡系数值n完全取决于具体应用需要来设定,可以是2个,也可以是多个。

对于页擦页写芯片,在应用数据空间中划出n个指定大小的空间区域时要求任意两个空间区域远距离间隔开来,至少要保证不能在同一页中,防止逻辑上轮流分摊写,物理上却是在同一页上写了两次的情况。芯片只支持页擦页写,如果两个连续指定大小数据空间区域1和2连续,则当存储的数据没有超过一页大小时,空间区域1和2大概率会在同一页数据中,或当存储的数据超过一页大小时,空间区域1和2大概率会有部分数据存在于同一页中。此时,逻辑上写完空间区域1再写空间区域2,写了2个空间区域,逻辑上实现了均衡写,但是物理上,实际上却是对一页存储区域进行了2次写操作,并没有真正达到均衡写的目的。因此,针对此类只支持页擦页写的芯片,在应用侧应当采用远距离间隔的方法来实现均衡分配应用数据空间。

字节写芯片的均衡分配不存在任何限制,可以随意定义分配用于均衡访问的均衡系数个指定大小的分摊空间。因此对于字节写芯片,划出的n个指定大小的空间区域可以连续存在于同一页中,也可以不连续存在于不同页中。对于字节写芯片,写完空间区域1再写空间区域2,写了2个空间区域,逻辑上和物理上都实现了均衡写,因此,本实施方式针对此类支持字节写的芯片,在应用侧提出了随意定义分配的方法来实现均衡分配应用数据空间。

s52:第二写数据单元162将待写数据写入n个指定大小空间区域中。

如图13所示,写数据的过程具体包括以下步骤:

(1)第一遍历模块1621遍历所述n个指定大小的空间区域,找到最旧数据所在的指定大小的空间区域。所述最旧数据是指最先存储在n个指定大小的空间区域中的数据。所述遍历的顺序可以从前往后,也可以从后往前。

(2)第一写数据模块1622将待写数据写入所述最旧数据所在的指定大小的空间区域。

下一次写数据时,重复以上步骤。

以下以页擦页写芯片且以应用数据中的应用计数器counter为例对上述写数据过程进行举例说明。

应用计数器counter的存储,采用远距离间隔的方法来实现划分出n个指定大小的空间区域。本实例中均衡系数n为3,均衡分配空间之后,改为由不连续的空间区域counter1、counter2、counter3来均衡写。3个空间区域两两之间保证不在一个存储单元中,也就是在3个不同页中。假设counter1为0x1234,counter2为0x1235,counter3为0x1236,通过遍历counter1、counter2、counter3,找出counter1为最旧,即最先存储的数据,此处可以通过值的大小来区分应用计数器counter的新旧。新数据(即待写数据)0x1237写到counter1中,counter1由0x1234改为0x1237,counter1作为新的counter。

如图6所示,所述读数据系统2包括普通数据读取装置21、第一读取装置22和第二读取装置23。普通数据读取装置21用于读取普通写装置14写入芯片存储器的普通数据,第一读取装置22用于读取采用第一均衡写装置15写入芯片存储器中的数据,第二读取装置23用于读取采用第二均衡写装置16写入芯片存储器中的数据。

第一读取装置22包括第二遍历单元221和第一读取单元222。第二遍历单元221用于在均衡空间区域tlvlist中,遍历查找最后一个与tlv1的tag相同的tlvn,遍历查找时取的数据间隔为tlv的实际大小。第一读取单元222用于选择找到的tlvn,读取该tlvn中的数据。

第二读取装置23包括第三遍历单元231和第二读取单元232。第三遍历单元231用于遍历n个指定大小的空间区域,找到最新数据所在的指定大小的空间区域,所述最新数据是指最后存储在n个指定大小的空间区域中的数据。第二读取单元232用于从所述最新数据所在的指定大小的空间区域中读取数据。

普通数据读取装置21读取普通数据的方式为现有技术,本实施方式不再详细说明。

第一读取装置22读取采用第一均衡写装置15写入芯片存储器中的均衡数据。目标地址实际上是均衡分配出来的空间区域的起始地址,数据真正读的起始地址并不一定是该目标地址,而可能是从目标地址开始的tlvlist结构中的任何一个tlv的起始地址。均衡写的核心思想是轮流分摊写,那么此处读的过程实际上就是tlvlist轮流读取的过程。

tlvlist轮流读取数据,逻辑上可以从前往后,也可以从后往前。以下实例中,均衡分配出来的空间区域,选择从前往后轮流读取。

如图14所示,第一读取装置22读取数据的过程包括以下步骤:

(1)第二遍历单元221在均衡空间区域tlvlist中,遍历查找最后一个与tlv1的tag相同的tlvn,遍历查找时取的数据间隔为tlv的实际大小;

(2)第一读取单元222选择找到tlvn,读取该tlvn中的数据。

下一次读数据时,重复以上步骤。

以字节写芯片的读数据为例对上述步骤进行举例说明。假设均衡系数为m,tlv1的tag为0x00000001、tlv2的tag为0x00000001、tlv2之后的所有tlv的tag都是0x00000000。遍历查找到最后一个与tlv1的tag相等的tlv2,则tlv2中的数据就是最新的,选择并读取tlv2中的数据。

以页擦页写芯片的读数据为例对上述步骤进行举例说明。假设均衡系数为m,tlv1的tag为0x00000002、tlv1之后的tlv的tag都是0x00000001。遍历查找到最后一个与tlv1的tag相等的就是tlv1自己,则tlv1中的数据就是最新的,选择并读取tlv1中的数据。

如图15所示,第二读取装置23读取数据的过程包括以下步骤:

(1)第三遍历单元231遍历n个指定大小的空间区域,找到最新数据所在的指定大小的空间区域;

(2)第二读取单元232从所述最新数据所在的指定大小的空间区域中读取数据;

下一次读数据时,重复以上步骤。

以下以页擦页写芯片且以应用数据中的应用计数器counter为例对上述读数据过程进行举例说明。

假设不连续的3个空间区域counter1为0x1237,counter2为0x1235,counter3为0x1236,则通过遍历counter1、counter2、counter3,找出counter1为最新值,即最后存储的数据,读取counter1的值。此处可以通过值的大小来区分应用计数器counter的新旧。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其同等技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1