mājas - Smart TV
Iekšējā nepastāvīgā EEPROM atmiņa. Darbs ar iekšējo atmiņu EEPROM Eeprom dzēšana

Pagājušajā reizē, kad es uzrakstīju savu “detalizēto atbildi uz jautājumu” par to, kā dublēt programmaparatūru no Mega, viņi man pārmeta, ka es nepieminēju EEPROM dublējumu. Toreiz es to nedarīju apzināti, jo... Es pareizi uzskatīju, ka sākotnējās “pieejas lādiņam” posmā nav nepieciešams visu sarežģīt. Fakts ir tāds, ka ne visiem ir skaidrs, ka EEPROM netiek mirgots, kompilējot un augšupielādējot programmaparatūru no Arduino IDE. Tas nozīmē, ka pilnīgi nekas netiek augšupielādēts EEPROM, kad programmaparatūra tiek augšupielādēta no IDE. Un manipulācijas ar EEPROM (ja tā lietošana programmaparatūrā vispār ir iespējota) tiek veiktas pavisam citā līmenī. Un tāpēc, lai dublētu tukšu programmaparatūru bez precizēšanas, kuru IESPĒJAMS (tikai iespējams) var saglabāt EEPROM, bija pilnīgi pietiekami saglabāt tikai tukšu programmaparatūru. Bet, tā kā ir radies jautājums, kāpēc gan to “nekošļāt”. Iziesim cauri secībā. Kas ir EEPROM un kāpēc par to runāt?
EEPROM — (elektriski dzēšamā programmējamā lasāmatmiņa) mikrokontrollera nepastāvīgās atmiņas apgabals, kurā var ierakstīt un lasīt informāciju. To bieži izmanto, lai saglabātu programmas iestatījumus, kas darbības laikā var mainīties, un tie ir jāsaglabā, kad tiek izslēgta barošana.

Kā 3D printeris izmanto EEPROM?
Apskatīsim Marlin kā piemēru. Marlin programmaparatūrā EEPROM netiek izmantots. Konfiguratora parametri (Configuration.h), kas ietver iespēju to izmantot, tiek komentēti pēc noklusējuma.

#define EEPROM_SETTINGS
#define EEPROM_CHITCHAT

Ja ir iespējota EEPROM izmantošana, printeris var saglabāt un izmantot šādus iestatījumus (norādīts no buržuāzijas):

  • Pakāpienu skaits uz milimetru
  • Maksimālais/minimālais padeves ātrums [mm/s]
  • Maksimālais paātrinājums [mm/s^2]
  • Paātrinājums
  • Paātrinājums ievilkšanas laikā
  • PID iestatījumi
  • Sākuma pozīcijas nobīde
  • Minimālais padeves ātrums kustības laikā [mm/s]
  • Minimālais sadaļas laiks [ms]
  • Maksimālā ātruma lēciens pa X-Y asīm [mm/s]
  • Maksimālā ātruma lēciens Z asī [mm/s]
Šos iestatījumus var rediģēt, izmantojot printera ekrānu un vadīklas. Ja EEPROM izmantošana ir iespējota, izvēlnē ir jāparāda šādi vienumi:
  • Uzglabāt atmiņu
  • Ielādēt atmiņu
  • Atjaunot Failsafe
Varat arī izmantot GCode, lai strādātu tieši (izmantojot Pronterface).
  • M500 Saglabā pašreizējos iestatījumus EEPROM līdz nākamajai palaišanai vai komandai M501.
  • M501 Nolasa iestatījumus no EEPROM.
  • M502 Atiestata iestatījumus uz noklusējuma vērtībām, kas norādītas sadaļā Configurations.h. Ja pēc tā izpildīsit M500, noklusējuma vērtības tiks ievadītas EEPROM.
  • M503 Parāda pašreizējos iestatījumus - ""EEPROM ierakstītie.""
Par EEPROM varat lasīt Repitier programmaparatūrā.

Kā lasīt un rakstīt datus EEPROM?
Līdzīgi metodei, kas aprakstīta programmaparatūras dublēšanas metodē, izmantojot taustiņu -U. Tikai šajā gadījumā pēc tā būs rādītājs, kas norāda, ka ir jālasa EEPROM.

avrdude.exe -p atmega2560 -c elektroinstalācija -PCOM5 -b115200 -Ueeprom:r:"printer_eeprom".eep:i

Šī komanda nolasa EEPROM datus failā "printer_eeprom.eep".

Ierakstīšana arī nav sarežģīta un tiek veikta ar līdzīgu komandu, kas atšķiras tikai ar taustiņu -U Tas nav "r", bet gan "w".

avrdude.exe -p atmega2560 -c elektroinstalācija -PCOM5 -b115200 -Ueeprom:w:"printeris_eeprom".eep:i

Ja tas izdosies, ekrānā tiks parādīts šāds ziņojums.

