可恢复的Flash数据存储方法与流程

文档序号:13760277阅读:408来源:国知局

本发明涉及一种存储方法,尤其是一种可恢复的Flash数据存储方法,属于Flash数据存储的技术领域。



背景技术:

在工业控制中,Flash数据存储通常用来将用户相关的设置参数保存在Flash存储器上,避免在断电的情况下出现数据丢失,当控制系统重新上电之后,能够按照先前的设置参数进行工作,无需进行参数的重新设置。在将用户设置参数写入Flash存储器的过程中,如果发生断电或其他异常干扰,会破坏原先存储的数据,同时也不能将新的数据写入,从而会导致系统无法读取到正确的设置参数。对于高可靠性高安全性的数字电子控制系统,需要在参数设置错误或参数读取失败的情况下,能够尽可能降低使用错误数据的几率,降低系统运行的安全风险。



技术实现要素:

本发明的目的是克服现有技术中存在的不足,提供一种可恢复的Flash数据存储方法,其操作方便,在Flash数据异常时,能够将数据恢复到前一次擦写成功并被系统正确使用的数据,保证了数据的安全性,降低了系统使用错误数据或数据缺省的风险,满足高可靠性高安全性的使用要求。

按照本发明提供的技术方案,一种可恢复的Flash数据存储方法,所述Flash数据存储方法包括如下步骤:

步骤1、提供所需的Flash存储器,并对所述Flash存储器进行格式化,以使得所述Flash存储器内所有的存储单元均具备数据可写入状态;

步骤2、任选上述Flash存储器内的两个存储单元作为相互独立的存储单元A与存储单元B,所述存储单元A的数据存储格式包括用于存储用户设置参数的设置参数存储区、用于存储累积擦写次数的擦写次数存储区以及用于存储写入状态标识的标识位存储区,存储单元B的数据存储格式与存储单元A的数据存储格式相同;

步骤3、利用上述存储单元A、存储单元B存储所需的系统参数,并根据存储单元A、存储单元B写入系统参数过程,分别得到存储单元A内标识位存储区的写入状态标识以及存储单元B内标识位存储区的写入状态标识;

步骤4、在上电初始化时,根据存储单元A内标识位存储区的写入状态标识以及存储单元B内标识位存储区的写入状态标识分别对存储单元A、存储单元B内存储系统参数的可用性进行判断,当存储单元A、存储单元B均判定为存储数据错误时,则输出Flash存储器故障,否则,跳转至步骤5;

步骤5、根据上述对存储单元A、存储单元B内存储系统参数的判定结果,识别可用数据,并根据与识别可用数据对应的存储单元对另一存储单元进行数据恢复,以使得存储单元A、存储单元B内的存储内容完全相同。

所述步骤3中,利用存储单元A、存储单元B存储系统参数的过程包括如下步骤:

步骤3.1、读取存储单元A内擦写次数存储区的累积擦写次数,并对所述累积擦写次数进行累加,以更新累积擦写次数;

步骤3.2、对存储单元A的设置参数存储区进行数据擦除;

步骤3.3、将系统参数以及上述更新后的累积擦写次数分别存入存储单元A的设置参数存储区、擦写次数存储区内;

步骤3.4、读取上述存储单元A内的系统参数以及累积擦写次数,并将所读取的系统参数、累积擦写次数分别与步骤3.3期望写入的系统参数、累积擦写次数进行比对;当比对一致时,则在存储单元A的标识位存储区写入表示写入成功的标识“0xAAAA”,否则,在存储单元A的标识位存储区写入表示写入错误的标识“0xEEEE”;

步骤3.5、当且仅当存储单元A的标识位存储区存储的写入状态标识为标识“0xAAAA”时,重复利用上述步骤,以将系统参数存储在存储单元B内。

所述步骤4中,当存储单元A内标识位存储区存储的写入状态标识与标识“0xAAAA”不匹配且当存储单元B内标识位存储区存储的写入状态标识与标识“0xAAAA”也不匹配时,则输出Flash存储器故障。

所述步骤5中,当存储单元A内标识位存储区的写入状态标识为标识“0xAAAA”且存储单元B内标识位存储区的写入状态标识也为标识“0xAAAA”时,则读取并比较存储单元A内的累积擦写次数与存储单元B内的累积擦写次数,以确定较大的累积擦写次数,并在确定较大的累积擦写次数后,将与较大累积擦写次数对应存储单元确定为可用存储单元,将与可用存储单元对应的另一存储单元确定为待恢复存储单元;

