Synchrónna komunikácia I2C
Zbernica I2C
-skratka pre zbernicu “Inter-Integrated Circuit” -protokol a zbernicu vyvinula firma Philips Semiconductor pôvodne pre svoje TV príjímače v roku 1980 za účelom komunikácie medzi IO na jednej DPS pri použití minimálneho množstva pinov -špecifikácia zbernice I2C je založená na jednoduchých hardvérových štandardoch (nie sú potrebné špeciálne konektory alebo kabeláž) a rovnako jednoduchého softvérového štandardu pre komunikačný protokol -obvody, ktoré používajú I2C protokol zahŕňajú pamäte EEPROM a RAM, senzory teploty, expandéry portov, hodiny reálneho času, atď -používa sa tiež ako riadiaca zbernica v obvodoch spracovania signálov, ktoré majú oddelenú dátovú zbernicu, napr. RF tunery, video dekódery a enkódery a audio procesory a kodeky -zbernica I2C môže pracovať pri troch prenosových rýchlostiach:
- -Slow (pod 100 Kbps)
- -Fast (400 Kbps)
- -High-speed (3.4 Mbps) – protokol označený ako I2C v.2.0
-vzdialenosť komunikujúcich zariadení je limitovaná z dôvodu udržania komunikačnej rýchlosti na 4m približne max. kapacitancia prenosového vedenia je 400pF) -zbernica používa dva vodiče – Serial Data (SDA) a Serial Clock (SCL) -synchrónna (signál SCL), multimasterová (aj slave môže byť konfigurovaný tak, aby mohol začať komunikáciu) zbernica s polovičným duplexom -každý IO na zbernici je identifikovaný svojou adresou, ktorá je v rámci siete jedinečná, preto zbernica I2C nevyžaduje signál CS (chip select) ani ďalšiu logiku -linky SDA aj SCL sú pripojené na napájacie napätie pomocou tzv. pullup rezistorov -každé zariadenie na zbernici môže stiahnuť danú linku na nízku úroveň pomocou tranzistorov s otvoreným kolektorom
Master:
- začína a končí dátový prenos generovaním štart bitu a stop bitu
- generuje hodinový signál
- vysiela adresu podriadeného IO, pre ktorý budú dáta určené
- určuje smer prenosu dát
Slave: - odpovedá iba v prípade, že rozpoznal svoju adresu - časovanie prenosu je riadené hodinovým signálom
Prenos bitu - počas dátového prenosu sa stav na dátovom vodiči bitu mení iba keď je hodinový signál na nízkej úrovni
Štart bit a stop bit
- začiatok alebo koniec prenosu je definovaný dátovej linky z vysokej na úroveň. Prenos prechodom nízku (štart bit) alebo z nízkej na vysokú úroveň (stop bit) kým hodinový signál je na vysokej úrovni
- po štart bite považujú všetky zariadenia zbernicu za zaneprázdnenú
- po príchode stop bitu čakajú zariadenia istý čas a potom považujú zbernicu za voľnú Štart bit a stop bit
- každý uzol má jedinečnú 7 (alebo 10) bitovú adresu, 7-bitové adresy sú už všetky vyčerpané
- periférne IO majú často fixnú (prideľuje komisia pre I2C) a programovateľnú (hardvérovo vyhradenými pinmi) časť svojej adresy
- programovateľná časť adresy umožňuje použiť na danej zbernici viacero rovnakých IO
- adresy začínajúce číslami 0000 alebo 1111 majú špeciálne funkcie
- 0000000 – broadcast, adresa všeobecného volania (General Call Address)
- 0000001 – adresovanie v CBUS (protokol pre automatizáciu v domácnosti a budovách)
- 1111XXX – adresové rozšírenie
- 1111111 – adresové rozšírenie – ďalšie bajty sú aktuálna adresa
- celkovo teda môžeme pripojiť na zbernicu pri 7-bitovom adresovaní max. 119 IO
I2C – prvý bajt v dátovom prenose:
- prvý bajt po štart bite určuje adresovaný IO
- výnimky z pravidla:
- adresa všeobecného volania (sú adresované všetky IO): 0000 000 + R/W = 0
- 10-bitové adresovanie: 1111 0XX + R/W = XXX
- R/\W bit:
- 0 – master bude zapisovať dáta do podriadeného IO
- 1 – master bude čítať dáta z podriadeného IO
- ACK bit: generuje ho adresovaný IO
Postupnosť pri prenose dát:
- master generuje štart bit a hodinový signál
- master posiela adresu podriadeného IO + generuje bit R/\W
- podriadený IO potvrdí prijatie bitom ACK
- vysielacie zariadenie (master alebo slave) vyšle jeden bajt dát
- prijímacie zariadenie vloží bit ACK, čím potvrdí prijatie bajtu
- opakujú sa predchádzajúce dva body ak je potrebné vyslať viac bajtov
- pri zápise (master vysiela), master vloží stop bit po prenesení posledného bajtu dát
- pri prijímaní (master prijíma), master nepotvrdzuje posledný bajte bitom ACK, ale priamo vloží stop bit, aby oznámil podriadenému IO, že prenos bol dokončený.
Potvrdenie príjmu (Acknowledge) - vykonáva sa počas deviateho impulzu hodinového signálu a je povinný - vysielajúce zariadenie uvolní linku SDA (umožní jej „plávať“ na vysokej úrovni) - prijímajúce zariadenie stiahne linku SDA na nízku úroveň (linka SCL musí byť na vysokej úrovni) - ak nedošlo k potvrdeniu, prenos je ukončený
Natiahnutie hodín (Clock Stretching) - keď slave (prijímač) potrebuje viac času na spracovanie bitu alebo práve vykonáva iné funkcie, môže stiahnuť a podržať SCL na nízkej úrovni. Master potom čaká kým slave uvoľní linku SCL predtým bit predtým, než vyšle ďalší bit.
Existujú tri rôzne možnosti ako implementovať zbernicu I2C v systéme: - mikroradič s integrovaným radičom a rozhraním I2C - bitovo orientovaný – k prerušeniu CPU dôjde po každom prenose bitu (pr.: 87LPC76x) - bajtovo orientovaný – k prerušeniu CPU dochádza po každom prenose bajtu (pr.: 87C552) - akýkoľvek mikroradič (metóda „Bit Banging“) - protokol I2C môžeme emulovať bit po bite prostredníctvom akéhokoľvek obojsmerného portu s otvorenými kolektormi - mikroradič v súčinnosti s radičom zbernice - napr. PCF8584 alebo PCA9564 (konvertor paralelného rozhrania na I2C rozhranie)
Výhody zbernice I2C: -vhodná pre medziobvodovú komunikáciu (on-board devices), ak ku komunikácii dochádza len občas - jednoduché prepojenie viacerých zariadení z dôvodu adresovania - cena a zložitosť nerastie s počtom pripojených zariadení
Nevýhody zbernice I2C: - zložitejšie softvérové riešenie, než napr. v prípade SPI - nízke prenosové rýchlosti
Literatúra:
1. http://www.dsplab.elf.stuba.sk/mr/mr_p6.pdf str.:12-13, 25.5.2009