Sériové EEPROM - a len jeden dátový vodič
... niekedy je aj dva veľa...
wek, 15.08.2009-18:15

Vývod (pin) mikrokontroléra je jedným z najdrahších elementov tejto súčiastky. To by pre skalných čitateľov mikroZONE nemalo byť prekvapením - počet úkonov spojených s testovaním, kontaktovaním a puzdrením rastie priamo úmerne s počtom pinov. Podobne rastie aj rozmer a hmotnosť súčiastky čo zase súvisí s nákladmi na materiál pinov a puzdra, nákladmi na balenie (pás, podložky či tuby) a prepravu. Už len samotná kontaktová plôška na čipe pri dnešnej hustote integrácie znamená obsadené miesto stoviek či až tisícov tranzistorov, takže tucet vývodov naviac je zhruba ekvivalentom jedného kB RAM či 4 kB FLASH.

K tomu pristupuje aj neustály tlak na zmenšovanie fyzických rozmerov množstva druhov elektronických výrobkov. Nečudo preto, že výrobcovia najmä masovo vyrábaných predmetov spotrebnej elektroniky siahajú po obvodoch s čo najmenším počtom vývodov. A sú to práve tieto výrobky, kde sa používajú mikrokontroléry vyrábané tými najlacnejšími technológiami, s programovou pamäťou maskROM alebo OTP EPROM, t.j. bez možnosti preprogramovania. A takéto technológie obvykle neumožňujú ani pamäť typu EEPROM. Čo teda robiť, ak je potrebné uchovávať nejakú premenlivú veličinu či parameter, ako napríklad predvoľbu kanálov televízora, aj pre prípad výpadku napájania?

Riešenie je známe a používané už desaťročia: pamäte EEPROM pripojené prostredníctvom málovodičových sériových zberníc, ako je I2C a SPI. Naviac, existujú aj iné periférne obvody - UART, I/O, RTC apod. - komunikujúce po týchto zberniciach, takže je možné využiť tých niekoľko pinov pomerne efektívne.

Ale čo keď nastane stav krajnej núdze: takáto zbernica v aplikácii nie je, a zostáva nám len jeden jediný voľný pin?

Kupodivu, aj na takéto extrémne situácie existuje riešenie. Spoločnosť Dallas Semiconductor (v súčasnosti už súčasť spoločnosti Maxim) vyrába EEPROM, ktoré komunikujú po jedinom vodiči - tzv. 1-WIRE zbernici. Pre túto zbernicu tiež existuje viacero rôznych periférií, ale keďže ide o zbernicu patentovanú Dallasom, je to tiež jediný oficiálny výrobca týchto zariadení. Pri parazitnom napájaní (t.j. zdieľaní napájacieho a komunikačného vodiča) stačia zariadeniam 2 kontakty, čo umožňuje rôzne netradičné puzdrá; najznámejšími sú "prikladacie gombíky" iButton obsahujúce bezpečnostné obvody obvykle vo funkcii elektronického kľúča. Pamäte EEPROM sa síce v takomto puzdre nevyrábajú, dodávajú sa však v iných malorozmerových puzdrach veľkosti niekoľkých mm2, ako aj v 3-vývodovom puzdre TO-92 (známom napr. z "najobyčajnejších" tranzistorov typu BC23x).

Pred asi rokom sa na túto oblasť vrhla aj spoločnosť Microchip s radom EEPROM typu 11xxxxx. Aby sa vyhla problémom s licenciami apod., na komunikáciu po jednom vodiči vytvorila vlastný protokol založený na kódovaní Manchester, ktorý nazvali UNI/O. Aj keď tieto obvody majú v zásade oddelený napájací a komunikačný pin, s použitím jednej externej diódy a filtračného kondenzátora (ktorý je tak či tak potrebený) sa dá s využitím principiálnych vlastností komunikácie (t.j. že na komunikačnom pine je 0 vždy len na obmedzený čas) použiť aj parazitné napájanie. Najzaujímavejšie puzdro, v ktorom sú dodávané, je SOT23 (t.j. puzdro typu "najobycajnejsí SMD tranzistor").

No fajn, z hardwarovej stránky sme problém vyriešili - pripojili sme ten jediný komunikačný pin. Ale čo to všetko znamená pre programátora?

Samotná pamäť EEPROM, jej vlastnosti a logika jej obsluhy je obdobná iným sériovým EEPROM: sú organizované po individuálne adresovateľných a zapisovateľných byte-och, čítanie je okamžité, zápis trvá niekoľko jednotiek milisekúnd, pred zápisom nie je potrebné bunky mazať, zapisovať sa dá obvykle aj po stránkach 16-64 bytov naraz, životnosť je 105-106 zápisových cyklov, spotreba je niekoľko miliampérov v aktívnom stave a mikroampére v neaktívnom stave (keď sa nečíta ani nezapisuje). Konkrétne detaily si treba naštudovať z datasheetov, ale v týchto hrubých rysoch je to stále o tom istom.

Rozdiel je však v komunikácii. To bezhlavé šetrenie signálmi si niekde musí vybrať svoju daň.

U zberníc typu SPI a I2C je prítomný vyhradený signál pre hodiny, a ostatné signály sú synchrónne voči týmto hodinám (t.j. sú významne/vzorkujú sa len v okamihoch, keď sa menia aj hodiny). Keďže pri komunikácii s pamäťami je mastrom zbernice vždy mikrokontrolér, časovanie je plne v jeho réžii. To znamená, že sa dá komunikácia napísať úplne jednoduchým "bit-bangom", s triviálnymi požiadavkami na časovanie (obvykle je treba dodržať len minimálnu dĺžku pulzov); a nevadí, keď sa nejaký pulz predĺži kvôli tomu, že sa medzičasom vykonával - pamäť vždy trpezlivo počká. Takže základné nízkoúrovňové komunikačné rutiny pre tieto zbernice sa dajú napísať doslova niekoľkými riadkami, a aj pomerne ledabolá implementácia má veľké šance na úspech. Nehovoriac o tom, že je v mnohých mikrokontroléroch dnes už zabudovaná hardwarová podpora práve pre zbernice SPI a I2C.

U jednovodičových zberníc si luxus osobitného hodinového signálu samozrejme nemôžeme dovoliť, a preto nastupujú omnoho prísnejšie požiadavky na časovanie.

U 1-WIRE sú v štandardnom režime požiadavky na vytváranie a detekovanie pulzov v rozsahu desiatok az stoviek us, v "overdrive" režime je to zhruba o jeden rád prísnejšie, t.j. je vyžadovaná presnosť v ráde jednotiek us. To aj u pomerne rýchlych mcu často vedie k riešeniu časovania pomocou počítania inštrukcií so súčasne zakázanými prerušeniami; výhodou však je, že čas medzi pulzami je neobmedzený, takže je možné medzi každým bitom povoliť prerušenia, príp. vykonať aj iné potrebné úkony.

U zbernice UNI/O je o niečo iný druh požiadavky na presnosť časovania. Je to signalizácia typu Manchester (jednotlivé logické úrovne sú určené dvojicou pulzov 10 a 01), t.j. signál sa mení pravidelne v určených okamihoch. Kým na jednej strane nie je potrebné vytvárať a detekovať také krátke pulzy ako u 1-WIRE, na druhej strane je potrebné dodržať presné časovanie hrán. Master má síce možnosť voľby komunikačnej frekvencie v rozsahu 10kHz až 100kHz, ale po vyslaní úvodného synchronizačného bytu je oscilátor slave-a (pamäte) už "zavesený" na túto frekvenciu, a požiadavka protokolu pre master je dodržať hrany s presnosťou 8% (t.j. u 10kHz = 100 us/bit je maximálny dovolený "jitter" hrany 8us). Pomerne dlhá doba medzi hranami umožňuje implementáciu časovačom a prerušeniami, s ohľadom na požiadavku na jitter je však treba buď dodržať veľmi nízku latenciu tohoto prerušenia, alebo využiť hardwarovú zmenu výstupného pinu pomocou časovača (output compare), ak túto možnosť mcu má. Pritom master musí byť tolerantný na jitter slave-a až 25%; to však nie je zásadný problém, keďže sa odozva dá vzorkovať uprostred medzi hranami.

Keďže zbernica 1-WIRE je známa už viac rokov a populárna najmä kvôli iButton zariadeniam, je na internete k dispozícii množstvo implementácií mastra pre túto zbernicu na snáď všetky bežne používané mcu. Microchip si pri uvedení svojich UNI/O EEPROM bol tohoto zrejme vedomý, a preto zverejnil aj aplikačné poznámky s implementáciou UNI/O do viacerých typov mcu, a to nielen PIC, ale aj MSP430 a 8051 (konkrétne LPC9xx).



Takže, v prípade, keď ostáva len jediný voľný pin, a treba pripojiť EEPROM, nie je potrebné zúfať. Riešenie existuje, ale treba sa pripraviť na určitú dávku seriózneho programovania...


tento článok je z mikroZONE
( https://www.mikrozone.sk/pluginy/content/content.php?content.21 )