Čo je EEPROM? Hlavné vlastnosti pamäte EEPROM Vymazanie Eeprom

  • 10.09.2021

Vymazanie pamäte EEPROM

Príklad prechádza cez všetky pamäťové bunky a zapisuje do nich nuly.

// Pripojenie knižnice pre prácu s EEPROM. #include "EEPROM.h" void setup () (// Prejdite všetky bunky (bajty) a zapíšte do nich nuly. for (int i = 0; i< EEPROM.length(); i++) EEPROM.update(i, 0); } void loop() { // Пустой цикл... }


Návrat na výrobné nastavenia

Ak chcete pamäť vrátiť do továrenského nastavenia, musíte 0 nahradiť 255, t.j. zapisovať nie nuly, ale číslo 255. V budúcnosti je teda možné pomocou funkcie isNaN () skontrolovať, či došlo k zápisu do pamäte EEPROM alebo nie.

// Pripojenie knižnice pre prácu s EEPROM. #include "EEPROM.h" void setup () (// Iterujte cez všetky bunky (bajty) a napíšte do nich 255 čísel. for (int i = 0; i< EEPROM.length(); i++) EEPROM.update(i, 255); } void loop() { // Пустой цикл... }

Povedzte nám o nás

Správa

Ak máte skúsenosti s prácou s Arduinom a skutočne máte čas na kreativitu, pozývame každého, aby sa stal autorom článkov publikovaných na našom portáli. Môžu to byť lekcie alebo príbehy o vašich experimentoch s Arduinom. Popis rôznych senzorov a modulov. Rady a návody pre začiatočníkov. Napíšte a uverejnite svoje články

Čipy s elektricky vymazateľnou programovateľnou pamäťou iba na čítanie (EEPROM) sú polovodičové počítačové čipy s oxidom kovu, ktoré sa používajú na doske s plošnými spojmi. Tento typ čipu je možné vymazať a preprogramovať pomocou silného elektronického signálu. Keďže to možno vykonať bez odstránenia čipu zo zariadenia, ku ktorému je pripojený, čipy EEPROM sa používajú v mnohých odvetviach.
Čip EEPROM obsahuje energeticky nezávislú pamäť, takže pri prerušení napájania čipu nedôjde k strate jeho údajov. Tento typ mikroobvodu je možné selektívne naprogramovať, čo znamená, že časť jeho pamäte možno zmeniť prepísaním bez ovplyvnenia zvyšku pamäte. Informácie uložené vo vnútri čipu EEPROM sú trvalé, kým nie sú vymazané alebo preprogramované, čo z nich robí cennú súčasť v počítačoch a iných elektronických zariadeniach.

EEPROM sú založené na tranzistoroch s plávajúcim hradlom. EEPROM je naprogramovaná vynútenou programovateľnou informáciou vo forme elektrónov cez hradlový oxid. Plávajúca brána potom tieto elektróny ukladá. Pamäťová bunka sa považuje za naprogramovanú, keď je nabitá elektrónmi, a to je reprezentované nulou. Ak pamäťová bunka nie je nabitá, nie je naprogramovaná a je reprezentovaná jednotkou.

Široká škála zariadení vyžaduje pamäť, a preto majú čipy EEPROM mnohé využitie v spotrebnej elektronike. Používajú sa v herných systémoch, televízoroch a počítačových monitoroch. Čipy EEPROM využívajú aj načúvacie prístroje, digitálne fotoaparáty, technológia Bluetooth a herné systémy. Používajú sa v telekomunikáciách, zdravotníctve a vo výrobnom priemysle. Osobné a firemné počítače obsahujú pamäte EEPROM.

Čip EEPROM má tiež široké uplatnenie v automobilovom priemysle. Používa sa v protiblokovacích brzdových systémoch, airbagoch, elektronických systémoch riadenia stability, prevodovkách a riadiacich jednotkách motora. Čipy EEPROM sa používajú aj v klimatizáciách, displejoch prístrojových panelov, riadiacich moduloch podvozku a systémoch bezkľúčového vstupu. Tieto čipy pomáhajú sledovať spotrebu paliva a využívajú sa aj v rôznych diagnostických systémoch.

Počet opakovaní, ktoré môže čip EEPROM prepísať, je obmedzený. Vrstva vo vnútri čipu sa postupne poškodzuje početnými prepismi. Nie je to veľký problém, pretože niektoré čipy EEPROM je možné zmeniť až miliónkrát. Ďalší pokrok v technológii bude mať pravdepodobne pozitívny vplyv na to, na čo sa môžu pamäťové čipy pozerať v budúcnosti.

