欢迎来到天天文库
浏览记录
ID:39624972
大小:56.50 KB
页数:9页
时间:2019-07-07
《详解AVR单片机防eeprom掉数据的办法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、详解AVR单片机防eeprom掉数据的办法应用AVR芯片内部EEPROM写入(或写入后读出)出错问题,下面有AVR的芯片手册有相关介绍(来自mega8中文翻译文档): 防止EEPROM 数据丢失 若电源电压过低,CPU 和EEPROM 有可能工作不正常,造成EEPROM 数据的毁坏( 丢失)。这种情况在使用独立的EEPROM 器件时也会遇到。因而需要使用相同的保护方案。 由于电压过低造成EEPROM 数据损坏有两种可能:一是电压低于EEPROM 写操作所需要的最低电压;二是CPU 本身已经无法正常工作。 EEPROM
2、数据损坏的问题可以通过以下方法解决: 当电压过低时保持AVR RESET 信号为低。这可以通过使能芯片的掉电检测电路BOD 来实现。如果BOD 电平无法满足要求则可以使用外部复位电路。若写操作过程当中发生了复位,只要电压足够高,写操作仍将正常结束。 以上官方文档介绍主要提示的是电压过低发生的异常而造成读写错误,并未涉及到其它问题。 个人总结,在实际应用过程中有以下问题造成数据读写错误: 1.程序受到干扰(或程序存在BUG)造成写入EEPROM的数据本身就是错误的; 2.EEPROM写入次数过多(这个问题在频繁写入时会遇
3、到),造成无法写入的; 3.再提电压问题:由于电压过低,造成写入的数据实际未写入或写入错误; EEPROM写入错误问题是不可避免的,因此就应有相关的归避措施和恢复措施: 从硬件方面来说:加入BOD措施是必要的,同时芯片的电源滤波也有较高要求,芯片的复位电路、晶振(及芯片晶振设置位,指单片机的工作频率,这对EEPROM读写有影响)也应仔细处理,以提高抗干扰;当然,一个设计优良的线路板对抗干扰有很大帮助; 从软件方面来说:可以有以下方式进行控制: 1.在写入EEPROM前,需对写入的EEPROM数据进行验证措施,若
4、不正常则不写入; 2.EEPROM写入后再读出(即较验),写前数据比较,应一致,否则可能为EEPROM无法再写入,这时可能要更换存储区地址; 3.楼主的解决方案有比较好的效果,但是我14楼提出的问题:太占EERPOM存储空间了,可以精简一下会更好;因为AVR内部的EEROM区有限,若存在大量存储数据情况下,则有可能选用高阶的芯片而造成成本上升; 4.数据读出时有验证,并存在恢复措施,以使数据错误降到最低。以下是另一种办法.附源码基本思路:每份写到EEPRM的数据,都做三个备份,每个备份的数据都做CRC16校验,只要系统运行中出
5、错,错误地修改了EEPROM数据, 那么根据校验字节就知道哪个备份的数据被修改了,然后用正确的备份覆盖出错的备份,达到数据恢复的目的。 EEPROMSave.h 文件: /* EEPROM管理定义 */ #define EepromPageSize 64 //页容量定义 #define EepromPage0Addr 0x0000 //各个页的其始地址定义 #define EepromPage1Addr
6、 (EepromPage0Addr + EepromPageSize) #define EepromPage2Addr (EepromPage1Addr + EepromPageSize) #define EepromPage3Addr (EepromPage2Addr + EepromPageSize) #define EepromPage4Addr (EepromPage3Addr + EepromPageSize) #define EepromPage5Addr (Eeprom
7、Page4Addr + EepromPageSize) #define EepromPage6Addr (EepromPage5Addr + EepromPageSize) #define EepromPage7Addr (EepromPage6Addr + EepromPageSize) /* 最后两个字节为CRC16校验码,其余为数据
8、 0
9、 1
10、 2
11、
12、.......................
13、 61
14、 62
15、 63
16、 Data Data.........
17、..........Data.....CRCH CRCL */ #define VALID
此文档下载收益归作者所有