¿Por qué la EEPROM del AVR se puede borrar al azar?
¿Por qué la EEPROM del AVR se puede borrar al azar?
Algunos desarrolladores de AVR han informado que los EEPROMs se borran algunas veces, aleatoriamente. Y estos pobres se vuelven locos tratando de encontrar que es lo que causa este problema. Sera que los EEPROMs incorporados en la micro de AVR no son estables? Bueno, no hay productos perfectos en el mundo. Pero prefiero decir la causa real podría ser el programador mismo.
¿Tiene alguna idea de lo que está haciendo el AVR durante el reinicio? ¿Ha hecho incluso algunos ensayos para restablecer su comportamiento? AVR es un microcontrolador muy rápido, porque es un micro RISC. (Aquí me gusta la palabra de RISC, ya que RISC es un verdadero concepto de microprocesador que tiene muchas relacionadas con la infraestructura en los compiladores, que no es adecuado para microcontrolador. Me gusta decir AVR es como un microcontrolador RISC, simple y rápido.) La velocidad es su ventaja, pero a veces esto causa un montón de cuestiones, si el diseñador no está preparado para ello. Por favor, lea la especificación AVR, usted encontrara que el AVR esta en una corrida inestable antes que un reinicio válido se genera. Sí, está en marcha! Durante el proceso de descarga (en realidad la carga)del programa para AVR, entre los modos de ESCRIBIR Y VERIFICAR, el reinicio se producirá, luego se completara en el modo de verificación. Durante la corta ejecución de estas instrucciones de reinicio, el programa se ejecuta al azar. Yo tengo un proyector connectado al AVR. Durante la descarga, la pantalla mostrará algun contenido antes de modo de verificación. Debido a que este período, la mayor parte de la memoria es aleatoria, asi el contenido incorrecto se muestra de todos modos. Cuando el sistema llega al modo verificar, la pantalla queda quieta.
Por lo tanto, si su hardware no tiene la precaución suficiente para restablecer el circuito, durante el restablecimiento en el poder, antes que un reinicio válido se genere, el AVR esta funcionando aleatoriamente. Por ejemplo, si se escribe en el EEPROM, mientras la ejecución está fuera de control, los datos escritos en AVR también estan aleatorios, así como la dirección EEPROM, ya que la mayoría de los registros del AVR son cero durante este período. Así que la llamada CERO dirección no es estable, se propaga. Si su programa ejecuta otras rutinas antes de caer en las rutinas del EEPROM, quien sabe que se escribio y en dónde? Para reiterear, después que enciende su sistema, su propio programa cambia los datos, ¿Está claro?
La solución:
1. Usted puede evitar la utilización de la dirección cero en el EEPROM para el almacenamiento de datos; no es una solución completa (Incluso el compilador IAR utilizará un segundo EEPROM por defecto);
2. Usar el CRC del EEPROM CRC para comprobar la integridad de los datos;
3. Habilitar el BOD del AVR, conjunto de 4.2V para el sistema de 5v, conjunto de 2.7v para el sistema de 3.3V, pero algunos AVRs antiguos AVR no tienen BOD interior;
4. Usar chips de reinicio externo como el DS1233, el KIA7045 o el IMP809/810.
Referencias
¿Por qué el EEPROM de AVR se borrará al azar (en la versión en chino, autor Xiaoqi)
- blog de froa0112
- Inicie sesión o regístrese para enviar comentarios