Na úsvite objavenia sa pamäte, ktorá uchováva údaje po vypnutí napájania (EPROM, Erasable Programmable ROM - "vymazateľná / programovateľná ROM", alebo v ruštine EPROM - "programovateľná ROM"), jej hlavným typom bola pamäť vymazateľná ultrafialovým žiarením. svetlo: UV-EPROM (Ultra-Violet EPROM, UV-EPROM). Predpona UV sa navyše často vynechávala, pretože každému bolo jasné, že EPROM je vymazateľná ultrafialovým svetlom a ROM (alebo ROM) sú jednoducho, bez prídavkov, jednorazové programovateľné kryštály OTP-ROM. Mikrokontroléry s UV programovou pamäťou existujú od polovice 90. rokov minulého storočia. V pracovných vzorkách zariadení s UV pamäťou bolo kremenné okienko, cez ktoré sa vykonávalo mazanie, zapečatené kúskom čiernej lepiacej pásky, pretože informácie v UV-EPROM sa na slnečnom svetle pomaly ničia.

Ryža. 18.7. Jednotková bunka EPROM zariadenia

Na obr. 18.7 ukazuje štruktúru bunkovej jednotky EPROM, ktorá je základom všetkých moderných typov flash pamätí. Ak z neho vylúčime to, čo je naznačené nápisom „plávajúca brána“, dostaneme najbežnejší tranzistor s efektom poľa – presne ten istý obsahuje aj bunka DRAM. Ak sa na riadiacu bránu takéhoto tranzistora privedie kladné napätie, otvorí sa a cez ňu preteká prúd (toto sa považuje za stav logickej jednotky). Na obr. 18.7 vyššie ukazuje prípad, kedy plávajúce hradlo nemá žiadny vplyv na činnosť bunky - tento stav je napríklad typický pre čistú flash-pamäť, do ktorej sa nikdy nič nezapísalo.

Ak sa nám však nejakým spôsobom (budeme hovoriť samostatne) podarí umiestniť na plávajúcu bránu určité množstvo nábojov - voľných elektrónov, ktoré sú znázornené na obr. 18.7 nižšie vo forme tmavých kruhov so znamienkom mínus, potom budú tieniť činnosť riadiacej elektródy a takýto tranzistor úplne prestane viesť prúd. Toto je stav logickej nuly. Keďže plávajúca brána sa tak nazýva, pretože „pláva“ v hrúbke izolátora (oxid kremičitý), náboje, ktoré sa na ňu raz dostanú v pokoji, nemôžu ísť nikam. A takto zaznamenané informácie je možné uchovávať aj desiatky rokov (donedávna dávali výrobcovia väčšinou 10-ročnú záruku, no v praxi je za bežných podmienok doba skladovania oveľa dlhšia).

Okrajové poznámky

Presne povedané, v čipoch NAND (o ktorých sa bude diskutovať nižšie) musí byť logika obrátená. Ak nemôžete otvoriť naprogramovanú bunku v normálnej EPROM privedením čítacieho napätia, tak naopak - nemožno ju uzamknúť odstránením napätia. Preto najmä čistá pamäť NAND produkuje všetky nuly, a nie jednotky, ako EPROM. Ale to sú nuansy, ktoré nemenia podstatu veci.

Octajiocb nie je vôbec nič - prísť na to, ako umiestniť náboje na plávajúcu uzávierku izolovanú od všetkých vonkajších vplyvov. A nielen umiestňovať – veď niekedy treba pamäť vymazať, preto musí existovať spôsob, ako ich odtiaľ vytiahnuť. V UV-EPROM bola vrstva oxidu medzi plávajúcou bránou a substrátom dosť hrubá (samozrejme, ak možno 50 nanometrov opísať slovom „hrubá“) a celé to fungovalo dosť surovo. Pri zázname bolo na riadiace hradlo privedené dostatočne vysoké kladné napätie - niekedy až 36-40 V a malé kladné napätie na odber tranzistora. V tomto prípade boli elektróny, ktoré sa presunuli zo zdroja do odtoku, tak urýchlené poľom riadiacej elektródy, že jednoducho preskočili bariéru v podobe izolantu medzi substrátom a plávajúcou bránou. Tento proces sa tiež nazýva "injekcia horúcich elektrónov".

Zároveň nabíjací prúd dosahoval miliampér – viete si predstaviť, aká bola spotreba celého obvodu, ak by v ňom bolo súčasne naprogramovaných aspoň niekoľko tisíc článkov. A hoci takýto prúd bol potrebný pomerne krátky čas (avšak z hľadiska rýchlosti obvodu to nie je také krátke - milisekúndy), bol to najväčší nedostatok všetkých starých vzoriek pamäte EPROM. Ďalšia vec je ešte horšia - izolant aj samotná plávajúca uzávierka takéto posmešky dlho nevydržali a postupne degradovali, preto bol počet cyklov mazanie-zápis obmedzený na niekoľko stoviek, maximálne tisícov. Mnohé neskoršie návrhy flash pamätí mali dokonca špeciálnu schému na ukladanie mapy „rozbitých“ buniek – presne tak, ako sa to robí pri pevných diskoch. Takúto kartu majú aj moderné modely s miliónmi buniek - počet cyklov vymazania / zápisu sa však teraz zvýšil na státisíce. Ako ste to dosiahli?

Ryža. 18.8. Proces vymazania v jednotkovej bunke EPROM

