Kazalo:

Branje in pisanje podatkov v zunanji EEPROM z uporabo Arduina: 5 korakov
Branje in pisanje podatkov v zunanji EEPROM z uporabo Arduina: 5 korakov

Video: Branje in pisanje podatkov v zunanji EEPROM z uporabo Arduina: 5 korakov

Video: Branje in pisanje podatkov v zunanji EEPROM z uporabo Arduina: 5 korakov
Video: Как микросхема EEPROM хранит пользовательские данные в ваших устройствах 2024, November
Anonim
Branje in pisanje podatkov v zunanji EEPROM z uporabo Arduina
Branje in pisanje podatkov v zunanji EEPROM z uporabo Arduina

EEPROM pomeni električno izbrisljiv programabilni pomnilnik samo za branje.

EEPROM je zelo pomemben in uporaben, ker je nehlapna oblika spomina. To pomeni, da tudi ko je plošča izklopljena, čip EEPROM še vedno ohrani program, ki je bil nanj zapisan. Torej, ko izklopite ploščo in jo nato znova vklopite, lahko zaženete program, ki je bil zapisan v EEPROM. V bistvu EEPROM shrani in izvaja program ne glede na vse. To pomeni, da lahko napravo izklopite, jo izklopite 3 dni in se vrnete ter jo vklopite in še vedno lahko zažene program, ki je bil programiran v njej. Tako deluje večina potrošniških elektronskih naprav.

Ta projekt sponzorira LCSC. Uporabljam elektronske komponente z LCSC.com. LCSC si močno prizadeva ponuditi širok izbor pristnih, visokokakovostnih elektronskih komponent po najboljših cenah z globalnim ladijskim omrežjem v več kot 200 državah. Prijavite se danes in prejmite 8 USD popusta pri prvem naročilu.

EEPROM je tudi zelo učinkovit, saj je mogoče posamezne bajte v tradicionalnem EEPROM -u neodvisno prebrati, izbrisati in prepisati. V večini drugih vrst nehlapnega spomina tega ni mogoče storiti. Serijske naprave EEPROM, kot je EEPROM Microchip serije 24, omogočajo dodajanje več pomnilnika kateri koli napravi, ki govori I²C.

Zaloge

  1. EEPROM - 24LC512
  2. ATmega328P-PU
  3. 16 MHz kristal
  4. Ogledna plošča
  5. Upor 4,7 k Ohm x 2
  6. Kondenzator 22 pF x 2

1. korak: Osnove EEPROM -a

Osnove EEPROM -a
Osnove EEPROM -a

Čip Microchip 24LC2512 je mogoče kupiti v 8 -polnem DIP paketu. Zatiči na 24LC512 so precej naravnost in so sestavljeni iz napajanja (8), GND (4), zaščite pred pisanjem (7), SCL/SDA (6, 5) in treh zatičev naslova (1, 2, 3).

Kratka zgodovina ROM -a

Zgodnji računalniki tipa "Stored -Programme" - na primer namizni kalkulatorji in tolmači na tipkovnici - so začeli uporabljati ROM v obliki diodnega matričnega ROM -a. To je bil spomin, sestavljen iz diskretnih polprevodniških diod, nameščenih na posebej organiziranem tiskanem vezju. To je s prihodom integriranih vezij umaknilo Mask ROM. Mask ROM je bil zelo podoben Diode Matrix ROM, le da je bil izveden v veliko manjšem obsegu. To pa je pomenilo, da ne morete kar nekaj diod premakniti s spajkalnikom in ga ponovno programirati. Zaščitni ROM je moral programirati proizvajalec, nato pa ga ni bilo mogoče spremeniti.

Na žalost je bil Mask ROM drag in izdelava je trajala dolgo, saj je vsak nov program zahteval, da je v livarni izdelana povsem nova naprava. Leta 1956 pa je bil ta problem rešen z izumom PROM (Programmable ROM), ki je razvijalcem omogočil, da sami programirajo čipe. To je pomenilo, da bi proizvajalci lahko izdelali milijone istih neprogramiranih naprav, zaradi česar je bila cenejša in praktičnejša. PROM pa je bilo mogoče zapisati le enkrat z uporabo visokonapetostne programske naprave. Po programiranju naprave PROM naprave ni bilo mogoče vrniti v neprogramirano stanje.