Kā un kāpēc dzēst EEPROM?
Vispirms ar “kāpēc to darīt?” EEPROM ir jāizdzēš, ja to izmantoja arī iepriekšējā programmaparatūra, un atmiņā var būt palikuši atkritumi. Kaut kur jau esmu saskāries ar cilvēkiem ar problēmām, ka pēc pārejas no vienas programmaparatūras uz citu (no Marlin uz Repitier EMNIP) viņu printeris sāka izturēties, tā sakot, “radoši”. Tas ir saistīts ar faktu, ka dažādas programmaparatūras datus saglabā dažādās adresēs. Un, mēģinot nolasīt datus no nepareizās adreses, sākas juceklis.
EEPROM no programmaparatūras var izdzēst tikai programmatiski, taču, lai to izdarītu, kontrolierī būs īslaicīgi jāaugšupielādē īpaša skice. Vairāk par to varat lasīt oficiālajā Arduino dokumentācijā.
Ja EEPROM tiek izdzēsts nevis Arduino platē, bet gan kādā abstraktā kontrollerī, tad skices kods būs jāmaina, ņemot vērā EEPROM lielumu konkrētā plates kontrolierī. Lai to izdarītu, cilpā "For" būs jāmaina beigu nosacījums. Piemēram, ATmega328, kuram ir 1 kb EEPROM atmiņa, cikls izskatīsies šādi:
Secinājums.
Es jau labu laiku esmu klaiņojis, bet kam tas viss? Lai secinātu, ka, dublējot programmaparatūru, EEPROM var arī saglabāt, bet tikai tad, ja ir nepieciešami tajā saglabātie iestatījumi. Ja esat gatavs tos upurēt, tad aizmirstiet par to. Tāpat, ja maināt vienu programmaparatūru uz citu vai pārslēdzaties no versijas uz citu, neesiet slinks notīrīt EEPROM pirms jaunās programmaparatūras augšupielādes. Nu, tajā pašā laikā mēs uzzinājām daudz jauna.

Mikroshēmas dažādiem mērķiem tiek izmantotas kā daļa no mūsdienu elektronikas. Milzīgu šādu komponentu klāstu papildina atmiņas mikroshēmas. Šāda veida radio komponentus (elektronikas inženieru un cilvēku vidū) bieži sauc vienkārši par mikroshēmām. Atmiņas mikroshēmu galvenais mērķis ir saglabāt noteiktu informāciju ar iespēju ar programmatūru ievadīt (rakstīt), mainīt (pārrakstīt) vai pilnībā dzēst (dzēst). Vispārējā interese par atmiņas mikroshēmām ir saprotama. Meistariem, kuri prot programmēt atmiņas mikroshēmas, paveras plašas iespējas moderno elektronisko ierīču remonta un konfigurācijas jomā.

Atmiņas mikroshēma ir elektroniska sastāvdaļa, kuras iekšējā struktūra spēj saglabāt (atcerēties) ievadītās programmas, jebkurus datus vai abus vienlaikus.

Būtībā mikroshēmā ielādētā informācija ir komandu virkne, kas sastāv no mikroprocesora skaitļošanas vienību kopas.

Jāpiebilst: atmiņas mikroshēmas vienmēr ir neatņemams papildinājums mikroprocesoriem – vadības mikroshēmām. Savukārt mikroprocesors ir jebkuras mūsdienu tehnoloģijas elektronikas pamats.

Elektronisko komponentu komplekts uz modernas elektroniskas ierīces dēļa. Kaut kur starp šo radio komponentu masu ir komponents, kas spēj uzglabāt informāciju.

Tādējādi mikroprocesors kontrolē, un atmiņas mikroshēma saglabā mikroprocesoram nepieciešamo informāciju.

Programmas vai dati tiek saglabāti atmiņas mikroshēmā kā skaitļu virkne - nulles un vieninieki (biti). Vienu bitu var attēlot ar loģisku nulli (0) vai loģisku vienu (1).

Vienotā formā bitu apstrāde šķiet sarežģīta. Tāpēc biti tiek apvienoti grupās. Sešpadsmit biti veido "vārdu" grupu, astoņi biti veido baitu - "vārda daļu", četri biti - "vārda gabalu".

Visbiežāk lietotais programmatūras termins mikroshēmām ir baits. Šis ir astoņu bitu komplekts, kam var būt no 2 līdz 8 skaitliskām variācijām, kopā sniedzot 256 dažādas vērtības.

Lai attēlotu baitu, tiek izmantota heksadecimālā skaitļu sistēma, kas paredz izmantot 16 vērtības no divām grupām:

  1. Digitālais (no 0 līdz 9).
  2. Simbolisks (no A līdz F).

Tāpēc divu heksadecimālo rakstzīmju kombinācijas satur arī 256 vērtības (no 00h līdz FFh). Beigās esošā "h" rakstzīme norāda heksadecimālos skaitļus.

Atmiņas mikroshēmu organizēšana

8 bitu atmiņas mikroshēmām (visizplatītākais veids) biti tiek apvienoti baitos (8 biti) un tiek saglabāti noteiktā "adresē".

Piešķirtā adrese ļauj piekļūt baitiem. Astoņi piekļuves adreses biti tiek izvadīti caur astoņiem datu portiem.


Uzglabāšanas ierīces struktūras organizēšana. No pirmā acu uzmetiena algoritms ir sarežģīts un nesaprotams. Bet, ja gribi saprast, sapratne nāk ātri

EEPROM ir nepastāvīga elektriski dzēšama atmiņa. Rakstīšanas-dzēšanas ciklu skaits šajās mikroshēmās sasniedz 1 000 000 reižu. Traucējošās šūnas tajās, kā arī EPROM tikai lasāmajās atmiņās tiek realizētas, izmantojot peldošo vārtu tranzistorus. Šīs atmiņas šūnas iekšējā struktūra ir parādīta 1. attēlā:


1. attēls. Elektriski dzēšamā ROM (EEPROM) atmiņas šūna

EEPROM atmiņas šūna ir MOS tranzistors, kurā vārti ir izgatavoti no polikristāliskā silīcija. Tad mikroshēmas ražošanas procesā šie vārti tiek oksidēti un rezultātā tos ieskauj silīcija oksīds, dielektriķis ar izcilām izolācijas īpašībām. Tranzistorā ar peldošiem vārtiem, kad ROM ir pilnībā izdzēsts, “peldošajos” vārtos nav lādiņa, un tāpēc šis tranzistors nevada strāvu. Programmēšanas laikā uz otrajiem vārtiem, kas atrodas virs peldošajiem vārtiem, tiek pielikts augsts spriegums un tunelēšanas efekta dēļ tajos tiek inducēti lādiņi. Pēc programmēšanas sprieguma noņemšanas inducētais lādiņš paliek uz peldošajiem vārtiem, un tādējādi tranzistors paliek vadošā stāvoklī. Tā peldošās skrūves lādiņu var uzglabāt gadu desmitiem.

