一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

闪存数据读写方法和闪存数据读写装置与流程

2022-03-01 21:14:49 来源:中国专利 TAG:


1.本公开涉及一种闪存数据读写方法和闪存数据读写装置。


背景技术:

2.对于嵌入式设备,通常利用数据闪存或者嵌入式闪存来保存诸如用户配置和系统运行事件记录之类的信息,要求这样的信息即使在设备掉电或由于异常而重启后仍然有效。目前,这样的信息保存在数据闪存或者嵌入式闪存的指定位置上,即,保存在指定的一些闪存块(block)上,并且要先以闪存块为单位进行擦除(erase)操作,然后才能进行写入操作以保存信息。


技术实现要素:

3.本公开涉及一种闪存数据读写方法和闪存数据读写装置,将闪存块划分为多个数据记录区域以写入和读取数据,并且仅在没有可以用于写入数据的空数据记录区域时,才执行闪存块的擦除操作,无需每次写入数据时都对闪存块进行擦除,由此,数据更新的延时较短,减少了闪存块的磨损,并且,在某些实施例中,能更好地处理设备掉电或重启时的数据写入异常,保证数据可用性。
4.根据本公开的一方面,提供了一种闪存数据读写方法。该闪存数据读写方法包括:在闪存的空数据记录区域中确定待写入数据记录区域,所述闪存包括一个或多个闪存块,每个闪存块被划分为多个数据记录区域,每个数据记录区域用于写入一个数据记录;如果所述闪存中不存在空数据记录区域用作所述待写入数据记录区域,则擦除所述闪存的至少一个闪存块,并在被擦除的闪存块中确定所述待写入数据记录区域;以及将待写入数据以数据记录的形式写入所述待写入数据记录区域中,所述数据记录包括载荷字段和用于设置标识值的标识字段,新写入的数据记录的标识值在已写入的最后一个数据记录的标识值的基础上递增预定值。
5.根据本公开的再一方面,提供了一种闪存数据读写装置。该闪存数据读写装置包括:确定模块,在闪存的空数据记录区域中确定待写入数据记录区域,所述闪存包括一个或多个闪存块,每个闪存块被划分为多个数据记录区域,每个数据记录区域用于写入一个数据记录;擦除模块,如果所述闪存中不存在空数据记录区域用作所述待写入数据记录区域,则所述擦除模块擦除所述闪存的至少一个闪存块,在这种情况下,所述确定模块在被擦除的闪存块中确定所述待写入数据记录区域;以及写入模块,将待写入数据以数据记录的形式写入所述待写入数据记录区域中,所述数据记录包括载荷字段和用于设置标识值的标识字段,新写入的数据记录的标识值在已写入的最后一个数据记录的标识值的基础上递增预定值。
6.根据本公开的再一方面,提供了一种闪存数据读写装置。该闪存数据读写装置包括存储器和处理器。所述存储器用于存储程序代码。所述处理器用于在执行所述程序代码时执行如下操作:在闪存的空数据记录区域中确定待写入数据记录区域,所述闪存包括一
个或多个闪存块,每个闪存块被划分为多个数据记录区域,每个数据记录区域用于写入一个数据记录;如果所述闪存中不存在空数据记录区域用作所述待写入数据记录区域,则擦除所述闪存的至少一个闪存块,并在被擦除的闪存块中确定所述待写入数据记录区域;以及将待写入数据以数据记录的形式写入所述待写入数据记录区域中,所述数据记录包括载荷字段和用于设置标识值的标识字段,新写入的数据记录的标识值在已写入的最后一个数据记录的标识值的基础上递增预定值。
7.根据本公开的实施例,无需每次写入数据时都对闪存块进行擦除,由此,数据更新的延时较短,减少了闪存块的磨损,并且,在某些实施例中,能更好地处理设备掉电或重启时的数据写入异常,保证数据可用性。
附图说明
8.通过下面结合附图对实施例的描述,本公开的方面、特征和优点将变得更加清楚和容易理解,其中:
9.图1是根据本公开实施例的闪存数据读写方法的流程图;
10.图2是根据本公开实施例的数据记录的示例;
11.图3是根据本公开实施例确定待读取数据记录区域和待写入数据记录区域的示意图;
12.图4是根据本公开实施例在闪存包括三个闪存块的情况下确定待写入数据记录区域的示意图;
13.图5是根据本公开实施例的闪存数据读写方法的流程图;
14.图6是根据本公开实施例的闪存数据读写方法在系统上电时的初始化流程图;
15.图7是根据本公开实施例的闪存数据读写装置的示意模块图;
16.图8是根据本公开实施例的另一闪存数据读写装置的示意框图。
具体实施方式
17.下面将参考本公开的示例性实施例对本公开进行详细描述。然而,本公开不限于这里所描述的实施例,其可以以许多不同的形式来实施。所描述的实施例仅用于使本公开彻底和完整,并全面地向本领域的技术人员传递本公开的构思。所描述的各个实施例的特征可以互相组合或替换,除非明确排除或根据上下文应当排除。
18.如上所述,目前在闪存上保存数据的方式是利用闪存中指定的一些闪存块。当需要写入或更新数据时,需要对相应的闪存块进行擦除。由于每次进行写入操作时都需要擦除整个闪存块,因此会导致擦除时间较长,从而导致进行数据更新的延时较长。此外,如果频繁写入或更新某种类型的数据,则与该种类型的数据的存储对应的闪存块将会被频繁擦除,而每个闪存块的擦除次数是有限的,超过该闪存块的阈值擦除次数后,该闪存块就会失效,从而导致不能再存储数据。另外,如果正在擦除或写入闪存块时,设备掉电或者重启,则该闪存块上的数据可能已经被擦除,而需要写入的数据却未被写入,从而导致该闪存块上的数据丢失。
19.本公开的实施例提出一种闪存数据读写方法和闪存数据读写装置,将闪存块划分为多个数据记录区域以写入和读取数据,并且仅在没有可以用于写入数据的空数据记录区
域时,才执行闪存块的擦除操作,无需每次写入数据时都对闪存块进行擦除,由此,数据更新的延时较短,减少了闪存块的磨损,并且,在某些实施例中,能更好地处理设备掉电或重启时的数据写入异常,保证数据可用性。
20.图1是根据本公开实施例的闪存数据读写方法100的流程图。图1的步骤s110-s130对应于写入数据的流程。为了写入数据,首先要确定将数据写入到闪存的哪个位置。如上所述,闪存可以包括一个或多个闪存块,这些闪存块用于存储数据,并且是擦除操作的最小操作单元。在根据本公开实施例的闪存数据读写方法100中,取代以闪存块作为数据写入和读取的单元,将每个闪存块划分为多个数据记录区域,以每个数据记录区域作为数据写入和读取的单元,每个数据记录区域用于写入和存储一个数据记录。上述每个数据记录区域可以是闪存块中固定长度的用于存储数据的区域。这样,例如,每个闪存块被划分为10个数据记录区域,则至少进行10次数据更新才会进行一次该闪存块的擦除操作,从而减少数据更新的延时,减少闪存块的磨损。在以数据记录区域作为数据写入和读取单元的基础上,如果闪存中存在空数据记录区域,则数据会被写入空数据记录区域中,因此,如图1所示,在闪存数据读写方法100的步骤s110,在闪存的空数据记录区域中确定待写入数据记录区域。然而,如果闪存中不存在空数据记录区域可以用作待写入数据记录区域,那么就需要对至少一个闪存块执行擦除操作,以使得闪存中重新具有空数据记录区域。因此,如图1所示,在闪存中不存在空数据记录区域用作待写入数据记录区域时,在闪存数据读写方法100的步骤s120,需要擦除闪存的至少一个闪存块,并在被擦除的闪存块中确定待写入数据记录区域。在经由步骤s110或s120确定了待写入数据记录区域之后,在步骤s130,将待写入数据以数据记录的形式写入该待写入数据记录区域中。在完成数据的写入之后,该待写入数据记录区域中已经存储了最新的数据,因此,可选地,为了方便后续的读取操作,可以直接将该待写入数据记录区域确定为待读取数据记录区域,并在执行读取操作时读取该待读取数据记录区域中的数据。
21.根据本公开的实施例,待写入数据是以数据记录的形式进行写入的。图2是根据本公开实施例的数据记录200的示例。数据记录200可以包括载荷字段和用于设置标识值(id)的标识字段。载荷字段对应于待写入数据。在写入每个数据时,还为其设置标识值。新写入的数据记录的标识值在已写入的最后一个数据记录的标识值的基础上递增预定值,例如递增1。例如,已写入的最后一个数据记录的标识值是5,则新写入的数据记录的标识值为5 预定值(在预定值为1的情况下,该新写入的数据记录的标识值为6)。
22.该标识值可以为后续进行数据读取或写入操作而需要确定待读取数据记录区域或待写入数据记录区域时提供参考。图3是根据本公开实施例的确定待读取数据记录区域和待写入数据记录区域的示意图。最大标识值与最新写入的数据(即,最后一次写入的数据)相对应,因此,存储具有该最大标识值的数据记录的非空数据记录区域就是先前最后一次进行写入操作的数据记录区域,这样的数据记录区域可以作为待读取数据记录区域。因此,可以在闪存的非空数据记录区域中确定待读取数据记录区域,该待读取数据记录区域是存储具有最大标识值的数据记录的数据记录区域。例如,在图3中,闪存块被划分为多个数据记录区域,包括非空数据记录区域和空数据记录区域。假设非空数据记录区域310中存储了具有最大标识值的数据记录,则该数据记录区域310是先前最后一次进行写入操作的数据记录区域,可以将其作为待读取数据记录区域。
23.下一次的数据写入操作可以在逻辑上接续(即,紧邻)该数据记录区域310的空数据记录区域,即数据记录区域320中进行,因此,将这样的空数据记录区域确定为待写入数据记录区域。由此,在一个实施例中,如果闪存中存在空数据记录区域,则上述步骤s110中确定待写入数据记录区域可以包括,将待写入数据记录区域确定为闪存中逻辑上接续存储了具有最大标识值的数据记录的非空数据记录区域(例如数据记录区域310)的空数据记录区域(例如数据记录区域320)。本说明书中,术语“逻辑上接续”、“逻辑上紧邻”或“逻辑上相邻”,是指某两个数据记录区域被访问的顺序是相继的,它们在物理位置上可以相邻也可以不相邻。
24.在另一实施例中,如果闪存中存在空数据记录区域、但不存在非空数据记录区域,即,该闪存中全部是空数据记录区域,则上述步骤s110中确定待写入数据记录区域可以包括,将闪存中的第一个数据记录区域确定为待写入数据记录区域。
25.可选地,待读取数据记录区域和待写入数据记录区域可以各自由指向对应的数据记录区域的指针来指示。
26.为了进一步减小闪存块的磨损以及减少数据丢失,可以使用具有多个闪存块的闪存。换言之,闪存中可以包括至少两个用于存储数据的闪存块。这样,在一个闪存块中的全部数据记录区域都写满之后,可以在另一个不同的闪存块中进行下一次的写入操作。由此,即使需要为下一次的写入操作执行擦除操作,即,其他闪存块中也没有空数据记录区域时,可以擦除其他闪存块而不是当前闪存块(即,存储最后一次写入的数据的闪存块)。因此,相较于仅使用一个闪存块的方式,使用多个闪存块可以使当前闪存块不需要在写满之后立即被擦除,从而减小了闪存块的磨损。此外,因为最后一次写入的数据和当前要写入的数据对应的是不同闪存块中的数据记录区域,所以最后一次写入的数据并不会被擦除,从而即使由于设备掉电或重启而导致数据写入异常,也能读取先前最后一次写入的数据,降低了数据丢失的风险,保证了数据的可用性。因此,在一个实施例中,闪存可以包括至少两个闪存块。如果该至少两个闪存块中都不存在空数据记录区域可以用作待写入数据记录区域,则可以擦除至少一个未存储具有最大标识值的数据记录的闪存块。图4是根据本公开实施例在闪存包括三个闪存块的情况下确定待写入数据记录区域的示意图。在图4中,闪存块1、2、3分别被划分为多个数据记录区域。假设闪存1中的非空数据记录区域410中存储了具有最大标识值的数据记录,则该数据记录区域410是先前最后一次进行写入操作的数据记录区域,因而其被确定为待读取数据记录区域。闪存块1中所有数据记录区域已经写满,因此需要在闪存块2和闪存块3中确定待写入数据记录区域。在一个示例中,若闪存块2还未进行过数据写入而闪存块3已写满,则可以例如将闪存块2中的空数据记录区域420确定为待写入数据记录区域。在另一示例中,若闪存块2、闪存块3均已写满,则可以对闪存块2和闪存块3中的至少一个执行擦除操作,并在被擦除的闪存块中确定待写入数据记录区域。例如,对闪存块2执行擦除操作,将擦除后形成的闪存块2中的空数据记录区域420确定为待写入数据记录区域;或者对闪存块2和3都执行擦除操作,将擦除后形成的闪存块2中的空数据记录区域420确定为待写入数据记录区域。通过这种方式,减小了闪存块1的磨损,并且即使设备掉电或重启,由于并不擦除闪存块1,因此保证了闪存块1上的数据,尤其是最后一次写入闪存块1的数据(写入在闪存块1的数据记录区域410中)的可用性,即,可以有效保留历史记录。
27.在闪存包括至少两个闪存块的情况下,为了进一步减小闪存块的磨损,可以进一
步将擦除操作限定到与当前写满的闪存块相邻的下一闪存块。换言之,可以按照闪存块的逻辑顺序依次确定待写入数据的闪存块和要擦除的闪存块。因此,在一个实施例中,依次从闪存的至少两个闪存块中确定待写入数据记录区域。例如,参照图4中的示例,如果闪存块1未写满,则继续在闪存块1中确定待写入数据记录区域。如果闪存块1已写满,则在闪存块2中确定待写入数据记录区域;如果闪存块2也写满,则在闪存块3中确定待写入数据记录区域;接着,如果闪存块3也写满,则轮回到闪存块1中确定待写入数据记录区域。进一步地,如果图4中闪存块1的数据记录区域410中存储了具有最大标识值的数据记录,并且闪存块1、2、3中都不存在空数据记录区域用作待写入数据记录区域,则擦除存储了具有最大标识值的数据记录(即,数据记录区域410中存储的数据记录)的闪存块(即,闪存块1)的下一闪存块(即,闪存块2),并在该下一闪存块(即,闪存块2)中确定待写入数据记录区域。由此,对于某个闪存块来说,只有其他闪存块都被擦除一次之后,才会对其进行擦除,因此进一步减少了闪存块的磨损。例如,在闪存包括10个闪存块、每个闪存块被划分为10个数据记录区域的情况下,闪存块1在闪存块2-9分别被擦除一次之后,才会被擦除,也就是说,每100次数据更新,闪存块1才会被擦除一次,因此减少了闪存块1的磨损。对其他闪存块2-9来说也是如此。
28.在进行擦除和写入操作的过程中,设备突然掉电或者重启,可能会导致相应数据记录区域中未能写入或者未能正确写入数据记录。因此,在读取数据时,需要检测所读取的数据是否是正确存储的数据。为此,返回参照图2,在一个实施例中,数据记录200还可以包括校验字段,用于存储校验码。该校验码可以例如是利用校验算法基于要写入上述载荷字段中的待写入数据和标识字段中的标识值生成。可以使用已知的各种校验算法来生成上述校验码,例如校验和校验、异或校验、循环冗余校验(例如crc-16)等。
29.在数据记录包括校验字段的情况下,在读取数据记录中的数据时,可以基于其中存储的校验码来进行校验,以检测所读取的载荷字段中的数据是否是正确存储的数据。因此,可选地,参照图1描述的闪存数据读写方法还可以包括图5所示的流程。图5是根据本公开实施例的闪存数据读写方法500的流程图,其中的步骤s510-s550对应于读取数据的流程。为了读取数据,首先要确定要读取的数据所在的位置。为此,如上面已经参照图3所讨论的,在步骤s510,可以在闪存的非空数据记录区域中确定待读取数据记录区域,该待读取数据记录区域是存储具有最大标识值的数据记录的数据记录区域。
30.在步骤s520,从所确定的待读取数据记录区域读取数据记录,并通过该数据记录中的校验码进行校验。例如,在采用crc-16算法的情况下,可以使用crc-16算法计算出所读取的数据记录中载荷字段和id字段的校验码,对比所读取的数据记录中的实际校验码,如果相等,则认为校验成功,反之,则认为校验不成功。
31.在步骤s530,判断是否校验成功。如果校验成功,则在步骤s540,将所读出的数据记录确定为有效数据记录。如果检验不成功,则在步骤s550,基于数据记录的标识值来更新待读取数据记录区域,继续读取与当前读取的数据记录区域逻辑上相邻的上一非空数据记录区域以寻找有效数据记录。也就是说,在步骤s550,将待读取数据记录区域确定为存储了具有比所读出的数据记录的标识值递减上述预定值的标识值的数据记录的数据记录区域,并且返回至步骤s520来基于更新的待读取数据记录区域读取数据记录和校验,直至找到有效数据记录。例如,在图3中,一开始,非空数据记录区域310由于存储具有最大标识值的数据记录而被确定为待读取数据记录区域。但是,如果基于非空数据记录区域310中存储的数
据记录中的校验码进行校验不成功,则需要进一步将待读取数据记录区域更新为存储了数据记录区域310中存储的数据记录的标识值(例如为5)递减预定值(例如为1)得到的标识值(例如为5-1=4)的数据记录的数据记录区域,即非空数据记录区域330。如果基于该数据记录区域330中存储的数据记录中的校验码进行校验仍然不成功,则需要进一步将待读取数据记录区域更新为数据记录区域340,直至校验成功,找到有效数据记录。
32.图6是根据本公开实施例的闪存数据读写方法在系统上电时的初始化流程图600。如图6所示,在装载闪存的系统上电时,根据本公开实施例的闪存数据读写方法还包括步骤s610-s630。在步骤s610,需要确定闪存的所有数据记录区域是空数据记录区域还是非空数据记录区域。待读取数据记录区域一定位于非空数据记录区域中,并且待写入数据记录区域一定位于空数据记录区域中。在步骤s620,为了确定非空数据记录区域中的哪一个是待读取数据记录区域,可以首先基于每个非空数据记录区域中存储的数据记录中的校验码确定该数据记录是否为有效数据记录,由此可以排除虽然有数据记录、但是该数据记录是无效的那些非空数据记录区域,例如在进行写入操作时设备掉电或重启而导致没有正确写入的那些数据记录区域。上面已经参照步骤s520描述了基于校验码确定数据记录是否为有效记录的过程,在此不再赘述。在步骤s630,确定待读取数据记录区域和待写入数据记录区域。其中,将存储具有最大标识值的有效数据记录的数据记录区域确定为待读取数据记录区域,并且将待写入数据记录区域确定为逻辑上距离该所确定的待读取数据记录区域最近的空数据记录区域。如上所述,标识值最大的有效数据记录是最近一次写入的最新记录,因此,将存储这样的数据记录的数据记录区域确定为待读取数据记录区域。此外,下一次的数据写入操作应当在逻辑上接续该待读取数据记录区域,即,逻辑上距离该待读取数据记录区域最近,并且应该是空数据记录区域,因此,将这样的空数据记录区域确定为待写入数据记录区域。
33.返回参照图2,为了使得数据记录区域的检测更为方便和快速,在一个实施例中,数据记录200还可以包括封装头字段,用于标识数据记录的开始。封装头字段例如可以是0xaa、0x55等便于进行检测的特殊字符。这样,可以只在具有封装头字段的数据记录相对应的数据记录区域进行相关数据的读取和写入,节省在内存中寻找数据记录区域的时间。
34.因此,根据本公开实施例的闪存数据读写方法减少了数据更新的延时,减少了闪存块的磨损,并且在某些实施例中,能更好地处理设备掉电或重启时的数据写入异常,保证数据可用性。
35.图7是根据本公开实施例的闪存数据读写装置700的示意模块图。闪存数据读写装置700可以用于实现参照图1-6描述的上述闪存数据读写方法。闪存数据读写装置700可以包括确定模块710、擦除模块720和写入模块730。
36.确定模块710可以在闪存的空数据记录区域中确定待写入数据记录区域,闪存包括一个或多个闪存块,每个闪存块被划分为多个数据记录区域,每个数据记录区域用于写入一个数据记录。
37.如果闪存中不存在空数据记录区域用作待写入数据记录区域,则擦除模块720可以擦除闪存的至少一个闪存块,在这种情况下,确定模块710可以在被擦除的闪存块中确定待写入数据记录区域。
38.写入模块730可以将待写入数据以数据记录的形式写入待写入数据记录区域中,
数据记录包括载荷字段和用于设置标识值的标识字段,新写入的数据记录的标识值在已写入的最后一个数据记录的标识值的基础上递增预定值。
39.在一个实施例中,确定模块710可以将待写入数据记录区域确定为闪存中逻辑上接续存储了具有最大标识值的数据记录的非空数据记录区域的空数据记录区域。如果闪存中不存在非空数据记录区域,则确定模块710可以将所述待写入数据记录区域确定为所述闪存中的任第一个空数据记录区域。
40.在一个实施例中,闪存可以包括至少两个闪存块。如果至少两个闪存块中都不存在空数据记录区域用作待写入数据记录区域,则擦除模块720可以擦除至少一个未存储具有最大标识值的数据记录的闪存块。
41.在一个实施例中,确定模块710可以在确定待写入数据记录区域时依次从至少两个闪存块中确定待写入数据记录区域。如果至少两个闪存块中都不存在空数据记录区域用作待写入数据记录区域,则擦除模块720可以擦除存储了具有最大标识值的数据记录的闪存块的下一闪存块,并且确定模块710可以在下一闪存块中确定待写入数据记录区域。
42.在一个实施例中,数据记录区域还可以包括校验字段,用于存储校验码。
43.在一个实施例中,如图7所示,确定模块710还可以包括读取和校验模块740。确定模块710可以在闪存的非空数据记录区域中确定待读取数据记录区域,待读取数据记录区域是存储具有最大标识值的数据记录的数据记录区域。读取和校验模块740可以从待读取数据记录区域读取数据记录,并通过校验码进行校验。如果校验成功,则读取和校验模块740可以将所读出的数据记录确定为有效数据记录;如果检验不成功,则确定模块710可以将待读取数据记录区域确定为存储了具有比所读出的数据记录的标识值递减预定值的标识值的数据记录的数据记录区域,并且读取和校验模块740可以基于更新的待读取数据记录区域读取数据记录和校验,直至找到有效数据记录。
44.在一个实施例中,在装载闪存的系统上电时,确定模块710可以确定闪存的所有数据记录区域是空数据记录区域还是非空数据记录区域。接着,读取和校验模块740可以基于校验码确定非空数据记录区域中存储的数据记录是否为有效数据记录。然后,确定模块710可以将存储具有最大标识值的有效数据记录的数据记录区域确定为待读取数据记录区域,并且将待写入数据记录区域确定为逻辑上距离待读取数据记录区域最近的空数据记录区域。
45.在一个实施例中,写入模块730完成写入之后,确定模块710可以将待写入数据记录区域确定为待读取数据记录区域。
46.在一个实施例中,数据记录还可以包括封装头字段,用于标识数据记录的开始。
47.根据本公开实施例的闪存数据读写装置减少了数据更新的延时,减少了闪存块的磨损,并且能更好地处理设备掉电或重启时的数据写入异常,保证数据可用性。
48.图8是根据本公开实施例的另一闪存数据读写装置800的示意框图。该闪存数据读写装置800可以是用于闪存数据读写的任何设备,例如是笔记本计算机、台式计算机、平板计算机等。装置800的类型不构成对本公开的限制。如图8所示,该闪存数据读写装置800可以包括存储器810和处理器820。存储器810用于存储程序代码。处理器820用于在执行存储器810中存储的程序代码时执行如下操作:在闪存的空数据记录区域中确定待写入数据记录区域,闪存包括一个或多个闪存块,每个闪存块被划分为多个数据记录区域,每个数据记
录区域用于写入一个数据记录。如果闪存中不存在空数据记录区域用作待写入数据记录区域,则擦除闪存的至少一个闪存块,并在被擦除的闪存块中确定待写入数据记录区域。将待写入数据以数据记录的形式写入待写入数据记录区域中,数据记录包括载荷字段和用于设置标识值的标识字段,新写入的数据记录的标识值在已写入的最后一个数据记录的标识值的基础上递增预定值。
49.在一个实施例中,处理器820在执行程序代码时还执行如下操作:将待写入数据记录区域确定为闪存中逻辑上接续存储了具有最大标识值的数据记录的非空数据记录区域的空数据记录区域。如果闪存中不存在非空数据记录区域,则将待写入数据记录区域确定为闪存中的任第一个空数据记录区域。
50.在一个实施例中,闪存包括至少两个闪存块,处理器820在执行程序代码时还执行如下操作:如果至少两个闪存块中都不存在空数据记录区域用作待写入数据记录区域,则擦除至少一个未存储具有最大标识值的数据记录的闪存块。
51.在一个实施例中,处理器820在执行程序代码时还执行如下操作:在确定待写入数据记录区域时依次从至少两个闪存块中确定待写入数据记录区域;如果至少两个闪存块中都不存在空数据记录区域用作待写入数据记录区域,则擦除存储了具有最大标识值的数据记录的闪存块的下一闪存块,并在下一闪存块中确定待写入数据记录区域。
52.在一个实施例中,数据记录区域还包括校验字段,用于存储校验码。
53.在一个实施例中,处理器820在执行程序代码时还执行如下操作:在闪存的非空数据记录区域中确定待读取数据记录区域,待读取数据记录区域是存储具有最大标识值的数据记录的数据记录区域。从待读取数据记录区域读取数据记录,并通过校验码进行校验。如果校验成功,则将所读出的数据记录确定为有效数据记录。如果检验不成功,则将待读取数据记录区域确定为存储了具有比所读出的数据记录的标识值递减预定值的标识值的数据记录的数据记录区域,并且基于更新的待读取数据记录区域读取数据记录和校验,直至找到有效数据记录。
54.在一个实施例中,在装载闪存的系统上电时,处理器820在执行程序代码时还执行如下操作:确定闪存的所有数据记录区域是空数据记录区域还是非空数据记录区域。基于校验码确定非空数据记录区域中存储的数据记录是否为有效数据记录。将存储具有最大标识值的有效数据记录的数据记录区域确定为待读取数据记录区域,并且将待写入数据记录区域确定为逻辑上距离待读取数据记录区域最近的空数据记录区域。
55.在一个实施例中,处理器820在执行程序代码时还执行如下操作:在完成写入之后,将待写入数据记录区域确定为待读取数据记录区域。
56.在一个实施例中,数据记录还包括封装头字段,用于标识数据记录的开始。
57.根据本公开实施例的闪存数据读写装置减少了数据更新的延时,减少了闪存块的磨损,并且能更好地处理设备掉电或重启时的数据写入异常,保证数据可用性。
58.本公开中涉及的装置、设备、系统的方框图仅作为示例性的例子并不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些电路、器件、装置、设备、系统,只要能够实现所期望的目的即可。
59.本领域技术人员应该理解,上述的具体实施例仅是例子而非限制,可以根据设计
需求和其它因素对本公开的实施例进行各种修改、组合、部分组合和替换,只要它们在所附权利要求或其等同的范围内,即属于本公开所要保护的权利范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献