To se je leta 1971 spremenilo z izumom EPROM -a (Erasable Programmable ROM), ki je poleg tega, da je okrajšavi dodal še eno črko, prinesel zmožnost brisanja naprave in vrnitve v "prazno" stanje z uporabo močnega vira UV -svetlobe. Tako je, IC ste morali osvetliti, da ste ga reprogramirali, kako kul je to? No, izkazalo se je, da je zelo kul, razen če ste razvijalec, ki dela na vdelani programski opremi, v tem primeru bi resnično radi ponovno programirali napravo z uporabo električnih signalov. To se je končno uresničilo leta 1983 z razvojem EEPROM -a (Electrably Erasable Programmable ROM) in s tem smo prišli do današnjega okornega okrajšave.

2. korak: pomanjkljivosti EEPROM -a

EEPROM kot način shranjevanja podatkov ima dve veliki pomanjkljivosti. V večini aplikacij prednosti odtehtajo slabosti, vendar se jih morate zavedati, preden v svojo naslednjo zasnovo vključite EEPROM.

Prvič, tehnologija, zaradi katere deluje EEPROM, omejuje tudi število ponovnih zapisov. To je povezano s tem, da se elektroni ujamejo v tranzistorje, ki sestavljajo ROM, in se kopičijo, dokler razlika naboja med "1" in "0" ni prepoznavna. Ampak ne skrbite, večina EEPROM-ov ima največje število ponovnega zapisa 1 milijon ali več. Dokler ne pišete neprestano v EEPROM, je malo verjetno, da boste dosegli ta maksimum. Drugič, če izklopite napajanje, se EEPROM ne izbriše, vendar ne zadrži vaših podatkov za nedoločen čas. Elektroni lahko odidejo iz tranzistorjev in skozi izolator, sčasoma pa učinkovito izbrišejo EEPROM. To se običajno zgodi skozi leta (čeprav ga lahko toplota pospeši). Večina proizvajalcev pravi, da so vaši podatki na EEPROM -u varni 10 let ali več pri sobni temperaturi. Pri izbiri naprave EEPROM za svoj projekt morate upoštevati še eno stvar. Zmogljivost EEPROM -a se meri v bitih in ne v bajtih. 512K EEPROM vsebuje 512Kbit podatkov, z drugimi besedami, samo 64KB.

3. korak: Priključitev strojne opreme Arduino

Priključitev strojne opreme Arduino
Priključitev strojne opreme Arduino
Priključitev strojne opreme Arduino
Priključitev strojne opreme Arduino

V redu, zdaj ko vemo, kaj je EEPROM, povežimo enega in poglejmo, kaj lahko naredi! Če želimo, da bo naša naprava govorila, moramo priključiti napajanje in serijske linije I²C. Zlasti ta naprava deluje pri 5VDC, zato jo bomo priključili na 5V izhod našega Arduino UNO. Za pravilno komunikacijo bodo linije I²C potrebovale tudi uporovne upore. Vrednost teh uporov je odvisna od kapacitivnosti linij in frekvence, ki jo želite sporočiti, vendar je dobro pravilo za nekritične aplikacije le, da ostanejo v območju kΩ. V tem primeru bomo uporabili vlečne upore 4,7 kΩ.

Na tej napravi so trije zatiči za izbiro naslova I²C, tako da lahko imate na vodilu več kot en EEPROM in jih naslovite različno. Lahko bi jih samo ozemljili, vendar jih bomo ožičili, da bomo kasneje v vadnici lahko vstavili napravo z večjo zmogljivostjo.

Za povezovanje vsega skupaj bomo uporabili ploščico. Spodnji diagram prikazuje pravilno priključitev za večino naprav I²C EEPROM, vključno z EEPROM-jem Microchip 24 serije, ki ga prodajamo.

4. korak: Branje in pisanje

Večino časa, ko uporabljate EEPROM v povezavi z mikrokrmilnikom, vam dejansko ne bo treba videti vse vsebine pomnilnika hkrati. Po potrebi boste le tu in tam prebrali in zapisali bajte. V tem primeru pa bomo celotno datoteko zapisali v EEPROM in jo nato prebrali, da si jo lahko ogledamo v računalniku. To bi nas moralo pomiriti z idejo o uporabi EEPROM -a in nam dati občutek, koliko podatkov lahko resnično ustreza majhni napravi.

Napisati nekaj

Naša primerna skica bo preprosto vzela kateri koli bajt, ki pride čez serijska vrata, in ga zapiše v EEPROM, pri tem pa spremlja, koliko bajtov smo zapisali v pomnilnik.

