首页> 中国专利> 一种减少EEPROM的数据读写出错的方法

一种减少EEPROM的数据读写出错的方法

摘要

本发明提供一种减少EEPROM的数据读写出错的方法,包括以下步骤:数组定义步骤,在SRAM定义一个缓冲数组 ,在EEPROM中定义数据区数组和备份区数组,所述数据区数组和备份区数组中均包括CRC校验数据;向EEPROM中写数据的数据写入步骤;校验数据计算步骤,将计算出的CRC检验数据写到数据区数组和备份区数组的校验数据区域;数据校验步骤,通过CRC校验数据对数据区数组和备份区数组的有效性进行校验;数据修复步骤;以及,默认重写步骤。本发明能够有效地减少EEPROM在读写掉电、强干扰和强静电等异常情况的数据读写出错几率,而且不需要占用较多的EEPROM空间,软件开销小、程序稳定可靠。

著录项

  • 公开/公告号CN102890657A

    专利类型发明专利

  • 公开/公告日2013-01-23

    原文格式PDF

  • 申请/专利权人 深圳市航盛电子股份有限公司;

    申请/专利号CN201210381516.6

  • 申请日2012-10-10

  • 分类号G06F12/08(20060101);G06F3/06(20060101);

  • 代理机构深圳市科吉华烽知识产权事务所(普通合伙);

  • 代理人许建;田亚军

  • 地址 518000 广东省深圳市宝安区福永街道和平居委福园一路航盛工业园

  • 入库时间 2024-02-19 16:49:45

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-04-27

    授权

    授权

  • 2013-03-06

    实质审查的生效 IPC(主分类):G06F12/08 申请日:20121010

    实质审查的生效

  • 2013-01-23

    公开

    公开

说明书

技术领域

本发明涉及一种数据保护方法,尤其涉及一种低成本的减少EEPROM的数据读写出错的方法。

背景技术

EEPROM,属于“非易失性数据存储器”,它不能直接参与ALU运算,只是用于掉电后不丢失的重要数据的存储;重新上电后读出这些数据,以维持系统在关机前的状态,如汽车音响和汽车空调关机后需要记忆一些功能状态。

EEPROM和片内RAM 类似,也属于数据存储器,它的特点是数据掉电可保持,而程序存储器一般指ROM,用于存储用户程序代码。

FLASH是用于存储程序代码的,有些场合也可能用它来保存数据,当然前提是该单片机的FLASH工艺是可以自写的(运行中可擦写),FLASH的擦写次数通常小于一万次,而且通常FLASH只能按块擦除。

EEPROM的擦写次数能达到百万次,而且可以按字节擦写。而FLSAH则必须先擦除成BLANK,然后再写入,而一般没有单字节擦除的功能,至少一个扇区擦除。

但是EEPROM在写入时可能受外界干扰(辐射,静电,强电,高温高湿等)或系统内部设计缺陷(软件,硬件等)而造成写入的数据错误或程序跑飞写到了错误的EEPROM的地址,进而导致在读EEPROM时读入了无效或错误的数据,可能会导致系统错误的动作甚至崩溃。

以下4种因素可能造成EEPROM的数据出错。

1、若电源电压过低,CPU 和EEPROM 有可能工作不正常,造成EEPROM 数据的损坏或丢失。由于电压过低造成EEPROM 数据损坏有两种可能:一是电压低于EEPROM 写操作所需要的最低电压;二是CPU 本身已经无法正常工作。  

2、器件在读写时异常中断。

3、高温,高湿,辐射,静电,强电磁场环境可能导致EEPROM的存储单元的电荷部分丢失,造成数据丢失或保存时间缩短。

4、EEPROM写入次数过多(此问题在频繁写入时会遇到),造成无法写入的。

因此,如何规避和恢复EEPROM的写入错误就显得尤其重要了,虽然目前也有从软硬件方面着手降低EEPROM的写入错误的做法,但是现有的方案都很难避免的就是普遍存在需要较大的存储空间、软件开销大、程序不稳定以及成本高等弊端。

发明内容

