Taula de continguts:

Lectura i escriptura de dades a EEPROM externa mitjançant Arduino: 5 passos
Lectura i escriptura de dades a EEPROM externa mitjançant Arduino: 5 passos

Vídeo: Lectura i escriptura de dades a EEPROM externa mitjançant Arduino: 5 passos

Vídeo: Lectura i escriptura de dades a EEPROM externa mitjançant Arduino: 5 passos
Vídeo: Arduino UNO - Write/Read EEPROM 24LC256 2024, Juliol
Anonim
Lectura i escriptura de dades a EEPROM externa mitjançant Arduino
Lectura i escriptura de dades a EEPROM externa mitjançant Arduino

EEPROM significa Memòria de només lectura programable esborrable elèctricament.

EEPROM és molt important i útil perquè és una forma de memòria no volàtil. Això significa que fins i tot quan la placa està apagada, el xip EEPROM encara conserva el programa que se li ha escrit. Així, quan apagueu la placa i la torneu a engegar, es pot executar el programa que s’ha escrit a la EEPROM. Bàsicament, l'EEPROM emmagatzema i executa un programa, passi el que passi. Això vol dir que podeu apagar un dispositiu, mantenir-lo apagat durant 3 dies, tornar-lo i encendre-lo i, tot i així, pot executar el programa que hi havia programat. Així funcionen la majoria dels dispositius electrònics de consum.

Aquest projecte està patrocinat per LCSC. He estat utilitzant components electrònics de LCSC.com. LCSC té un fort compromís a oferir una àmplia selecció de components electrònics genuïns i d’alta qualitat al millor preu amb una xarxa d’enviament mundial a més de 200 països. Inscriviu-vos avui i obteniu 8 $ de descompte en la vostra primera comanda.

EEPROM també és molt eficient perquè els bytes individuals d'una EEPROM tradicional es poden llegir, esborrar i reescriure de forma independent. En la majoria dels altres tipus de memòria no volàtil, això no es pot fer. Els dispositius EEPROM de sèrie, com el Microchip EEPROM de la sèrie 24, us permeten afegir més memòria a qualsevol dispositiu que pugui parlar en I²C.

Subministraments

  1. EEPROM - 24LC512
  2. ATmega328P-PU
  3. Cristall de 16 MHz
  4. Taula de pa
  5. Resistència 4,7 k Ohm x 2
  6. Condensador 22 pF x 2

Pas 1: conceptes bàsics de l'EEPROM

Conceptes bàsics de EEPROM
Conceptes bàsics de EEPROM

El xip Microchip 24LC2512 es pot comprar en un paquet DIP de 8 pins. Els pins del 24LC512 són força senzills i consten de potència (8), GND (4), protecció contra escriptura (7), SCL / SDA (6, 5) i tres pins d’adreça (1, 2, 3).

Una breu història de la ROM

Els primers ordinadors de tipus "Programa emmagatzemat" (com ara calculadores de taula i intèrprets de teclat) van començar a utilitzar ROM en forma de ROM de matriu de díodes. Es tractava d’una memòria formada per díodes semiconductors discrets col·locats en un PCB especialment organitzat. Això va donar pas a Mask ROM amb l'arribada de circuits integrats. La ROM de màscara s’assemblava molt a la ROM de Diode Matrix, només s’implementava a una escala molt menor. Això significava, però, que no podríeu moure un parell de díodes amb un soldador i reprogramar-lo. La màscara ROM havia de ser programada pel fabricant i, posteriorment, no fou modificable.

Malauradament, Mask ROM era car i trigava molt de temps a produir-se, perquè cada nou programa necessitava un nou dispositiu per a ser fabricat per una foneria. El 1956, però, aquest problema es va resoldre amb la invenció de PROM (ROM programable) que permetia als desenvolupadors programar els xips ells mateixos. Això significava que els fabricants podien produir milions del mateix dispositiu no programat, cosa que el feia més barat i més pràctic. PROM, tanmateix, només es podia escriure en un cop utilitzant un dispositiu de programació d’alta tensió. Després de programar un dispositiu PROM, no hi va haver manera de tornar el dispositiu al seu estat no programat.