Najprv sa pozrime, ako sa v tejto schéme vykonalo vymazanie. V UV-EPROM, keď sú ožiarené ultrafialovým svetlom, vysokoenergetické fotóny dodávajú elektrónom na plávajúcej bráne dostatočnú hybnosť, takže samy bez elektrických vplyvov „skočia“ späť na substrát. Prvé vzorky elektricky vymazateľných pamätí (EEPROM, Electrically Erasable Programmable ROM – „electrically erasable programmable ROM“, EEPROM) vznikli v Inteli v r. koncom 70. rokov za priamej účasti budúceho zakladateľa Atmelu Georga Perlegosa. Použil „Fowlerov-Nordheimov efekt kvantového tunelovania“. Za týmto nepochopiteľným názvom sa skrýva vo svojej podstate dosť jednoduchý (ale z fyzikálneho hľadiska veľmi zložitý) jav: s dostatočne tenkým izolačným filmom (jeho hrúbka sa musela zmenšiť z 50 na 10 nm) elektróny, ak sú mierne zatlačené aplikovaním nie príliš vysokého napätia v správnom smere môže preniknúť cez bariéru bez toho, aby ju preskočil. Samotný proces je znázornený na obr. 18.8 vyššie (všimnite si značku napätia na bráne).

Staré EEPROM fungovali presne takto: zapisovanie prebiehalo „horúcou injekciou“ a vymazávanie prebiehalo „kvantovým tunelovaním“. Preto boli dosť náročné na obsluhu - skúsení vývojári si pamätajú, že prvé mikroobvody EEPROM vyžadovali dve alebo dokonca tri napájacie napätia a bolo potrebné ich napájať počas zapisovania a mazania v určitom poradí.

Transformácia EEPROM na flash prebiehala v troch rôznych smeroch. Po prvé - v smere zlepšovania dizajnu samotnej bunky. Na začiatok sme sa zbavili najohavnejšieho štádia – „horúcej injekcie“. Namiesto toho začali pri písaní používať aj „kvantové tunelovanie“, ako pri vymazávaní. ryža. 18.8 nižšie je znázornený tento proces - ak je pri otvorenom tranzistore privedené na riadiacu bránu dostatočne vysoké (ale oveľa nižšie ako pri "horúcej injekcii") napätie, potom časť elektrónov pohybujúcich sa cez otvorený tranzistor od zdroja k odtok bude "unikať" cez izolátor a ukáže sa na plávajúcom uzávere. Spotreba prúdu pri zápise klesla o niekoľko rádov. Izolátor však bolo potrebné vyrobiť ešte tenšie, čo spôsobovalo pomerne veľké ťažkosti pri zavádzaní tejto technológie do výroby.

Druhý smer - článok sa trochu skomplikoval pripojením druhého tranzistora k nemu (obyčajného, ​​nie dvojbránového), ktorý rozdeľoval výstup odtoku a zbernicu na odčítanie celého mikroobvodu. Vďaka tomu všetkému bolo možné dosiahnuť výrazné zvýšenie odolnosti - až státisíce cyklov zápisu / vymazania (milióny cyklov typických pre flash karty sa získajú, ak pridáte obvody na opravu chýb). Vo vnútri mikroobvodu boli navyše prenesené obvody generovania vysokého napätia a zodpovedajúce generátory impulzov zápisu / vymazania, čím sa používanie týchto typov pamätí stalo neporovnateľne pohodlnejšie - začali sa napájať z rovnakého napätia (5, 3,3, resp. dokonca 1,8 V).

A nakoniec, tretie, možno najdôležitejšie zlepšenie spočívalo v zmene organizácie prístupu k bunkám na čipe, v dôsledku čoho tento typ pamäte získal názov - flash (to znamená „blesk“). pozná každý majiteľ digitálneho fotoaparátu alebo vreckového MP3 prehrávača. V polovici 80. rokov teda nazvali akúsi EEPROM, v ktorej sa mazanie a zapisovanie vykonávalo naraz v celých blokoch – stránkach. Procedúra čítania z ľubovoľnej bunky sa však z pochopiteľných dôvodov spomalila – na jej zrýchlenie musíte na kryštály flash pamäte umiestniť medziľahlú (buffer) SRAM. V prípade flash diskov na tom nezáleží, pretože tam sa údaje čítajú a zapisujú vo veľkých poliach naraz, ale pre použitie v mikrokontroléroch sa to môže ukázať ako nepohodlné. Navyše v MK je nepohodlné používať najrýchlejšiu verziu flash technológie - tzv. pamäť typu NAND (z názvu logickej funkcie „AND-NOT“), kde je v princípe možné čítať a zapisovať pamäť len v blokoch po 512 bajtoch (to je bežná veľkosť sektora na pevnom disku , tiež prečítané a napísané celé naraz - odtiaľto môžete pochopiť hlavné priradenie NAND).