本发明所要解决的技术问题是需要提供一种无需占用较大EEPROM空间、软件开销小、程序健壮性以及成本低的减少EEPROM的数据读写出错的方法。

对此,本发明提供一种减少EEPROM的数据读写出错的方法,包括以下步骤:

数组定义步骤,在SRAM定义一个缓冲数组 ,在EEPROM中定义两个数组,所述EEPROM中定义的两个数组分别为数据区数组和备份区数组,所述数据区数组和备份区数组中均包括CRC校验数据;

数据写入步骤,向EEPROM中写数据时,先把数据放到缓冲数组中,并调用写入函数将缓冲数组的数据按顺序写入数据区数组和备份区数组;

校验数据计算步骤,调用校验函数计算出当前备份的CRC检验数据,并将该CRC检验数据写到数据区数组和备份区数组的校验数据区域;

数据校验步骤,系统上电复位后通过CRC校验数据对数据区数组和备份区数组的有效性进行校验,若均有效则正常读取EEPROM的数据,若否,则跳转至数据修复步骤;

数据修复步骤,若数据区数组和备份区数组中有一个区的数据有效,则对损坏的数据进行修复,否则跳转至默认重写步骤;以及,

默认重写步骤,将默认的正常标定的值重新写给EEPROM内的数据区数组和备份区数组。

其中,EEPROM( electrically erasable programmable read-only memory),全称为电可擦除并重新编程的只读存储器(简称E方),本发明在数据写入EEPROM时有备份,数据读出时有验证,并存在数据恢复措施,每次写到EEPROM的数据,都做一个备份,数据区数组和备份区数组的数据都做CRC校验,优选为CRC16检验,只要系统运行中出错,就会错误修改了EEPROM的数据,那么根据校验数据中的校验字节就知道哪个备份的数据被修改了,然后用正确的备份覆盖出错的备份,以达到数据恢复的目的,进而使得写入和读出数据的错误率降到最低。

EEPROM的写入错误问题是很难避免的,因此就应有相关的归避措施和恢复措施:从硬件方面来说,加入BOD检测措施是必要的,也就是加入低电压检测措施,现有技术的这种方式可以通过使能芯片的掉电检测电路BOD 来实现,当MCU电压过低时保持 RESET 信号为低,以保证系统的可靠复位重启及重写EEPROM的数据;如果BOD 电平无法满足要求则可以使用外部复位电路,若写操作过程当中发生了复位,只要电压足够高,写操作仍将正常结束。但是通过这种硬件的方式缺陷就是对芯片的电源滤波有较高要求,对于芯片的复位电路、晶振芯片晶振设置位以及单片机的工作频率也应仔细处理,以提高抗干扰,那么,势必会造成成本上的增加。

从软件方面来说,可以有以下方式进行控制:(1)在写入EEPROM前,需对写入的EEPROM数据进行验证措施,若不正常则不写入;(2)由于硬件受到干扰而导致程序跑飞到EEPROM的写子程序里,因未能执行正确的时序,参数传递一定错误,即设定的程序写入地址一定错误,则在写入子程序中若发现程序员所指定的EEPROM入口地址不对,则认为是非法的写入,读取也是一样,如果软件的初始写入地址不是预先设定的地址,则认为是错误的;(3)EEPROM写入后再读出,写后进行数据比较,应一致,否则EEPROM无法再写入,这时可能要更换存储区地址; 但是这样实现的话依旧存在太占EERPOM存储空间等问题,而由于AVR内部的EEROM区有限,若存在大量存储数据的情况下,则会因为需要选用高阶的芯片而造成成本的上升。