Līdzīga atmiņas šūna tika izmantota ultravioletā starojuma dzēšamajā ROM (EPROM). Atmiņas šūnā ar elektrisko dzēšanu iespējams ne tikai rakstīt, bet arī dzēst informāciju. Informācija tiek izdzēsta, pieslēdzot programmēšanas vārtiem spriegumu, kas ir pretējs ierakstīšanas spriegumam. Atšķirībā no UV dzēšanas ROM, EEPROM atmiņas dzēšanas laiks ir aptuveni 10 ms.

Negaistošās atmiņas blokshēma ar elektrisko dzēšanu neatšķiras no maskas ROM blokshēmas. Vienīgā atšķirība ir tāda, ka kausējamā džempera vietā tiek izmantota iepriekš aprakstītā šūna. Tā vienkāršotā blokshēma ir parādīta 2. attēlā.



2. attēls. Vienkāršota EEPROM blokshēma

Kā piemēru EEPROM atmiņas mikroshēmām mēs varam nosaukt vietējās mikroshēmas 573РР3, 558РР3 un ārvalstu mikroshēmas no AT28с010, AT28с040 sērijas no Atmel, HN58V1001 no Hitachi Semiconductor, X28C010 no Intersil Corporation. EEPROM atmiņā mobilajās ierīcēs visbiežāk tiek glabāti lietotāja dati, kurus nevajadzētu dzēst, izslēdzot strāvu (piemēram, adrešu grāmatas), maršrutētāju vai mobilo ierīču konfigurācijas informācija, retāk šīs mikroshēmas tiek izmantotas kā FPGA konfigurācijas atmiņa vai DSP dati. uzglabāšana. EEPROM ir attēloti shēmas shēmās, kā parādīts 3. attēlā.


3. attēls. Elektriski dzēšamas lasāmatmiņas ierīces grafiskais apzīmējums

Informācijas nolasīšana no paralēlās EEPROM atmiņas ir līdzīga lasīšanai no maskas ROM. Vispirms adrešu kopnē tiek iestatīta nolasāmās atmiņas šūnas adrese binārajā kodā A0...A9, pēc tam tiek pielietots nolasīšanas signāls RD. CS mikroshēmas izvēles signālu parasti izmanto kā papildu adreses vadu, lai piekļūtu mikroshēmai. Signālu laika diagrammas šāda veida ROM ieejās un izejās ir parādītas 4. attēlā.



4. attēls. Signālu laika diagrammas informācijas nolasīšanai no EEPROM atmiņas

5. attēlā parādīts tipiska korpusa rasējums paralēlai EEPROM atmiņas mikroshēmai.


5. attēls. Paralēlā EEPROM mikroshēmas korpusa rasējums

Parasti EEPROM saglabātie dati ir nepieciešami diezgan reti. Lasīšanas laiks šajā gadījumā nav kritisks. Tāpēc dažos gadījumos adrese un dati tiek pārsūtīti uz mikroshēmu un atpakaļ caur seriālo portu. Tas ļauj samazināt mikroshēmu izmērus, samazinot ārējo tapu skaitu. Šajā gadījumā tiek izmantoti divu veidu seriālie porti - SPI ports un I2C ports (mikroshēmas attiecīgi 25cXX un 24cXX sērija). Ārzemju sērija 24cXX atbilst vietējai mikroshēmu sērijai 558PPX.

24cXX sērijas mikroshēmu iekšējā shēma (piemēram, AT24C01) ir parādīta 6. attēlā.



6. attēls. AT24C01 mikroshēmas iekšējā shēma

Šādas mikroshēmas tiek plaši izmantotas, lai saglabātu televizora iestatījumus, piemēram, datoru un klēpjdatoru plug and play atmiņu, FPGA konfigurācijas atmiņu un signālu procesorus (DSP). Seriālās EEPROM atmiņas izmantošana ir ievērojami samazinājusi šo ierīču izmaksas un palielinājusi lietošanas ērtumu. Piemērs šīs mikroshēmas novietojumam uz datora atmiņas kartes iespiedshēmas plates ir parādīts 7. attēlā.



7. attēls. EEPROM uz datora atmiņas kartes iespiedshēmas plates

8. attēlā parādīta elektroniskās kartes diagramma, kurā tiek izmantota ārējā EEPROM mikroshēma.


8. attēls. Elektroniskās kartes shēma, izmantojot ārējo EEPROM

Šajā diagrammā mikrokontrolleris PIC16F84 apmainās ar datiem ar EEPROM atmiņu 24LC16B. Tādas ierīces kā SIM karte vairs neizmanto ārējo atmiņas mikroshēmu. Mobilo ierīču SIM kartes izmanto vienas mikroshēmas mikrokontrollera iekšējo EEPROM atmiņu. Tas ļauj pēc iespējas samazināt šīs ierīces cenu.

Elektriski dzēšamo programmējamo ROM vadības ķēde izrādījās sarežģīta, tāpēc ir radušies divi šo mikroshēmu attīstības virzieni:

  1. EEPROM – elektriski dzēšama programmējama lasāmatmiņa
  2. FLASH ROM

FLASH - ROM atšķiras no EEPROM ar to, ka dzēšana netiek veikta katrā šūnā atsevišķi, bet gan visai mikroshēmai kopumā vai šīs mikroshēmas atmiņas matricas blokam, kā tas tika darīts EEPROM.


9. attēls. FLASH atmiņas grafiskais apzīmējums

