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.