本发明将EEPROM分为两个区:数据区和备份区,并分别对应定义好的数据区数组和备份区数组,无需增加EEPROM或是外部存储空间,在MCU第一次上电时或正常工作时,程序上电后读取EEPROM的数据区数组与备份区数组的数据;若数据区数组的数据与备份区数组的数据均正常,则说明整个数据都正常,则将任一区的数据复制给SRAM做运算,SRAM、数据区数组和备份区数组的数据均有各自设定的地址;若数据区数组的数据错误、备份区数组的数据正常,说明EEPROM的数据区数组受到了干扰,则将备份区数组的数据重新写回至数据区数组,备份区数组的数据复制给SRAM做运算;若备份区数组的数据错误、 数据区数组的数据正常,说明备份区数组受到了干扰,则将数据区数组的数据重新写回至备份区数组,数据区数组的数据复制给SRAM做运算;若读数据区数组和备份区数组的数据都错误,则将默认的正常标定的值重新写给EEPROM内的数据区数组与备份区数组,再进行其它的操作,以使写入和读出数据的错误率降到最低。

本发明在SRAM定义一个缓冲数组 ,在EEPROM中定义数据区数组和备份区数组,所述数据区数组和备份区数组中均包括CRC校验数据,在向EEPROM中写数据时,先把数据放到缓冲数组中,并调用写入函数将缓冲数组的数据按顺序写入数据区数组和备份区数组中,并将计算得到的CRC检验数据写到数据区数组和备份区数组的校验数据区域;那么,系统上电复位后通过CRC校验数据分别校验数据区数组和备份区数组的有效性,便能够知道哪一区的数据有效,相当于除了数据区数组的数据之外,还有两份独立的备份数据,备份去数组中还包含了CRC校验数据,以此确保了写入和读出数据的错误率降到最低。

与现有技术相比,本发明能够有效地减少EEPROM在异常情况的数据读写出错几率,其中,异常情况包括读写掉电、强干扰和强静电等情况,而且不需要占用较多的EEPROM空间,软件开销小、程序健壮性较好、稳定可靠,并已经成功地运用在汽车电子产品如汽车音响、倒车雷达和空调控制器等的批量生产,在不增加成本的基础上实现了将写入和读出数据的错误率降到最低的目的。

本发明的进一步改进在于,还包括数据写入判断步骤,在校验数据计算步骤之后,判断数据写入是否有效,若是则跳至数据校验步骤,并设置写入有效标识;若否,则设置写入错误标识,结束程序。在数据校验步骤之前,先对数据写入的有效性进行判断,这样能够在数据写入错误的情况下,尽快发现问题,结束程序,以便进行其他的操作或是进行重新写入,并在判断之后设置写入有效标识或写入错误标识,便于及时发现问题,避免到了最后需要使用该写入数据的时候才发现数据没有写入成功的弊端,也从另一个方面提高了写入和读出数据的准确率。

本发明的进一步改进在于,所述数据校验步骤中,若数据区数组和备份区数组的数据均有效,则将任一区数组的数据复制给SRAM做运算。这样做的好处在于,在写入数据和/或读写数据较为频繁的时候,能够实时根据数据区数组和备份区数组的读写调用次数进行人性化的选择,选择状态空闲的数据区数组或备份区数组的数据复制给SRAM做运算,避免了因为读写数据过分集中而带来的出错可能。

本发明的进一步改进在于,所述数据区数组和备份区数组中最后两个字节用于存放CRC校验数据。优选的,所述CRC检验数据通过CRC16实现数据的检验。

本发明的进一步改进在于,所述数据修复步骤中,若数据区数组的数据错误,备份区数组的数据有效,则将备份区数组的数据重新写回数据区数组,并将备份区数组的数据复制给SRAM做运算;若备份区数组的数据错误,数据区数组的数据有效,则将数据区数组的数据重新写回备份区数组,并将数据区数组的数据复制给SRAM做运算。

与现有技术相比,本发明的有益效果在于,能够有效地减少EEPROM在读写掉电、强干扰和强静电等异常情况的数据读写出错几率,而且不需要占用较多的EEPROM空间,软件开销小、程序稳定可靠,在不增加成本的基础上实现了将写入和读出数据的错误率降到最低的目的,本发明已经成功地运用在汽车电子产品如汽车音响、倒车雷达和空调控制器等的批量生产上。

附图说明

图1是本发明一种实施例的EEPROM数据写入流程图;

图2是本发明一种实施例的EEPROM数据读出流程图。

具体实施方式

