avr EEPROM 数据丢失问题 原因与解决方案
AVR单片机EEPROM和FLASH区别

AVR单片机EEPROM和FLASH区别为什么A VR单片机既有FLASH又有EEPROM?我如果要烧写程序只用HEX文件行么?那个EEP文件有什么作用?你的程序代码是保存在FLASH里的,只烧写HEX文件就可以。
EEP文件是EEPROM的初始化数据文件,如果不烧写,EEPROM会保持FF,如果烧写了这个文件,就会按照你的初始化要求初始化EEPROM。
在实际中有时往往不仅仅需要程序代码,还需要用到一些数据,而这些数据又会根据情况的不同而变化。
举个例子,比如我要测量一个电机的转数,而每天电机最多测量12个小时,要求记录这12个小时的转数,然后第二天从这个数值继续测量,当然第二天单片机也会重新上电。
遇到这个情况你如何去保存你的记录数值呢?当然这就需要用到EEPROM了。
EEPROM存取数据方便,掉电不丢失,适合记录这种要求有变化又要求掉电不丢失的数据。
当然EEPROM也可以作为程序存储器来存放程序。
但是A VR单片机的BOOTLOADER是ATMEL提供的,只能够从FLASH开始。
其次,即使能够使用EEPROM做程序存储器,如今也不会采用这样的方式,因为EEPROM造价比FLASH要高很多,同时存取速度比FLASH要慢得多,因此如今的程序基本都是被放入FLASH中,而EEPROM只用来存放那些不希望丢失的数据而用了FLASH 一个静态的只读存储器,单片机本身无法修改自己EEPROM 是指5V或3.3V可擦写存储器,可以由单片机本身编程写入一般用来做掉电保护,也可以由烧程器写入。
烧程时当然只用HEX文件AVR编程的时候,可以对EEPROM编程 设置你想要的初始化量简单的说,flash是保存程序的,eeprom是保存程序需要用到的,掉电不会丢失的变量,通常是初始值之类的。
通常flash不会被程序改写(avr有bootloader 功能,可以修改flash甚至bootloader自身),而eeprom则很容易被改写。
iccavr编译时出现的错误解决办法