V MK sa zvyčajne používa tradičná (ako NOR) flash pamäť programov, v ktorej sú stránky relatívne malé - asi 64-256 bajtov. Ak však používateľ sám nepodnikne vytvorenie programátora pre takýto mikroobvod, nemusí ani hádať o stránkovanej povahe pamäte. A pre používateľské dáta sa EEPROM používa buď so schopnosťou čítať ľubovoľný bajt, alebo rozdelená, ale na veľmi malé bloky - napríklad každý 4 bajty. V tomto prípade pre používateľa stále zostáva prístup bajtový bajt. Charakteristickým znakom takejto pamäte je pomerne pomalý (rádovo milisekúnd) zápis, pričom čítanie neprebieha pomalšie ako akékoľvek iné operácie v MC.

Rozvoj technológií flash pamätí má veľký význam pre znižovanie ceny a dostupnosti mikrokontrolérov. V budúcnosti sa budeme zaoberať energeticky nezávislou pamäťou nielen vo forme programov a dát zabudovaných v mikrokontroléri, ale aj jednotlivými mikroobvodmi, ktoré umožňujú zaznamenávať pomerne veľké množstvo informácií.

Všetky mikrokontroléry z rodiny Mega obsahujú energeticky nezávislú pamäť ( EEPROM Pamäť). Veľkosť tejto pamäte sa pohybuje od 512 bajtov v modeloch ATmega8x po 4 KB v starších modeloch. EEPROM pamäť sa nachádza v jeho adresnom priestore a podobne ako RAM je usporiadaná lineárne. Pracovať s EEPROM pamäť používa tri I/O registre: register adries, register údajov a riadiaci register.

Register adries

Register adries EEPROM Pamäť EEAR (register adries EEPROM) fyzicky umiestnené v dvoch RVB EEARH: EEARL umiestnené pozdĺž
adresy $ 1F ($ 3F) a $ 1E ($ 3E). Do tohto registra sa načíta adresa bunky, ku ktorej sa má pristupovať. Register adries je k dispozícii na zapisovanie aj čítanie. Navyše v registri EEARH používajú sa iba najmenej významné bity (počet zahrnutých bitov závisí od objemu EEPROM Pamäť). Nepoužité bity registra EEARH sú len na čítanie a obsahujú "0".

Register údajov

Register údajov EEPROM Pamäť EEDR (údajový register EEPROM) nachádza sa na 1D $ (3D $). Pri zápise do tohto registra sa načítajú údaje, ktoré by sa mali umiestniť EEPROM, a pri čítaní sa tento register naplní údajmi načítanými z EEPROM.

Kontrolný register

Kontrolný register EEPROM Pamäť EECR (riadiaci register EEPROM) sa nachádza na 1C $ (3C $). Tento register slúži na
kontrola prístupu k EEPROM Pamäť. Jeho popis je uvedený v tabuľke nižšie:

Vypúšťanie názov Popis
7..4 - nepoužíva sa, čítajte ako "0"
3 EERIE Povolenie prerušenia EEPROM. Tento bit riadi generovanie prerušenia, ktoré nastane na konci cyklu zápisu do EEPROM. Ak je tento bit nastavený na "1", prerušenia sú povolené (ak je príznak registra I
SREG je tiež nastavený na "1"). Keď sa vypustí EEWE (pozri ďalej v
tabuľka) prerušenie sa generuje neustále
2 EEMWE Riadenie povolení zápisu do EEPROM. Stav tohto bitu určuje činnosť príznaku povolenia zápisu EEWE. Ak je tento bit nastavený na "1", tak pri zápise do EEWE bitu "1" sa dáta zapisujú do EEPROM. V opačnom prípade nemá nastavenie EEWE na „1“ žiadny účinok. Po inštalácii softvéru sa bit EEMWE resetuje hardvérom
4 strojové cykly
1 EEWE Povolenie zapisovať do EEPROM. Keď je tento bit nastavený na "1", dáta sa zapisujú do EEPROM (ak je EEMWE "1")
0 EERE Povolenie na čítanie z EEPROM. Po nastavení tohto bitu na "1" sa dáta načítajú z EEPROM. Na konci čítania sa tento bit hardvérom vymaže.

Ak chcete zapísať jeden bajt do EEPROM, musíte:

1. Počkajte, kým bude EEPROM pripravená na zapisovanie dát (počkajte, kým sa nevymaže príznak EEWE registra EECR).

2. Počkajte na dokončenie zápisu do pamäte programu FLASH (počkajte, kým sa nevymaže príznak SPMEN registra SPMCR).

3. Vložte dátový bajt do registra EEDR a požadovanú adresu do registra EEAR (ak je to potrebné).

4. Nastavte príznak EEMWE registra EECR na "1".

5. Zapíšte do bitu EEWE registra EECR log. "1" pre 4 strojové cykly. Po nastavení tohto bitu procesor
preskočí 2 strojové cykly pred vykonaním ďalšej inštrukcie.

Ak chcete prečítať jeden bajt z EEPROM, musíte:

1. Skontrolujte stav vlajky EEWE. Faktom je, že počas zápisu operácie do pamäte EEPROM (je nastavený príznak EEWE) nemôžete čítať pamäť EEPROM ani meniť register adries.

2. Vložte požadovanú adresu do registra EEAR.

3. Nastavte bit EERE registra EECR na "1".