下面结合附图,对本发明的较优的实施例作进一步的详细说明。

实施例1:

本例提供一种减少EEPROM的数据读写出错的方法,包括以下步骤:

数组定义步骤,在SRAM定义一个缓冲数组 ,在EEPROM中定义两个数组,所述EEPROM中定义的两个数组分别为数据区数组和备份区数组,所述数据区数组和备份区数组中均包括CRC校验数据;

数据写入步骤,向EEPROM中写数据时,先把数据放到缓冲数组中,并调用写入函数将缓冲数组的数据按顺序写入数据区数组和备份区数组;

校验数据计算步骤,调用校验函数计算出当前备份的CRC检验数据,并将该CRC检验数据写到数据区数组和备份区数组的校验数据区域;

数据校验步骤,系统上电复位后通过CRC校验数据对数据区数组和备份区数组的有效性进行校验,若均有效则正常读取EEPROM的数据,若否,则跳转至数据修复步骤;

数据修复步骤,若数据区数组和备份区数组中有一个区的数据有效,则对损坏的数据进行修复,否则跳转至默认重写步骤;以及,

默认重写步骤,将默认的正常标定的值重新写给EEPROM内的数据区数组和备份区数组。

其中,EEPROM( electrically erasable programmable read-only memory),全称为电可擦除并重新编程的只读存储器(简称E方),本例在数据写入EEPROM时有备份,数据读出时有验证,并存在数据恢复措施,每次写到EEPROM的数据,都做一个备份,数据区数组和备份区数组的数据都做CRC校验,优选为CRC16检验,只要系统运行中出错,就会错误修改了EEPROM的数据,那么根据校验数据中的校验字节就知道哪个备份的数据被修改了,然后用正确的备份覆盖出错的备份,以达到数据恢复的目的,进而使得写入和读出数据的错误率降到最低。

本例将EEPROM分为两个区:数据区和备份区,并分别对应定义好的数据区数组和备份区数组,无需增加EEPROM或是外部存储空间,在MCU第一次上电时或正常工作时,程序上电后读取EEPROM的数据区数组与备份区数组的数据;若数据区数组的数据与备份区数组的数据均正常,则说明整个数据都正常,则将任一区的数据复制给SRAM做运算,SRAM、数据区数组和备份区数组的数据均有各自设定的地址;若数据区数组的数据错误、备份区数组的数据正常,说明EEPROM的数据区数组受到了干扰,则将备份区数组的数据重新写回至数据区数组,备份区数组的数据复制给SRAM做运算;若备份区数组的数据错误、 数据区数组的数据正常,说明备份区数组受到了干扰,则将数据区数组的数据重新写回至备份区数组,数据区数组的数据复制给SRAM做运算;若读数据区数组和备份区数组的数据都错误,则将默认的正常标定的值重新写给EEPROM内的数据区数组与备份区数组,再进行其它的操作,以使写入和读出数据的错误率降到最低。

本例在SRAM定义一个缓冲数组 ,在EEPROM中定义数据区数组和备份区数组,所述数据区数组和备份区数组中均包括CRC校验数据,在向EEPROM中写数据时,先把数据放到缓冲数组中,并调用写入函数将缓冲数组的数据按顺序写入数据区数组和备份区数组中,并将计算得到的CRC检验数据写到数据区数组和备份区数组的校验数据区域;那么,系统上电复位后通过CRC校验数据分别校验数据区数组和备份区数组的有效性,便能够知道哪一区的数据有效,相当于除了数据区数组的数据之外,还有两份独立的备份数据,备份去数组中还包含了CRC校验数据,以此确保了写入和读出数据的错误率降到最低。

如图1和图2所示,本例包括EEPROM数据的写入过程和读出过程,并分别对应EEPROM数据写入流程图和EEPROM数据读出流程。本例的进一步改进在于,还包括数据写入判断步骤,在校验数据计算步骤之后,判断数据写入是否有效,若是则跳至数据校验步骤,并设置写入有效标识;若否,则设置写入错误标识,结束程序。在数据校验步骤之前,先对数据写入的有效性进行判断,这样能够在数据写入错误的情况下,尽快发现问题,结束程序,以便进行其他的操作或是进行重新写入,并在判断之后设置写入有效标识或写入错误标识,便于及时发现问题,避免到了最后需要使用该写入数据的时候才发现数据没有写入成功的弊端,也从另一个方面提高了写入和读出数据的准确率。

