Flash y EEPROM

9

La hoja de datos de Atmega16 dice que tiene

a) 16 Kbytes de memoria de programa Flash auto-programable dentro del sistema y b) 512 bytes EEPROM.

¿Puede un microcontrolador tener dos ROM separadas que pueden programarse a través de la tecnología EEPROM y la tecnología Flash?

O ¿Mi inferencia (como se indica anteriormente) de la hoja de datos es incorrecta?

Sé que nuestro programa está almacenado en una memoria flash, ¿por qué alguien necesitará EEPROM? ¿De qué sirve si tenemos memoria flash para el programa?

También puede alguien explicar cuál es el término "Auto-programable dentro del sistema"

Lo que sé: la tecnología Flash puede escribir el programa en bloques de datos, mientras que EEPROM puede escribir datos byte a byte.

    
pregunta Jasser

2 respuestas

15

Hoy en día, la memoria Flash se usa para guardar el código del programa y la EEPROM (Memoria de solo lectura que se puede borrar eléctricamente) se usa para guardar datos persistentes. Hace unos 30 años, antes de que apareciera Flash, las EEPROM se utilizaban para mantener el código del programa.

En realidad, primero ROM (memoria de solo lectura), luego PROM (ROM programable, solo una vez), EPROM (PROM borrable con luz UV), EEPROM y finalmente Flash. Las ROM aún se utilizan para aplicaciones de muy alto volumen y bajo costo (por ejemplo, tarjetas de felicitaciones parlantes).

La diferencia importante con los microcontroladores actuales es que generalmente no puede ejecutar código fuera de EEPROM, y es incómodo para los programas almacenar datos en flash. (Los datos se almacenan en flash cuando, por ejemplo, utiliza la palabra clave "const" en una declaración de datos, o define una cadena, pero el compilador y el enlazador se encargan entre bambalinas).

El área EEPROM se puede usar para mantener la configuración u otros datos que desea que estén disponibles en los reinicios, incluso si el microcontrolador ha perdido energía y luego se vuelve a encender. Funcionalmente, puede pensar en la EEPROM como un disco duro muy pequeño o una tarjeta SD.

En los microcontroladores sin EEPROM, es posible almacenar datos persistentes en la memoria flash, pero esto se vuelve difícil ya que los microcontroladores no fueron diseñados para esto, y tiene que encontrar un lugar especial que no interfiera con el código del programa, y Ponga esto a un lado con el enlazador. Además, como se menciona a continuación, generalmente puede actualizar la EEPROM muchas veces más que la memoria flash.

Si programa datos en flash, esto no significa que pueda acceder a los datos como variables en su programa C, porque no hay manera de decirle al compilador dónde se encuentran estas variables en su código (es decir, no puede hacerlo). vincule una variable constante a esta área de destello.) Por lo tanto, su lectura debe realizarse a través del conjunto especial de registros que se utilizan para escribirlos. Tenga en cuenta que esta restricción se aplica a los datos en EEPROM también, por lo que no tiene ninguna ventaja al respecto.

Para programar flash o EEPROM, primero se debe borrar un bloque de memoria. Luego se programa. Para flash, la escritura se hace generalmente un bloque a la vez también. Para EEPROM, se puede hacer por bloques o por byte a la vez, dependiendo del microcontrolador.

Tanto para flash como para EEPROM, hay un número máximo de veces que puede actualizarlos antes de agotar la memoria. Este número se proporciona en la hoja de datos como un valor garantizado de mínimo . Por lo general, es mucho más alto para EEPROMs que para memorias flash. Para flash, he visto números tan bajos como 1000. Para EEPROM, he visto números tan altos como 1,000,000.

Una de las ventajas de EEPROMs sobre flash es que puede borrarlas muchas veces más de lo que puede borrar flash.

"En el sistema auto-programable" simplemente significa que el microcontrolador puede actualizar su propio flash mientras se ejecuta. La característica se utiliza generalmente para actualizar el código en el campo. El truco es que necesita dejar algo de código en el sistema mientras se actualiza el programa principal, llamado el cargador de arranque. Este esquema se utiliza en el sistema Arduino para programar el chip.

    
respondido por el tcrosley
2

Agregaré más información a la excelente respuesta de @tcrosley.

El ATmega16 implementa una arquitectura de Harvard , es decir, una topología del sistema donde la memoria de datos está separada de la memoria del programa. Citando el párrafo relevante de la hoja de datos de Atmega16 (página 8):

  

Para maximizar el rendimiento y el paralelismo, el AVR utiliza una arquitectura de Harvard, con   Memorias separadas y buses para programa y datos. Las instrucciones en la memoria del programa son   ejecutado con un solo nivel de canalización. Mientras se ejecuta una instrucción, la siguiente instrucción   La información es pre-buscada desde la memoria del programa. Este concepto permite ejecutar instrucciones.   en cada ciclo del reloj. La memoria del programa es una memoria flash reprogramable dentro del sistema.

La arquitectura de Harvard tiene la ventaja de no tener una contención de bus entre los ciclos de obtención de instrucciones y los ciclos de acceso a datos, ya que los datos y las instrucciones no comparten el mismo bus, como en la arquitectura de su PC convencional.

Por lo tanto, la memoria flash se utiliza como memoria de programa, mientras que la memoria de datos se divide entre SRAM (para datos transitorios, como la pila de llamadas de función y el montón, si está programando en C, por ejemplo) y la EEPROM (para almacenamiento permanente).

    
respondido por el Lorenzo Donati

Lea otras preguntas en las etiquetas