Això va canviar el 1971 amb la invenció de l'EPROM (Erasable Programmable ROM) que, a més d'afegir una altra lletra a l'acrònim, va portar la possibilitat d'esborrar el dispositiu i tornar-lo a un estat "en blanc" mitjançant una forta font de llum UV. És cert, havíeu de lluir una llum brillant a l’IC per reprogramar-lo. Què tan guai? Bé, resulta que és bastant bo tret que sigueu un desenvolupador que treballa en el microprogramari, en aquest cas us agradaria poder reprogramar el dispositiu mitjançant senyals elèctrics. Això finalment es va fer realitat el 1983 amb el desenvolupament de l'EEPROM (ROM programable esborrable elèctricament) i, amb això, arribem a les sigles difícils d'utilitzar actualment.

Pas 2: peculiaritats d'EEPROM

Hi ha dos inconvenients importants en EEPROM com a mètode d'emmagatzematge de dades. En la majoria d’aplicacions, els avantatges superen els desavantatges, però n’haureu de ser conscients abans d’incorporar EEPROM al vostre proper disseny.

En primer lloc, la tecnologia que fa funcionar EEPROM també limita el nombre de vegades que es pot tornar a escriure. Això té a veure amb que els electrons queden atrapats als transistors que formen la ROM i es formen fins que la diferència de càrrega entre un "1" i un "0" no es reconeix. Però no us preocupeu, la majoria de les EEPROM tenen un nombre màxim de reescriptures d’1 milió o més. Mentre no escriviu contínuament a l'EEPROM, és poc probable que assoliu aquest màxim. En segon lloc, EEPROM no s’esborrarà si traieu l’energia, però no mantindrà les vostres dades indefinidament. Els electrons poden sortir dels transistors i travessar l’aïllant, esborrant eficaçment la EEPROM amb el pas del temps. Dit això, això sol passar al llarg dels anys (tot i que es pot accelerar per la calor). La majoria dels fabricants diuen que les vostres dades són segures a EEPROM durant deu anys o més a temperatura ambient. I cal tenir en compte una altra cosa a l’hora de seleccionar un dispositiu EEPROM per al vostre projecte. La capacitat EEPROM es mesura en bits i no en bytes. Una EEPROM de 512 K conté 512 KB de dades, és a dir, només 64 KB.

Pas 3: connexió del maquinari Arduino

Connexió del maquinari Arduino
Connexió del maquinari Arduino
Connexió del maquinari Arduino
Connexió del maquinari Arduino

D’acord, ara que ja sabem què és EEPROM, en connectem una i veurem què pot fer. Per fer que el nostre dispositiu parli, haurem de connectar l'alimentació i les línies de sèrie I²C. Aquest dispositiu, en particular, funciona a 5VDC, de manera que el connectarem a la sortida de 5V del nostre Arduino UNO. A més, les línies I²C necessitaran resistències de tracció perquè la comunicació passi correctament. El valor d'aquestes resistències depèn de la capacitat de les línies i de la freqüència que vulgueu comunicar, però una bona regla general per a aplicacions no crítiques només es manté en el rang de kΩ. En aquest exemple, utilitzarem resistències pull-up de 4,7 kΩ.

Hi ha tres pins en aquest dispositiu per seleccionar l'adreça I²C, d'aquesta manera podeu tenir més d'una EEPROM al bus i dirigir-los de manera diferent. Podeu posar-los a terra tots, però els connectarem perquè puguem caure en un dispositiu de més capacitat més endavant al tutorial.

Utilitzarem una taula per connectar-ho tot. El diagrama següent mostra la connexió correcta per a la majoria de dispositius EEPROM I²C, inclosa la EEPROM de la sèrie 24 Microchip que venem.

Pas 4: llegir i escriure

La majoria de les vegades, quan utilitzeu una EEPROM juntament amb un microcontrolador, no haureu de veure tot el contingut de la memòria alhora. Simplement llegireu i escrivireu bytes aquí i allà segons sigui necessari. En aquest exemple, però, escriurem un fitxer sencer a EEPROM i després el llegirem tot de manera que puguem visualitzar-lo al nostre ordinador. Això ens hauria de fer sentir còmodes amb la idea d’utilitzar EEPROM i també ens donaria la sensació de quantes dades poden cabre realment en un dispositiu petit.

Escriure alguna cosa

El nostre esbós d’exemple simplement agafarà qualsevol byte que entra pel port sèrie i l’escriu a la EEPROM, fent un seguiment del camí de quants bytes hem escrit a la memòria.

