Table of contents
Uvod Što je I2C Kako radi I2C sabirnica Adresa i identifikacija uređaja Start i Stop uvjeti Potvrdni bitovi 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 projektima proizvođača 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 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 robotički projekt, razumijevanje kako I2C radi pomoći će vam u dizajniranju čišćih i pouzdanijih sklopova.
Što je I2C
I2C je skraćenica za Inter Integrated Circuit. To je sinkroni serijski komunikacijski protokol koji omogućuje digitalnim uređajima razmjenu podataka pomoću dviju zajedničkih linija:
- SDA: Serijski podaci
- SCL: Serijski takt

Svi uređaji na I2C sabirnici spojeni su paralelno na nju, što znači da dijele ove dvije žice. Svaki uređaj ima svoju adresu, što omogućuje jednom mikrokontroleru komunikaciju s mnogim senzorima i modulima istovremeno. To čini I2C idealnim za projekte s niskom potrošnjom energije, gdje brzina prijenosa podataka nije toliko važna, kao što su: senzorski čvorovi, kompaktne ploče, nosivi uređaji i drugo.
Kako radi I2C sabirnica
I2C sabirnica podržava više mastera i više slaveova, iako u većini projekata postoji samo jedan master. Master generira taktni signal i inicira komunikaciju. Slaveovi 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 su rjeđe. Adresa identificira uređaj na zajedničkoj sabirnici. Kada master ž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.
Start i Stop uvjeti
Svaki komunikacijski okvir počinje start uvjetom. Ovaj događaj signalizira svakom uređaju na sabirnici da počinje nova transakcija. Nakon što se adresa i podatkovni bajtovi razmijene, master šalje stop uvjet kako bi oslobodio sabirnicu.

Potvrdni bitovi
Nakon svakog prenesenog bajta, prijemni uređaj šalje potvrdni bit. To masteru daje do znanja je li podatak primljen ispravno. Ako se ne vrati potvrdni bit, master može ponoviti pokušaj ili zaustaviti 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 pomoću samo dvije žice bez obzira na broj uređaja
- Niska potrošnja energije
- Univerzalno podržan na platformama mikrokontrolera
- Idealno za senzore, konfiguracijske registre i kontrolu zaslona
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 visoke brzine, brzina sabirnice do 3,4 MHz
U hobi elektronici najčešći su 100 kHz i 400 kHz. Mnoge Arduino ploče po zadanoj postavci rade na 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čko nisko stanje, on aktivno povlači liniju prema dolje. Kada linija treba ići visoko, pull-up otpornik je vraća na logičku visoku razinu.
Tipične vrijednosti otpornika kreću se od 2,2 kOhm do 10 kOhm. Mnoge senzorske breakout ploče uključuju pull-up otpornike na PCB-u. Kada je spojeno nekoliko modula, ukupni otpor može postati prenizak, što dovodi do pogrešaka u komunikaciji. U tim slučajevima, dodatni pull-up otpornici trebaju biti uklonjeni ili onemogućeni.
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, očitavanje 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 prenamjenu pinova. To olakšava dizajn složenih sustava s mnogo perifernih uređaja.
Popularne I2C komponente u projektima proizvođača
BME680 senzor okoliša [link na proizvod]
LSM6DSO akcelerometar & žiroskop 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, često se mogu pojaviti neki problemi.
Pogrešne adrese
Različiti proizvođači ponekad koriste različite zadane adrese za istu vrstu senzora. Ako uređaj ne reagira, koristite I2C skener za otkrivanje njegove stvarne adrese.
Nedostajući ili prekomjerni pull-up otpornici
Ako se sabirnica ponaša nepredvidivo ili uređaji ne potvrđuju naredbe, provjerite pull-up otpornike. Više modula s ugrađenim otpornicima može previše smanjiti ukupni otpor.
Duljina kabela
I2C je namijenjen za kratke udaljenosti. Dugi kabeli dodaju kapacitet, što degradira signal. Skraćivanje žica ili smanjenje brzine komunikacije može riješiti ovaj problem.
Sukobi adresa
Ako dva modula dijele istu adresu i ne može se promijeniti, uređaji se ne mogu koristiti na istoj sabirnici. Mnoge od zalemljenih breakout ploča nude kratkospojnike za odabir adrese.