I2C Nedir? I2C Haberleşme, Bağlantı ve Adresleme

I2C (I²C, Inter-Integrated Circuit), aynı kart üzerindeki entegrelerin yalnızca iki hatla birbirine bağlanması için Philips (bugünkü NXP) tarafından geliştirilmiş bir seri haberleşme yoludur. Sensörler, EEPROM bellekler, gerçek zamanlı saatler, port genişleticiler ve küçük ekranlar çoğunlukla I2C ile bağlanır. Bu rehberde I2C’nin nasıl çalıştığını, bağlantı şemasını, pull-up dirençlerini, adreslemeyi ve SPI ile UART’tan farklarını anlatıyoruz.

I2C nedir?

I2C, bir veri (SDA) ve bir saat (SCL) hattından oluşan senkron bir seri haberleşme yoludur. Haberleşmeyi başlatan ve saati üreten cihaza master, ona cevap veren cihazlara slave denir. Her slave’in hatta benzersiz bir adresi vardır; master hangi cihazla konuşacağını bu adresle seçer.

Mikrodenetleyici projelerinde bu kadar yaygın olmasının başlıca nedenleri:

I2C nasıl çalışır?

I2C hatları open-drain yapıdadır: cihazlar hattı yalnızca lojik 0’a çekebilir, lojik 1’i ise hattaki pull-up dirençleri sağlar. Hiçbir cihaz hattı çekmiyorsa hat 1’dedir. Bu yapı sayesinde iki cihaz aynı anda farklı seviye gönderse bile kısa devre oluşmaz.

Saati master üretir; veri SCL düşükken değişir, SCL yüksekken okunur. Bu kuralın iki bilinçli istisnası vardır:

Yavaş bir slave, hazır olana kadar SCL’yi düşük tutarak master’ı bekletebilir (clock stretching). Birden fazla master’ın bulunduğu hatlarda öncelik, SDA üzerinde bit bit yapılan bir yarışla belirlenir; bu özellik az kullanılır ama standartta vardır.

I2C bağlantı şeması

I2C bağlantı şeması: bir master ve üç slave cihaz SDA, SCL ve GND hatlarına bağlı, SDA ve SCL pull-up dirençleriyle VCC’ye çekiliSDASCLGNDMasterMikrodenetleyiciSensörAdres 0x76EEPROMAdres 0x50RTCAdres 0x68Tüm cihazlar aynı iki hatta; her slave’in benzersiz bir adresi var. Hatlar pull-up dirençleriyle VCC’ye çekilir.SDA: veri · SCL: saat (master üretir) · GND: ortak referansVCCPull-up
I2C bağlantı şeması: bir master, üç slave ve SDA / SCL hatlarında pull-up dirençleri.

Pull-up dirençleri

Pull-up direnci hattın 0’dan 1’e ne kadar hızlı çıkacağını belirler. Direnç büyükse hat yavaş yükselir ve yüksek hızlarda bitler bozulur; direnç küçükse hattı 0’a çeken cihazın taşıması gereken akım artar. Standart, hattı çeken cihazdan Standard ve Fast modda en fazla 3 mA beklenmesine göre tasarlanmıştır.

Doğru değer hız, besleme gerilimi ve hattın toplam kapasitesine göre hesaplanır. Uygulamada kısa hatlarda 100 kHz için 4,7 kΩ, 400 kHz için 2,2 kΩ yaygın başlangıç değerleridir. Hattın toplam kapasitesi Standard ve Fast modda 400 pF’ı geçmemelidir; her cihaz ve her santimetre kablo bu kapasiteye eklenir.

Mikrodenetleyicilerin dahili pull-up dirençleri genellikle onlarca kΩ’dur ve çok kısa, yavaş hatlar dışında yeterli değildir.

I2C veri çerçevesi: start, adres ve ACK

I2C yazma çerçevesi: start, 7 bit adres, R/W biti, slave onayı, 8 bit veri, slave onayı, stopSAdres (7 bit)R/WACKVeri (8 bit)ACKPMaster gönderirSlave gönderir (onay)S: start · P: stop
Bir bayt yazma işleminde I2C çerçevesi. Daha fazla veri baytı her biri ACK ile art arda gönderilebilir.

Master önce start koşulunu oluşturur, ardından 7 bitlik slave adresini ve okuma mı yazma mı yapacağını belirten R/W bitini gönderir (0: yazma, 1: okuma). Adresi kendine ait olan slave, dokuzuncu saat darbesinde SDA’yı 0’a çekerek ACK (onay) verir. Hiçbir cihaz cevap vermezse hat 1’de kalır; buna NACK denir ve genellikle yanlış adres ya da bağlantı hatası anlamına gelir.

Sonra veri baytları gönderilir ve her bayt alıcı tarafından onaylanır. Bir sensörden register okumak için master önce register numarasını yazar, ardından stop göndermeden yeniden start (repeated start) yapıp okuma moduna geçer. Okuma sırasında son baytı alan master NACK göndererek okumayı bitirir ve stop ile hattı bırakır.

I2C adresleme

Standart I2C’de adres 7 bittir. 128 olasılığın 16’sı özel amaçlara ayrıldığı için 112 adres kullanılabilir. Daha fazla cihaz gereken sistemler için 10 bitlik adresleme de tanımlıdır ama az kullanılır.

I2C hız modları