初学者初用ICCAVR编程的时候,经常会出现一些错误,现在将常见的错误报告整理如下。
这里的一些错误是为了展示说明而故意制造的,欢迎你提供你遇到的错误和解决方法。
一、正常编译通过CODE:C:\icc\bin\imakew -f main.makiccavr -c -IC:\icc\include\ -e -DA TMEGA -DA TMega16 -l -g -Mavr_enhanced D:\桌面\实验教程\LED应用\霓虹灯\main.ciccavr -o main -LC:\icc\lib\ -g -ucrtatmega.o -bfunc_lit:0x54.0x4000 -dram_end:0x45f -bdata:0x60.0x45f -dhwstk_size:16 -beeprom:1.512 -fihx_coff -S2 @main.lk -lcatmega Device 1% full.Done.[url="][/url]这是我们最想看到的了,万事大吉。
二、工程中未加入.C文件CODE:C:\icc\bin\imakew -f main.makiccavr -o main -LC:\icc\lib\ -g -ucrtatmega.o -bfunc_lit:0x54.0x4000 -dram_end:0x45f -bdata:0x60.0x45f -dhwstk_size:16 -beeprom:1.512 -fihx_coff -S2 @main.lk -lcatmega unknown file type @main.lk, passed to linker!ERROR unknown file type '@main.lk'C:\icc\bin\imakew.exe: Error code 1Done: there are error(s). Exit code: 1解决办法:将你的程序加入工程中,可以右键程序区>>ADD to project三、程序没有后缀名,或者后缀名不正确。
开机后EEPROM数据乱怎么办

答: 如果是用 AVR 单片机的 EEPROM 一定要加低电压复位检测电路
EEPROM 数据被破坏的主要原因有 1 电源异常使 EEPROM 的数据彻底丢失 2 复位不好和软件跑飞可能会使 EEPROM 的数据被改写 要防止 EEPROM 数据被破坏,主要在以下几方面做工作 1 选用比 MCU 的电源范围宽并有 WP 引脚的 EEPROM 芯片 2 做好电源滤波,而且要等电源开机稳定后才去读写 EEPROM 3 做好复位电路 4 做好软件跑飞的处理 5 SDA 和 SCK 的上拉最好用 I/O 口控制,既可省电,也可在一定情况下保护 EEPROM 6 WP 接 MCU 的 RESET 如 WP 做软件保护,将写不进数据 接 I/O,上电时 WP 的状态可能不稳定 7 EEPROM 空间富余时考虑双备份或多备份数据,每份数据都有校验和 选用比 MCU 的电源范围宽并有 WP 引脚的 EEPROM 芯片的原因 1 EEPROM 的芯片本身有一定的保护时序 2 电源低于 MCU 工作电源高于 EEPROM 芯片的最低工作电源时 EEPROM 芯片 会处于稳定状态 不会丢失数据 3 当电源较长时间低于 EEPROM 芯片的最低工作电压时非常容易丢失全部数 据 否则 MCU 还能工作 但 EEPROM 芯片已不能工作时 EEPROM 中的数据会全 部丢失 4 用 I/O 口线给 EEPROM 供电 只在读写 EEPROM 时才给器件供电 不仅能提 高可靠性 而且能省电
MILLIMETERS 4.70 MAX 4.80 MAX 3.70 MAX 0.45 1.00 1.27 0.55 0.45 14.00+0.50 0.55 MAX 2.30 0.45 MAX 1.00
K FF
123
DIM MILLIMETERS
治标治本,彻底解决AVR单片机EEPROM数据丢失问题

治标治本,彻底解决AVR单片机EEPROM数据丢失问题治标治本,彻底解决AVR单片机EEPROM数据丢失问题在项目中复制出来的程序,使用时可能有些地方需要修改。
编译环境:WinAVR-20060421 + AVR Studio 4.12.498 Service Pack 4基本思路:每份写到EEPRM的数据,都做三个备份,每个备份的数据都做CRC16校验,只要系统运行中出错,错误地修改了EEPROM 数据,那么根据校验字节就知道哪个备份的数据被修改了,然后用正确的备份覆盖出错的备份,达到数据恢复的目的。
EEPROMSave.h 文件:/* EEPROM管理定义 */#define EepromPageSize 64 //页容量定义#define EepromPage0Addr 0x0000 //各个页的其始地址定义#define EepromPage1Addr (EepromPage0Addr + EepromPageSize)#define EepromPage2Addr (EepromPage1Addr + EepromPageSize)#define EepromPage3Addr (EepromPage2Addr + EepromPageSize)#define EepromPage4Addr (EepromPage3Addr + EepromPageSize)#define EepromPage5Addr (EepromPage4Addr + EepromPageSize)#define EepromPage6Addr (EepromPage5Addr + EepromPageSize)#define EepromPage7Addr (EepromPage6Addr + EepromPageSize)/*最后两个字节为CRC16校验码,其余为数据| 0 | 1 | 2 | |.......................| 61 | 62 | 63 |Data Data...................Data.....CRCH CRCL*/#define VALID 0x01#define INVALID 0x00/*-----------------------------------------------------------------------------------------*/EEPROMSave.c 文件:/************************************************************** ******函数名称:EepromReadByte()*函数功能:写一个Byte的数据进EEPROM*输入参数:address:地址*返回参数:从指定地址读出来的数据*编写作者:my_avr*编写时间:2007年8月13日*相关说明:*************************************************************** *****/unsigned char EepromReadByte(unsigned char *address){unsigned char data;data = 0;eeprom_busy_wait();data = eeprom_read_byte(address);return data;}/************************************************************** ******函数名称:EepromReadWord();*函数功能:写一个Word的数据进EEPROM*输入参数:address:地址*返回参数:从指定地址读出来的数据*编写作者:my_avr*编写时间:2007年8月13日*相关说明:*************************************************************** *****/uint16_t EepromReadWord(uint16_t *address){uint16_t data;data = 0;eeprom_busy_wait();data = eeprom_read_word(address);return data;}/************************************************************** ******函数名称:EepromWriteByte()*函数功能:写一个Byte的数据进EEPROM*输入参数:address:地址;data:数据*返回参数:无*编写作者:my_avr*编写时间:2007年8月13日*相关说明:*************************************************************** *****/void EepromWriteByte(unsigned char *address,unsigned char data){eeprom_busy_wait();eeprom_write_byte(address,data);}/************************************************************** ******函数名称:EepromWriteWord()*函数功能:写一个Word的数据进EEPROM*输入参数:address:地址;data:数据*返回参数:*编写作者:my_avr*编写时间:2007年8月13日*相关说明:*************************************************************** *****/void EepromWriteWord(unsigned int *address,unsigned intdata){eeprom_busy_wait();eeprom_write_word(address,data);}/************************************************************** ******函数名称:EepromWriteBlock()*函数功能:将缓冲区中的n个数据写进EEPROM*输入参数:address:地址;data:数据*返回参数:*编写作者:my_avr*编写时间:2007年8月13日*相关说明:*************************************************************** *****/void EepromWriteBlock(unsigned char *buff,unsigned char *address,unsigned char n){unsigned char i;for (i = 0; i < n; i++){EepromWriteByte((unsigned char *)(address + i),*buff);buff++;}}/************************************************************** *****函数名称:unsigned char EepromCheck(unsigned char *pdata,unsigned char packsize)*函数功能:检查EEPROM的数据是否有效,采用CRC16校验技术。
ATmega16中文数据手册

4
ATmega16(L)
2466G–AVR–10/03
Hale Waihona Puke ATmega16(L)端口 D(PD7..PD0) 端口 D 为 8 位双向 I/O 口, 具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特 性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,则端口被外部电路 拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口 D 处于高阻状态。 端口 D 也可以用做其他不同的特殊功能,请参见 P61。 RESET XTAL1 XTAL2 AVCC AREF 复位输入引脚。持续时间超过最小门限时间的低电平将引起系统复位。门限时间见 P36Table 15。持续时间小于门限间的脉冲不能保证可靠复位。 反向振荡放大器与片内时钟操作电路的输入端。 反向振荡放大器的输出端。 AVCC 是端口 A 与 A/D 转换器的电源。 不使用 ADC 时, 该引脚应直接与 VCC 连接。 使用 ADC 时应通过一个低通滤波器与 VCC 连接。 A/D 的模拟基准输入引脚。 本数据手册包含了一些简单的代码例子以说明如何使用芯片各个不同的功能模块。这些 例子都假定在编译之前已经包含了正确的头文件。有些 C 编译器在头文件里并没有包含 位定义,而且各个 C 编译器对中断处理有自己不同的处理方式。请注意查阅相关文档以 获取具体的信息。
SPI
USART
+ -
COMP. INTERFACE
PORTB DIGITAL INTERFACE
PORTD DIGITAL INTERFACE
PORTB DRIVERS/BUFFERS
PORTD DRIVERS/BUFFERS
PB0 - PB7
PD0 - PD7
3
彩电的E2PROM存储器数据丢失维修方法

(一)彩电的E2PROM存储器数据丢失维修方法数码家电的普及,家电维修人员又面临“软件”故障的维修问题。
在家电中,“软件”故障以存储着整机重要信息的E2PROM、EPROM损坏或数据丢失为甚,如I2C总线彩电的E2PROM存储器数据丢失,VCD、DVD机的EPROM块损坏,等等。
解决这些问题的方法主要有以下几种:(1)更换空白芯片,然后进行初始化操作;(2)进入“维修状态”,调整恢复数据;(3)向厂家购买烧录好的芯片;(4)自己烧录、复制芯片。
现总结这些方法并分析它们的优缺点,不妥之处望同行指正。
一、更换空白芯片,然后进行初始化操作:所谓对存储器的初始化操作,就是将CPU的ROM中存储的数据重新写如新存储器中。
I2C总线彩电中CPU型号众多,性能各异,有的ROM中存储着完整的控制数据,有的ROM中存储的控制数据不全,所以进行数据的初始化后,对于有些彩电非常有效,但对于很多彩电会出现光栅畸变、彩色失真、不能存台、功能丢失等现象,有的机型甚至不能开机,建议大家在对所修机器的CPU功能不清楚之前,谨慎执行数据的初始化操作。
优点:不需要数据清单,操作简便;缺点:运气不好,可能造成更大的麻烦。
二、进入“维修状态”,调整恢复数据:进入“维修状态”调整恢复数据是一种比较经典的维修方法,要求维修人员掌握各种彩电进入“维修状态”的正确“密码”和数据清单,并且领会各个调整项的含义。
《家电维修》等报刊杂志公布很多这方面宝贵的资料,维修人员应积极收集整理。
另外,向厂家的技术部门咨询和通过国际互联网登陆厂家网站查询也是当今获得维修资料的有效途径。
在维修中,只要掌握了所修机型的进入“密码”和数据清单,进行数据调整将非常容易,但调整时还需注意:(1)调整前记录所要调整的项目名称和原始数据,以便调整失败后复原;(2)调整时要做到目的明确,有的放矢,不要进入维修状态后,不分项目,盲目调整;(3)在没有完全资料和必须改变彩电功能时,慎对模式或选项数据进行调整。
数据存储技术中的故障排查与处理方法(Ⅱ)

在当今信息化社会中,数据存储技术扮演着至关重要的角色。
无论是企业的大型数据中心,还是个人的电脑硬盘,都需要有效的数据存储技术来保证数据的安全和可靠性。
然而,在数据存储过程中,故障难免会发生。
本文将探讨数据存储技术中常见的故障排查与处理方法。
一、硬件故障在数据存储中,硬件故障是最为常见的问题之一。
硬盘损坏、内存故障、主板问题等都可能导致数据存储设备无法正常工作。
当出现硬件故障时,首先需要进行简单的排查。
检查设备是否接触良好,是否有明显的物理损坏等。
如果无法通过简单排查找到问题,可以借助专业的硬件检测工具进行诊断。
同时,及时备份数据也是非常重要的,以防止数据丢失。
二、软件故障除了硬件故障外,软件故障也是数据存储技术中常见的问题。
操作系统崩溃、文件系统损坏、病毒感染等都可能导致数据存储设备无法正常使用。
对于软件故障,一般可以尝试重启设备、更新驱动程序、检查磁盘错误等简单的方法来解决。
如果问题依然存在,可能需要进行系统恢复或重新安装操作系统。
此外,定期对设备进行安全检测和杀毒也是非常重要的。
三、网络故障在企业级数据存储中,网络故障也是一个常见问题。
网络中断、路由器故障、网络拥堵等都可能导致数据无法正常传输和存储。
对于网络故障,需要先检查网络设备是否正常工作,然后排查网络连接是否畅通。
在排查网络故障时,可以借助网络监控工具和网络分析工具来定位问题所在。
另外,对网络设备进行定期维护和升级也是非常重要的,以确保网络的稳定性和安全性。
四、数据备份与恢复无论是硬件故障、软件故障还是网络故障,及时的数据备份和恢复都是非常重要的。
在数据存储中,定期备份数据是保证数据安全的关键。
一旦发生故障,可以快速恢复数据,减少损失。
同时,备份数据的存储设备也需要定期检查和更新,以确保备份数据的可靠性。
五、故障预防与维护除了故障排查与处理,故障预防和设备维护也是非常重要的。
定期对硬件设备进行维护,更新驱动程序、固件等,可以减少硬件故障的发生。
防止eeprom数据丢失的措施

防止eeprom数据丢失的措施2007-09-25 13:32摘要:并行EEPROM存贮器在工业现场使用时,有时由于会受到较大干扰则可能导致其存贮在EEPROM中的数据内容发生改变或丢失。
文中介绍了并行EEPROM受干扰而丢失数据的原因,介绍了ATMEL公司AT28C系列EEPROM的结构、特点和性能,详细阐述了该EEPROM卓越的硬件和软件数据保护(SDP)功能,最后给出了SDP 算法和部分C51程序。
关键词:AT28C系列抗干扰数据保护 SDP1 前言EEPROM是一种具有掉电记忆功能的存贮器,其内容可以象普通RAM一样进行改写,而且改写时能够自动擦除并换成新内容。
它不象EPROM那样需要紫外线擦除;而只需用电即可擦除并改写存贮在其内部的内容。
EEPROM通常在内部带有编程电源。
由于它只需外接单一+5V电源,因此使用起来十分方便。
和串行芯片相比,并行EEPROM的电路接口和编程设计均简单得多,所以在对电路板面积要求不很苛刻的情况下,使用EEPROM存贮器还是十分的方便。
2 并行EEPROM中数据丢失的原因并行EEPROM通常采用总线扩展接口方法,图1所示是基于AT28C256的接口电路,其中CS为地址译码产生的片选信号,RD和WR为单片机的读、写信号。
编程时,只需一句MOVX指令即可完成EEPROM存贮器的读、写操作,使用十分方便,但并行EEPROM在工业现场往往会受到干扰而导致其存贮在内部的数据内容发生改变,从而造成数据的损坏或丢失。
经分析,EEPROM存贮器的数据丢失主要发生在系统上电、掉电或复位等情况下。
主要表现在以下两种情况。
(1)当整个数据存贮系统中的CPU在复位信号解除后,一般都将会延时数百μs 时间,因此,在这段时间内,读信号、写信号、地址信号和数据信号都可能随机变化,从面造成对存贮器的误写操作而使其中的数据改变。
(2)在电源缓慢升降过程中,当CPU处于临界工作状态时,其读写时序可能会出现混乱,从而使存贮器中的数据发生改变。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
avr EEPROM 数据丢失问题原因与解决方案
总结一下引起AVR内部EEPROM数据丢失的原因:1.程序问题;2.程序
跑飞;3.EEPROM相关寄存器因强磁场、高压静电等外部干扰出错所产生的写
入动作;4.系统有很大的感性负载,在断电的时候会产生一个反向高压,EEPROM有可能会自擦除。
(还有什么原因,欢迎大家继续列举,以便完善及
想办法解决)针对问题1,程序问题不再该文讨论范围内。
针对问题2,程序
跑飞,这个因该是引起EEPROM数据丢失的主要原因。
但是引起程序跑飞的
原因却是多方面的。
第一.电压不正常,工作不稳定,程序跑飞。
针对这个问题,可以开启内部BOD、或者外加复位芯片解决,在低功耗场合,外部复位是有必
要的,毕竟BOD功耗太高。
第二,晶体振荡受干扰,频率不稳定,程序跑飞。
针对这个问题,建议晶体使用全幅振荡,并且走线的时候尽量短,并且使用地
线隔离。
第三系统受外界环境干扰,修改了PC等寄存器,程序跑飞。
针对这
个干扰问题,这个引起程序跑飞的可能性应该不大,如果环境实在恶劣,那么
就应该想到做电磁屏蔽,ESD保护等,如果还不行,那么只能建议换换别的单
片机试试看了。
针对问题3,我们只能优化电路设置,尽量避免,比如加屏蔽罩,加ESD保护,加TVS保护,电源加电容退耦等等。
针对问题4,如果系统
真的具有很大的感性负载,那么请注意加续流二极管、滤波电容等做保护,不
要让这种反向高压产生,无论如何,这种因为感性负载突然断电自激产生的高压,不仅仅会对EEPROM有影响,而是对整个系统都存在威胁。
============================================================= =================================================
经过上面硬件上的一些处理,虽然EEPROM数据丢失的可能已经很小了,。