Table of contents
Uvod Što je I2C Kako radi I2C sabirnica Adresa i identifikacija uređaja Uvjeti pokretanja i zaustavljanja Bitovi potvrde Zašto je I2C toliko popularan Uobičajene brzine I2C sabirnice Pull-up otpornici u I2C krugovima Korištenje I2C-a na Arduinu i ESP32 Popularne I2C komponente u maker projektima Rješavanje problema s I2C-omTable of contents
Uvod
I2C je jedan od najčešće korištenih komunikacijskih protokola u modernoj ugrađenoj elektronici. Pojavljuje se u svemu, od malih senzorskih razvodnih ploča do potrošačkih uređaja, industrijskih sustava i još mnogo toga. Budući da koristi samo dvije žice i podržava više uređaja na istoj sabirnici, I2C je postao zadani izbor za mikrokontrolere kao što su Arduino, ESP32, STM32, Raspberry Pi i mnogi drugi.

Bez obzira gradite li pametni kućni uređaj, stanicu za praćenje okoliša ili robotski projekt, razumijevanje načina rada I2C-a pomoći će vam u dizajniranju čišćih i pouzdanijih sklopova.
Što je I2C
I2C je kratica za Inter Integrated Circuit (Inter integrirani krug) . To je sinkroni serijski komunikacijski protokol koji omogućuje digitalnim uređajima razmjenu podataka putem dvije zajedničke linije:
- SDA: Serijski podaci
- SCL: Serijski takt

Svi uređaji na I2C sabirnici spojeni su paralelno s njom, što znači da dijele ove dvije žice. Svaki uređaj ima svoju adresu, što omogućuje jednom mikrokontroleru komunikaciju s mnogo senzora i modula odjednom. Zbog toga je I2C idealan za projekte male snage gdje brzina prijenosa podataka nije toliko važna, kao što su: senzorska čvorišta, kompaktne ploče, nosivi uređaji i drugo.
Kako radi I2C sabirnica
I2C sabirnica podržava više glavnih i više podređenih uređaja, iako u većini projekata postoji samo jedan glavni uređaj. Glavni uređaj generira taktni signal i inicira komunikaciju. Podređeni uređaji odgovaraju samo kada su adresirani.

Adresa i identifikacija uređaja
Većina I2C uređaja koristi 7-bitnu adresu. Neke napredne komponente koriste 10-bitno adresiranje, ali one su rjeđe. Adresa identificira uređaj na dijeljenoj sabirnici. Kada glavni uređaj želi čitati ili pisati podatke, šalje adresu zajedno s bitom koji označava je li operacija čitanje ili pisanje.
Važno: Ako dva povezana uređaja dijele istu adresu, ne mogu pouzdano raditi na istoj sabirnici osim ako se jedna adresa ne može promijeniti pomoću kratkospojnika ili konfiguracijskih pinova.
Uvjeti pokretanja i zaustavljanja
Svaki komunikacijski okvir započinje uvjetom početka. Ovaj događaj signalizira svakom uređaju na sabirnici da počinje nova transakcija. Nakon što se izmijene bajtovi adrese i podataka, glavni uređaj šalje uvjet zaustavljanja kako bi oslobodio sabirnicu.

Bitovi potvrde
Nakon svakog poslanog bajta, prijemni uređaj šalje bit potvrde. To obavještava glavnog uređaja jesu li podaci ispravno primljeni. Ako se ne vrati bit potvrde, glavni uređaj može ponovno pokušati ili prekinuti komunikaciju.

Zašto je I2C toliko popularan
Postoji nekoliko razloga zašto se proizvođači oslanjaju na korištenje I2C-a:
- Komunikacija se ostvaruje korištenjem samo dvije žice bez obzira na broj uređaja
- Niska potrošnja energije
- Univerzalno podržano na svim platformama mikrokontrolera
- Idealno za senzore, konfiguracijske registre i upravljanje zaslonom
Uobičajene brzine I2C sabirnice
I2C podržava nekoliko načina komunikacije:
- Standardni način rada, brzina sabirnice do 100 kHz
- Brzi način rada, brzina sabirnice do 400 kHz
- Brzi način rada plus, brzina sabirnice do 1 MHz
- Način rada velike brzine, brzina sabirnice do 3,4 MHz
U hobi elektronici, 100 kHz i 400 kHz su najčešći. Mnoge Arduino ploče imaju zadano 100 kHz, dok ESP32 i moderniji mikrokontroleri mogu raditi na 400 kHz ili više, ovisno o spojenom hardveru.
Pull-up otpornici u I2C krugovima
SDA i SCL linije moraju imati pull-up otpornike. Bez njih, sabirnica ne može ispravno raditi. Kada uređaj šalje logički nisko stanje, on aktivno povlači liniju prema dolje. Kada linija treba prijeći na visoku razinu, pull-up otpornik je vraća na visoku logičku razinu.
Tipične vrijednosti otpornika kreću se od 2,2 kOhm do 10 kOhm. Mnoge ploče s razdjelnim vratilima senzora uključuju pull-up kontakte na tiskanoj ploči. Kada je spojeno nekoliko modula, ukupni otpor može postati prenizak, što dovodi do komunikacijskih pogrešaka. U tim slučajevima, dodatne pull-up kontakte treba ukloniti ili onemogućiti.
Korištenje I2C-a na Arduinu i ESP32
Arduino ploče uključuju Wire biblioteku koja pojednostavljuje komunikaciju s I2C uređajima. Biblioteka pruža funkcije za skeniranje sabirnice, čitanje vrijednosti i slanje konfiguracijskih naredbi. Većina Arduino ploča koristi namjenske pinove za SDA i SCL.
ESP32 ploče nude dodatnu fleksibilnost jer podržavaju dvije neovisne I2C sabirnice i omogućuju preraspodjelu pinova. To olakšava dizajniranje složenih sustava s mnogo perifernih uređaja.
Popularne I2C komponente u maker projektima
BME680 senzor okoliša [link na proizvod]
LSM6DSO akcelerometar i žiroskopski senzor [link na proizvod]
PCF85063A Sat realnog vremena [link na proizvod]
ADS1115 16-bitni 4-kanalni ADC [link na proizvod]
SSD1306 OLED zaslon [link na proizvod]
Rješavanje problema s I2C-om
Iako se I2C smatra jednostavnim, nekoliko problema se može često pojaviti.
Netočne adrese
Različiti proizvođači ponekad koriste različite zadane adrese za istu vrstu senzora. Ako uređaj ne reagira, upotrijebite I2C skener za otkrivanje njegove stvarne adrese.
Nedostatak ili prekomjeran broj zgibova
Ako se sabirnica ponaša nepredvidivo ili uređaji ne priznaju naredbe, provjerite pull-up otpornike. Više modula s ugrađenim otpornicima može previše smanjiti kombinirani otpor.
Duljina kabela
I2C je namijenjen za kratke udaljenosti. Dugi kabeli dodaju kapacitet, što degradira signal. Kratke žice ili smanjenje brzine komunikacije mogu riješiti ovaj problem.
Sukobi u adresiranju
Ako dva modula dijele istu adresu i ona se ne može promijeniti, uređaji se ne mogu koristiti na istoj sabirnici. Mnoge lemljene razvodne ploče nude lemne kratkospojnike za odabir adrese.