当存储单元A内标识位存储区或存储单元B内标识位存储区只有一个标识“0xAAAA”时,则将标识位存储区存储标识“0xAAAA”的存储单元确定为可用存储单元,将与可用存储单元对应的另一存储单元确定为待恢复存储单元;

将可用存储单元内存储的系统参数识别确定为可用数据,并利用可用存储单元对待恢复存储单元进行数据恢复。

对待恢复存储单元进行数据恢复的过程包括如下步骤:

步骤5.1、将待恢复存储单元进行数据擦除;

步骤5.2、提取可用存储单元内存储的系统参数以及累积擦写次数,并分别写入待恢复存储单元的设置参数存储区、擦写次数存储区;

步骤5.3、读取上述待恢复存储单元写入的系统参数以及累积擦写次数,并将所读取的系统参数、累积擦写次数与步骤5.2期望写入结果进行比对;当不对一致时,则在待恢复存储单元的标识位存储区写入表示写入成功的标识“0xAAAA”,否则,在待恢复存储单元的标识位存储区写入表示写入错误的标识“0xEEEE”。

本发明的优点:能在Flash存储器完好的情况下,通过设置两个独立的存储单元进行数据的互为备份存储,通过对存储单元内累积擦写次数、写入状态标识的比较实现了数据存储完好性的判断,从而能够有效避免Flash存储器在数据写入过程中的任意时刻发生断电或其他异常情况时导致的数据无效的情况,能够有效保存并恢复Flash数据存储错误发生前一次成功写入的有效数据,实现控制系统恢复为上一次成功设置的参数进行正常运行,保证了数据的安全性,降低了系统使用错误数据或数据缺省的风险,满足高可靠性高安全性的使用要求。

附图说明

图1为本发明存储单元A、存储单元B的数据存储格式的示意图。

具体实施方式

下面结合具体附图和实施例对本发明作进一步说明。

如图1所示:为了在Flash数据异常时,能够将数据恢复到前一次擦写成功并被系统正确使用的数据,保证了数据的安全性,降低了系统使用错误数据或数据缺省的风险,满足高可靠性高安全性的使用要求,本发明Flash数据存储方法包括如下步骤:

步骤1、提供所需的Flash存储器,并对所述Flash存储器进行格式化,以使得所述Flash存储器内所有的存储单元均具备数据可写入状态;

具体地,调用Flash存储器的格式化驱动函数format,将Flash存储器上的所有数据进行擦除,此操作一般在Flash存储器首次上电使用时执行,可以通过数字电子控制器和用户的操作通讯接口进行,由用户进行指令发送式的操作,具体对Flash存储器格式化的过程为本技术领域人员所熟知,此处不再赘述。

步骤2、任选上述Flash存储器内的两个存储单元作为相互独立的存储单元A与存储单元B,所述存储单元A的数据存储格式包括用于存储用户设置参数的设置参数存储区、用于存储累积擦写次数的擦写次数存储区以及用于存储写入状态标识的标识位存储区,存储单元B的数据存储格式与存储单元A的数据存储格式相同;

具体地,选择Flash存储器上的两个可独立擦除和修改的存储单元A和存储单元B,使用地址变量对其存储单元A、存储单元B对应空间的起始地址和结束地址分别进行管理,存储单元A、存储单元B的起始地址和结束地址一般采用固定值的方式,具体为本技术领域人员所熟知,此处不再赘述。存储单元A、存储单元B的存储空间大小应至少为用户设置参数字节数再加6个字节,其中,2个字节是用来预留存储写入状态标识的,4个字符预留给存储“累积擦写次数”,即标识位存储区的大小至少为2个字节,擦写次数存储区的大小至少为4个字节。存储单元A、存储单元B相互独立是指存储单元A、存储单元B可被独立的擦除和/或写入,在擦除、写入过程中,存储单元A、存储单元B不会相互影响。存储单元A、存储单元B在Flash存储区可为连续的存储空间或任意不连续的存储空间,具体可以根据需要进行选择确定,具体为本技术领域人员所熟知,此处不再赘述。

