CN107256197B - 一种数据存储方法、存储装置及智能终端 - Google Patents
一种数据存储方法、存储装置及智能终端 Download PDFInfo
- Publication number
- CN107256197B CN107256197B CN201710353859.4A CN201710353859A CN107256197B CN 107256197 B CN107256197 B CN 107256197B CN 201710353859 A CN201710353859 A CN 201710353859A CN 107256197 B CN107256197 B CN 107256197B
- Authority
- CN
- China
- Prior art keywords
- data
- block
- status flag
- region
- blocks
- 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/16—Protection against loss of memory contents
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
Abstract
本发明公开了一种数据存储方法、存储装置及智能终端,其中,所述数据存储方法通过将存储区域划分为N个block区域,每个block区域包括用于保存数据的数据区和用于保存状态标志的标志区;按预设顺序循环在N个block区域的数据区中擦写数据,并在写入数据后更新每个block区域中标志区的状态标志;当擦写过程发生掉电时,重新上电后根据所有block区域的状态标志搜寻至blockS或block(S‑1),继续按预设顺序将数据和状态标志写入block(S+1)或blockS中,blockS为掉电时最后一次进行擦写数据的block区域,通过将存储区域进行划分并设置标志区,在每个区域写入数据后更新其状态标志,当发生掉电情况时,能根据所有区域的状态标志恢复至掉电前正进行擦写数据的区域,确保数据存储的正确性不受掉电的影响。
Description
技术领域
本发明涉及数据存储技术领域,特别涉及一种数据存储方法、存储装置及智能终端。
背景技术
目前存储器通常使用一个计数器计数一个存储区域的擦写次数,当擦写次数计数值大于擦写寿命表示该区域失效,选择下一存储区域继续操作。但是如果在写这个计数值时出现掉电,该计数值错乱,最终导致该存储区域的数据都不可靠。
因而现有技术还有待改进和提高。
发明内容
鉴于上述现有技术的不足之处,本发明的目的在于提供一种数据存储方法、存储装置及智能终端,通过将存储区域进行划分并设置标志区,在每个区域写入数据后更新其状态标志,当发生掉电情况时,重新上电后能根据所有区域的状态标志恢复至掉电前正在进行擦写数据的区域,确保数据存储的正确性不受掉电的影响。
为了达到上述目的,本发明采取了以下技术方案:
一种数据存储方法,其包括如下步骤:
A、将存储区域划分为N个block区域,记为block1、block2、...、blockN,每个block区域包括用于保存数据的数据区和用于保存状态标志的标志区;
B、按预设顺序循环在N个block区域的数据区中擦写数据,并在写入数据后更新每个block区域中标志区的状态标志;
C、当擦写过程发生掉电时,重新上电后根据所有block区域的状态标志搜寻至blockS或block(S-1),继续按预设顺序将数据和状态标志写入block(S+1)或blockS中,其中blockS为掉电时最后一次进行擦写数据的block区域。
所述的数据存储方法中,所述步骤A中:所述状态标志用于表示该block区域数据的新旧,其包括M种有效状态,记为state1、state2、...、stateM,其中stateM新于state(M-1),state(M-1)新于state(M-2),...,state2新于state1,state1新于stateM。
所述的数据存储方法中,所述步骤B具体包括:按照block1-block2-...-blockN-block1-...的顺序循环在N个block区域的数据区中擦写数据,在每个block区域的数据区写入数据后将其状态标志更新为stateK,且在block1-...-blockN循环写入一轮后,下一轮循环在每个block区域的数据区写入数据后将其状态标志更新为state(K+1)。
所述的数据存储方法中,所述步骤C包括步骤:
C1、上电后读取所有block区域的状态标志;
C2、当blockS的数据和状态标志均正常写入时,根据所有block区域的状态标志搜寻至blockS,并继续按预设顺序将数据和状态标志写入block(S+1) 中;
当blockS的数据和状态标志至少一项未写入时,根据所有block区域的状态标志搜寻至block(S-1),并继续按预设顺序将数据和状态标志写入blockS中。
所述的数据存储方法中,所述步骤C2具体包括:
当blockS的数据和状态标志均正常写入时,若当前所有block区域的状态标志存在两种有效状态时,选择相邻两种有效状态对应的block区域中数据最新的block区域作为blockS;若当前所有block区域的状态标志仅有一种有效状态时,则令blockN作为blockS;之后继续按预设顺序将数据和状态标志写入block(S+1) 中;
当blockS的数据和状态标志至少一项未写入时,若当前所有block区域的状态标志存在有效状态和无效状态时,选择无效状态对应的block区域的前一个区域作为block(S-1);若当前所有block区域的状态标志存在两种有效状态时,选择相邻两种有效状态对应的block区域中数据最新的block区域作为block(S-1),若当前所有block区域的状态标志仅有一种有效状态时,则令blockN作为block(S-1);之后继续按预设顺序将数据和状态标志写入blockS中。
所述的数据存储方法中,所述步骤A中,每个block区域分别位于相互独立的不同扇区。
所述的数据存储方法中,所述步骤A中,状态标志被擦除后的默认值为无效状态。
所述的数据存储方法中,N≥2,M≥3。
一种存储装置,其中,所述存储装置存储有计算机程序,所述计算机程序适于被执行以实现如上所述的数据存储方法。
一种智能终端,其包括处理器、与所述处理器通信连接的存储器,所述存储器存储有计算机程序,所述计算机程序被处理器执行以实现如上所述的数据存储方法;
所述处理器用于调用所述存储器中的计算机程序,以执行如上所述的数据存储方法。
相较于现有技术,本发明提供的数据存储方法、存储装置及智能终端中,所述数据存储方法通过将存储区域划分为N个block区域,记为block1、block2、...、blockN,每个block区域包括用于保存数据的数据区和用于保存状态标志的标志区;按预设顺序循环在N个block区域的数据区中擦写数据,并在写入数据后更新每个block区域中标志区的状态标志;当擦写过程发生掉电时,重新上电后根据所有block区域的状态标志搜寻至blockS或block(S-1),继续按预设顺序将数据和状态标志写入block(S+1)或blockS中,其中blockS为掉电时最后一次进行擦写数据的block区域,通过将存储区域进行划分并设置标志区,在每个区域写入数据后更新其状态标志,当发生掉电情况时,重新上电后能根据所有区域的状态标志恢复至掉电前正在进行擦写数据的区域,确保数据存储的正确性不受掉电的影响。
附图说明
图1为本发明提供的数据存储方法的流程图。
图2为本发明提供的智能终端的结构框图。
图3为本发明提供的数据存储方法的应用实施例的流程图。
具体实施方式
鉴于现有技术中存储器在掉电时容易发生数据存储错误等缺点,本发明的目的在于提供一种数据存储方法、存储装置及智能终端,通过将存储区域进行划分并设置标志区,在每个区域写入数据后更新其状态标志,当发生掉电情况时,重新上电后能根据所有区域的状态标志恢复至掉电前正在进行擦写数据的区域,确保数据存储的正确性不受掉电的影响。
为使本发明的目的、技术方案及效果更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
请参阅图1,本发明提供的数据存储方法包括如下步骤:
S100、将存储区域划分为N个block区域,记为block1、block2、...、blockN,每个block区域包括用于保存数据的数据区和用于保存状态标志的标志区;
S200、按预设顺序循环在N个block区域的数据区中擦写数据,并在写入数据后更新每个block区域中标志区的状态标志;
S300、当擦写过程发生掉电时,重新上电后根据所有block区域的状态标志搜寻至blockS或block(S-1),继续按预设顺序将数据和状态标志写入block(S+1)或blockS中,其中blockS为掉电时最后一次进行擦写数据的block区域。
本发明通过将可擦写存储区域划分为N个block区域,其中N≥2,分别记为block1、block2、...、blockN,每个block区域分别位于相互独立的不同扇区,即不同扇区之间的擦除是相互独立的,烧写也是相互独立的,擦写任意扇区内的任意地址,其他扇区均不被影响,其中每个block区域的大小可小于一个扇区或者包含多个扇区,具体可根据实际需求进行选择,且每个block区域均包括用于保存数据的数据区和用于保存状态标志的标志区,其中数据区和标志区可设置在相同的扇区或者不同的扇区,本发明对此不作限定。
进行区域划分后,擦写数据时按预设顺序循环在N个block区域的数据区中擦写数据,并且在写入数据后更新每个block区域中标志区的状态标志,即在进行数据擦写时,先擦除数据区,将数据写入数据区中,再擦除标志区,将更新后的状态标志写入标志区中,以表示该区域的数据已更新。具体来说,所述状态标志用于表示该block区域数据的新旧,其包括M种有效状态,M≥3,分别记为state1、state2、...、stateM,状态标志存在非递移性,其中stateM新于state(M-1),state(M-1)新于state(M-2),...,state2新于state1,state1又新于stateM。
特别地,本发明不采用状态标志被擦除后的默认值作为M种有效状态之一,即状态标志被擦除后的默认值为无效状态,例如,假设状态标志位宽是2个bit,若存储器中状态标志被擦除后的默认值为1,则2’b11为无效状态,若存储器中状态标志被擦除后的默认值为0,则2’b00为无效状态,后续根据每个block区域状态标志的新旧对比来搜寻掉电前最后一次进行擦写操作的区域,避免因掉电导致的数据错误。
具体地,步骤S200中,本发明按照预设顺序:block1-block2-...-blockN-block1-...的顺序循环在N个block区域的数据区中擦写数据,在每个block区域的数据区写入数据后将其状态标志更新为stateK,并且,在block1-...-blockN循环写入一轮后,下一轮循环在每个block区域的数据区写入数据后将其状态标志更新为state(K+1),需说明的是,当K=M时,K+1=1。
即假设第一使用时,所有bit均处于擦除状态,此时无有效数据,当需要写入新数据时,先在block1的数据区中擦写数据,并将block1的状态标志更新为state1,再在block2的数据区中擦写数据,并将block2的状态标志更新为state1,以此类推,在第N次写入新数据时,先在blockN的数据区中擦写数据,并将blockN的状态标志更新为state1,此时完成block1到blockN的第一轮循环写入,开始下一轮循环后,即第N+1次写入新数据时,先在block1的数据区中擦写数据,并将block1的状态标志更新为state2,以此类推完成第二轮循环写入,当完成第M轮循环后,开始下一轮循环后,即第M*N+1次写入新数据时,又重复第一轮循环写入的过程,先在block1的数据区中擦写数据,并将block1的状态标志更新为state1,以此类推继续循环写入数据和状态更新的过程。
本发明采用上述循环擦写以及状态更新方式,使得在正常擦写数据时,所有的block区域中最多只可能同时出现两种相邻的有效状态,不会同时出现第三种有效状态,且根据相邻两种有效状态的新旧也能判断出当前正在进行擦写操作的block区域,为后续掉电时搜寻最新写入的数据区域提供保证。当擦写过程发生掉电时,重新上电后根据所有block区域的状态标志搜寻至blockS或block(S-1),继续按预设顺序将数据和状态标志写入block(S+1)或blockS中,其中blockS为掉电时最后一次进行擦写数据的block区域,需说明的是,当S=1时,S-1=N,当S=N时,S+1=1。即重新上电后能根据所有区域的状态标志恢复至掉电前正在进行擦写数据的区域或其前一个区域,确保数据存储的正确性不受掉电的影响。
具体地,所述步骤S300包括步骤:
S301、上电后读取所有block区域的状态标志;
S302、当blockS的数据和状态标志均正常写入时,根据所有block区域的状态标志搜寻至blockS,并继续按预设顺序将数据和状态标志写入block(S+1) 中;
当blockS的数据和状态标志至少一项未写入时,根据所有block区域的状态标志搜寻至block(S-1),并继续按预设顺序将数据和状态标志写入blockS中。
本发明在掉电重新上电后,读取所有block区域的状态标志,根据不同情况可追踪至掉电前相应的block区域,当掉电时最后一次进行擦写数据的block区域blockS的数据和状态均正常写入时,根据所有block区域的状态标志搜寻至blockS,并继续按预设顺序将数据和状态标志写入block(S+1) 中,即此时掉电并未对数据造成影响,数据没有丢失,上电后可继续按预设顺序循环进行数据擦写;而当blockS的数据和状态标志至少一项未写入时,此时包括两种情况,数据写入但状态标志未写入,或者数据和状态标志都未写入,由于数据写入在前,状态标志写入在后,因此不会发生数据未写入但状态标志已写入更新的情况,保证存储区域中数据新旧标志不会产生混乱,在这两种情况下,根据所有block区域的状态标志搜寻至block(S-1),并继续按预设顺序将数据和状态标志写入blockS中,即这两种情况下,由于数据和状态标志中至少一项未写入,此时会导致最后一次写入的数据丢失,即blockS区域的数据,但本发明可通过掉电前的正确状态标志,追溯到掉电前最新一次且正确的数据擦写区域,即blockS区域的前一个区域block(S-1),并继续将数据和状态标志写入blockS中,使掉电后重新上电过程仅仅影响了当时的数据擦写过程,而对后续其他block区域的数据写入不会有影响,数据以及状态标志均不会发生混乱,将掉电对数据存储的影响降到最低。
进一步地,所述步骤S302具体包括:
当blockS的数据和状态标志均正常写入时,若当前所有block区域的状态标志存在两种有效状态时,选择相邻两种有效状态对应的block区域中数据最新的block区域作为blockS;若当前所有block区域的状态标志仅有一种有效状态时,则令blockN作为blockS;之后继续按预设顺序将数据和状态标志写入block(S+1) 中;
当blockS的数据和状态标志至少一项未写入时,若当前所有block区域的状态标志存在有效状态和无效状态时,选择无效状态对应的block区域作为blockS;若当前所有block区域的状态标志仅有一种有效状态时,则令blockN作为blockS;之后继续按预设顺序将数据和状态标志写入blockS中。
具体来说,当blockS的数据和状态标志均正常写入时,根据上述循环写入数据和状态更新的过程,正常擦写数据时,所有block区域中最多只可能同时出现两种相邻的有效状态,且相邻两种有效状态对应的block区域中,排序在前的block区域的数据会比排序在后的block区域的数据新,选择排序在前的block区域为blockS。例如在第二轮中的第二次擦写数据时发生掉电,由于掉电时数据和状态标志均正常写入,此时block2的状态标志更新为state2,而block3的状态标志还未更新,依然为state1,由于状态标志state2新于state1,即block2中的数据比block3中的数据新,因此搜寻到block2为掉电前最后一次擦写数据区域blockS,继续按预设顺序将数据和状态标志写入block(S+1)中,即block3中;或者当每一轮循环的最后一次写入数据完成后,此时所有block区域的状态标志全部相同,即仅有一种有效状态,例如在第二轮中的第N次擦写数据时发生掉电,此时所有block区域的状态标志均为state2,因此判断掉电前最后一次擦写数据区域为blockN,将blockN作为blockS,继续按预设顺序将数据和状态标志写入block(S+1) 中,即block1中。此时掉电并未对数据造成影响,数据没有丢失,上电后可继续按预设顺序循环进行数据擦写。
当blockS的数据和状态标志至少一项未写入时,此时包括两种情况:
第一种为数据写入但状态标志未写入,此时理解为状态标志被擦除,但未写入,即掉电时最后一次擦写数据的block区域中,状态标志为被擦除后的默认值,即无效标志,因此当所有block区域的状态标志存在有效状态和无效状态时,据此选择无效状态对应的block区域作为blockS,无效状态对应的block区域的前一个区域即为block(S-1),此时最新且正确的数据在block(S-1)中,因此继续按预设顺序将数据和状态标志写入blockS中;
第二种情况为数据和状态标志均未写入,此时理解为最后一次擦写数据的block区域中,状态标志未被擦除,保留为前一次写入的值,由于在掉电前数据和状态标志均为正常写入,因此同样最多只可能同时出现两种相邻的有效状态,若当前所有block区域的状态标志存在两种有效状态时,选择相邻两种有效状态对应的block区域中数据最新的block区域作为block(S-1),即当最后一次擦写数据时,数据和状态标志均未写入,则blockS的状态标志保留为上一轮的值,此时存储区域中,数据最新且正确的区域为block(S-1),因此在相邻有效状态对应的block区域中,状态标志更新的区域为block(S-1),而状态标志更旧的区域为blockS。例如在第二轮中的第二次擦写数据时发生掉电,由于掉电时数据和状态标志均未写入,此时block2的状态标志保留为上一轮的state1,而block1的状态标志已更新为state2,由于状态标志state2新于state1,即block1中的数据比block2中的数据新,因此搜寻到block1为最后一次进行擦写数据的区域前一个区域,即掉电前数据最新、且正确的区域,由于block1中的数据为有效数据,因此继续按预设顺序将数据和状态标志写入blockS中,即block2中。
而若当前所有block区域的状态标志仅有一种有效状态时,即此时所有block区域的状态标志全部相同,此时发生的情况为在每一轮中的第一次擦写数据是发生掉电,例如在第二轮中的第一次擦写数据时发生掉电,由于掉电时数据和状态标志均未写入,此时block1的状态标志保留为上一轮的state1,所有block区域的状态标志均为state1,此时判断掉电前最后一次擦写数据区域为block1,即blockS,而掉电前数据最新、且正确的区域为blockN,即block(S-1),由于blockN中的数据为有效数据,因此继续按预设顺序将数据和状态标志写入blockS中,即block1中。
上述两种情况虽然会因为掉电导致最后一次写入的数据丢失,但是本发明可通过掉电前的正确状态标志,追溯到掉电前最新一次且正确的数据擦写区域,即blockS区域的前一个区域block(S-1),并继续将数据和状态标志写入blockS中,相当于恢复了掉电前的备份数据,使掉电后重新上电过程仅仅影响了当时的数据擦写过程,而对后续其他block区域的数据写入不会有影响,数据以及状态标志均不会发生混乱,将掉电对数据存储的影响降到最低。
基于上述数据存储方法,本发明还相应提供一种存储装置,所述存储装置存储有计算机程序,所述计算机程序适于被执行以实现如上所述的数据存储方法。由于上文已对所述数据存储方法进行了详细描述,此处不作详述,具体请参阅上述方法对应的实施例。
基于上述数据存储方法,本发明还相应提供一种智能终端,如图2所示,所述智能终端包括处理器10、与所述处理器10通信连接的存储器20,以及用于信号传输的通信接口30,所述处理器10、存储区20以及通信接口30均通过通信总线40连接。其中,所述存储器20存储有计算机程序,所述计算机程序被处理器10执行以实现如上所述的数据存储方法;所述处理器10用于调用所述存储器20中的计算机程序,以执行如上所述的数据存储方法。由于上文已对所述数据存储方法进行了详细描述,此处不作详述,具体请参阅上述方法对应的实施例。
为更好地理解本发明提供的数据存储方法的实施过程,以下结合图3,举具体应用实施例对本发明的数据存储方法的数据存储过程进行详细说明:
如图3所示,图中R代表当前有效block的标号,W代表下一写入block的标号,F代表下一写入的状态标志的标号,本发明应用实施例中的数据存储流程具体包括如下步骤:
S11、上电后读取所有block的状态标志;
S12、判断block1的状态标志是否有效,若是,则执行步骤S13,若否,则执行步骤S18;
S13、令R=1,W=2;
S14、判断blockW的状态标志是否无效或者旧于blockR的状态标志,若是,则执行步骤S20,若否,则执行步骤S15;
S15、判断W是否等于N,若是,则执行步骤S16,若否,则执行步骤S17;
S16、令R=N,W=1后执行步骤S20;
S17、令R=W,W=W+1后跳转至步骤S14;
S18、判断blockN的状态标志是否有效,若是,则执行步骤S19,若否,则执行步骤S25;
S19、令R=N,W=1后执行步骤S20;
S20、blockR中的数据为有效数据,且blockR中的状态标志为stateK,令F=K;
S21、判断R是否等于N,若是,则执行步骤S22,若否,则执行步骤S26;
S22、判断F是否等于M,若是,则执行步骤S23,若否,则执行步骤S24;
S23、令F=1后执行步骤S26;
S24、令F=F+1后执行步骤S26
S25、此时无有效数据,令R=null,W=1,F=1后执行步骤S26;
S26、检测需要写入新数据;
S27、将数据写入blockW的数据区;
S28、将stateF写入blockW的标志区;
S29、令R=W;
S30、判断W是否等于N,若是,则执行步骤S31,若否,则执行步骤S32;
S31、令W=1后跳转至步骤S20;
S32、令W=W+1后跳转至步骤S20。
在一个具体实例中,假设存储器大容量为128X8bit,按byte地址访问,一个扇区为1byte,扇区擦除后所有bit都为1。
现定义一个block包含2个扇区其中1byte的数据区,和1byte的标志区。使用N(N=5)个block作为循环存储,定义M(M=4)个有效状态标志分别为state1=8’b00000001,state2=8’b00000010,state3=8’b00000100,state4=8’b00001000,其余状态为无效状态,各Block的数据区地址和标志区的地址分别为Block1(0x00,0x05),block2(0x01,0x06)block3(0x02,0x07)block4(0x03,0x08)block5(0x04,0x09).
假设第一次使用时所有bit处于擦除状态。第一次上电时读出各block的标志区即0x05~0x09的值均为8’b11111111为无效标志。因此,无有效数据,即R=null,W=1,F=1,当需要写新数据时,要写入block1,先擦除0x00,把用户数据写入0x00,然后擦除0x05,把状态标志state1=8’b00000001写入0x05,此时R和W被重新赋值R=W=1,W=W+1=2,因为R不等于N(即5),F依然等于1;当再有数据需要写入时,要写入block2,先擦除0x01,把用户数据写入0x01,然后擦除0x06,把状态标志state1=8’b00000001写入0x06,此时R和W被重新赋值R=2,W=3,因为R不等于N(即5),F依然等于1,如此类推,4次写入后,假设R=4,W=5,F=1,当需要写新数据时,要写入block5,先擦除0x04,把用户数据写入0x04,然后擦除0x09,把状态标志state1=8’b00000001写入0x09,此时完成一轮循环写入,R和W被重新赋值R=W=5,W=1,因为R=N(即5),F≠M(即4),则F也要重新赋值F=F+1=2,当再有数据需要写入时,要写入block1,先擦除0x00,把用户数据写入0x00,然后擦除0x05,把状态标志state2=8’b00000010写入0x05。
如此类推,经过多轮写入后,例如经过3轮写入后,第4轮第五次写入时,则当前R=4,W=5,F=4,当需要写新数据时,要写入block5,先擦除0x04,把用户数据写入0x04,然后擦除0x09,把状态标志state4=8’b00001000写入0x09,此时R和W被重新赋值R=5,W=1,因为R=N(即5),F=M(即4),则F也要重新赋值F=1,此时完成4轮写入,即M*N次写入,当再有数据需要写入时,即第M*N+1次写入时,要写入block1,先擦除0x00,把用户数据写入0x00,然后擦除0x05,把状态标志state1=8’b00000001写入0x05。
此时如果出现掉电,重新上电的情况,即在第M*N+1次擦写数据,写入block1时出现掉电情况,会出现以下几种情况
1、数据和标志都正常写入;
2、数据写入,但标志未写入,理解为标志被擦除,但未写入;
3、数据和标志都未写入,理解为标志未被擦除,保留为前一次写入的值。
第1种情况,如果数据和标志都正常写入,重新上电时读则出block1的标志为state1,block2的标志为state4,而由于这两个相邻状态中state1新于state4,因此步骤S14时判断为是,之后跳转至步骤S20,得到R=1,W=2,F=1,继续执行后续数据擦写过程。
第2种情况,如果标志被擦除,但未写入,重新上电时读出block1的标志为8’b11111111,为无效标志,而block5的标志为state4,由此得出R=5,W=1,F=1,即搜寻到掉电前最新、且正确的数据为block5中的数据,继续将数据和状态标志写入block1中。
第3种情况,如果标志未被擦除,保留为前一次写入的值,重新上电时则读出block1~block5的标志均为state4,因此没有无效标志且没有1个block的标志新于其他block,则经过步骤S14至步骤S17的循环后得到R=5,W=1,F=1,同样可以搜寻到掉电前最新、且正确的数据为block5中的数据,继续将数据和状态标志写入block1中。
从上述三种情况可看出,虽然在发生数据错误的第2种和第3种情况下,最后一次写操作时掉电会导致最后一次数据丢失,但本发明依然可以通过本发明追溯掉电前最新一次且正确的数据擦写区域,相当于恢复了掉电前的备份数据,将掉电对数据存储的影响降到最低。
需说明的是,以上仅示出在第M*N+1次擦写数据,写入block1时出现掉电的情况,在其他任意次数擦写时出现掉电后重新上电的情况均能通过本发明提供的数据存储方法恢复至掉电前正进行擦写正确数据的区域,具体请参阅上述方法实施例,此处不作详述。
综上所述,本发明提供的数据存储方法、存储装置及智能终端中,所述数据存储方法通过将存储区域划分为N个block区域,记为block1、block2、...、blockN,每个block区域包括用于保存数据的数据区和用于保存状态标志的标志区;按预设顺序循环在N个block区域的数据区中擦写数据,并在写入数据后更新每个block区域中标志区的状态标志;当擦写过程发生掉电时,重新上电后根据所有block区域的状态标志搜寻至blockS或block(S-1),继续按预设顺序将数据和状态标志写入block(S+1)或blockS中,其中blockS为掉电时最后一次进行擦写数据的block区域,通过将存储区域进行划分并设置标志区,在每个区域写入数据后更新其状态标志,当发生掉电情况时,重新上电后能根据所有区域的状态标志恢复至掉电前正在进行擦写数据的区域,确保数据存储的正确性不受掉电的影响。
可以理解的是,对本领域普通技术人员来说,可以根据本发明的技术方案及其发明构思加以等同替换或改变,而所有这些改变或替换都应属于本发明所附的权利要求的保护范围。
Claims (5)
1.一种数据存储方法,其特征在于,包括如下步骤:
A、将存储区域划分为N个block区域,记为block1、block2、...、blockN,每个block区域包括用于保存数据的数据区和用于保存状态标志的标志区,N≥2;
B、按预设顺序循环在N个block区域的数据区中擦写数据,并在写入数据后更新每个block区域中标志区的状态标志;
C、当擦写过程发生掉电时,重新上电后根据所有block区域的状态标志搜寻至blockS或block(S-1),继续按预设顺序将数据和状态标志写入block(S+1)或blockS中,其中blockS为掉电时最后一次进行擦写数据的block区域,S≤N;
所述步骤C包括步骤:
C1、上电后读取所有block区域的状态标志;
C2、当blockS的数据和状态标志均正常写入时,根据所有block区域的状态标志搜寻至blockS,并继续按预设顺序将数据和状态标志写入block(S+1) 中;
当blockS的数据和状态标志至少一项未写入时,根据所有block区域的状态标志搜寻至block(S-1),并继续按预设顺序将数据和状态标志写入blockS中;
所述步骤A中:所述状态标志用于表示该block区域数据的新旧,所述状态标志采用热独码,其包括M种有效状态,记为state1、state2、...、stateM,其中stateM新于state(M-1),state(M-1)新于state(M-2),...,state2新于state1,state1新于stateM,M≥3;
所述步骤B中,在进行数据擦写时,先擦除数据区,将数据写入数据区中,再擦除标志区,将更新后的状态标志写入标志区中,以表示该区域的数据已更新;
所述步骤C2具体包括:
当blockS的数据和状态标志均正常写入时,若当前所有block区域的状态标志存在两种有效状态时,选择相邻两种有效状态对应的block区域中数据最新的block区域作为blockS;若当前所有block区域的状态标志仅有一种有效状态时,则令blockN作为blockS;之后继续按预设顺序将数据和状态标志写入block(S+1) 中;
当blockS的数据和状态标志至少一项未写入时,若当前所有block区域的状态标志存在有效状态和无效状态时,选择无效状态对应的block区域的前一个区域作为block(S-1);若当前所有block区域的状态标志存在两种有效状态时,选择相邻两种有效状态对应的block区域中数据最新的block区域作为block(S-1),若当前所有block区域的状态标志仅有一种有效状态时,则令blockN作为block(S-1);之后继续按预设顺序将数据和状态标志写入blockS中;
所述blockS的数据和状态标志至少一项未写入具体包括最后一次擦写数据的block区域中,状态标志为被擦除后的默认值;以及最后一次擦写数据的block区域中状态标志未被擦除,保留为前一次写入的值;
其中,状态标志被擦除后的默认值为无效状态。
2.根据权利要求1所述的数据存储方法,其特征在于,所述步骤B具体包括:按照block1-block2-...-blockN-block1-...的顺序循环在N个block区域的数据区中擦写数据,在每个block区域的数据区写入数据后将其状态标志更新为stateK,且在block1-...-blockN循环写入一轮后,下一轮循环在每个block区域的数据区写入数据后将其状态标志更新为state(K+1),K≤M。
3.根据权利要求1所述的数据存储方法,其特征在于,所述步骤A中,每个block区域分别位于相互独立的不同扇区。
4.一种存储装置,其特征在于,所述存储装置存储有计算机程序,所述计算机程序适于被执行以实现如权利要求1~3任意一项所述的数据存储方法。
5.一种智能终端,其特征在于,包括处理器、与所述处理器通信连接的存储器,所述存储器存储有计算机程序,所述计算机程序被处理器执行以实现如权利要求1~3任意一项所述的数据存储方法;
所述处理器用于调用所述存储器中的计算机程序,以执行如权利要求1~3任意一项所述的数据存储方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710353859.4A CN107256197B (zh) | 2017-05-18 | 2017-05-18 | 一种数据存储方法、存储装置及智能终端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710353859.4A CN107256197B (zh) | 2017-05-18 | 2017-05-18 | 一种数据存储方法、存储装置及智能终端 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107256197A CN107256197A (zh) | 2017-10-17 |
CN107256197B true CN107256197B (zh) | 2019-02-01 |
Family
ID=60027342
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710353859.4A Active CN107256197B (zh) | 2017-05-18 | 2017-05-18 | 一种数据存储方法、存储装置及智能终端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107256197B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108108413B (zh) * | 2017-12-12 | 2022-04-26 | 宁波三星医疗电气股份有限公司 | 一种基于存储数据自动生成数据指针的方法及系统 |
CN111258982B (zh) * | 2019-12-26 | 2023-10-03 | 浙江零跑科技股份有限公司 | 一种历史数据存储管理方法 |
CN112397128A (zh) * | 2020-11-19 | 2021-02-23 | 潍柴动力股份有限公司 | 一种Flash存储器的控制方法和装置 |
CN112466371B (zh) * | 2020-12-17 | 2022-09-09 | 宁波拓普集团股份有限公司 | 一种循环利用闪存模拟字节擦除功能的方法 |
CN112817527A (zh) * | 2021-01-21 | 2021-05-18 | 深圳市显控科技股份有限公司 | 掉电数据存储方法、单片机及计算机可读存储介质 |
CN113434084B (zh) * | 2021-06-20 | 2023-01-06 | 苏州浪潮智能科技有限公司 | 一种数据擦除方法、系统、设备以及介质 |
CN113434086B (zh) * | 2021-06-25 | 2024-02-02 | 南京英锐创电子科技有限公司 | 数据存储方法、装置、非易失性存储器件和存储器 |
CN113568579B (zh) * | 2021-07-28 | 2022-05-03 | 深圳市高川自动化技术有限公司 | 一种存储器、数据存储方法以及数据读取方法 |
CN114527934A (zh) * | 2022-01-12 | 2022-05-24 | 珠海泰芯半导体有限公司 | 闪存的控制方法、装置、存储介质和电子设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101127004A (zh) * | 2007-09-24 | 2008-02-20 | 中兴通讯股份有限公司 | 一种在闪存上存取数据的系统及方法 |
CN103295632A (zh) * | 2013-05-28 | 2013-09-11 | 中国电子科技集团公司第十研究所 | 防止意外掉电引起线性累计数据突变的方法 |
US9286990B1 (en) * | 2014-12-22 | 2016-03-15 | Samsung Electronics Co., Ltd. | Storage device, nonvolatile memory and method operating same |
-
2017
- 2017-05-18 CN CN201710353859.4A patent/CN107256197B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101127004A (zh) * | 2007-09-24 | 2008-02-20 | 中兴通讯股份有限公司 | 一种在闪存上存取数据的系统及方法 |
CN103295632A (zh) * | 2013-05-28 | 2013-09-11 | 中国电子科技集团公司第十研究所 | 防止意外掉电引起线性累计数据突变的方法 |
US9286990B1 (en) * | 2014-12-22 | 2016-03-15 | Samsung Electronics Co., Ltd. | Storage device, nonvolatile memory and method operating same |
Also Published As
Publication number | Publication date |
---|---|
CN107256197A (zh) | 2017-10-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107256197B (zh) | 一种数据存储方法、存储装置及智能终端 | |
EP2901239B1 (en) | Apparatus, system and method for adaptive cache replacement in a non-volatile main memory system | |
US11914441B2 (en) | Systems and methods for power outage protection of storage device | |
CN104750565B (zh) | Nand坏块处理方法及nand闪存设备 | |
CN109783017B (zh) | 一种存储设备坏块的处理方法、装置及存储设备 | |
CN102890656B (zh) | 提高flash使用寿命的方法 | |
CN109683696A (zh) | 服务器电源故障检测系统、方法、装置、设备及介质 | |
CN103218275B (zh) | 数据错误修复方法、装置和设备 | |
CN104123198A (zh) | 管理数据复制模式的方法和装置 | |
JP6527951B2 (ja) | データバックアップ装置及び方法 | |
CN106020735A (zh) | 一种数据存储方法及数据存储装置 | |
CN112542199B (zh) | 检测flash存储出错的方法、电路、存储介质和终端 | |
CN111785315B (zh) | 降低擦除干扰和擦除时间的方法、系统、存储介质及终端 | |
CN110018795A (zh) | 一种block状态的检测方法、装置、设备及存储介质 | |
CN104778974A (zh) | 串行存储器装置向外部主机通知内部自计时操作的完成 | |
EP3296880A1 (en) | Access system and method for data storage | |
CN112825050A (zh) | 访问光模块寄存器的方法及系统 | |
CN105512047A (zh) | Flash闪存的写操作、擦除操作方法及装置 | |
CN109901664A (zh) | 提供时钟信号的方法、装置、系统、设备及可读存储介质 | |
CN109884427A (zh) | 静电检测方法及相关装置 | |
CN107678977A (zh) | 一种计数器的读写方法及装置 | |
CN109614037A (zh) | 数据巡检方法、装置和分布式存储系统 | |
CN104424035A (zh) | 对存储访问频率的间歇采样 | |
CN210136722U (zh) | 一种存储器 | |
CN110568997A (zh) | 一种基于Flash存储器的数据写入方法、装置及设备 |
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 |