3.23. Osnove I2C-a¶
I2C (Inter-Integrated Circuit, izgovara se „I-na-kvadrat-C” ili „I-dva-C”) je dvožična serijska sabirnica osmišljena za veze kratkog dometa između čipova na istoj pločici. Po prioritetima se nalazi između SPI-ja i UART-a: sporiji je od SPI-ja, ali štedljiviji s pinovima i adresiran (više uređaja na ista dva vodiča), dok SPI treba zasebnu CS liniju po uređaju.
I2C je prvi izbor za senzore niskih brzina – akcelerometre, senzore temperature, senzore vlažnosti, magnetometre, satove stvarnog vremena, EEPROM-ove – gdje je ušteda pinova i jednostavnost sabirnice važnija od sirove propusnosti.
3.23.1. Dva vodiča, oba s otvorenim odvodom (open-drain)¶
I2C sabirnica ima samo dva signala:
SCL (serijski takt). Vozi ga upravljač (najčešće).
SDA (serijski podaci). Vozi ga onaj uređaj koji trenutno govori – upravljač tijekom adrese i odlaznih podataka, periferija tijekom čitanja i ACK bitova.
Obje su linije s otvorenim odvodom (open-drain): svaki uređaj na sabirnici može povući liniju na masu, ali je nikada ne vozi u visoko stanje. Dva pull-up otpornika na sabirnici (obično 2.2 kΩ do 10 kΩ prema naponskoj sabirnici) podižu linije u visoko stanje kada ih nitko ne povlači nisko. Ponašanje žičanog ILI (wired-OR) proizlazi iz toga – pobjeđuje bilo koji uređaj koji povuče liniju nisko, a visoko stanje je samo „nitko ne govori”.
Interni pull-upovi MCU-a na njegovim SCL i SDA pinovima obično nisu dovoljno jaki da sami djeluju kao pull-upovi sabirnice; vanjski otpornici na sabirnici uobičajeno su potrebni. Mnoge senzorske probojne pločice (breakout) već ih sadrže; provjerite tehničku dokumentaciju prije nego što dodate još.
3.23.2. Transakcija¶
Svaka I2C transakcija slijedi isti oblik:
I2C transakcija: START, 7-bitna adresa + R/W, ACK, registar, ACK, podaci, NACK, STOP.¶
Razmjena se odvija bit po bit:
START. Upravljač povlači SDA nisko dok je SCL još u visokom stanju. Taj neuobičajeni brid svim uređajima na sabirnici govori da transakcija počinje.
Adresa + R/W. Upravljač istaktira 7-bitnu adresu periferije iza koje slijedi jedan bit za čitanje/pisanje (
0za pisanje,1za čitanje).ACK / NACK. Nakon svakog bajta, prijemnik vozi SDA tijekom jednog takta za ACK (nisko) ili NACK (visoko). Na adresnom bajtu periferija potvrđuje (ack) ako prepozna vlastitu adresu; ako nijedan uređaj ne potvrdi, upravljač vidi NACK i zna da adresa nije na sabirnici.
Podatkovni bajtovi. Iza svakog slijedi ACK od prijemnika. Pri pisanju periferija potvrđuje svaki bajt; pri čitanju upravljač potvrđuje svaki bajt koji još želi i NACK-a posljednji bajt kako bi periferiji rekao da stane.
STOP. Upravljač otpušta SDA u visoko stanje dok je SCL u visokom stanju, čime završava transakciju.
Ponovljeni start (repeated start) je drugi START izdan bez STOP-a između – upravljač mijenja smjer (adresa za pisanje, zatim adresa za čitanje) na istoj periferiji bez prepuštanja sabirnice.
3.23.3. Adresiranje¶
7-bitni adresni prostor pokriva 0x08 – 0x77; vrijednosti na krajevima rezervirane su za posebne namjene. Adresu svakog uređaja postavlja projektant čipa; mnoge komponente dopuštaju promjenu nekoliko nižih bitova na razini pločice (vezanjem pina visoko ili nisko) tako da dva ista senzora mogu biti na istoj sabirnici.
Ako dva uređaja dijele adresu, ne postoji način da se razgovara s jednim od njih bez ometanja od strane drugoga, pa prije uparivanja komponenti provjerite tehničku dokumentaciju. i2c.scan() (opisano u I2C u kodu) prolazi adresni prostor i prijavljuje koje adrese odgovaraju, što je standardni način da se sazna što je na sabirnici.
3.23.4. Prednosti i nedostaci¶
Prednosti i nedostaci sabirnice određuju njezinu nišu:
Dva pina za mnogo uređaja. Jedan par SCL/SDA može nositi tucet senzora. SPI-ju bi trebao dodatni CS pin po uređaju.
Standardne brzine.
100 kHz(„standardni način”) i400 kHz(„brzi način”) pokrivaju gotovo svaki senzor.1 MHzje dostižan, ali počinje postavljati veće zahtjeve na kapacitet sabirnice i dimenzioniranje pull-upova.Sporo u odnosu na SPI. Sve što prenosi više od nekoliko stotina kilobita u sekundi radije traži SPI.
Sukobi adresa. Dva uređaja s istom adresom na jednoj sabirnici hardverska je pogreška koju protokol ne može zaobići.