步骤3、利用上述存储单元A、存储单元B存储所需的系统参数,并根据存储单元A、存储单元B写入系统参数过程,分别得到存储单元A内标识位存储区的写入状态标识以及存储单元B内标识位存储区的写入状态标识;

本发明实施例中,利用存储单元A、存储单元B存储系统参数的过程包括如下步骤:

步骤3.1、读取存储单元A内擦写次数存储区的累积擦写次数,并对所述累积擦写次数进行累加,以更新累积擦写次数;

具体实施时,调用Flash存储器的数据读取驱动函数read,以读取存储单元A内擦写次数存储区内存储的累积擦写次数,并对所述累积擦写次数进行累加1,以得到新的累积擦写次数,即完成对所述累积擦写次数的更新。

步骤3.2、对存储单元A的设置参数存储区进行数据擦除;

具体实施时,调用Flash存储器的数据擦除驱动函数erase,从存储单元A的存储空间起始地址开始进行数据擦除,擦除的结束位置为存储单元A的存储空间结束地址;

步骤3.3、将系统参数以及上述更新后的累积擦写次数分别存入存储单元A的设置参数存储区、擦写次数存储区内;

具体地,调用Flash存储器的数据写入驱动函数write,将用户需要的系统参数和更新后的累积擦写次数写入存储单元A中,写入地址为存储单元A的起始地址,写入结束地址为:存储空间结束地址-2(byte),即将系统参数写入设置参数存储区,将更新后的累积擦写次数写入擦写次数存储区。

步骤3.4、读取上述存储单元A内的系统参数以及累积擦写次数,并将所读取的系统参数、累积擦写次数分别与步骤3.3期望写入的系统参数、累积擦写次数进行比对;当比对一致时,则在存储单元A的标识位存储区写入表示写入成功的标识“0xAAAA”,否则,在存储单元A的标识位存储区写入表示写入错误的标识“0xEEEE”;

具体地,调用Flash存储区的数据读取驱动函数read,数据读取的起始地址是存储单元A的起始地址,读取的长度为存储单元A的空间大小-2(byte),将读取的数据保存在内存变量中,并逐个与步骤3.3期望写入的结果进行比较,以判断是否写入成功;即将读取存储单元A内的系统参数与步骤3.3期望写入的系统参数进行对比,将读取存储单元A内的累积擦写次数与步骤3.3期望写入的累加擦写次数进行对比,只有当读取的系统参数与步骤3.3期望写入的系统参数相一致且读取的累积擦写次数与步骤3.3期望写入的累积擦写次数也相一致时,则说明将系统参数、更新后的累加擦写次数写入存储单元A的操作成功。

如果对存储单元A的写入操作成功,则调用Flash存储器的数据写入驱动函数write,在存储单元A内的标识位存储区写入标识“0xAAAA”,否则,在存储单元A的标识位存储区置写入标识“0xEEEE”。

步骤3.5、当且仅当存储单元A的标识位存储区存储的写入状态标识为标识“0xAAAA”时,重复利用上述步骤,以将系统参数存储在存储单元B内。

具体地,当存储单元A的标识位存储区的写入状态标识为标识“0xAAAA”时,则表明在存储单元A的设置参数存储区、擦写次数存储区写入成功;只有在存储单元A写入成功后,才能将执行对存储单元B的写入步骤,对存储单元B的具体写入过程可以参考存储单元A的写入过程,具体步骤赘述。具体实施时,也可以先将系统参数等写入存储单元B,在存储单元B写入成功后,在执行存储单元A的写入步骤,具体可以根据需要进行选择,此处不再赘述。

步骤4、在上电初始化时,根据存储单元A内标识位存储区的写入状态标识以及存储单元B内标识位存储区的写入状态标识分别对存储单元A、存储单元B内存储系统参数的可用性进行判断,当存储单元A、存储单元B均判定为存储数据错误时,则输出Flash存储器故障,否则,跳转至步骤5;

本发明实施例中,在上电初始化时,调用Flash存储器的数据读取驱动函数read,以读取存储单元A内标识位存储区的写入状态标识以及存储单元B内标识位存储区的写入状态标识,从而根据读取的写入状态标识进行判断。