本例的进一步改进在于,所述数据校验步骤中,若数据区数组和备份区数组的数据均有效,则将任一区数组的数据复制给SRAM做运算。这样做的好处在于,在写入数据和/或读写数据较为频繁的时候,能够实时根据数据区数组和备份区数组的调用次数进行人性化的选择,避免了因为读写数据过分集中而带来的出错可能。

本例的进一步改进在于,所述数据区数组和备份区数组中最后两个字节用于存放CRC校验数据。优选的,所述CRC检验数据通过CRC16实现数据的检验。

本例的进一步改进在于,所述数据修复步骤中,若数据区数组的数据错误,备份区数组的数据有效,则将备份区数组的数据重新写回数据区数组,并将备份区数组的数据复制给SRAM做运算;若备份区数组的数据错误,数据区数组的数据有效,则将数据区数组的数据重新写回备份区数组,并将数据区数组的数据复制给SRAM做运算。

与现有技术相比,本例的有益效果在于,能够有效地减少EEPROM在读写掉电、强干扰和强静电等异常情况的数据读写出错几率,而且不需要占用较多的EEPROM空间,软件开销小、程序稳定可靠,在不增加成本的基础上实现了将写入和读出数据的错误率降到最低的目的,本例已经成功地运用在汽车电子产品如汽车音响、倒车雷达和空调控制器等的批量生产,效果好。

实施例2:

在实施例1的基础上,本例在SRAM定义一个数组:EEPROMBufferData[EepromPageSize-2] ,在EEPROM中定义两个数组,这两个数组分别对应数据区数组EEPROMPagerAddr0[EepromPageSize] 和备份数组EEPROMPagerAddr1[EepromPageSize],数据区数组和备份数组中最后两个字节是存放CRC校验 的数据。

要向EEPROM中写数据时,先把数据放到EEPROMBufferData[EepromPageSize-2] 数组中,调用EepromWriteBlockData()函数, 把这个数组n个数据按顺序写进EEPROM的指定区域,即数据区数组EEPROMPagerAddr0[EepromPageSize] 和/或备份区EEPROMPagerAddr1[EepromPageSize])。  

写完了数据之后,调用CheckWriteDataCRC()函数,该函数会计算出当前备份的CRC检验数据并写到EEPROM相应的数据区数组和备份区数组的尾部两个字节,所述CRC检验数据优选为CRC16校验数据。至此数据的备份工作已经完成。  

系统上电复位后运行进行校验数据,执行CheckAllPageData()函数,检查数据区数组和备份区数组的数据的有效性,采用CRC16校验技术,分别校验数据区数组和备份区数组默认最后两个字节为校验码,若通过了,则EEPROM数据没有问题,程序可正常往下执行;否则要运行PageDataRecover()函数,对损坏的数据区数组或备份区数组进行修复。

若数据区数组的数据错误,备份区数组的数据正常,说明数据区数组的数据受到了干扰,则将备份区数组的数据重新写回数据区数组中,备份区数组的数据复制给SRAM做运算;若备份区数组的数据错误,数据区数组的数据正常,说明备份区数组的数据受到了干扰,则将数据区数组的数据重新写回备份区数组中,数据区数组的数据复制给SRAM做运算。

若EEPROM的数据区数组和备份区数组的数据CRC校验都错误,则将默认的正常标定的值重新写给EEPROM内的数据区数组与备份区数组,再进行其它的操作。

本例的SRAM和EEPROM数据分区示意图实例可以如下所示,其中,EEPROM数据区数组的数据及其地址分配示意如下表所示:

 EEPROM备份区数组的数据及其地址分配示意如下表所示:

SRAM_Buffer区缓冲数组的数据及其地址分配示意如下表所示:

以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号