Keď sú požadované dáta umiestnené v dátovom registri EEDR, dôjde k hardvérovému resetu tohto bitu. Nemusíte však monitorovať stav bitu EERE, aby ste určili, kedy je operácia čítania dokončená, pretože operácia čítania z EEPROM sa vždy vykonáva v jednom strojovom cykle. Navyše, po nastavení bitu EERE na „1“ procesor pred spustením ďalšej inštrukcie preskočí 4 strojové cykly.

Prostredie AVR Studio GCC má štandardnú knižnicu pre prácu s EEPROM, ktorá je zahrnutá pripojením súboru ... Hlavné funkcie sú eeprom_read_byte (), eeprom_write_byte (), eeprom_read_word (), eeprom_write_word (). Napíšme si napríklad program pre minipočítadlo od 0 do 9, kde po stlačení jedného tlačidla sa pridá hodnota a druhé tlačidlo uloží túto hodnotu do pamäte. Mikrokontrolér Atmega8 je napájaný interným generátorom hodín 8 MHz. Jednomiestny sedemsegmentový indikátor so spoločnou anódou cez prúdové obmedzujúce odpory R1-R7 je pripojený na port B, spoločná anóda je pripojená na kladný zdroj. Diagram je zobrazený nižšie:

Najprv pripojíme knižnice potrebné pre prácu, vrátane EEPROM. Definujeme premenné. Premenná "s" ukladá hodnotu, ktorá sa má zobraziť na indikátore, po stlačení tlačidla SB1 sa táto hodnota zvýši o jednu, ale nie viac ako 10. Premenná eeprom_var bude interagovať s EEPROM. Po zapnutí napájania sa načíta EEPROM, načítané údaje sa priradia premennej "s", na základe toho sa na indikátore zobrazí určitá číslica. Keď stlačíte SB2, údaje z premennej "s" sa zapíšu do EEPROM a indikátor raz zabliká.

#include #include #include #define d0 ~ (0x3F) // 0 #define d1 ~ (0x06) // 1 #define d2 ~ (0x5B) // 2 #define d3 ~ (0x4F) // 3 #define d4 ~ (0x66) // 4 #define d5 ~ (0x6D) // 5 #define d6 ~ (0x7D) // 6 #define d7 ~ (0x07) // 7 #define d8 ~ (0x7F) // 8 #define d9 ~ (0x6F) // 9 unsigned char s; unsigned char eeprom_var EEMEM; // definujte premennú v EEPROM int main (void) (DDRB = 0xFF; // Port B na výstup PORTB = 0xFF; DDRD = 0x00; // Port D na vstup PORTD = 0xFF; // Zapnutie ťahových odporov s = eeprom_read_byte (& eeprom_var ); // prečíta bajt z EEPROM a vloží ho do "s" kým (1) (if ((PIND & (1)<< PD0)) == 0) // если кнопка SB1 нажата { while((PIND&(1 << PD0)) == 0){} // ждем отпускания кнопки s++; // увеличиваем "s" на единицу _delay_ms(200); } if(s == 10) // Когда дойдет до 10 обнуляем "s" { s = 0; } if((PIND&(1 << PD1)) == 0) // если кнопка SB2 нажата { while((PIND&(1 << PD1)) == 0){} // ждем отпускания кнопки DDRB = 0xFF; // мигаем индикатором _delay_ms(200); DDRB = 0x00; _delay_ms(200); DDRB = 0xFF; eeprom_write_byte(&eeprom_var, s); // записываем "s" в EEPROM _delay_ms(200); } if(s==0) // Выводим цифры на индикатор PORTB = d0; if(s==1) PORTB = d1; if(s==2) PORTB = d2; if(s==3) PORTB = d3; if(s==4) PORTB = d4; if(s==5) PORTB = d5; if(s==6) PORTB = d6; if(s==7) PORTB = d7; if(s==8) PORTB = d8; if(s==9) PORTB = d9; } }

Komentáre (1)

0 AntonChip 5. 2. 2013 22:15

Citácia Max:

Mozno si nieco pletiem, ale ak mas ukazovatel s OA tak staci jeden rezistor na 5V linke.Preco davat za prvok, ktory maju chranit pred velkym prudom odpory obmedzujuce prud ??


Len si predstavte, čo sa stane, ak sa jeden segment indikátora uzavrie s týmto a s inou schémou zapojenia odporu.

0 AntonChip 15.05.2013 11:16

citujem gydoka:

Ako napísať dvojrozmerné pole do eeprom?


kód:
#include // Pripojte knižnicu

EEMEM unsigned char colors = ((1, 2, 3), // Deklarovanie poľa v EEPROM
{4, 5, 6}};

eeprom_write_byte (& farby, 1); // Zápis prvkov poľa do EEPROM
eeprom_write_byte (& farby, 2);
eeprom_write_byte (& farby, 3);
eeprom_write_byte (& farby, 4);
eeprom_write_byte (& farby, 5);
eeprom_write_byte (& farby, 6);