当存储单元A内标识位存储区存储的写入状态标识与标识“0xAAAA”不匹配且当存储单元B内标识位存储区存储的写入状态标识与标识“0xAAAA”也不匹配时,则输出Flash存储器故障,需要更换新的Flash存储器。本发明实施例中,存储单元A内标识位存储区存储的写入状态标识与标识“0xAAAA”不匹配是指存储单元A内标识位存储区存储的写入状态标识不为标识“0xAAAA”。在存储单元A的标识位存储区或存储单元B的标识位存储区中只要存在至少一个标识“0xAAAA”时,则能利用标识位存储区存储标识“0xAAAA”的存储单元实现数据恢复。

步骤5、根据上述对存储单元A、存储单元B内存储系统参数的判定结果,识别可用数据,并根据与识别可用数据对应的存储单元对另一存储单元进行数据恢复,以使得存储单元A、存储单元B内的存储内容完全相同。

本发明实施例中,当存储单元A内标识位存储区的写入状态标识为标识“0xAAAA”且存储单元B内标识位存储区的写入状态标识也为标识“0xAAAA”时,则读取并比较存储单元A内的累积擦写次数与存储单元B内的累积擦写次数,以确定较大的累积擦写次数,并在确定较大的累积擦写次数后,将较大累积擦写次数的存储单元确定为可用存储单元,将与可用存储单元对应的另一存储单元确定为待恢复存储单元;本发明实施例中,当累积擦写次数较大时,则表明所述存储单元内的存储数据为最近更新,利用所述最近更新的存储数据能对累积擦写次数较小的存储单元进行有效数据恢复。

当存储单元A内标识位存储区或存储单元B内标识位存储区只有一个标识“0xAAAA”时,则将标识位存储区存储标识“0xAAAA”的存储单元确定为可用存储单元,将与可用存储单元对应的另一存储单元确定为待恢复存储单元;如存储单元A内标识位存储区存储标识“0xAAAA”时,则存储单元A确定为可用存储单元,存储单元B确定为待恢复存储单元。

将可用存储单元内存储的系统参数识别确定为可用数据,并利用可用存储单元对待恢复存储单元进行数据恢复。

对待恢复存储单元进行数据恢复的过程包括如下步骤:

步骤5.1、将待恢复存储单元进行数据擦除;

具体地,调用Flash存储区的数据擦除驱动函数erase,对需要数据恢复的存储单元进行数据擦除,具体执行数据擦除的过程为本技术领域人员所熟知,此处不再赘述。

步骤5.2、提取可用存储单元内存储的系统参数以及累积擦写次数,并分别写入待恢复存储单元的设置参数存储区、擦写次数存储区;

具体地,调用Flash数据读取驱动函数read,提取可用存储单元上的系统参数数和“累积擦写次数”,并写入待恢复存储单元,具体写入过程可以参考上述说明,具体不再赘述。

步骤5.3、读取上述待恢复存储单元写入的系统参数以及累积擦写次数,并将所读取的系统参数、累积擦写次数与步骤5.2期望写入结果进行比对;当不对一致时,则在待恢复存储单元的标识位存储区写入表示写入成功的标识“0xAAAA”,否则,在待恢复存储单元的标识位存储区写入表示写入错误的标识“0xEEEE”。

本发明实施例中,当在待恢复存储单元的标识位存储区写入表示写入错误的标识“0xEEEE”时,则表明Flash存储器故障,但是由于考虑到此时是在Flash存储器故障的情况下写入标识“0xEEEE”数据,故障Flash是否还具备写入能力是值得质疑的,所以实例中采用对标识位存储区存储的写入状态标识与标识“0xAAAA”不匹配的情况进行故障判断,并提示此时需要更换Flash存储器。

本发明能在Flash存储器完好的情况下,通过设置两个独立的存储单元进行数据的互为备份存储,通过对存储单元内累积擦写次数、写入状态标识的比较实现了数据存储完好性的判断,从而能够有效避免Flash存储器在数据写入过程中的任意时刻发生断电或其他异常情况时导致的数据无效的情况,能够有效保存并恢复Flash数据存储错误发生前一次成功写入的有效数据,实现控制系统恢复为上一次成功设置的参数进行正常运行,保证了数据的安全性,降低了系统使用错误数据或数据缺省的风险,满足高可靠性高安全性的使用要求。

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