EEPROM: tot el que has de saber sobre aquesta memòria

EEPROM

Si ets maker i estàs fent alguns projecte DIY en els que has de treballar amb memòria, segur que ja coneixes com treballen les diferents memòries que integra Arduino, com la flash (no volàtil on s'emmagatzema el sketch i el bootloader), la SRAM ( una memòria ràpida i volàtil on romanen les variables de el programa durant el processament), i la EEPROM (No volàtil i que es puee utilitzar per emmagatzemar informació de reinicis).

Doncs bé, a més de la EEPROM inclosa en Arduino, també podràs utilitzar xips externs de aquest tipus de memòria, com un component més. No són gens complicats d'entendre, ni tampoc d'interactuar amb ells per generar accessos (escriptura i lectura) o actualitzacions de la informació emmagatzemada. Aquí trobaràs tot el que necessites saber per començar a treballar amb aquest tipus de memòries ...

Què és EEPROM?

STMicroelectronics EEPROM

STMicroelectronics EEPROM

La EEPROM (Electrically Erasable Programmable Xarxa-Only Memory) és un tipus de memòria ROM, és a dir, de memòria no volàtil en què les dades s'han d'emmagatzemar de forma permanent, fins i tot si es retira el subministrament d'energia. Això les situa a l'altra banda de les RAM (Random Access Memory), que perden totes les seves dades quan no s'alimenten d'energia.

En el cas de la EEPROM, no és una memòria com la ROM, en la qual es graven les dades i ja no poden ser alterats. La EEPROM, a l'igual que l'flaix, admet ser alterada quan es necessiti. És a dir, es poden emmagatzemar unes dades i esborrar-los per emmagatzemar altres diferents.

De fet, com bé indiquen les seves sigles, és una memòria esborrable elèctricament (Electrically Erasable) per a la seva reprogramació. Això difereix amb altres tipus de ROM, que també són esborrables com les EPROM, però que en aquest cas no s'usa electricitat per esborrar les cèl·lules de memòria, sinó que tenien una «finestreta» de quars en el xip per poder projectar una llum UV amb la qual s'esborrava.

Aquesta característica de les EPROM les feia una mica incòmodes, a l'haver de haver de projectar aquests raigs per esborrar-les. I, el pitjor, podien ser esborrades de forma accidental si s'exposaven a aquest tipus de radiació. A les EEPROM es permet fer-ho mitjançant voltatges, d'una forma més còmoda i segura.

estructura interna

diagrama EEPROM

Font: Researchgate.net

Perquè la EEPROM pugui funcionar, calen unes cel·les de memòria molt particulars. Estan construïdes usant transistors tipus MOS, però que tenen una porta flotant enfront dels MOSFET tradicionals. Aquests nous transistors segueixen una estructura coneguda com SAM, I el seu estat normal és tallat i la sortida sempre proporcionarà un 1 lògic.

Aquestes cel · les EEPROM poden ser llegides un nombre il·limitat de vegades, però té un límit en la quantitat de vegades que es poden esborrar i reprogramar, Com li passa a moltes altres. Això també li passa a les flaix, per això s'ha parlat tant de la durabilitat dels discs durs SSD, pendrives, etc.

En el cas de SAMOS, aquest límit està entre les 100.000 i 1.000.000 de vegades. Després d'això, fallaran. Per cert, unes estructures que van ser creades per un vell conegut, un dels grans: el Dr. Fujio Masuoka de Toshiba (1984), que també ha creat altres importants memòries i estructures semiconductores ... No obstant això, el primer xip llançat a l'mercat va ser el d'Intel de 1988, una EEPROM tipus NOR.

A més, has de saber que aquest tipus de memòries solen estar lligades a CPU o controladors mitjançant autobús amb protocols com SCI, I2C, Etc. En el cas de les MCUs (microcontroladors) se sol integrar dins, a l'igual que passa en alguns DSPs, per aconseguir major rapidesa.

Com es pot apreciar a la imatge superior, els transistors SAMOS que formen les cel·les de memòria, s'agrupen en aquest cas en parells. Una de les línies unida a les portes d'uns transistors actua com a línia d'elecció, per marcar o assenyalar aquesta línia per als accessos (lectura i escriptura), i l'altre serà el que emmagatzemi el bit d'informació (0 o 1).

Els transistors s'alineen per formar les longituds de paraules (word) requerides (4 bits, 8 bits, 16 bits, ...) i s'agrupen tantes paraules com capacitat es vulgui que tingui la EEPROM (pe: pot haver longituds de paraules de 64 bits i amb 16 línies = 1024 bits, és a dir, 1kb).

Com funciona una EERPOM?

Com pots veure al lateral, per a realitzar les diferents tasques, El voltatge de la seva porta, font i drenador ha de ser una concreta:

  • Porta a 20v i Drenador a 20v = Programació (escriptura) de la cel de memòria per emmagatzemar el bit que es vulgui.
  • Porta a 0v i Drenador a 20v = Esborrar el bit emmagatzemat perquè pugui ser reprogramat amb un altre valor.
  • Porta a 5v i Drenador a 5v = lectura de l'bit emmagatzemat. A l'ésser un voltatge de porta inferior a el de l'escriptura, no alterarà el valor emmagatzemat. Igual passa amb el voltatge de l'drenador, a l'ésser més baix, no s'esborrarà el bit emmagatzemat.

Conclusió, les EEPROM fan servir uns voltatges «Elevats» per a l'esborrat i l'enregistrament, mentre que usen voltatges més baixos per a la lectura ...

Comprar EEPROM i treballar amb ella

STMicroelectronics, El fabricant francès de microelectrònica, és el número u en aquest tipus de xips EEPROM, encara que existeixen molts altres fabricants, com Microchip. Aquests xips solen ser bastant barats.

Si et decideixes a usar un d'aquests xips, has de veure el fabricant i model i buscar el seu fitxa tècnica per veure totes les recomanacions de fabricant, ja que poden variar d'un a un altre. Per exemple, et van a especificar els voltatges amb els quals treballa, el pinout, Etc. Així podràs configurar el teu projecte adequadament.

En funció de la mida i de el model, pot tenir més o menys pins. Però perquè et facis una idea, un xip típic de EEPROM 24LC512 EEPROM IC, es podria compondre de:

  • Pins 1 (A0), 2 (A1), i 3 (A3) usats en la configuració, són els pins de selecció.
  • Pin 4 (Vss / GND) connectat a terra.
  • Pin 5 (SDA), per dades en sèrie per comunicació I2C.
  • Pin 6 (SCL), per al rellotge per I2C.
  • Pin 7 (WP), write-protect o protecció contra escriptura. Si està connectat a GND, l'escriptura estarà habilitada. Si es connecta a Vcc està desactivada.
  • Pin 8 (Vcc), connectat a l'alimentació.

Quant a les especificacions tècniques d'aquest xip:

  • 512K (64 × 8)
  • 128-byte de memòria intermèdia per a escriptura
  • Voltatge operacional: 1.8va 5.5V
  • Corrent de lectura: 40uA
  • Bus de comunicació: I2C
  • Cicle d'escriptura: 5ms
  • Compatibilitat de rellotge: 100-400Khz
  • Durabilitat: 10.000.000 cicles
  • Es pot connectar en cascada fins a 8 dispositius
  • Empaquetat: 8-pin DIP, SOIJ, SOIC i TSSOP.

On comprar

Per a comprar xips EEPROM, Pots fer-li una ullada a aquestes recomanacions:

Utilitza la EEPROM d'Arduino

Captura d'Arduino IDE

Si vols començar a treballar amb la EEPROM, pots també provar la de la teva placa Arduino. Es pot programar de forma senzilla per entendre a nivell lògic i de programació com pot treballar.

Exemple per gravar una variable

//Almacenar un valor en la EEPROM
#include <EEPROM.h>
 
float sensorValue;
int eepromaddress = 0;
 
//Función para simular lectura de un sensor o pin
float ReadSensor()
{
  return 10.0f;
}
 
void setup()
{
}
 
void loop()
{
  sensorValue = ReadSensor(); //Lectura simulada del valor
  EEPROM.put( eepromaddress, sensorValue );  //Escritura del valor en la EEPROM
  eepromaddress += sizeof(float);  //Apuntar a la siguiente posición a escribir
  if(eepromaddress >= EEPROM.length()) eepromaddress = 0;  //Comprueba que no existe desbordamiento 
 
  delay(30000); //Espera 30s
}

Exemple per llegir una dada de la EEPROM

//Leer una variable de coma flotante
#include <EEPROM.h>
 
struct MyStruct{
  float field1;
  byte field2;
  char name[10];
};
 
void setup(){
  
  float f;
  int eepromaddress = 0; //La lectura comienza desde la dirección 0 de la EEPROM    
  EEPROM.get( eepromaddress, f );
  Serial.print( "Dato leído: " );
  Serial.println( f, 3 );  
 
  eepromaddress += sizeof(float);
}
 
void loop()
{
}

Exemple per actualitzar valors, reprogramar

//Actualizar valor de la EEPROM escribiendo el dato entrante por la A0
#include <EEPROM.h>
 
int eepromaddress = 0;
 
void setup()
{
}
 
void loop()
{
   int val = analogRead(0) / 4;
   EEPROM.update(eepromaddress, val);
  
  eepromaddress += sizeof(int);
  if(address == EEPROM.length()) eepromaddress = 0;
 
  delay(10000);  //Espera de 10 segundos
}

Més informació - Curs Arduino gratis