I2C zbernica — priradenie, zariadenie, prenos dát, adresovanie
Pri vytváraní elektronického obvodu sa mnohí vývojári stretávajú s potrebou použiť veľké množstvo medziľahlých čipov na párovanie, vzorkovanie a adresovanie jeho jednotlivých blokov. Aby sa minimalizoval počet pomocných čipov, spoločnosť Philips už v 80. rokoch minulého storočia navrhla dvojvodičové obojsmerné sériové sieťové rozhranie I2C, navrhnuté špeciálne na správu viacerých čipov v rámci jedného zariadenia.
Dnes samotná spoločnosť Philips vyrába viac ako sto zariadení kompatibilných s I2C pre elektronické zariadenia so širokým spektrom účelov: pamäť, systémy videoprocesorov, analógovo-digitálne a digitálno-analógové prevodníky, ovládače displeja atď.
Zbernica I2C je modifikáciou protokolu sériovej výmeny dát, ktorá je schopná prenášať sériové 8-bitové dáta v obvyklom "rýchlom" režime rýchlosťou 100 až 400 kbps. Proces výmeny dát je tu realizovaný len na dvoch vodičoch (nepočítajúc spoločný vodič): linka SDA pre dáta a linka SCL pre synchronizáciu.
Zbernica sa stáva obojsmernou vďaka skutočnosti, že kaskády výstupov zariadení pripojených na zbernicu majú otvorené kolektory alebo kanály, čím sa replikuje zapojenie AND. Výsledkom je, že zbernica minimalizuje počet spojení medzi čipmi a ponecháva na doske menej požadovaných pinov a stôp. Tým sa samotná doska ukazuje ako jednoduchšia, kompaktnejšia a technologicky vyspelejšia vo výrobe.
Tento protokol vám umožňuje deaktivovať dekodéry adries a inú externú vyjednávaciu logiku. Počet čipov, ktoré môžu súčasne pracovať na zbernici I2C, je obmedzený jej kapacitou — maximálne 400 pF.
Integrované obvody kompatibilné s I2C majú hardvérový algoritmus na potlačenie šumu, ktorý zaisťuje integritu údajov aj v prípade silného rušenia. Takéto zariadenia majú rozhranie, ktoré umožňuje mikroobvodom vzájomnú komunikáciu, aj keď je ich napájacie napätie odlišné. Na obrázku nižšie sa môžete zoznámiť s princípom pripojenia niekoľkých mikroobvodov cez spoločnú zbernicu.
Každé zo zariadení pripojených na zbernicu má svoju jedinečnú adresu, je ňou určená a v súlade s určením zariadenia môže fungovať ako prijímač alebo ako vysielač. Pri prenose dát môžu byť tieto zariadenia master (master) alebo slave (slave). Master je zariadenie, ktoré spúšťa prenos dát a generuje hodinové signály na linke SCL. Podriadený je vo vzťahu k nadradenému zariadeniu cieľovým zariadením.
V každom danom momente prevádzky na zbernici I2C môže ako nadriadené fungovať iba jedno zariadenie; generuje signál na linke SCL.Master môže byť buď hlavný prijímač alebo hlavný vysielač.
V zásade zbernica umožňuje niekoľko rôznych masterov, ale ukladá obmedzenia na charakteristiky vytvárania riadiacich signálov a monitorovania stavu zbernice; to znamená, že niekoľko masterov môže začať vysielať súčasne, ale konflikty tohto druhu sú eliminované vďaka arbitráži, teda spôsobu, akým sa master zachová, keď zistí, že zbernica je obsadená iným masterom.
Synchronizácia dvojice zariadení je zabezpečená tým, že všetky zariadenia sú pripojené na zbernicu tvoriacu „AND“ vedenie. Na začiatku sú signály SDA a SCL vysoké.
START a STOP
Výmena začína tým, že master vygeneruje stav «ŠTART»: na linke SDA signál prechádza z vysokého do nízkeho stavu, zatiaľ čo linka SCL má stabilnú vysokú úroveň. Všetky zariadenia pripojené na zbernicu vnímajú túto situáciu ako príkaz na spustenie ústredne.
Každý master generuje individuálny hodinový signál na linke SCL pri prenose dát na zbernici.
Výmena končí vytvorením stavu STOP masterom: na linke SDA sa signál mení z nízkej na vysokú, zatiaľ čo linka SCL má stabilnú vysokú úroveň.
Vodič vždy slúži ako zdroj signálov ŠTART a STOP. Akonáhle je signál «ŠTART» pevný, znamená to, že linka je obsadená. Linka je voľná, keď je detekovaný signál STOP.
Ihneď po vyhlásení stavu ŠTART prepne master linku SCL na nízku úroveň a na linku SDA pošle najvýznamnejší bit prvého bajtu správy. Počet bajtov v správe nie je obmedzený.Zmeny na linke SDA sú povolené len vtedy, keď je úroveň signálu na linke SCL nízka. Údaje sú platné a nemali by sa meniť iba vtedy, keď je synchronizačný impulz vysoký.
Potvrdenie, že bajt z hlavného vysielača bol prijatý podriadeným prijímačom, sa vykonáva nastavením špeciálneho potvrdzovacieho bitu na linke SDA po prijatí ôsmeho dátového bitu.
POTVRDENIE
Takže odoslanie 8 bitov dát z vysielača do prijímača skončí dodatočným impulzom na linke SCL, keď prijímacie zariadenie klesne na linke SDA, čo znamená, že prijalo celý bajt.
Potvrdenie je neoddeliteľnou súčasťou procesu prenosu údajov. Master generuje synchronizačný impulz. Vysielač odošle do SDA nízky stav, kým sú aktívne potvrdzovacie hodiny. Kým je synchronizačný impulz vysoký, prijímač musí udržiavať nízku úroveň SDA.
Ak cieľová podriadená jednotka nepotvrdí svoju adresu, napríklad preto, že je momentálne zaneprázdnená, dátová linka sa musí držať vysoko. Master môže potom dať signál STOP, aby prerušil odoslanie.
Ak je príjem realizovaný nadradeným prijímačom, potom je povinný informovať podriadený vysielač po ukončení prenosu - nie potvrdením posledného bajtu. Podriadený vysielač uvoľní dátové vedenie, takže nadriadený môže vydať signál STOP alebo opakujúci sa signál START.
Synchronizácia zariadení je zabezpečená tým, že pripojenia k linke SCL sú realizované podľa princípu "AND".
Master nemá výhradné právo kontrolovať prechod línie SCL z nízkej do vysokej.Ak podriadená jednotka potrebuje viac času na spracovanie prijatého bitu, môže nezávisle udržiavať SCL na nízkej úrovni, kým nie je pripravená prijať ďalší bit údajov. Linka SCL v takejto situácii bude nízka počas trvania najdlhšieho synchronizačného impulzu nízkej úrovne.
Zariadenia s najnižšou trvalou nízkou hodnotou zostanú nečinné, kým sa neskončí dlhé obdobie. Keď všetky zariadenia ukončia obdobie nízkej synchronizácie, SCL sa zvýši.
Všetky zariadenia začnú taktovať vysoko a prvé zariadenie, ktoré dokončí svoju periódu, bude prvé, ktoré nastaví líniu SCL na nízku úroveň. Výsledkom je, že trvanie nízkeho stavu SCL bude určené najdlhším nízkym stavom synchronizačného impulzu jedného zo zariadení a trvanie vysokého stavu bude určené najkratšou periódou synchronizácie jedného zo zariadení. zariadení.
Synchronizačné signály môžu byť použité prijímačmi ako prostriedok riadenia prenosu dát na bitovej a bajtovej úrovni.
Ak je zariadenie schopné prijímať bajty vysokou rýchlosťou, ale uloženie prijatého bajtu alebo príprava na prijatie ďalšieho bajtu trvá určitý čas, môže po prijatí a potvrdení bajtu naďalej držať SCL na nízkej úrovni, čím sa vynúti vysielač do pohotovostného stavu.
Mikrokontrolér bez vstavaných hardvérových obvodov, napríklad na bitovej úrovni, môže spomaliť rýchlosť hodín predĺžením trvania ich nízkeho stavu. Výsledkom je, že prenosová rýchlosť hlavného zariadenia bude určená rýchlosťou pomalšie zariadenie.
ADRESOVAŤ
Každé zariadenie pripojené na zbernicu I2C má jedinečnú programovú adresu, na ktorú ho master osloví odoslaním špecifického príkazu. Mikroobvody rovnakého typu sa vyznačujú voličom adries, realizovaným buď vo forme digitálnych vstupov voliča, alebo v analógovej forme. Adresy sú rozdelené do adresného priestoru zariadení pripojených na zbernicu.
Normálny režim predpokladá sedembitové adresovanie. Adresovanie funguje nasledovne: po príkaze «ŠTART» master odošle prvý bajt, ktorý určí, ktoré slave zariadenie je potrebné na komunikáciu s masterom. Existuje aj spoločná adresa volania, ktorá definuje všetky zariadenia na zbernici, všetky zariadenia na ňu (teoreticky) odpovedajú potvrdením, ale v praxi je to zriedkavé.
Takže prvých sedem bitov prvého bajtu je adresa slave. Najmenej významný bit, ôsmy, označuje smer odosielania údajov. Ak je tam «0», potom sa informácie zapíšu z mastera do tohto slave. Ak je «1», informácie načíta master z tohto podriadeného zariadenia.
Potom, čo master dokončí odosielanie bajtu adresy, každý slave s ním porovná svoju adresu. Každý s rovnakou adresou je slave a je definovaný ako slave vysielač alebo slave prijímač v závislosti od hodnoty najmenej významného bitu bajtu adresy.
Podriadená adresa môže obsahovať pevné a programovateľné časti. Pomerne často pracuje v jednom systéme veľké množstvo zariadení rovnakého typu, potom programovateľná časť adresy umožňuje použitie maximálne rovnakého typu zariadení na zbernici. Koľko bitov v byte adresy je programovateľných závisí od počtu voľných pinov na čipe.
Niekedy stačí pin s analógovým nastavením programovateľného rozsahu adries, napríklad SAA1064 - ovládač LED indikátora, ktorý má presne takúto implementáciu. Potenciál konkrétneho kolíka určuje offset adresného priestoru čipu tak, aby čipy rovnakého typu nekolidovali pri prevádzke na rovnakej zbernici. Všetky čipy podporujúce zbernicu I2C obsahujú sadu adries, ktoré výrobca uvádza v dokumentácii.
Kombinácia «11110XX» je vyhradená pre 10-bitové adresovanie. Ak si predstavíme výmenu dát z príkazu «ŠTART» na príkaz «STOP», bude to vyzerať takto:
Tu sú povolené jednoduché a kombinované formáty výmeny údajov. Kombinovaný formát znamená, že medzi «ŠTART» a «STOP» môžu master a slave fungovať ako prijímače a vysielače, čo je užitočné napríklad pri správe sériovej pamäte.
Nechajte prvý bajt dát preniesť adresu pamäte. Potom zopakovaním príkazu «ŠTART» a načítaním adresy podriadeného zariadenia budú údaje pamäte fungovať. Rozhodnutia o automatickom zvýšení alebo znížení adresy, ku ktorej sa predtým pristupovalo, robí vývojár zariadenia po predchádzajúcom preštudovaní dokumentácie k čipu. Tak či onak, po prijatí príkazu ŠTART musia všetky zariadenia obnoviť svoju logiku a pripraviť sa na to, že adresa bude teraz pomenovaná.