与非网■掉电保存数据到EEPROM


我想在掉电时保存数据(3 个字节)到 EEPROM 中 , 用 BOD掉电检测 , 不知怎样使用 。 望高手指点:
1. 在 BOOT 区设置好 BODEN , BODLEVEL , 后软件还要怎样设置?
2. 掉电中断是否是产生复位?我的写 EEPROM 程序应该放在什么地方?他和其他复位怎样区别?
3. 设置了 BOOT 区后 , 硬件上是否要加电源到一个管脚比较后才产生中断?
掉电检测 BOD 的误解
AVR自带的 BOD(Brown-out Detection)电路 , 作用是在电压过低(低于设定值)时产生复位信号 , 防止 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.2 AVR 的复位源和复位方式) 。 电源监控芯片 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 的容量应该越大 。
【与非网■掉电保存数据到EEPROM】C4 的大小取决于 CPU 的型号即 Icc 的大小,由 D1,C4 单独为 CPU 供电是关键 .