ModHızNot
Standard mode100 kbit/sTüm I2C cihazları destekler
Fast mode400 kbit/sSensör ve EEPROM’ların çoğu destekler
Fast-mode Plus1 Mbit/sDaha güçlü çıkış sürücüleri gerektirir
High-speed mode3,4 Mbit/sÖzel donanım gerektirir, az kullanılır
Ultra Fast-mode5 Mbit/sYalnızca tek yönlü yazma; onay biti yoktur

Hattaki en yavaş cihaz hattın hızını belirler. Emin değilseniz 100 kHz ile başlayın, çalıştığını gördükten sonra hızı artırın.

I2C, SPI ve UART farkları

ÖzellikI2CSPIUART
Hat sayısı2 (SDA, SCL) + GND3 ortak hat (SCLK, MOSI, MISO) + her slave için 1 CS2 (TX, RX) + GND
SaatVar (senkron)Var (senkron)Yok (asenkron); iki taraf aynı baudrate’e ayarlanır
Cihaz bağlantısıÇok cihaz, adresle seçilirÇok cihaz, her biri ayrı CS ile seçilirNoktadan noktaya, iki cihaz
YönHalf duplexFull duplexFull duplex
Tipik hız100 kbit/s – 1 Mbit/sBirkaç MHz – onlarca MHz9600 – 115200 bit/s (daha yükseği mümkün)
OnayHer baytta ACK bitiYokYok (parite isteğe bağlı)
MesafeKart üzerinde, kısa kablolarKart üzerinde, kısa kablolarKısa kablolar; uzun mesafede RS485’e dönüştürülür
Tipik kullanımSensör, EEPROM, RTC, port genişleticiFlash bellek, SD kart, TFT ekran, ADCGPS, modüller, HMI ekran haberleşmesi

Az pinle çok sayıda yavaş cihazı bağlamak için I2C, yüksek hızda çok veri aktarmak için SPI, iki cihaz arasında basit ve esnek bir bağlantı için UART uygundur. SPI’ın ayrıntıları için SPI Nedir? rehberimize bakabilirsiniz.

I2C kart içi haberleşme için tasarlanmıştır; kablo uzadıkça kapasite artar ve hat bozulur. Metrelerce uzaktaki cihazları bağlamak için RS485 veya CANBus gibi diferansiyel hatlar kullanılmalıdır.

AIRHMI ürünlerinde I2C

AirHMI ekranların Industry paketinde bir I2C ve bir SPI arabirimi bulunur; sensör ve modüller doğrudan ekrana bağlanabilir (ör. AirHMI 7" Rezistif Industry). AirHMI IO Board ekrandaki 5V çıkış, GPIO, ADC, PWM, I2C ve SPI pinlerini kolay bağlantı için dışarı alır. HMI ProPLC’de de haberleşme arabirimleri arasında I2C vardır.

Sık yapılan hatalar ve sorun giderme

Sorun giderirken önce bir I2C tarayıcı (scanner) programıyla hattaki adresleri listeleyin. Cihaz listede yoksa sorun bağlantıda, pull-up’ta veya beslemededir; listede varsa yazılımdaki adrese ve register sırasına bakın.

I2C destekli AirHMI ekranlarını inceleyin

AirHMI ekranların Industry paketinde I2C ve SPI arabirimleri, 3 ADC, GPIO ve PWM çıkışları bulunur; sensörleri ve modülleri doğrudan ekrana bağlayabilirsiniz. Projeniz için doğru modeli seçmekte yardım isterseniz bize yazın.

AirHMI Ekranlar AirHMI IO Board

İlgili Ürünler

Sıkça Sorulan Sorular

I2C ile I²C aynı şey mi?

Evet. Adı Inter-Integrated Circuit’in kısaltmasıdır ve I²C (I-kare-C) olarak da yazılır. Klavyede yazması kolay olduğu için genellikle I2C veya IIC biçimi kullanılır.

Bir I2C hattına kaç cihaz bağlanabilir?

7 bit adreslemede 112 adres kullanılabilir. Pratikte sınırı çoğu zaman hattın toplam kapasitesi belirler; Standard ve Fast modda bu kapasite 400 pF’ı geçmemelidir.

I2C pull-up direnci olmadan çalışır mı?

Hayır. I2C hatları open-drain yapıdadır ve lojik 1 seviyesini pull-up dirençleri sağlar. Mikrodenetleyicinin dahili pull-up dirençleri çoğu zaman çok zayıftır; harici direnç kullanın.

Hangi pull-up direnci değerini kullanmalıyım?

Kısa hatlarda 100 kHz için 4,7 kΩ, 400 kHz için 2,2 kΩ yaygın başlangıç değerleridir. Kesin değer besleme gerilimine, hızına ve hattın kapasitesine göre hesaplanır.

I2C kablosu en fazla kaç metre olabilir?

I2C kart içi haberleşme için tasarlanmıştır ve genellikle birkaç on santimetrede kullanılır. Daha uzun mesafede hat genişletici (bus extender) ya da RS485 veya CANBus gibi diferansiyel bir hat kullanılmalıdır.

Aynı adrese sahip iki cihazı nasıl bağlarım?

Cihazda A0–A2 gibi adres pinleri varsa birinin adresini değiştirin. Adres sabitse TCA9548A gibi bir I2C çoklayıcı kullanarak cihazları ayrı kollara bağlayın.