Kā darbojas eeprom? Kas ir atmiņas mikroshēma un kā programmēt mikroshēmas. Projektu un skiču piemēri

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 smalki iestatījumi, kuru IESPĒJAMS (tikai varbūt) var saglabāt EEPROM, ar to pilnīgi pietika, lai saglabātu tikai tukšo 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 Firmware out of box EEPROM netiek izmantots Konfiguratora parametri (Configuration.h), kas ietver iespēju to izmantot, pēc noklusējuma tiek komentēti.

#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 X-Y asis[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". Ja tas izdosies, ekrānā redzēsit kaut ko līdzīgu šim.

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 saglabā savus datus dažādas adreses. 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 ir izdzēsts, nav Arduino dēlis, un dažos abstraktos kontrollerī skices kods būs jāmaina, ņemot vērā EEPROM lielumu konkrētā kontrolierī uz tāfeles. 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, var saglabāt arī EEPROM, taču tikai tad, ja 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 pirms augšupielādes notīrīt EEPROM. jauna programmaparatūra. Nu, tajā pašā laikā mēs uzzinājām daudz jauna.

15. nodarbība

1. daļa

Iekšējā nepastāvīga atmiņa EEPROM

Es domāju, varbūt ne visi, bet daudzi cilvēki to zina AVR kontrolieros, papildus galvenajam brīvpiekļuves atmiņa, kā arī atmiņa programmaparatūras glabāšanai, ir arī nemainīga atmiņa, piemēram EEPROM. Šī atmiņa ir izgatavota, izmantojot informācijas elektriskās dzēšanas tehnoloģiju, kas atšķirībā no tā priekšgājēja EPROM, kurā dzēšana tika veikta tikai ar ultravioleto staru palīdzību, ļāva izmantot šāda veida atmiņu gandrīz visur. Kā mēs zinām, ir arī nemainīga atmiņa, piemēram, Flesh, kas ir daudz lētāka, bet kurai ir arī ievērojams trūkums. Tur nav iespējams dzēst vienu baitu, dzēšana tiek veikta tikai blokos, kas dažos gadījumos nav gluži ērti, it īpaši, ja ir jāsaglabā maz informācijas, un šī informācija atspoguļo mazus iestatījumu parametrus. Tāpēc mums vajadzētu arī apstāties pie šis tips atmiņa. Un ne tikai tāpēc, ka tas atrodas kontrollerī, bet tāpēc, ka tas ir ļoti ērti, lai uzglabātu dažus daudzumus, kas mums būs nepieciešami arī pēc tam, kad kontrolieris būs pazaudējis strāvu.

Tā kā strādājam ar kontrolieri Atmega8A, tad atvērsim šī MK tehnisko dokumentāciju un tur redzēsim, ka mums ir kopā 512 baiti šādas atmiņas. Tomēr tas nav tik maz. Ja mēs, piemēram, ieprogrammējam kaut kādu modinātāju, lai iestatījumu dati pēc strāvas izslēgšanas nepazustu, varam viegli atsaukties uz šo atmiņu. Arī dokumentācijā tas teikts dota atmiņa tiek garantēts, ka tas izdzīvos 100 000 rakstīšanas/lasīšanas ciklu.

Tagad tas rada jautājumu. Kā darbs ar šo atmiņu tiek organizēts mikrokontrollerī? AVR? Kā vienmēr, Atmel par to parūpējās un organizēja šo procesu aparatūras līmenī, kas ir ļoti patīkami, jo nepārtraukti jātaupa kontroliera resursi. Lai kontrolētu šo aparatūras līmeni, ir noteikti reģistri.

Viens no tiem ir reģistru pāris EEAR. Kāpēc pāris, bet tāpēc, ka 512 adreses neietilps 8 bitos, ir nepieciešama vēl viena

Mēs redzēsim, kā tieši mēs risināsim programmēšanas procesa laikā EEPROM.

Nākamais ir datu reģistrs EADR

Mēs ierakstīsim datus šajā reģistrā, lai ierakstītu tos uz noteiktu EEPROM atmiņas adresi, kā arī nolasītu no tās pašas atmiņas konkrētas adreses.

Nu, kā parasti, gandrīz neviena perifērijas ierīce vai tehnoloģija, kas sakārtota aparatūras līmenī, nevar iztikt bez vadības reģistra. Mūsu vadošais reģistrs ir reģistrs EECR

Tūlīt iepazīsim šī reģistra bitus.

Mazliet EERE— mazliet, kas izraisa nolasīšanas procesu no EEPROM atmiņas. Un, tiklīdz dati ir nolasīti un ierakstīti datu reģistrā, šis bits tiks atiestatīts. Tāpēc mēs varam uzskatīt šo bitu ne tikai par vadības bitu, bet arī par statusa vai statusa bitu.

Mazliet EEWE— bits, kura iestatījums uzdod kontrolierim rakstīt datus no datu reģistra uz noteiktu EEPROM adresi. Kad rakstīšanas procedūra ir pabeigta, arī šis bits tiek atiestatīts neatkarīgi.

Mazliet EEMWE— mazliet, kas ļauj (neuzsāk) ierakstīšanas procesu.

Mazliet AUGSMI— bits, kas nodrošina pārtraukumus.

Nu, tagad pāriesim pie projekta. Projekts tika izveidots parastajā standarta veidā un nosaukts Pārbaude13. Fails arī tika iekļauts galvenais.h un faili tiek izveidoti eeprom.h Un eeprom.c.

Šeit avots izveidotos failus

Test13.c:

#iekļauts"galvenais.h"

starptgalvenais( nederīgs)

{

kamēr(1)

{

}

}

#ifndefMAIN_H_

#definētMAIN_H_

#definētF_CPU8000000UL

#iekļauts

#iekļauts

#iekļauts

#iekļauts

#iekļauts

#iekļauts"eeprom.h"

 

#endif/* MAIN_H_ */

eeprom.h

#ifndefEEPROM_H_

#definētEEPROM_H_

#iekļauts"galvenais.h"

nederīgsEEPROM_rakstīt( neparakstītsstarptuiAdrese, neparakstītscharucData);

neparakstītscharEEPROM_lasīts( neparakstītsstarptuiAdrese);

#endif/* EEPROM_H_ */

eeprom.c

#iekļauts"eeprom.h"

Pirmkārt, attiecīgi, mēs mēģināsim ierakstīt datus EEPROM atmiņā. Nu, tas ir loģiski, jo, kamēr mēs neko neesam pierakstījuši, mums nav arī ko lasīt.

Nu nemokāsim un ieliksim failā rakstīšanas funkcijas kodu, kā arī lasīšanas funkciju no piemēra tehniskajā dokumentācijā eeprom.c un izņemt angļu valodas komentārus, ievietojot tur krievvalodīgos. Pēc visu labojumu veikšanas fails izskatīsies šādi

#iekļauts"eeprom.h"

nederīgsEEPROM_rakstīt( neparakstītsstarptuiAdrese, neparakstītscharucData)

{

kamēr( EECR& (1<< EEWE))

{}

EEAR= uiAdrese; //Iestatiet adresi

EEDR= ucData; //Ievadām datus reģistrā

EECR|= (1<< EEMWE); //Atļaut ierakstīšanu

EECR|= (1<< EEWE); //Ierakstiet baitu atmiņā

}

neparakstītscharEEPROM_lasīts( neparakstītsstarptuiAdrese)

{

kamēr( EECR& (1<< EEWE))

{} //gaida, kamēr beigu karodziņš tiks atbrīvots pēdējā atmiņas operācijā

EEAR= uiAdrese; //Iestatiet adresi

EECR|= (1<< EERE); //Sākt nolasīšanas operāciju no atmiņas uz datu reģistru

atgrieztiesEEDR; //Atgriezt rezultātu

}

Ierakstīsim šo funkciju prototipus failā eeprom.h

#iekļauts"galvenais.h"

nederīgsEEPROM_rakstīt( neparakstītsstarptuiAdrese, neparakstītscharucData);

neparakstītscharEEPROM_lasīts( neparakstītsstarptuiAdrese);

Tagad izsauksim rakstīšanas funkciju main() funkcijā un tādējādi mēģināsim uzrakstīt kādu 8 bitu vērtību adresei 1. Kopumā adresēšana šajā atmiņā sākas no 0

starptgalvenais( nederīgs)

EEPROM_rakstīt(1, 120);

Kamēr(1)

Eksperimentiem izmantojam to pašu atkļūdošanas dēli, tai vispār neko nepieslēdzot

Saliksim projektu un pāriesim uz programmaparatūras programmu Avrdude.

Atlasīsim tur savu programmaparatūras failu, pēc tam mēģināsim nolasīt kontrolieri, pēc tam izdzēsīsim visu, izmantojot pogu "dzēst visu"

Arī avrdude programmā ir vēl viena rinda "Eeprom". Mēs varam izmantot šo rindiņu, lai rakstītu šajā atmiņā nevis programmatiski, bet gan no faila. Bet mēs rakstīsim no savas programmas, un mēs izmantosim šo rindu, lai nolasītu EEPROM atmiņu failā. Jūs varat ierakstīt ceļu šajā rindā ar roku, un fails tiks izveidots automātiski. Ierakstīsim, piemēram, "C:\1\11111" un noklikšķiniet uz "Lasīt", un pa šo ceļu visa informācija no EEPROM atmiņas tiks ierakstīta norādītajā failā

Varat rakstīt jebkuru ceļu, ja vien plašsaziņas līdzeklis ar šo burtu, kas norādīts kreisajā pusē, pastāv un ir rakstāms. Labāk ir arī izveidot mapi iepriekš.

Tagad atradīsim šo failu diskā un atveram to Notepad

Šim failam ir aptuveni tāds pats formāts kā programmaparatūras failam. Vispirms adrese, tad 32 baiti informācijas un pēc tam kontrolsumma šiem 32 baitiem. Ja mēs nekad neko neesam ierakstījuši EEPROM atmiņā, tad mums būs FF visās adresēs, tas ir, mums ir visos atmiņas bitos.

Mēs aizveram failu, cenšamies mirgot kontrolleri, pēc tam vēlreiz nolasām failā EEPROM atmiņu un atveram failu

Mēs redzam, ka failā tika ierakstīts skaitlis "78", kas nozīmē 120 decimālā formātā.

Tagad mēģināsim nospiest pogu "Dzēst visu", šajā gadījumā EEPROM atmiņu nevajadzētu izdzēst.

Mēs vēlreiz nolasām EEPROM failā, atveram failu un redzam, ka atmiņa ir izdzēsta, mums atkal visur ir “FF”.

Kāpēc tas notika? Tā kā jums ir jāpielāgo drošinātāji. Nolasīšanas drošinātājs

Pievērsīsim uzmanību EESAVE bitam. Kad šis bits ir viens (kā mums ir, biti ir apgriezti), tad mēs piespiežam dzēst EEPROM atmiņu, kad tiek izslēgta strāva, kā arī tad, kad tiek dzēsts. Un, lai tas nenotiktu, šis bits ir jāatiestata, tas ir, ielieciet tajā atzīmi un nozibiniet drošinātājus.

Mēs mirgojam drošinātājus, izdzēšam kontrolieri, mirgojam kontrolieri, vēlreiz izdzēšam, nolasām EEPROM atmiņu failā un atveram to. Tagad mēs redzam, ka no mums nekas nav izdzēsts

Tagad mēģināsim atvienot kontrolieri no barošanas avota un pēc kāda laika atkal pieslēgt strāvu. Atkal mēs nolasām EEPROM failā, viss ir neskarts. Lieliski!

Nākamajā apmācības daļā mēs mēģināsim programmatiski nolasīt datus no EEPROM atmiņas.

Noskaties VIDEO PAMĀCĪBU (spied uz attēla)

Ziņas skatījumi: 7259

Elektriski dzēšamās programmējamās lasāmatmiņas (EEPROM) mikroshēmas ir metāla oksīda pusvadītāju datoru mikroshēmas, kuras izmanto uz iespiedshēmas plates. Šāda veida mikroshēmu var izdzēst un pārprogrammēt, izmantojot spēcīgu elektronisko signālu. Tā kā to var izdarīt, neizņemot mikroshēmu no ierīces, ar kuru tā ir savienota, EEPROM mikroshēmas tiek izmantotas daudzās nozarēs.
EEPROM mikroshēmā ir nemainīga atmiņa, tāpēc tās dati netiek zaudēti, ja mikroshēmai tiek pārtraukta strāvas padeve. Šāda veida mikroshēmu var selektīvi programmēt, kas nozīmē, ka daļu no tās atmiņas var mainīt ar jaunu pārrakstīšanu, neietekmējot pārējo atmiņu. EEPROM mikroshēmā saglabātā informācija ir pastāvīga, līdz tā tiek izdzēsta vai pārprogrammēta, padarot to par vērtīgu komponentu datoros un citās elektroniskās ierīcēs.

EEPROM mikroshēmu pamatā ir peldošo vārtu tranzistori. EEPROM mikroshēma ir ieprogrammēta, izspiežot programmējamu informāciju elektronu veidā caur vārtu oksīdu. Pēc tam peldošie vārti nodrošina šo elektronu uzglabāšanu. Atmiņas šūna tiek uzskatīta par ieprogrammētu, kad tā ir uzlādēta ar elektroniem, un to attēlo nulle. Ja atmiņas šūna nav uzlādēta, tā nav ieprogrammēta un tiek attēlota ar vienu.

Plašam ierīču klāstam ir nepieciešama atmiņa, tāpēc EEPROM mikroshēmām ir daudz pielietojumu plaša patēriņa elektronikas jomā. Tos izmanto spēļu sistēmās, televizoros un datoru monitoros. Dzirdes aparāti, digitālās kameras, Bluetooth tehnoloģija un spēļu sistēmas izmanto arī EEPROM mikroshēmas. Tos izmanto telekomunikāciju, medicīnas un ražošanas nozarēs. Personālajos un biznesa datoros ir EEPROM.

EEPROM mikroshēmai ir arī plašs lietojumu klāsts automobiļu rūpniecībā. To izmanto bremžu pretbloķēšanas sistēmās, gaisa spilvenos, elektroniskajās stabilitātes kontrolēs, transmisijās un dzinēja vadības blokos. EEPROM mikroshēmas tiek izmantotas arī gaisa kondicionēšanas iekārtās, instrumentu paneļa displejos, virsbūves vadības moduļos un bezatslēgas ieejas sistēmās. Šīs mikroshēmas palīdz uzraudzīt degvielas patēriņu un tiek izmantotas arī dažādās diagnostikas sistēmās.

Ir noteikts atkārtojumu skaita ierobežojums, ko EEPROM mikroshēma var pārrakstīt. Slānis mikroshēmas iekšpusē tiek pakāpeniski bojāts, veicot daudzas pārrakstīšanas. Tā nav liela problēma, jo dažas EEPROM mikroshēmas var modificēt līdz pat miljonam reižu. Turpmākie tehnoloģiju sasniegumi, iespējams, pozitīvi ietekmēs to, ko atmiņas mikroshēmas var darīt nākotnē.

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 tikai 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:

Mūsu krāsns kontrolieris ir gandrīz gatavs, taču pagaidām tas ir “zelta zivtiņas” kontrolieris, kas atceras visus iestatījumus tikai piecas minūtes pirms pirmās izslēgšanas. Lai atcerētos mūsu iestatījumus, iestatītās temperatūras vērtību un kalibrēšanas punktus pat pēc strāvas izslēgšanas, ir jāizmanto nemainīga atmiņa - EEPROM.
Mūsu draugi ir ļoti labi rakstījuši par darbu ar EEPROM.

Galvenais, kas mums jāzina, ir tas, ka EEPROM atmiņu labāk uzskatīt nevis par "tikai atmiņu", bet gan par atsevišķu iekšējo ierīci mikroshēmā.
EEPROM atsevišķa adreses telpa, kam nav nekāda sakara ar procesora adrešu telpu (FLASH un SRAM); lai piekļūtu datiem noteiktā adresē nemainīgajā atmiņā, ir jāveic noteikta darbību secība, izmantojot vairākus reģistrus (adreses reģistrus EEARH un EEARL, datu reģistru EEDR un kontroles reģistru EECR).
Saskaņā ar datu lapu, lai ierakstītu baitu uz noteiktu adresi EEPROM, jums ir jāveic šādas darbības:

  1. pagaidiet, līdz EEPROM ir gatavs datu ierakstīšanai (EECR reģistra EEPE bits tiek atiestatīts);
  2. gaidiet rakstīšanas FLASH atmiņā beigas (atiestatot SPMCSR reģistra bitu SELFPRGEN) - tas jādara, ja programmā ir bootloader;
  3. ierakstīt jauno adresi EEAR reģistram (ja nepieciešams);
  4. ierakstīt datu baitu EEDR reģistrā (ja nepieciešams);
  5. iestatiet EECR reģistra EEMPE bitu uz vienu;
  6. četros pulksteņa ciklos pēc EEMPE karoga iestatīšanas mēs ierakstām loģisku EECR reģistra EEPE bitā.

Pēc tam procesors izlaiž 2 pulksteņa ciklus pirms nākamās instrukcijas izpildes.
Otrais punkts ir jāizpilda, ja programmā ir bootloader - fakts ir tāds, ka rakstīšanu uz EEPROM nevar veikt vienlaikus ar ierakstīšanu FLASH atmiņā, tāpēc pirms rakstīšanas EEPROM ir jāpārliecinās, vai ir pabeigta FLASH atmiņas programmēšana; ja mikrokontrolleram nav bootloader, tad tas nekad nemaina FLASH atmiņas saturu (atcerieties, ka avr ir Hārvardas arhitektūra: programmas atmiņa (FLASH) un datu atmiņa (SRAM) ir atdalītas).
Ierakstīšanas cikla ilgums ir atkarīgs no mikroshēmas iekšējā RC oscilatora frekvences, barošanas sprieguma un temperatūras; parasti ATmega48x/88x/168x modeļiem tas ir 3,4 ms (!), dažiem vecākiem modeļiem – 8,5 ms (!!!).
Turklāt, rakstot uz EEPROM, iepriekš minētās darbību secības izpildes laikā var rasties problēmas ar izsaukšanas pārtraukumiem - tāpēc labāk ir atspējot pārtraukumus, rakstot uz EEPROM.
Negaistošās atmiņas lasīšana ir nedaudz vienkāršāka:

  1. pagaidiet, līdz EEPROM ir gatavs datu nolasīšanai (EECR reģistra EEWE bits tiek atiestatīts);
  2. uzrakstīt adresi EEAR reģistram;
  3. iestatiet EECR reģistra EERE bitu uz vienu;
  4. mēs nolasām datus no EEDR reģistra (faktiski, kad pieprasītie dati tiek pārvietoti uz datu reģistru, EERE bits tiek atiestatīts ar aparatūru; bet nav nepieciešams uzraudzīt šī bita stāvokli, jo nolasīšanas darbība no EEPROM ir vienmēr tiek veikta vienā pulksteņa ciklā).

Pēc bita EERE iestatīšanas uz vienu, procesors izlaiž 4 pulksteņa ciklus pirms nākamās instrukcijas izpildes.
Kā redzam, darbs ar nemainīgu atmiņu ir laikietilpīgs process; ja mēs bieži rakstām un lasām datus no EEPROM, programma var sākt palēnināties.

Tomēr mēs rakstām programmu IAR vidē, un mums ir paveicies: visu darbu ar lasīšanu un rakstīšanu no EEPROM veiks izstrādes vide - iar ir modifikators “__eeprom”, kas veido mainīgos mainīgos nemainīgajā atmiņā. - un tad mums būs vienkārši jālasa no “konstantiem” mainīgajiem uz “current” (inicializējot kontrolleri) vai jāraksta no “pašreizējiem” mainīgajiem uz “konstanti” – tas ir, mainoties pašreizējai vērtībai, jāmaina arī mainīgais mainīgajā atmiņā.
Jaunie mainīgie izskatīsies šādi:

Eeprom uint16_t EEP_MinTemperature;

Pāris vispārīgāki vārdi: un, lai gan mēs nepieņemam norādes uz eeprom mainīgajiem, mums jāatceras, ka eeprom ir atsevišķa adrešu telpa, un, lai izveidotu rādītāju uz eeprom (un kompilators ļauj to darīt), mums ir norāda, ka tas ir rādītājs uz adresi eeprom:

Uint16_t __eeprom *EEP_MinTemperatureAdr;

Atgriezīsimies pie plīts kontroliera un EEPROM. Mūsu gadījumā, protams, EEPROM netiek pieņemta nekāda virtuālā mašīna; Turklāt ir vērts padomāt, vai darbam ar nemainīgu atmiņu ir nepieciešama atsevišķa bibliotēka - svarīgu iestatījumu ierakstīšana programmā ir pārāk “izkliedēta”; ja mēģināt izveidot atsevišķu bibliotēku, jums būs jāveic savstarpējās atsauces: EEPROM bibliotēkā savienojiet ADC, sildelementa un globālo iestatījumu bibliotēkas; un šajās perifērajās bibliotēkās EEPROM bibliotēkas savienošana nav pārāk laba pieeja.
Vēl viena iespēja ir pievienot eeprom mainīgo katrai bibliotēkai, kurā jāsaglabā iestatījumi, un saglabāt atbilstošos iestatījumus tieši virtuālajās mašīnās. Mēs īstenosim šo iespēju.
Vispirms uzskaitīsim, kādi mainīgie mums jāsaglabā EEPROM:

  1. kalibrēšanas punkti
  2. maksimālās-minimālās iestatītās temperatūras vērtības un temperatūras iestatīšanas solis
  3. iestatīt temperatūras vērtību
  4. PID regulatora koeficienti

Mēs nesaglabājam virtuves taimera vērtību - mēs pieņemsim, ka lietotājam ir jāiestata plīts taimeris katru reizi pēc strāvas izslēgšanas.
Visus šos iestatījumus iestata lietotājs, pagriežot kodētāju un pēc tam īsi nospiežot lietotāja pogu. Tajā pašā laikā mēs atceramies, ka EEPROM lasīšanas-rakstīšanas ciklu skaits joprojām ir ierobežots, tāpēc nepārrakstiet to pašu informāciju vēlreiz (piemēram, ja lietotājs izvēlējās tādu pašu kāda iestatījuma vērtību, kāda tā bija). Tāpēc pirms katras izmaiņas mainīgajā __eeprom mēs pārbaudām, vai tas ir jāpārraksta:

//ja vērtība ir mainījusies, pārrakstiet to nemainīgajā atmiņā if (ADCTemperature.atMinTemperatureValue != (uint16_t)VMEncoderCounter.ecntValue) (ADCTemperature.atMinTemperatureValue = (uint16_t) alueVMEncoderCounter.ecntTemperatureValue; = EEPCTTemperatureValue; EEPCTTemperatureValue; )

Iestatījumu nolasīšana no EEPROM ir arī vienkārša - inicializējot “pašreizējos” iestatījumus, mēs vienkārši nolasām vērtību no nemainīgās atmiņas:

ADCTemperature.atMinTemperatureValue = EEP_MinTemperature;

Lai mūsu ierīcē jau no paša sākuma būtu daži iestatījumi EEPROM, pirmās sāknēšanas projektu var apkopot ar inicializētiem šiem mainīgajiem:

Eeprom uint16_t EEP_MinTemperature = 20; ... //masīvs kalibrēšanas punktu glabāšanai nemainīgā atmiņā __eeprom TCalibrationData EEP_CalibrationData = ((20, 1300), (300, 4092));

Šajā gadījumā kompilators pirms darba sākšanas ar galveno funkciju inicializē __eeprom mainīgos. Lai iegūtu failu ar nemainīgu atmiņu (.eep), jums jāievada šādi iestatījumi:
Projekts->Opcijas..->Saistītājs->Papildu opcijas
Ja izvēles rūtiņa “Izmantot komandrindas opcijas” nav atzīmēta, atzīmējiet to un pievienojiet rindu
-Ointel-standarta,(XDATA)=.eep
Vispirms apkopojam projektu ar inicializētiem mainīgajiem, eep failu saglabājam atsevišķi; tad mēs noņemam inicializāciju, veidojot mainīgos.

Tas arī viss - mūsu plīts ir gatava!