Piekļūstot pastāvīgai atmiņas ierīcei, vispirms ir jāiestata adrešu kopnes atmiņas šūnas adrese un pēc tam jāveic lasīšanas darbība no mikroshēmas. Šī laika diagramma ir parādīta 11. attēlā.



10. attēls. Signālu laika diagrammas informācijas nolasīšanai no ROM

10. attēlā bultiņas parāda secību, kādā jāģenerē vadības signāli. Šajā attēlā RD ir nolasīšanas signāls, A ir šūnas adreses izvēles signāli (tā kā atsevišķi biti adreses kopnē var iegūt dažādas vērtības, tiek parādīti pārejas ceļi gan uz vienu, gan uz nulles stāvokli), D ir nolasītā izejas informācija. no atlasītās ROM šūnas.

Literatūra:

Kopā ar rakstu "Tikai lasāmatmiņas ierīces (ROM)" lasiet:

Atmiņas parādīšanās rītausmā, kas saglabāja datus, kad tika izslēgta barošana (EPROM, dzēšams programmējams ROM - “izdzēšams / programmējams ROM” vai krievu valodā PPZU - “programmējams ROM”), tās galvenais veids bija ultravioletā dzēšamā atmiņa: UV-EPROM (Ultra-Violet EPROM, UV-PROM). Turklāt UV prefikss bieži tika izlaists, jo visi saprata, ka EPROM ir ultravioletā starojuma dzēšams, un ROM (vai ROM) ir vienkārši, bez papildinājumiem, vienreiz programmējami OTP-ROM kristāli. Mikrokontrolleri ar UV programmu atmiņu ir izplatīti kopš 90. gadu vidus. Ierīču ar UV atmiņu darba paraugos kvarca logs, caur kuru tika veikta dzēšana, tika noslēgts ar melnas līmlentes gabalu, jo UV-EPROM informācija saules gaismā lēnām tiek iznīcināta.

Rīsi. 18.7. EPROM vienības šūnu dizains

Attēlā 18.7. attēlā parādīta EPROM vienības šūnas struktūra, kas ir visu mūsdienu zibatmiņas veidu pamatā. Ja no tā izslēdzam to, kas norādīts ar uzrakstu “peldošie vārti”, mēs iegūstam visparastāko lauka efekta tranzistoru - tieši tādu pašu, kas iekļauts DRAM šūnā. Ja šāda tranzistora vadības vārtiem tiek pielikts pozitīvs spriegums, tas atvērsies un caur to plūdīs strāva (to uzskata par loģisku vienu stāvokli). Attēlā 18.7 augstāk parādīts gadījums, kad peldošie vārti nekādi neietekmē šūnas darbību - piemēram, šis stāvoklis ir raksturīgs tukšai zibatmiņai, kurā nekad nekas nav ierakstīts.

Ja mums kaut kā (par to runāsim atsevišķi) izdosies uz peldošajiem vārtiem novietot noteiktu lādiņu daudzumu - brīvos elektronus, kas parādīti attēlā. 18.7 zemāk tumšu apļu veidā ar mīnusa zīmi, tad tie pasargās vadības elektroda darbību, un šāds tranzistors vispār pārtrauks vadīt strāvu. Šis ir loģisks nulles stāvoklis. Tā kā peldošos vārtus šādi sauc, jo tie “peld” izolatora (silīcija dioksīda) biezumā, lādiņi, kas reiz tiem ir nodoti, miera stāvoklī nekur nevar nokļūt. Un šādi ierakstītā informācija var tikt glabāta gadu desmitiem (līdz nesenam laikam ražotāji parasti sniedza 10 gadu garantiju, bet praksē normālos apstākļos uzglabāšanas laiks ir daudz ilgāks).

Piezīmes malās

Stingri sakot, NAND mikroshēmās (kas tiks apspriesta vēlāk) loģikai ir jābūt pretējai. Ja parastajā EPROM nevar atvērt ieprogrammētu šūnu, pieliekot nolasīšanas spriegumu, tad ir otrādi - to nevar bloķēt, noņemot spriegumu. Tāpēc jo īpaši tīrā NAND atmiņa izvada visas nulles, nevis vieniniekus, piemēram, EPROM. Bet tās ir nianses, kas nemaina lietas būtību.

Octajiocb vispār nekas - izdomā, kā novietot lādiņus uz peldošajiem vārtiem, kas izolēti no visām ārējām ietekmēm. Un ne tikai tos ievietot - jo dažreiz atmiņa ir jāizdzēš, tāpēc ir jābūt veidam, kā tos no turienes izgūt. UV-EPROM oksīda slānis starp peldošajiem vārtiem un substrātu bija diezgan biezs (protams, ja 50 nanometrus var raksturot kā “biezu), un visa lieta darbojās diezgan rupji. Ierakstot, vadības vārtiem tika pielikts diezgan augsts pozitīvais spriegums - dažreiz līdz 36-40 V, un tranzistora notecē tika pielikts neliels pozitīvs spriegums. Šajā gadījumā elektronus, kas pārvietojās no avota uz noteci, vadības elektroda lauks tik ļoti paātrināja, ka tie vienkārši pārlēca pāri barjerai izolatora veidā starp substrātu un peldošajiem vārtiem. Šo procesu sauc arī par "karsto elektronu injekciju".

Uzlādes strāva sasniedza miliampērus - varat iedomāties, kāds bija visas ķēdes patēriņš, ja tajā vienlaikus tika ieprogrammēti vismaz vairāki tūkstoši elementu. Un, lai gan šāda strāva bija nepieciešama diezgan īsu laiku (tomēr no ķēdes ātruma viedokļa tā nav tik īsa - milisekundes), tas bija lielākais trūkums no visiem vecajiem EPROM atmiņas paraugiem. Vēl trakāk ir gan izolators, gan pats peldošais slēģs ilgu laiku neizturēja šādu ļaunprātīgu izmantošanu un pamazām degradējās, tāpēc dzēšanas-rakstīšanas ciklu skaits tika ierobežots līdz vairākiem simtiem vai, augstākais, tūkstošiem. Daudzos vēlākos zibatmiņas modeļos bija pat īpaša shēma “salauztu” šūnu kartes glabāšanai - tieši tāpat kā cietajiem diskiem. Mūsdienu modeļiem ar miljoniem šūnu ir arī šāda karte - tomēr dzēšanas/rakstīšanas ciklu skaits šobrīd ir pieaudzis līdz simtiem tūkstošu. Kā tas tika panākts?

Rīsi. 18.8. Dzēšanas process EPROM vienības šūnā

Vispirms apskatīsim, kā šajā shēmā tika veikta dzēšana. UV-EPROM, kad tie tika apstaroti ar ultravioleto gaismu, augstas enerģijas fotoni piešķīra pietiekamu impulsu peldošā lādētāja elektroniem, lai tie paši varētu “lēkt” atpakaļ uz substrātu bez jebkādas elektriskās ietekmes. Pirmie elektriski dzēšamās atmiņas (EEPROM, Electrically Erasable Programmable ROM) paraugi tika izveidoti uzņēmumā Intel. 70. gadu beigās, tieši piedaloties topošajam Atmel dibinātājam Džordžam Perlegosam. Viņš izmantoja "kvantu Fowler-Nordheim tunelēšanas efektu". Aiz šī nesaprotamā nosaukuma slēpjas diezgan vienkārša pēc būtības (bet ļoti sarežģīta no fizikālā viedokļa) parādība: ar pietiekami plānu izolatora plēvi (tās biezums bija jāsamazina no 50 līdz 10 nm), elektroni, ja tie ir nedaudz nospiesti. pieliekot ne pārāk augstu spriegumu pareizajā virzienā, var izplūst cauri barjerai, nepārlecot tai. Pats process ir parādīts attēlā. 18.8 augšpusē (ņemiet vērā sprieguma zīmi uz vadības elektroda).

Vecāki EEPROM modeļi darbojās tieši šādi: rakstīšana tika veikta ar “karsto injekciju”, bet dzēšana tika veikta ar “kvantu tunelēšanu”. Tāpēc ar tiem bija diezgan grūti darboties - pieredzējuši izstrādātāji atceras, ka pirmajām EEPROM mikroshēmām bija nepieciešami divi vai pat trīs barošanas spriegumi, un tie bija jāpiegādā noteiktā secībā, rakstot un dzēšot.

EEPROM pārveidošana par zibspuldzi notika trīs dažādos virzienos. Pirmkārt, pašas šūnas dizaina uzlabošanas virzienā. Sākumā mēs atbrīvojāmies no vispretīgākā posma - “karstās injekcijas”. Tā vietā viņi sāka izmantot “kvantu tunelēšanu”, ierakstot, kā arī dzēšot. rīsi. 18.8 zemāk parādīts šis process - ja ar atvērtu tranzistoru vadības vārtiem tiek pielikts pietiekami augsts (bet ievērojami zemāks nekā ar “karsto iesmidzināšanu”) spriegums, tad daži elektroni, kas pārvietojas caur atvērto tranzistoru no avota uz noteci “izplūst” caur izolatoru un nonāk uz peldoša slēģa. Pašreizējais patēriņš ierakstīšanas laikā ir samazinājies par vairākām kārtām. Izolatoru gan nācās padarīt vēl plānāku, kas sagādāja diezgan lielas grūtības šīs tehnoloģijas ieviešanā ražošanā.

Otrs virziens - šūna tika padarīta nedaudz sarežģītāka, pievienojot tai otru tranzistoru (parasto, nevis dubultvārtu), kas atdalīja visas mikroshēmas drenāžas izeju un nolasīšanas kopni. Pateicoties tam visam, bija iespējams panākt ievērojamu izturības pieaugumu – līdz pat simtiem tūkstošu ierakstīšanas/dzēšanas ciklu (ja tiek pievienotas kļūdu labošanas shēmas, tiek iegūti zibatmiņas kartēm raksturīgie cikli). Turklāt mikroshēmā tika pārvietotas augstsprieguma ģenerēšanas shēmas un attiecīgie rakstīšanas/dzēšanas impulsu ģeneratori, kas padarīja šāda veida atmiņu izmantošanu daudz ērtāku - tās sāka darbināt ar vienu spriegumu (5, 3,3 vai pat 1,8). V).

Un visbeidzot, trešais, iespējams, vissvarīgākais uzlabojums bija izmaiņas piekļuves organizācijā mikroshēmas šūnām, kā rezultātā šāda veida atmiņa ieguva nosaukumu zibspuldze (tas ir, “zibens”), kas tagad ir pazīstama katrs digitālās kameras vai kabatas MP3 atskaņotāja īpašnieks. Tā 80. gadu vidū tika saukts EEPROM veids, kurā dzēšana un rakstīšana tika veikta vienlaikus veselos blokos - lapās. Tomēr nolasīšanas procedūra no patvaļīgas šūnas acīmredzamu iemeslu dēļ ir palēninājusies, lai to paātrinātu, ir nepieciešams ievietot starpposma (bufera) SRAM uz zibatmiņas kristāliem. Zibatmiņas diskiem tam nav lielas nozīmes, jo dati joprojām tiek lasīti un ierakstīti lielos masīvos vienlaikus, taču izmantošanai mikrokontrolleros tas var būt neērti. Turklāt MK ir neērti izmantot ātrāko zibspuldzes tehnoloģiju versiju - tā saukto. NAND tipa atmiņa (no loģiskās funkcijas nosaukuma “NAND”), kur principā ir iespējams lasīt un rakstīt atmiņu tikai 512 baitu blokos (tas ir parastais sektora izmērs cietajā diskā , arī lasīt un rakstīts pilnībā uzreiz - no šejienes jūs varat saprast galveno NAND mērķi).

MK parasti izmanto tradicionālo (NOR tipa) programmu zibatmiņu, kurā lapas ir salīdzinoši neliela izmēra – aptuveni 64-256 baiti. Taču, ja lietotājs pats neuzņemas izveidot programmētāju šādai mikroshēmai, viņš var pat neapzināties atmiņas lappuses raksturu. Un lietotāja datiem EEPROM tiek izmantots vai nu ar iespēju nolasīt patvaļīgu baitu, vai arī sadalīts, bet ļoti mazos blokos - piemēram, 4 baitos. Tajā pašā laikā lietotāja piekļuve joprojām ir baits pa baitam. Šādas atmiņas raksturīga iezīme ir diezgan lēna (milisekundes) rakstīšanas procedūra, savukārt lasīšana nav lēnāka par jebkuru citu darbību mikrokontrollerī.

Zibatmiņas tehnoloģiju attīstībai ir bijusi liela nozīme, lai padarītu mikrokontrollerus lētākus un pieejamākus. Turpmāk ar pastāvīgo atmiņu nodarbosimies ne tikai mikrokontrollera atmiņā iebūvētu programmu un datu veidā, bet arī ar atsevišķām mikroshēmām, kas ļauj ierakstīt diezgan lielus informācijas apjomus.

Arduino ir vesela dažādu ierīču saime elektronisku projektu veidošanai. Mikrokontrolleri ir ļoti ērti lietojami un viegli apgūstami pat iesācējam. Katrs mikrokontrolleris sastāv no plates, darbības programmām un atmiņas. Šajā rakstā tiks aplūkota Arduino izmantotā nemainīgā atmiņa.

EEPROM atmiņas apraksts

Arduino saviem lietotājiem nodrošina trīs veidu iebūvēto ierīču atmiņu: stacionāro RAM (brīvpiekļuves atmiņa jeb SRAM – statiskā brīvpiekļuves atmiņa) – nepieciešama datu ierakstīšanai un uzglabāšanai lietošanas laikā; zibatmiņas kartes – jau ierakstītu modeļu saglabāšanai; – datu uzglabāšanai un turpmākai izmantošanai.

Visi RAM dati tiek dzēsti, tiklīdz ierīce tiek restartēta vai tiek izslēgta barošana. Otrie divi saglabā visu informāciju pirms pārrakstīšanas un ļauj to izgūt, ja nepieciešams. Flash diski mūsdienās ir diezgan izplatīti. Ir vērts sīkāk apsvērt EEPROM atmiņu.

Saīsinājums apzīmē elektriski dzēšamu programmējamu lasāmatmiņu, un tulkojumā krievu valodā burtiski nozīmē elektriski dzēšama programmējama lasāmatmiņa. Ražotājs garantē informācijas drošību vairākas desmitgades pēc pēdējā strāvas padeves pārtraukuma (parasti tiek norādīts 20 gadu periods atkarībā no ierīces uzlādes samazināšanās ātruma).

Tomēr jums jāzina, ka iespēja pārrakstīt ierīcē ir ierobežota un nepārsniedz 100 000 reižu. Tāpēc ieteicams būt uzmanīgiem un vērīgiem pret ievadītajiem datiem un tos atkārtoti nepārrakstīt.

Atmiņas apjoms, salīdzinot ar mūsdienu datu nesējiem, ir ļoti mazs un dažādiem mikrokontrolleriem atšķiras. Piemēram:

  • ATmega328 – 1kB
  • ATmega168 un ATmega8 - 512 baiti,
  • un ATmega1280 – 4 kB.

Tas ir izveidots šādā veidā, jo katrs mikrokontrolleris ir paredzēts noteiktam uzdevumu apjomam, tam ir atšķirīgs savienojuma tapu skaits un attiecīgi ir nepieciešams atšķirīgs atmiņas apjoms. Turklāt šī summa ir pietiekama kopīgi veidotiem projektiem.

Rakstīšana uz EEPROM prasa ievērojamu laiku - apm. 3 ms. Ja ierakstīšanas laikā tiek izslēgta barošana, dati netiks saglabāti vispār vai var tikt ierakstīti nepareizi. Vienmēr ir nepieciešams papildus pārbaudīt ievadīto informāciju, lai izvairītos no kļūmēm darbības laikā. Datu lasīšana notiek daudz ātrāk, un tas nesamazina atmiņas resursus.

Bibliotēka

Darbs ar EEPROM atmiņu tiek veikts, izmantojot bibliotēku, kas tika īpaši izveidota Arduino. Galvenās ir spēja rakstīt un lasīt datus. aktivizēts ar komandu #include EEPROM.h.

  • Priekš ieraksti– EEPROM.write(adrese, dati);
  • Priekš lasīšana– EEPROM.lasīt(adrese).

Šajās skicēs: adrese – arguments ar tās šūnas datiem, kurā ievadīti otrā argumenta datu dati; lasot tiek izmantots viens arguments adrese, kas norāda, no kurienes informācija jālasa.

Funkcija Mērķis
lasīt (adrese) nolasa 1 baitu no EEPROM; adrese – adrese, no kuras tiek nolasīti dati (šūna sākot no 0);
rakstīt (adrese, vērtība) ieraksta vērtību (1 baits, skaitlis no 0 līdz 255) atmiņā pēc adreses;
atjauninājums (adrese, vērtība) aizstāj vērtību adresē, ja tās vecais saturs atšķiras no jaunā;
iegūt (adrese, dati) nolasa norādītā tipa datus no atmiņas adresē;
ievietot (adrese, dati) ieraksta norādītā tipa datus atmiņā adresē;
EEPROM ļauj izmantot "EEPROM" identifikatoru kā masīvu datu ierakstīšanai atmiņā un lasīšanai no tās.

Veselu skaitļu rakstīšana

Veselu skaitļu ierakstīšana nepastāvīgā EEPROM atmiņā ir diezgan vienkārša. Cipari tiek ievadīti, kad funkcija tiek palaista EEPROM.write(). Nepieciešamie dati ir norādīti iekavās. Šajā gadījumā skaitļi no 0 līdz 255 un skaitļi virs 255 tiek rakstīti atšķirīgi. Pirmie tiek ievadīti vienkārši - to apjoms aizņem 1 baitu, tas ir, vienu šūnu. Lai rakstītu pēdējo, ir jāizmanto operatori highByte() augstākajam baitam un lowByte() zemākajam baitam.

Skaitlis tiek sadalīts baitos un ierakstīts atsevišķi šūnās. Piemēram, skaitlis 789 tiks ierakstīts divās šūnās: pirmajā būs koeficients 3, bet otrajā - trūkstošā vērtība. Rezultāts ir vajadzīgā vērtība:

3 * 256 + 21 = 789

Priekš « liela vesela skaitļa "atkalapvienošanās", tiek izmantota funkcija vārds (): int val = vārds (sveiki, zems). Jums jāizlasa, ka maksimālais ierakstīšanas veselais skaitlis ir 65536 (tas ir, 2 līdz 16 pakāpei). Šūnās, kurās vēl nav bijuši citi ieraksti, monitors parādīs skaitļus 255 katrā.

Peldošā komata skaitļu un virkņu rakstīšana

Peldošā komata un virkņu skaitļi ir reālu skaitļu rakstīšanas veids, kur tos attēlo mantisa un eksponents. Šādi skaitļi tiek ierakstīti nemainīgā EEPROM atmiņā, aktivizējot funkciju EEPROM.put(), lasīšana, attiecīgi, – EEPROM.get().

Programmējot, peldošā komata skaitliskās vērtības tiek apzīmētas kā peldošas, ir vērts atzīmēt, ka tā nav komanda, bet gan skaitlis. Rakstzīmju tips (rakstzīmju tips) – izmanto, lai attēlotu virknes. Ciparu rakstīšanas process monitorā tiek uzsākts, izmantojot setup(), lasīšana - izmantojot loop().

Procesa laikā monitora ekrānā var parādīties vērtības ovf, kas nozīmē “pārpildīts” un nan, kas nozīmē “trūkst skaitliskās vērtības”. Tas nozīmē, ka šūnā ierakstīto informāciju nevar reproducēt kā peldošā komata skaitli. Šāda situācija neradīsies, ja jūs droši zināt, kurā šūnā, kāda veida informācija ir ierakstīta.

Projektu un skiču piemēri

Piemērs Nr.1

Skice ierakstīs līdz 16 rakstzīmēm no seriālā porta un cilpā izvadīs 16 rakstzīmes no EEPROM. Pateicoties tam, dati tiek ierakstīti EEPROM un tiek uzraudzīts nemainīgās atmiņas saturs.

// pārbaudiet EEPROM darbību #include int i, d; void setup() ( Serial.begin(9600); // inicializē portu, ātrums 9600 ) void loop() ( // nolasa EEPROM un izvada 16 datus seriālajā portā Serial.println(); Serial.print("EEPROM = " ); i = 0; while(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); }

Piemērs Nr.2

Labākai izpratnei mēs varam izveidot nelielu skici, kas palīdzēs saprast, kā strādāt ar nemainīgu atmiņu. Mēs saskaitām visas šīs atmiņas šūnas. Ja šūna nav tukša - izvadiet uz seriālo portu. Pēc tam aizpildiet šūnas ar atstarpēm. Tad mēs ievadām tekstu caur seriālā porta monitoru. Mēs to ierakstām EEPROM un izlasām nākamreiz, kad to ieslēdzat.

#iekļauts int adrese = 0; // eeprom adrese int read_value = 0; // dati nolasīti no eeprom char serial_in_data; // seriālā porta dati int led = 6; // 6. rinda LED int i; void setup() ( pinMode(led, OUTPUT); // 6. rinda ir konfigurēta kā izeja Serial.begin(9600); // bodu ātrums seriālajā portā 9600 Serial.println(); Serial.println("IEPRIEKŠĒJAIS TEKSTS EEPROM : -"); for(adrese = 0; adrese< 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); }

Piemērs Nr.3

Ieraksta atmiņā divus veselus skaitļus, nolasa tos no EEPROM un izvada uz seriālo portu. Izmantojot funkciju, skaitļi no 0 līdz 255 aizņem 1 baitu atmiņas EEPROM.write() tiek ierakstīti vajadzīgajā šūnā. Skaitļiem, kas lielāki par 255, tie jāsadala baitos, izmantojot highByte() Un mazs baits () un ierakstiet katru baitu savā šūnā. Maksimālais skaits šajā gadījumā ir 65536 (vai 2 16).

#iekļauts // savienojiet EEPROM bibliotēku void setup() ( int smallNum = 123; // vesels skaitlis no 0 līdz 255 EEPROM.write(0, smallNum); // ierakstiet skaitli šūnā 0 int bigNum = 789; // sadaliet skaitli > 255 x 2 baiti (maks. 65536) baits hi = highByte(bigNum) // augstais baits zems = mazs baits (lielais skaits) // EEPROM (1, hi) baits; uz šūnu 1 .write(2, zems) // ieraksta zemo baitu šūnā 2 Serial.begin(9600) void loop() ( for (int addr=0; addr).<1024; addr++) { // для всех ячеек памяти (для Arduino UNO 1024) byte val = EEPROM.read(addr); // считываем 1 байт по адресу ячейки Serial.print(addr); // выводим адрес в послед. порт Serial.print("\t"); // табуляция Serial.println(val); // выводим значение в послед. порт } delay(60000); // задержка 1 мин }

Piemērs Nr.4

Peldošā komata skaitļu un virkņu rakstīšana - metode EEPROM.put(). Lasīšana - EEPROM.get().

#iekļauts // savienojiet bibliotēku void setup() ( int addr = 0; // adreses pludiņš f = 3.1415926f; // peldošā komata skaitlis (peldošais veids) EEPROM.put(addr, f); // adresei ierakstiet skaitli f addr addr += sizeof(float); uz EEPROM Serial.begin (9600) // inicializē seriālo 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 минуту }

Piemērs Nr.5

Izmantojot EEPROM kā masīvu.

#iekļauts void setup() ( EEPROM = 11; // ierakstiet 1. šūnu EEPROM = 121; // ierakstiet 2. šūnu EEPROM = 141; // ierakstiet 3. šūnu EEPROM = 236; // rakstiet 4. šūnu 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); }

Darbs ar EEPROM

Kā minēts iepriekš, EEPROM atmiņa ir ierobežota. Lai pagarinātu nepastāvīgās atmiņas kalpošanas laiku, rakstīšanas () funkcijas vietā labāk izmantot atjaunināšanas funkciju. Šajā gadījumā pārrakstīšana tiek veikta tikai tām šūnām, kurās vērtība atšķiras no tikko uzrakstītās.

Vēl viena noderīga attiecīgā mikrokontrollera atmiņas funkcija ir iespēja izmantot baitu uzglabāšanas šūnas kā neatņemama EEPROM masīva daļas. Jebkurā lietošanas formātā ir nepieciešams pastāvīgi uzraudzīt ierakstīto datu integritāti.

Šādā Arduino atmiņā parasti tiek glabātas vissvarīgākās lietas, kas nepieciešamas kontroliera un ierīces darbībai. Piemēram, ja uz šāda pamata tiek izveidots temperatūras regulators un sākotnējie dati izrādīsies kļūdaini, ierīce darbosies “neadekvāti” esošajiem apstākļiem - tā ļoti zemu vai pārvērtēs temperatūru.

Pastāv vairākas situācijas, kad EEPROM satur nepareizus datus:

  1. Pēc sākotnējās aktivizēšanas vēl nebija neviena ieraksta.
  2. Nekontrolēta strāvas padeves pārtraukuma laikā daži vai visi dati netiks ierakstīti vai tiks ierakstīti nepareizi.
  3. Pēc iespējamo datu pārrakstīšanas ciklu pabeigšanas.

Lai izvairītos no nepatīkamām sekām, ierīci var ieprogrammēt vairākām darbības iespējām: lietot avārijas koda datus, pilnībā izslēgt sistēmu, signalizēt par darbības traucējumiem, izmantot iepriekš izveidotu kopiju vai citas.

Lai kontrolētu informācijas integritāti, tiek izmantots sistēmas vadības kods. Tas tiek izveidots, pamatojoties uz sākotnējo datu ierakstu, un pēc pārbaudes tas pārrēķina datus. Ja rezultāts atšķiras, tā ir kļūda. Visizplatītākā šādas pārbaudes versija ir kontrolsumma - tiek veikta vienkārša matemātiska darbība, lai pievienotu visas šūnu vērtības.

Pieredzējuši programmētāji šim kodam pievieno papildu "ekskluzīvu VAI", piemēram, E5h. Ja visas vērtības ir vienādas ar nulli un sistēma kļūdaini atiestatīja sākotnējos datus, šis triks atklās kļūdu.

Šie ir pamatprincipi darbam ar nemainīgu EEPROM atmiņu Arduino mikrokontrolleriem. Dažiem projektiem ir vērts izmantot tikai šāda veida atmiņu. Tam ir gan savas priekšrocības, gan trūkumi. Lai apgūtu rakstīšanas un lasīšanas metodes, labāk sākt ar vienkāršiem uzdevumiem.



 


Lasīt:



Attēla html sprite daļas izvadīšana

Attēla html sprite daļas izvadīšana

Ir daudzas metodes tīmekļa lapu optimizēšanai. Daži no tiem strādā, daži ne. Tomēr ir dažas metodes...

Papildinformācijas un papildu informācijas iestatīšana 1c nomenklatūrai papildu informācija un informācijas atšķirības

Papildinformācijas un papildu informācijas iestatīšana 1c nomenklatūrai papildu informācija un informācijas atšķirības

» būtiski pilnveidota papildu detaļu apakšsistēma, un darbs ar to kļuvis daudz ērtāks. Tomēr vispirms jums tas ir jāizdomā ...

Ko darīt, ja nav reģistrācijas datu

Ko darīt, ja nav reģistrācijas datu

Iemesli 1C (vai datu bāzes) pārsūtīšanai no datora uz datoru var būt ļoti dažādi – uzņēmuma tehnikas parka atjaunināšana, vēlme...

Pieprasījums datu atlasei (formulas) programmā MS EXCEL Excel atlase pēc nosacījumu makro

Pieprasījums datu atlasei (formulas) programmā MS EXCEL Excel atlase pēc nosacījumu makro

Izmantojot Excel rīkus, jūs varat atlasīt noteiktus datus no diapazona nejaušā secībā atbilstoši vienam vai vairākiem nosacījumiem. Priekš...

plūsmas attēls RSS