本发明专利技术提供一种减少EEPROM的数据读写出错的方法,包括以下步骤:数组定义步骤,在SRAM定义一个缓冲数组?,在EEPROM中定义数据区数组和备份区数组,所述数据区数组和备份区数组中均包括CRC校验数据;向EEPROM中写数据的数据写入步骤;校验数据计算步骤,将计算出的CRC检验数据写到数据区数组和备份区数组的校验数据区域;数据校验步骤,通过CRC校验数据对数据区数组和备份区数组的有效性进行校验;数据修复步骤;以及,默认重写步骤。本发明专利技术能够有效地减少EEPROM在读写掉电、强干扰和强静电等异常情况的数据读写出错几率,而且不需要占用较多的EEPROM空间,软件开销小、程序稳定可靠。
【技术实现步骤摘要】
本专利技术涉及一种数据保护方法,尤其涉及一种低成本的减少EEPROM的数据读写出错的方法。
技术介绍
EEPR0M,属于“非易失性数据存储器”,它不能直接参与ALU运算,只是用于掉电后不丢失的重要数据的存储;重新上电后读出这些数据,以维持系统在关机前的状态,如汽车音响和汽车空调关机后需要记忆一些功能状态。EEPROM和片内RAM类似,也属于数据存储器,它的特点是数据掉电可保持,而程序存储器一般指R0M,用于存储用户程序代码。 FLASH是用于存储程序代码的,有些场合也可能用它来保存数据,当然前提是该单片机的FLASH工艺是可以自写的(运行中可擦写),FLASH的擦写次数通常小于一万次,而且通常FLASH只能按块擦除。EEPROM的擦写次数能达到百万次,而且可以按字节擦写。而FLSAH则必须先擦除成BLANK,然后再写入,而一般没有单字节擦除的功能,至少一个扇区擦除。但是EEPROM在写入时可能受外界干扰(辐射,静电,强电,高温高湿等)或系统内部设计缺陷(软件,硬件等)而造成写入的数据错误或程序跑飞写到了错误的EEPROM的地址,进而导致在读EEPROM时读入了无效或错误的数据,可能会导致系统错误的动作甚至崩溃。以下4种因素可能造成EEPROM的数据出错。I、若电源电压过低,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电平无法满足要求则可以使用外部复位电路,若写操作过程当中发生了复位,只要电压足够高,写操作仍将正常结束。但是通过这种硬件的方式缺陷就是对芯片的电源滤波有较高要求,对于芯片的复位电路、晶振芯片晶振设置位以及单片机的工作频率也应仔细处理,以提高抗干扰,那么,势必会造成成本上的增加。从软件方面来说,可以有以下方式进行控制(I)在写入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的数据读写出错的方法,其特征在于,包括以下步骤:数组定义步骤,在SRAM定义一个缓冲数组?,在EEPROM中定义两个数组,所述EEPROM中定义的两个数组分别为数据区数组和备份区数组,所述数据区数组和备份区数组中均包括CRC校验数据;数据写入步骤,向EEPROM中写数据时,先把数据放到缓冲数组中,并调用写入函数将缓冲数组的数据按顺序写入数据区数组和备份区数组;校验数据计算步骤,调用校验函数计算出当前备份的CRC检验数据,并将该CRC检验数据写到数据区数组和备份区数组的校验数据区域;数据校验步骤,系统上电复位后通过CRC校验数据对数据区数组和备份区数组的有效性进行校验,若均有效则正常读取EEPROM的数据,若否,则跳转至数据修复步骤;数据修复步骤,若数据区数组和备份区数组中有一个区的数据有效,则对损坏的数据进行修复,否则跳转至默认重写步骤;以及,默认重写步骤,将默认的正常标定的值重新写给EEPROM内的数据区数组和备份区数组。
【技术特征摘要】
【专利技术属性】
技术研发人员:唐江,宋方博,周国茂,孙立华,林汉超,黎中有,
申请(专利权)人:深圳市航盛电子股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。