Escriure un byte de memòria a la EEPROM sol passar en tres passos:

  1. Envieu el byte més significatiu de l'adreça de memòria a la qual voleu escriure.
  2. Envieu el byte mínim significatiu de l'adreça de memòria a la qual voleu escriure.
  3. Envieu el byte de dades que vulgueu emmagatzemar en aquesta ubicació.

Probablement hi ha algunes paraules clau que expliquen:

Adreces de memòria

Si us imagineu tots els bytes d’una EEPROM de 512 Kbit situats en una línia de 0 a 64000, perquè hi ha 8 bits per octet i, per tant, podeu ajustar 64000 bytes a una EEPROM de 512 Kbit, llavors hi ha una adreça de memòria línia on trobareu un byte concret. Hem d'enviar aquesta adreça a l'EEPROM perquè sàpiga on posar el byte que estem enviant.

Bytes més significatius i menys significatius

Com que hi ha 32.000 llocs possibles en una EEPROM de 256 Kbit i com que el 255 és el nombre més gran que podeu codificar en un byte, hem d’enviar aquesta adreça en dos bytes. En primer lloc, enviem el byte més significatiu (MSB), els primers 8 bits en aquest cas. A continuació, enviem el byte mínim significatiu (LSB), el segon 8 bits. Per què? Com que així és com el dispositiu espera rebre'ls, això és tot.

Redacció de pàgines

Escriure un byte a la vegada està bé, però la majoria de dispositius EEPROM tenen una cosa anomenada "memòria intermèdia d'escriptura de pàgina" que us permet escriure diversos bytes alhora alhora que ho faríeu amb un sol byte. Ho aprofitarem al nostre esbós d’exemple. L’EEPROM utilitza un comptador intern que augmenta automàticament la ubicació de la memòria amb cada byte de dades següent que rep. Un cop enviada una adreça de memòria, la podem seguir amb fins a 64 bytes de dades. L’EEPROM assumeix (amb raó) que una adreça de 312 seguida de 10 bytes registrarà el byte 0 a l’adreça 312, el byte 1 a l’adreça 313, el byte 2 a l’adreça 314, etc.

Llegiu alguna cosa

La lectura de l'EEPROM segueix bàsicament el mateix procés de tres passos que escriure a l'EEPROM:

  1. Envieu el byte més significatiu de l'adreça de memòria a la qual voleu escriure.
  2. Envieu el byte mínim significatiu de l'adreça de memòria a la qual voleu escriure.
  3. Demaneu el byte de dades en aquesta ubicació.

Pas 5: esquemes i codi

Esquemes i codi
Esquemes i codi

Codi:

#incloure

#define eeprom 0x50 // defineix l'adreça base de l'EEPROM

configuració nul·la () {

Wire.begin (); // crea un objecte Wire

Serial.begin (9600);

adreça int sense signar = 0; // primera adreça de l'EEPROM

Serial.println ("Escrivim el codi postal 22222, un codi postal"); per a (adreça = 0; adreça <5; adreça ++) writeEEPROM (eeprom, adreça, '2'); // Escriu 22222 a l'EEPROM

for (adreça = 0; adreça <5; adreça ++) {Serial.print (readEEPROM (eeprom, adreça), HEX); }}

bucle buit () {

/ * no hi ha res a la funció loop () perquè no volem que l'arduino escrigui repetidament el mateix a l'EEPROM. Només volem una escriptura única, de manera que la funció loop () s’evita amb les EEPROM. * /}

// defineix la funció writeEEPROM

void writeEEPROM (int deviceaddress, int signed eeaddress, byte data) {Wire.beginTransmission (deviceaddress); Wire.write ((int) (eeaddress >> 8)); // escriu el MSB Wire.write ((int) (eeaddress & 0xFF)); // escriu el LSB Wire.write (dades); Wire.endTransmission (); }

// defineix la funció readEEPROM

byte readEEPROM (int deviceaddress, unsigned int eeaddress) {byte rdata = 0xFF; Wire.beginTransmission (adreça d'adreça); Wire.write ((int) (eeaddress >> 8)); // escriu el MSB Wire.write ((int) (eeaddress & 0xFF)); // escriu el LSB Wire.endTransmission (); Wire.requestFrom (deviceaddress, 1); if (Wire.available ()) rdata = Wire.read (); retornar les dades; }

Recomanat: