『与非网』掉电保存数据到EEPROM

我想在掉电时保存数据(3个字节)到EEPROM中 , 用BOD掉电检测 , 不知怎样使用 。 望高手指点:
1.在BOOT区设置好BODEN , BODLEVEL , 后软件还要怎样设置?
2.掉电中断是否是产生复位?我的写EEPROM程序应该放在什么地方?他和其他复位怎样区别?
【『与非网』掉电保存数据到EEPROM】3.设置了BOOT区后 , 硬件上是否要加电源到一个管脚比较后才产生中断?
掉电检测BOD的误解
AVR自带的BOD(Brown-outDetection)电路 , 作用是在电压过低(低于设定值)时产生复位信号 , 防止CPU意外动作.
对EEPROM的保护作用是当电压过低时保持RESET信号为低 , 防止CPU意外动作 , 错误修改了EEPROM的内容
而我们所理解的掉电检测功能是指具有预测功能的可以进行软件处理的功能 。
例如 , 用户想在电源掉电时把SRAM数据转存到EEPROM , 可行的方法是外接一个在4.5V翻转的电压比较器(VCC=5.0V,BOD=2.7V) , 输出接到外部中断引脚(或其他中断) , 一但电压低于4.5V,马上触发中断 , 在中断服务程序中把数据写到EEPROM中保护起来 。
注意:写一个字节的EEPROM时间长达8mS,所以不能写入太多数据 , 电源滤波电容也要选大一些 。 将AVR的BOD设为2.7V , 从4.5v到2.7这段时间写EEPROM 。 掉电检测使用IMP809 。
参考电路如下:
『与非网』掉电保存数据到EEPROM
文章图片
在图中 , 外部9V电源通过7805稳压到5V , 作为系统电源使用 。 而AVR的工作电源则是单独提供的 , 由5v系统电源通过低压差肖特基二极管1N5817后得到 。 IN5817的正向压降为0.3v , 因此 , AVR的工作电压为4.7v 。 电源监控芯片IMP809-L的监控电压为4.63V , 当系统电源的电压低于4.63V时 , 在R脚上产生由高电平到低电平的变化 , 使AVR进入INT0中断 。
该电路的工作原理为:首先通过配置AVR的熔丝位 , 设置BOD掉电检测电压门限为2.7V , 并允许BOD检测 。 因此 , 当AVR的Vcc电压掉到2.7v以下时 , AVR就停止工作(掉电检测功能是AVR片内的功能之一 , 见第二章的2.6.2AVR的复位源和复位方式) 。 电源监控芯片IMP809-L检测电压门限为4.63v , 用于检测系统电源的电压 。 当系统电源大于4.63v时 , IMP809-L的R端输出高电平 , 整个系统正常工作 。 当系统电源的电压跌到4.63v以下时 , IMP809-L的R脚输出低电平 , 作为AVR外部中断INT0的申请 。 INT0设计为掉电处理中断 , 其主要任务是备份系统运行的重要数据到EEPROM中 。
在提供AVR工作的电源系统中 , 大容量的电解电容C4作为储能电容 , 一旦系统电源电压下降 , 二极管1N5817截止 , 此时AVR可以靠C4提供的电储可以继续工作一段时间 。 C4容量应足够大 , 在系统电源掉电过程中 , IMP809-L的R端输出低电平(下降到4.63v)时 , 要能够保证维持AVR的工作电压Vcc从4.7v降到2.7V的时间超过300ms , 使AVR有时间做紧急处理和备份数据 。 AVR写EEPROM大约需要50-100mA的电流 , 所以电容C4的值应该在1000u~4700u , 需要保存的数据越多 , C4的容量应该越大 。
C4的大小取决于CPU的型号即Icc的大小,由D1,C4单独为CPU供电是关键.