unsigned char temp;
temp = eeprom_read_byte (& farby); // Extrahujte prvok poľa z EEPROM, riadok 2 (), stĺpec 1 (), t.j. číslo 4

Arduino je celá rodina rôznych zariadení na vytváranie elektronických projektov. Ovládanie mikrokontrolérov je veľmi jednoduché, naučí sa aj začiatočník. Každý mikrokontrolér sa skladá z dosky, softvéru pre prácu, pamäte. Tento článok sa bude zaoberať energeticky nezávislou pamäťou používanou v Arduine.

Popis pamäte EEPROM

Arduino poskytuje svojim používateľom tri typy vstavanej pamäte zariadenia: stacionárna RAM (pamäť s náhodným prístupom alebo SRAM) - je potrebná na zaznamenávanie a ukladanie údajov počas používania; flash karty - na uloženie už zaznamenaných schém; - na uchovávanie a následné použitie údajov.

Všetky údaje v pamäti RAM sa vymažú, akonáhle sa zariadenie reštartuje alebo sa vypne napájanie. Druhé dva ukladajú všetky informácie pred prepísaním a umožňujú vám ich v prípade potreby získať. Flash disky sú v dnešnej dobe celkom bežné. O pamäti EEPROM sa oplatí uvažovať podrobnejšie.

Skratka znamená Electrically Erasable Programmable Read-Only Memory a v preklade do ruštiny doslova znamená – elektricky vymazateľná programovateľná pamäť len na čítanie. Výrobca garantuje bezpečnosť informácií na niekoľko desaťročí vopred po poslednom výpadku prúdu (zvyčajne sa udáva doba 20 rokov v závislosti od rýchlosti poklesu nabitia zariadenia).

V tomto prípade musíte vedieť, že schopnosť prepísať zariadenie je obmedzená a nie je väčšia ako 100 000 krát. Preto sa odporúča byť opatrný a pozorný na zadané údaje a znova ich neprepísať.

Množstvo pamäte je v porovnaní s modernými médiami veľmi malé a rozdielne pre rôzne mikrokontroléry. Napríklad pre:

  • ATmega328 – 1 kB
  • ATmega168 a ATmega8 – 512 bajtov,
  • a ATmega1280 - 4KB.

Je to preto, že každý mikrokontrolér je určený na určité množstvo úloh, má iný počet pinov na pripojenie, respektíve je potrebná iná pamäť. Navyše táto suma postačuje na bežne vytvárané projekty.

Zápis do EEPROM trvá značné množstvo času – asi 3 ms... Ak počas nahrávania vypnete napájanie, údaje sa vôbec neuložia alebo môžu byť zapísané omylom. Vždy je potrebné dodatočne skontrolovať zadané informácie, aby sa predišlo poruchám počas prevádzky. Čítanie dát je oveľa rýchlejšie, pamäťový zdroj sa tým nezníži.

Knižnica

Práca s pamäťou EEPROM sa vykonáva pomocou knižnice, ktorá bola špeciálne vytvorená pre Arduino. Medzi hlavné patrí schopnosť zapisovať a čítať dáta. aktivovaný príkazom #include EEPROM.h.

  • pre záznamy- EEPROM.write (adresa, údaje);
  • pre čítanie- EEPROM.read (adresa).

V týchto náčrtoch: adresa - argument s údajmi bunky, kde sa zadávajú údaje druhého argumentu údajov; pri čítaní sa používa jeden argument, adresa, ktorá označuje, odkiaľ sa majú informácie čítať.

Funkcia Vymenovanie
prečítať (adresa) číta 1 bajt z EEPROM; adresa - adresa, z ktorej sa načítavajú údaje (bunka začínajúca od 0);
napísať (adresa, hodnota) zapíše do pamäte hodnotu hodnoty (1 bajt, číslo od 0 do 255) na adresu adresy;
aktualizovať (adresa, hodnota) nahradí hodnotu hodnoty na adrese, ak sa jej starý obsah líši od nového;
získať (adresu, údaje) načítava údaje zadaného typu z pamäte na adrese;
vložiť (adresu, údaje) zapisuje údaje zadaného typu do pamäte na adresu;
EEPROM umožňuje použiť identifikátor „EEPROM“ ako pole na zapisovanie údajov a čítanie z pamäte.

Zápis celých čísel

Zápis celých čísel do energeticky nezávislej EEPROM je pomerne jednoduchý. Zadávanie čísel prebieha pri spustení funkcie EEPROM.write ()... Požadované údaje sú uvedené v zátvorkách. V tomto prípade sa čísla od 0 do 255 a čísla nad 255 píšu rôznymi spôsobmi. Prvé sa zadávajú jednoducho - ich veľkosť je 1 bajt, teda jedna bunka. Ak chcete napísať druhý, musíte použiť operátory highByte () high byte a lowByte () low byte.

Číslo je rozdelené na bajty a zapísané samostatne do buniek. Napríklad číslo 789 bude napísané v dvoch bunkách: prvá bude multiplikátor 3 a druhá - chýbajúca hodnota. V dôsledku toho sa získa požadovaná hodnota:

3 * 256 + 21 = 789

Pre « zjednotením „veľkého celého čísla sa použije funkcia slova (): int val = slovo (ahoj, nízke)... Mali by ste si prečítať, že maximálne celé číslo na zápis je 65536 (to znamená od 2 do 16. mocniny). V bunkách, ktoré ešte nemajú žiadne iné položky, bude mať monitor v každej z nich čísla 255.

Zápis čísel a reťazcov s pohyblivou rádovou čiarkou

Čísla s pohyblivou rádovou čiarkou a reťazcové čísla sú formou zápisu reálnych čísel, kde sú reprezentované z mantisy a exponentu. Takéto čísla sa zapisujú do energeticky nezávislej pamäte EEPROM pri aktivácii funkcie EEPROM.put (), respektíve čítanie, - EEPROM.get ().

Pri programovaní sú číselné hodnoty s pohyblivou rádovou čiarkou označené ako float, stojí za zmienku, že nejde o príkaz, ale o číslo. Typ znaku (typ znaku) – používa sa na označenie reťazcov. Proces zapisovania čísel na monitor sa spustí nastavením (), čítanie pomocou slučky ().

V tomto procese sa na obrazovke monitora môžu zobraziť hodnoty ovf, čo znamená "pretečené" a nan, čo znamená "neexistuje žiadna číselná hodnota". To znamená, že informácie zapísané do bunky nemožno reprodukovať ako číslo s pohyblivou rádovou čiarkou. Takáto situácia nenastane, ak je spoľahlivo známe, v ktorej bunke je zaznamenaný aký typ informácie.

Príklady projektov a náčrtov

Príklad #1

Skica zapíše až 16 znakov zo sériového portu a 16 znakov z EEPROM. Vďaka tomu sa dáta zapisujú do EEPROM a monitoruje sa obsah energeticky nezávislej pamäte.

// skontrolujte, či EEPROM funguje #include int i, d; void setup () (Serial.begin (9600); // inicializácia portu, rýchlosť 9600) void loop () (// čítanie EEPROM a výstup údajov 16 na sériový port Serial.println (); Serial.print ("EEPROM ="); i = 0; zatiaľ čo (i< 16) { Serial.print((char)EEPROM.read(i)); i++; } // проверка есть ли данные для записи if (Serial.available() != 0) { delay(50); // ожидание окончания приема данных // запись в EEPROM i= 0; while(i < 20) { d= Serial.read(); if (d == -1) d= " "; // если символы закончились, заполнение пробелами EEPROM.write(i, (byte)d); // запись EEPROM i++; } } delay(500); }

Príklad č.2

Pre lepšie pochopenie si môžeme vytvoriť malý náčrt, ktorý pomôže pochopiť, ako pracovať s energeticky nezávislou pamäťou. Počítame všetky bunky tejto pamäte. Ak bunka nie je prázdna, uveďte výstup na sériový port. Potom vyplňte bunky medzerami. Potom zadáme text cez sériový monitor. Zapíšeme ho do EEPROM a prečítame ho pri ďalšom zapnutí.

#include int adresa = 0; // adresa eeprom int read_value = 0; // dáta načítané z eeprom char serial_in_data; // údaje sériového portu int led = 6; // riadok 6 pre LED int i; void setup () (pinMode (LED, OUTPUT); // riadok 6 je nakonfigurovaný pre výstup Serial.begin (9600); // prenosová rýchlosť na sériovom porte 9600 Serial.println (); Serial.println ("PREDCHÁDZAJÚCI TEXT V EEPROM: - "); pre (adresa = 0; adresa< 1024; address ++) // считываем всю память EEPROM { read_value = EEPROM.read(address); Serial.write(read_value); } Serial.println(); Serial.println("WRITE THE NEW TEXT: "); for(address = 0; address < 1024; address ++) // заполняем всю память EEPROM пробелами EEPROM.write(address, " "); for(address = 0; address < 1024;) // записываем пришедшие с последовательного порта данные в память EEPROM { if(Serial.available()) { serial_in_data = Serial.read(); Serial.write(serial_in_data); EEPROM.write(address, serial_in_data); address ++; digitalWrite(led, HIGH); delay(100); digitalWrite(led, LOW); } } } void loop() { //---- мигаем светодиодом каждую секунду -----// digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW); delay(1000); }

Príklad č.3

Zápis dvoch celých čísel do pamäte, ich načítanie z EEPROM a ich výstup na sériový port. Čísla od 0 do 255 zaberajú pomocou funkcie 1 bajt pamäte EEPROM.write () sa zapíšu do požadovanej bunky. Pre čísla väčšie ako 255 ich vydeľte pomocou bajtov vysoký bajt () a lowByte () a zapíšte každý bajt do vlastnej bunky. Maximálny počet je v tomto prípade 65536 (alebo 2 16).