Zapis bajta pomnilnika v EEPROM se običajno zgodi v treh korakih:

  1. Pošljite najpomembnejši bajt pomnilniškega naslova, na katerega želite pisati.
  2. Pošljite najmanj pomemben bajt naslova pomnilnika, na katerega želite pisati.
  3. Pošljite podatkovni bajt, ki ga želite shraniti na to mesto.

Verjetno obstaja nekaj ključnih besed, ki jih preprosto razlagajo:

Naslovi spomina

Če si predstavljate, da vsi bajti v 512 Kbit EEPROM -u stojijo v vrstici od 0 do 64000 - ker je 8 bajtov v bajtu in zato lahko vstavite 64000 bajtov v EEPROM 512 Kbit - potem je pomnilniški naslov mesto v vrstici, kjer bi našli določen bajt. Ta naslov moramo poslati EEPROM -u, da ve, kam postaviti bajt, ki ga pošiljamo.

Najpomembnejši in najmanj pomembni bajti

Ker je v 256 Kbitnem EEPROM -u 32000 možnih mest - in ker je 255 največje število, ki ga lahko kodirate v enem bajtu - moramo ta naslov poslati v dveh bajtih. Najprej pošljemo najpomembnejši bajt (MSB) - prvih 8 bitov v tem primeru. Nato pošljemo najmanj pomemben bajt (LSB) - drugih 8 bitov. Zakaj? Ker jih naprava tako pričakuje, je to vse.

Pisanje strani

Pisanje enega bajta naenkrat je v redu, vendar ima večina naprav EEPROM nekaj, kar se imenuje "medpomnilnik za pisanje strani", ki vam omogoča, da naenkrat napišete več bajtov na enak način kot en sam bajt. To bomo izkoristili v našem primeru skice. EEPROM uporablja notranji števec, ki samodejno poveča pomnilniško mesto z vsakim naslednjim podatkovnim bajtom, ki ga prejme. Ko je naslov pomnilnika poslan, mu lahko sledimo z do 64 bajti podatkov. EEPROM predvideva (upravičeno), da bo naslov 312, ki mu sledi 10 bajtov, zapisal bajt 0 na naslovu 312, bajt 1 na naslovu 313, bajt 2 na naslovu 314 itd.

Nekaj preberi

Branje iz EEPROM-a v bistvu sledi istemu postopku v treh korakih kot pisanje v EEPROM:

  1. Pošljite najpomembnejši bajt pomnilniškega naslova, na katerega želite pisati.
  2. Pošljite najmanj pomemben bajt naslova pomnilnika, na katerega želite pisati.
  3. Vprašajte za podatkovni bajt na tem mestu.

5. korak: Sheme in koda

Sheme in koda
Sheme in koda

Koda:

#vključi

#define eeprom 0x50 // definira osnovni naslov EEPROM -a

void setup () {

Wire.begin (); // ustvari objekt Wire

Serial.begin (9600);

nepodpisan int naslov = 0; // prvi naslov EEPROM -a

Serial.println ("Pišemo poštno številko 22222, poštno številko"); for (naslov = 0; naslov <5; naslov ++) napišite EEPROM (eeprom, naslov, '2'); // Zapiše 22222 v EEPROM

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

void loop () {

/*v funkciji loop () ni ničesar, ker ne želimo, da arduino vedno znova piše isto stvar v EEPROM. Želimo samo enkratno pisanje, zato se funkciji loop () izognemo z EEPROM-i.*/}

// definira funkcijo writeEEPROM

void writeEEPROM (int deviceaddress, unsigned int eeaddress, bajtni podatki) {Wire.beginTransmission (deviceaddress); Wire.write ((int) (e -naslov >> 8)); // piše MSB Wire.write ((int) (eeaddress & 0xFF)); // piše LSB Wire.write (podatki); Wire.endTransmission (); }

// definira funkcijo readEEPROM

byte readEEPROM (int deviceaddress, unsigned int eeaddress) {byte rdata = 0xFF; Wire.beginTransmission (naslov naprave); Wire.write ((int) (e -naslov >> 8)); // piše MSB Wire.write ((int) (eeaddress & 0xFF)); // piše LSB Wire.endTransmission (); Wire.requestFrom (naslov naprave, 1); če (Wire.available ()) rdata = Wire.read (); vrni rdata; }

Priporočena: