Dnes si trochu objasníme princípy zbernice I2C, ktorá sa v súčasnosti používa vo viacerých elektronických súčiastkách, ako sú napríklad priemyselné LCD displeje, eeprom a iné pamäte a rôzne meracie čidlá.
Oboznámenie sa so zbernicou
Zbernica I2C používa na komunikáciu medzi mikroprocesorom a I2C zariadením 2 drôty - z toho aj iné pomenovanie
Two wire interface - "dvoj drôtové rozhranie".
Jeden drôt je nositeľ nosného kmitočtu - tzv.
Clock line - alebo, v datasheetoch poväčšine označovaný ako "SCL". Druhý káblik, dátový, je nazývaný "SDA".
Kedže sa rozprávame o sériovej zbernici, ktorá navyše podporuje viacero zariadení na jediných dvoch vodičoch, musíme nejako adresovať tieto zariadenia. A je pravda - každé zariadenie má vlastné 7 bitové číslo. Prenos je 8 bitový, s jedným ack bitom po každých 8 bitoch - potvrdenie prijatia dát.
Na začiatku každého prenosu sa vykoná tzv.
START CONDITION, čo je vlastne takýto princíp: Obidve linky sú pri nepracujúcom režime nastavené na logickú hodnotu "1". Ked sa dátová linka počas hodnoty hodín na "1" stane "0", vznikne štart podmienka. Naopak, ked dátová linka sa zmení z "0" na "1" počas hodinového signálu nastaveného na "1", vznikne stop podmienka.
Po vykonaní štart podmienky treba poslať na zbernicu tzv.
Slave address, čo je 7 bitové číslo, ktoré sa doplní (najnižší bit, ostatné sa posunú doľava) nulou alebo jednotkou podľa toho, či ideme do zariadenia zapisovať (0) alebo čítať(1).
No a potom už nasleduje komunikácia, závislá od protokolu.
Oboznámenie sa so zbernicou
Pri prenose platia základné pravidlá:
I2C - Štruktúra posielania údajov
- Za jeden časový okamih (1 hodinový impulz) môže byť vyslaný len jeden dátový bit.
- Dáta na SDA linke musia byť počas hodinového signálu, ktorý je na hodnote "1", stabilné, nakoľko nestabilita sa môže vyhodnotiť ako kontrolný signál (napríklad ako štart a stop bit).
- Pred odosielaním dát musí byť vykonaná štart podmienka. Tá sa vykoná tak, že počas hodín v stave "1" (teda v tzv. not busy - nezaneprázdnenom stave), dátová linka zmení na logickú "0".
- Po vykonaní štart podmienky sa musí poslať bajt obsahujúci tzv. "slave address" - adresa "otroka" - zariadenia, ktoré chceme donútiť reagovať na príkazy. Keďže slave adresa má 7 bitov, ako ôsmy bit (R/W) sa nastaví bit podľa toho, či chceme do daného zariadenia zapisovať (0) alebo čítať (1). Náš LCD displej povoluje iba zápis, tak v tomto prípade bude slave adresa aj s R/W bitom 01111000.
- Po vykonaní štart podmienky sa môže začať prenos do/z zariadenia.
- Po skončení zápisu/čítania dát z/do zariadenia treba vykonať podmienku "STOP" - obdobne, ako pri štart podmienke, stop podmienka, vykonávaná pri skon-čení prenosu nastane vtedy, keď sa dátová linka počas hodnoty hodinového signálu "1" zmení z "0" na "1".
Potvrdenie prijatia dát
Každý bajt z odoslaných dát je nasledovaný tzv. ACK bitom. Tento bit sa vysiela slave alebo aj master zariadením po každom bajte, a to tak, že nastaví SDA linku na hodnotu "1" počas extra impulzu hodín, čo pre tento účel generuje zariadenie master.
Vyslať ack bit je povinné pre adresované zariadenie po každých 8 bitoch (1 bajte). Podobne, master zariadenie, je povinné generovať ack bit po každom bajte prijatom od zariadenia.
To by bolo na dnes asi tak všetko. Prípadné otázky prijímam v komentároch.