¿Qué es EEPROM?
(Wikipedia) EEPROM o E²PROM son las siglas de Electrically-Erasable Programmable Read-Only Memory (ROM programable y borrable eléctricamente). Es un tipo de memoria ROM que puede ser programado, borrado y reprogramado eléctricamente, a diferencia de la EPROM que ha de borrarse mediante un aparato que emite rayos ultravioletas. Son memorias no volátiles.
Las celdas de memoria de una EEPROM están constituidas por un transistor MOS, que tiene una compuerta flotante (estructura SAMOS), su estado normal esta cortado y la salida proporciona un 1 lógico.
Aunque una EEPROM puede ser leída un número ilimitado de veces, sólo puede ser borrada y reprogramada entre 100.000 y un millón de veces.
Estos dispositivos suelen comunicarse mediante protocolos como I²C, SPI y Microwire. En otras ocasiones, se integra dentro de chips como microcontroladores y DSPs para lograr una mayor rapidez.
Añadir la cabecera EEPROM
Basta con incluir la directiva #include <EEPROM.h> en nuestro código.
Funciones:
EEPROM.write(dirección, valor)
Escribe un valor en la EEPROM.
Dirección (Address): Disponemos de 511 celdas (int)
Valor (Value): Disponemos de 0 a 255 Tipo Byte)
EEPROM.read(dirección)
Lee un valor de la EEPROM
Value (Address): Disponemos de 511 celdas (int)
Retorna: Byte. (Podemos hacer cast a int)
Código de ejemplo (Desde la página oficial de Arduino)
WRITE
Código
#include <EEPROM.h> void setup() { for (int i = 0; i < 512; i++) EEPROM.write(i, i); } void loop() { }
READ
Código
#include <EEPROM.h> int a = 0; int value; void setup() { Serial.begin(9600); } void loop() { value = EEPROM.read(a); Serial.print(a); Serial.print("\t"); Serial.print(value); Serial.println(); a = a + 1; if (a == 512) a = 0; delay(500); }
*Aviso: Como bien se avisa en la página de Arduino, el datasheet del EEPROM del microcontrolador Atmega 168 solo soporta unos 100000 ciclos de escritura/sobreescritura. Ahora la mayoría de los Arduinos vienen con Atmega328p, me imagino que la vida de EEPROM se habrá alargado, aún así agradecería que alguien buscara en el datasheet.