数据写入方法及装置、数据读取方法及装置的制造方法_2

文档序号:9261183阅读:来源:国知局
由小到大的顺序,或者是由大到小的顺序进行存储,上述两种仅是存储方式的两种例子,还可以采用从中间到两边的方式等进行存储,只要是存储之后能确定数据的存储顺序的方式都可以。
[0040]为了更为有效的对数据闪存中的数据进行存储和读取,在一个实施例中,可以将数据闪存中的各个数据块分别分为两个区,一个标志区和一个数据区,其中,标志区中的标志位数据与数据区中的存储地址--对应,标志区中的标志位数据用于指示数据区中对应的存储地址是否已有数据写入。
[0041]S卩,可以将数据闪存中各个数据块分别分为两个部分,一部分用于存储N个标志位数据,一个部分用于存储实际的数据。因为数据闪存中的数据擦除后,数据位都将会被置为FFH,因此每当写入新的数据后,就可以改写对应的标志位数据,例如可以改写为00H,当再有新的数据要写入时,通过查询数据为FHl的标志位,可以判断出新数据的存放地址,当数据闪存的一个数据块中的标志位数据全部为OOH后,就向下一个数据块存储数据,当所有数据块中的数据都被写满时(即所述的标志区中的标志位数据都为OOH时),擦除当前最先存满数据的数据块中的数据,通过这种重复的方式保证一定数量的历史数据是一直可以被读取的,而不会因为数据块被擦除而破坏。
[0042]值得注意的是,用OOH表示该标志位数据对应的存储位置已被写入数据仅是本发明实施例的一个【具体实施方式】,是为了更好的说明本发明,还可以采用OOH和Fm中的其它任意一个字节作为表示该存储地址已经有数据写入的标志位数据,只要是区别与FFH的都可以。之所以需要用Fm和OOH这种一个字节的空间来表示标志位,是因为在数据闪存中,数据可存取的最小的单位是字节。
[0043]在一个实施例中,上述数据闪存中的数据块的个数可以为2个,即仅包括第一数据块和第二数据块,这也是较为常用的数据闪存的形式,但是数据块的个数为3个、4个等等都是可以被设想的。
[0044]本发明实施例还提供了一种数据读取方法,主要是在按照上述数据写入方法写入数据之后的操作,如图2所示,包括以下步骤:
[0045]步骤201:确定待获取数据在数据闪存中的存储地址;
[0046]步骤202:从确定的存储地址中读取所述待获取数据。
[0047]在一个实施例中,上述步骤201中可以是先确定需要读取的数据存储在哪个数据块中,然后再确定该数据在这个数据块中的具体的存储地址,以实现最终对数据的读取。例如,为数据块标号为1、2、3……M,那么按照从I到M的顺序,数据块中数据的存储地址按照数据存入的先后排序,那么只要按照从后往前的顺序推算就可以推算出所要请求的数据具体的存储地址。
[0048]值得注意的是,所述待获取数据可以是一个数据,可以是多个连续的数据,也可以是多个分散的数据,按照存储的顺序进行推算都可以得到所要读取的数据的存储地址。
[0049]考虑到在刚存入数据的时候会出现存储的数据按照位置进行推算会超出推算范围,在一个实施例中,提出了一种循环读取的解决方式,例如,在所述历史数据读取请求所请求的是第η个历史数据,且当前所述数据闪存中已存储的数据个数m小于η的情况下,在存储有数据的存储地址中从后向前一直循环查找,直至找到第η个存储地址。例如,总共存储有5个数据(即m=5),现在需要查找第12个历史数据(即n=12),那么相应的就需要循环查找两次,然后再向前查找2个数据,将最终查找到的这个数据作为查找结果。上述数据个数小于m可以是对单个数据块而言的,也可以是对所有数据块而言的,都可以采用这种循环方式。
[0050]基于同一发明构思,本发明实施例中还提供了一种数据写入装置和数据读取装置,如下面的实施例所述。由于数据写入装置和数据读取装置解决问题的原理与数据写入方法和数据读取方法相似,因此数据写入装置和数据读取装置的实施可以参见数据写入方法和数据读取方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。图3是本发明实施例的数据写入装置的一种结构框图,图3是本发明实施例的数据读取装置的一种结构框图。如图3所示,数据写入装置包括:
[0051]写入单元301,用于在数据闪存中,按数据块顺序将数据写入到第一个未被写满的数据块中;
[0052]擦除单元302,用于当数据闪存中所有数据块均被写满时,擦除最先被写满的数据块中的数据。
[0053]在一个实施例中,写入单元301具体用于按照第一个未被写满的数据块中存储地址的顺序,将数据写入到该数据块中。
[0054]在一个实施例中,所述数据块中存储地址的顺序是按照从小到大的顺序排列的。
[0055]在一个实施例中,所述数据闪存中的每个数据块包括:标志区和数据区,其中,标志区中的标志位数据与数据区中的存储地址--对应,标志区中的标志位数据用于指示数据区中对应的存储地址是否已经有数据写入。
[0056]在一个实施例中,在标志位数据为FFH时,指示对应的存储地址没有数据写入,在标志位数据为OOH时,指示对应的存储地址已经有数据写入。
[0057]在一个实施例中,所述数据闪存中数据块的个数为2个。
[0058]如图4所示,数据读取装置包括:
[0059]确定单元401,用于在通过如图3所示的数据写入装置写入数据后,确定待获取数据在数据闪存中的存储地址;
[0060]读取单元402,用于从确定的存储地址中读取所述待获取数据。
[0061]在一个实施例中,确定单元402包括:第一确定模块,用于确定存储所述待获取数据的数据块;第二确定模块,用于确定待获取数据在该数据块中的存储地址。
[0062]在一个实施例中,数据块中数据的存储地址是按照数据存入的先后排序的。
[0063]在一个实施例中,确定单元402具体用于在所述待获取数据是第η个历史数据,且当前所述数据闪存中已存储的数据个数m小于η的情况下,在存储有数据的存储地址中从后向前循环查找,直至找到第η个存储地址。
[0064]在本例中,以数据闪存中仅有两个数据块Block A与Block B,数据请求所请求读取的数据为一个数据为例进行说明。
[0065]在使用数据闪存中的Block A与Block B进行数据存取时,将Block A与Block B分别划分为两部分,一部分用于存储N个数据的标志位,另一部分用于存储实际的数据。由于数据闪存中的块(Block)在擦除后,标志位数据将全部被置为FFH,可以在每次写入新数据时,就改写该新数据写入位置所对应的标志位数据为00H,这样就可以通过标志位数据是FFH或者是00H来判断是否已被写入数据。当再有新的数据要写入时,通过查询对应标志位数据FFH的数据空间,可以判断新数据的存储地址。
[0066]当Block A标志位数据全部被改写为00H后,可以以同样的方法在Block B中存储数据,这个时候如果读取最新的数据,则在Block B中读取,如果读取最早的数据则需要在Block A中读取。当Block B中也写满数据后,擦除Block A,这时Block B中存储的也是最新的N个数据,不会因为块擦除而丢失最新的N个数据。同理,当Block A中再次被写满时,这时擦除Block B,重新填写Block B的存储空间,这样总能够读出最新的N个历史数据,而不会因为块擦除而导致最新的N个历史数据被破坏。
[0067]进一步的,由于最新的N个历史数据的位置是一直变化的,通过上述设定标志位的方式,可以很方便地写入新数据和读取任何历史数据,而不因为块擦除而丢失历史数据。
[0068]具体的,数据写入方法如图5所示,包括以下步骤:
[0069]步骤501:读取新数据;
[0070]步骤502:判断Block A中数据是否已满,如果否,则执行步骤503,否则转而执行步骤506 ;
[0071]步骤503:向Block A中写入新数据,并置位相应地址标志位;
[0072]步骤504:判断Block A中数据是否已满,如果已满,则执行步骤505,否则结束该流程;
[0073]步骤505:擦除Block B中的数据;
[0074]步骤506:向Block B中写入新数据,并置位相应地址标志位;
[0075]步骤507:判断Block B中数据是否已满,如果已满,则执行步骤508,否则结束该流程;
[0076]步骤508:擦除Block A中的数据。
[0077]数据读取方法如图6所示,包括以下步骤:
[0078]
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1