#include // pripojenie knižnice EEPROM void setup () (int smallNum = 123; // celé číslo od 0 do 255 EEPROM.write (0, smallNum); // zapísanie čísla do bunky 0 int bigNum = 789; // číslo > 255 delíme po 2 bajtoch (max. 65536) bajt hi = vysoký bajt (bigNum); // vysoký bajt bajt low = lowByte (bigNum); // nízky bajt EEPROM.write (1, hi); // zápis vysokého bajtu .<1024; addr++) { // для всех ячеек памяти (для Arduino UNO 1024) byte val = EEPROM.read(addr); // считываем 1 байт по адресу ячейки Serial.print(addr); // выводим адрес в послед. порт Serial.print("\t"); // табуляция Serial.println(val); // выводим значение в послед. порт } delay(60000); // задержка 1 мин }

Príklad č.4

Zápis čísel a reťazcov s pohyblivou rádovou čiarkou – metóda EEPROM.put ()... Čítanie - EEPROM.get ().

#include // pripojenie knižnice void setup () (int addr = 0; // float address f = 3.1415926f; // floating point number (float type) EEPROM.put (addr, f); // zapísal číslo f na adr addr + = sizeof (float); // vypočítajte ďalšie voľné miesto v pamäti char name = "Ahoj, SolTau.ru!"; // vytvorte pole znakov EEPROM.put (addr, name); // zapíšte pole do EEPROM Serial.begin (9600); // inicializácia sériového portu) void loop () (for (int addr = 0; addr<1024; addr++) { // для всех ячеек памяти (1024Б=1кБ) Serial.print(addr); // выводим адрес в послед. порт Serial.print("\t"); // табуляция float f; // переменная для хранения значений типа float EEPROM.get(addr, f); // получаем значение типа float по адресу addr Serial.print(f, 5); // выводим с точностью 5 знаков после запятой Serial.print("\t"); // табуляция char c; // переменная для хранения массива из 20 символов EEPROM.get(addr, c); // считываем массив символов по адресу addr Serial.println(c); // выводим массив в порт } delay(60000); // ждём 1 минуту }

Príklad č.5

Použitie EEPROM ako poľa.

#include void setup () (EEPROM = 11; // zápis 1. bunky EEPROM = 121; // zápis 2. bunky EEPROM = 141; // zápis 3. bunky EEPROM = 236; // zápis 4. bunky Serial .begin (9600 );) void loop () (for (int addr = 0; addr<1024; addr++) { Serial.print(addr); Serial.print("\t"); int n = EEPROM; // считываем ячейку по адресу addr Serial.println(n); // выводим в порт } delay(60000); }

Práca s EEPROM

Ako už bolo spomenuté, pamäťový zdroj EEPROM je obmedzený. Ak chcete predĺžiť životnosť energeticky nezávislej pamäte, namiesto použitia funkcie zápisu () je lepšie použiť funkciu aktualizácie. V tomto prípade sa prepis vykoná len pre tie bunky, ktorých hodnota sa líši od novo zaznamenanej.

Ďalšou užitočnou funkciou uvažovanej pamäte mikrokontroléra je schopnosť používať bajtové úložné bunky ako súčasti integrálneho poľa EEPROM. Pri akomkoľvek formáte použitia je potrebné neustále sledovať integritu zaznamenávaných údajov.

Takáto pamäť na Arduine štandardne ukladá to najdôležitejšie pre chod ovládača a zariadenia. Napríklad, ak je regulátor teploty vytvorený na takomto základe a počiatočné údaje sa ukážu ako chybné, zariadenie bude fungovať „neadekvátne“ existujúcim podmienkam - výrazne podhodnotí alebo nadhodnotí teplotu.

Existuje niekoľko situácií, kedy EEPROM obsahuje nesprávne údaje:

  1. Pri počiatočnej aktivácii ešte neboli žiadne záznamy.
  2. V momente nekontrolovaného výpadku prúdu sa niektoré alebo všetky údaje nezaznamenajú alebo sa zapíšu nesprávne.
  3. Po dokončení možných cyklov prepisovania údajov.

Aby sa predišlo nepríjemným následkom, zariadenie môže byť naprogramované na niekoľko možností: použiť údaje núdzového kódu, úplne vypnúť systém, signalizovať poruchu, použiť predtým vytvorenú kópiu alebo iné.

Na kontrolu integrity informácií sa používa systémový riadiaci kód. Vytvára sa na základe pôvodného záznamu údajov a po zaškrtnutí prepočítava údaje. Ak je výsledok iný, ide o chybu. Najbežnejšou možnosťou takejto kontroly je kontrolný súčet – vykoná sa bežná matematická operácia na sčítanie všetkých hodnôt buniek.

Skúsení programátori pridávajú k tomuto kódu ďalšie „exkluzívne OR“, napríklad E5h. Ak sa všetky hodnoty rovnajú nule a systém omylom vynuloval pôvodné údaje, takýto trik odhalí chybu.

Toto sú základné princípy práce s energeticky nezávislou pamäťou EEPROM pre mikrokontroléry Arduino. Pre určité projekty sa oplatí používať iba tento typ pamäte. Má to svoje plusy aj mínusy. Na zvládnutie metód písania a čítania je najlepšie začať s jednoduchými úlohami.