Als je een maker bent en je doet een aantal doe-het-zelf-projecten waarin je met geheugen moet werken, dan weet je zeker al hoe de verschillende geheugens die Arduino integreert werken, zoals flash (niet-vluchtig waar de sketch en bootloader zijn opgeslagen), SRAM (snel en vluchtig geheugen waar programmavariabelen tijdens de verwerking blijven), en het EEPROM (niet-vluchtig en kan worden gebruikt om informatie over het opnieuw opstarten op te slaan).
Nou, naast de EEPROM die in Arduino zit, kun je ook externe chips van gebruiken dit soort geheugenAls nog een onderdeel. Ze zijn niet ingewikkeld om te begrijpen, noch om ermee te communiceren om toegangen (schrijven en lezen) of updates van de opgeslagen informatie te genereren. Hier vind je alles wat je moet weten om met dit soort herinneringen aan de slag te gaan ...
Wat is EEPROM?
La EEPROM (elektrisch uitwisbaar programmeerbaar alleen rood geheugen) Het is een type ROM-geheugen, dat wil zeggen een niet-vluchtig geheugen waarin gegevens permanent worden opgeslagen, zelfs als de voeding is verwijderd. Dat plaatst ze aan de andere kant van RAM's (Random Access Memory), die al hun gegevens verliezen als ze geen stroom krijgen.
In het geval van EEPROM is het geen geheugen zoals ROM, waarin gegevens worden opgenomen en niet langer kunnen worden gewijzigd. EEPROM, zoals flits, geeft toe veranderd te zijn indien nodig. Dat wil zeggen, sommige gegevens kunnen worden opgeslagen en gewist om verschillende op te slaan.
Zoals de afkortingen aangeven, is het in feite een elektrisch uitwisbaar geheugen (elektrisch uitwisbaar) voor herprogrammering. Dit verschilt van andere typen ROM, die ook uitwisbaar zijn zoals EPROM's, maar in dit geval wordt er geen elektriciteit gebruikt om de geheugencellen te wissen, maar hadden ze een kwarts "venster" op de chip om een UV-licht te kunnen projecteren. die het werd gewist.
Dat kenmerk van EPROM het maakte ze enigszins ongemakkelijk, omdat ze die stralen moesten projecteren om ze te wissen. En het ergste van alles is dat ze per ongeluk kunnen worden gewist als ze worden blootgesteld aan dit soort straling. In EEPROM's is het toegestaan om dit op een comfortabelere en veiligere manier via voltages te doen.
Interne structuur
Om de EEPROM te laten werken, zijn zeer specifieke geheugencellen nodig. Ze zijn gebouwd met behulp van transistors van het MOS-type, maar hebben een zwevende poort in vergelijking met traditionele MOSFET's. Deze nieuwe transistors volgen een structuur die bekend staat als SAMOS, en zijn normale toestand wordt afgesneden en de output zal altijd een logische 1 leveren.
Deze EEPROM-cellen kunnen een onbeperkt aantal keren worden gelezen, maar het is beperkt in het aantal keren dat ze kunnen worden gewist en opnieuw geprogrammeerd, zoals het met vele anderen gebeurt. Dit gebeurt ook met flash, daarom is er zoveel gepraat over de duurzaamheid van SSD-harde schijven, pen-drives, enz.
In het geval van SAMOS ligt deze limiet tussen de 100.000 en 1.000.000 keer. Daarna zullen ze falen. Trouwens, sommige structuren zijn gemaakt door een oude bekende, een van de groten: Dr.Fujio Masuoka uit Toshiba (1984), die ook andere belangrijke herinneringen en halfgeleiderstructuren heeft gemaakt ... markt was Intel's uit 1988, een NOR type EEPROM.
Daarnaast moet je weten dat dit type geheugen meestal doorverbonden is met CPU's of controllers bus met protocollen zoals SPI, I2C, enz. In het geval van MCU's (microcontrollers) is het meestal binnenin geïntegreerd, zoals bij sommige DSP's, om een hogere snelheid te bereiken.
Zoals te zien is in de afbeelding hierboven, is de SAMOS-transistors die de geheugencellen vormen, worden dan in paren gegroepeerd. Een van de lijnen die aan de poorten van sommige transistors is bevestigd, fungeert als een keuzelijn om die lijn te markeren of te signaleren voor toegang (lezen en schrijven), en de andere is degene die de informatiebit (0 of 1) opslaat.
De transistors zijn uitgelijnd om de vereiste woordlengtes (4-bit, 8-bit, 16-bit, ...) en zoveel woorden als hoedanigheid u wilt de EEPROM hebben (bijv.: er kunnen 64-bits woordlengtes zijn en met 16 regels = 1024 bits, dat wil zeggen 1kb).
Hoe werkt een EERPOM?
Zoals je aan de zijkant kunt zien, om te presteren de verschillende takenmoet de spanning van uw gate, source en drain concreet zijn:
- Deur op 20v en afvoer op 20v = programmeren (schrijven) van de geheugencel om de gewenste bit op te slaan.
- Deur op 0v en afvoer op 20v = wis het opgeslagen bit zodat het opnieuw kan worden geprogrammeerd met een andere waarde.
- Gate op 5v en Drain op 5v = lees het opgeslagen bit. Omdat de poortspanning lager is dan die van het schrijven, wordt de opgeslagen waarde niet gewijzigd. Hetzelfde gebeurt met de afvoerspanning, aangezien deze lager is, wordt de opgeslagen bit niet gewist.
Conclusie, EEPROM's gebruiken er een paar spanningen "Hoog" voor wissen en schrijven, terwijl lagere spanningen worden gebruikt voor lezen ...
Koop EEPROM en werk ermee
STMicroelectronics, de Franse fabrikant van micro-elektronica, is nummer één in dit type EEPROM-chips, hoewel er veel andere fabrikanten zijn, zoals Microchip. Deze chips zijn meestal vrij goedkoop.
Als je besluit om gebruik een van deze chips, je zou de fabrikant en het model moeten zien en ernaar zoeken datasheet om alle aanbevelingen van de fabrikant te zien, aangezien deze van de ene tot de andere kunnen verschillen. Ze zullen bijvoorbeeld de spanningen specificeren waarmee het werkt, de pinout, enz. Zodat u uw project goed kunt configureren.
Afhankelijk van de maat en het model kan het meer of minder zijn dennen. Maar om u een idee te geven, een typische 24LC512 EEPROM IC-chip kan bestaan uit:
- Pinnen 1 (A0), 2 (A1) en 3 (A3) die in de configuratie worden gebruikt, zijn de selectiepinnen.
- Pin 4 (Vss / GND) verbonden met aarde.
- Pin 5 (SDA), voor seriële gegevens voor I2C-communicatie.
- Pin 6 (SCL), voor de klok voor I2C.
- Pin 7 (WP), schrijfbeveiliging of schrijfbeveiliging. Als het is verbonden met GND, wordt schrijven mogelijk gemaakt. Als het verbinding maakt met Vcc, is het uitgeschakeld.
- Pin 8 (Vcc), aangesloten op stroom.
De Technische specificaties van deze chip:
- 512K (64 × 8)
- 128-byte buffer voor schrijven
- Bedrijfsspanning: 1.8v tot 5.5v
- Leesstroom: 40uA
- Communicatiebus: I2C
- Schrijfcyclus: 5 ms
- Klokcompatibiliteit: 100-400 Khz
- Duurzaamheid: 10.000.000 cycli
- Kan tot 8 apparaten in cascade worden geplaatst
- Verpakking: 8-pins DIP, SOIJ, SOIC en TSSOP.
Waar te kopen
naar koop EEPROM-chipskunt u deze aanbevelingen bekijken:
- 95040Kb ST 4 seriële SPI
- Geen producten gevonden.
- Geen producten gevonden.
- Geen producten gevonden.
- ST 24LC256 seriële I2C 256Kb
- Geen producten gevonden.
Met behulp van de Arduino EEPROM
Als u met de EEPROM wilt gaan werken, kunt u ook degene op uw bord proberen Arduino. Het kan op een eenvoudige manier worden geprogrammeerd om op logisch en programmeerniveau te begrijpen hoe het kan werken.
Voorbeeld om een variabele op te slaan
//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 }
Voorbeeld om gegevens uit EEPROM te lezen
//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() { }
Voorbeeld om waarden bij te werken, opnieuw te plannen
//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 }
Meer informatie - Gratis Arduino-cursus