AIRHMI · 24.10.2026

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:
- Az pin: onlarca cihaz için yalnızca iki hat
- Adresleme: her cihaz için ayrı seçim hattı gerekmez
- Onay mekanizması: her bayttan sonra alıcı bir ACK biti gönderir; cihazın cevap verip vermediği anlaşılır
- Geniş cihaz desteği: sensör, bellek, saat ve sürücü entegrelerinin çoğunda I2C bulunur
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:
- Start: SCL yüksekken SDA’nın 1’den 0’a inmesi haberleşmenin başladığını bildirir
- Stop: SCL yüksekken SDA’nın 0’dan 1’e çıkması haberleşmenin bittiğini bildirir
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ı
- Tüm cihazlarda SDA ile SDA, SCL ile SCL ve GND ile GND birleştirilir.
- Hattın tamamı için bir çift pull-up direnci yeterlidir; her cihaza ayrı direnç takılmaz.
- Hazır sensör modüllerinin çoğunda kendi pull-up dirençleri vardır. Birçok modül aynı hatta bağlandığında bu dirençler paralel olur ve toplam değer gereğinden fazla düşer; fazlalarını devre dışı bırakın.
- Cihazlar aynı gerilimde çalışmalıdır. 3,3 V ve 5 V cihazları birleştirmek için çift yönlü bir I2C seviye dönüştürücü kullanılır.
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
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.
- Aynı entegreden birden fazla kullanmak için çoğu entegrede A0–A2 gibi adres pinleri bulunur; bu pinlerin bağlantısı adresin son bitlerini değiştirir.
- Adresi değiştirilemeyen aynı cihazlardan birden fazlası gerekiyorsa TCA9548A gibi bir I2C çoklayıcı (multiplexer) kullanılır.
- 7 bit ve 8 bit adres karışıklığı: bazı veri sayfaları adresi R/W bitiyle birlikte 8 bit olarak verir. Örneğin 7 bitlik 0x68 adresi, 8 bit gösterimde yazma için 0xD0, okuma için 0xD1 olarak yazılır. Kütüphaneniz 7 bit adres bekliyorsa 8 bitlik değeri bir bit sağa kaydırın.
I2C hız modları
| Mod | Hız | Not |
|---|---|---|
| Standard mode | 100 kbit/s | Tüm I2C cihazları destekler |
| Fast mode | 400 kbit/s | Sensör ve EEPROM’ların çoğu destekler |
| Fast-mode Plus | 1 Mbit/s | Daha güçlü çıkış sürücüleri gerektirir |
| High-speed mode | 3,4 Mbit/s | Özel donanım gerektirir, az kullanılır |
| Ultra Fast-mode | 5 Mbit/s | Yalnı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ı
| Özellik | I2C | SPI | UART |
|---|---|---|---|
| Hat sayısı | 2 (SDA, SCL) + GND | 3 ortak hat (SCLK, MOSI, MISO) + her slave için 1 CS | 2 (TX, RX) + GND |
| Saat | Var (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çilir | Noktadan noktaya, iki cihaz |
| Yön | Half duplex | Full duplex | Full duplex |
| Tipik hız | 100 kbit/s – 1 Mbit/s | Birkaç MHz – onlarca MHz | 9600 – 115200 bit/s (daha yükseği mümkün) |
| Onay | Her baytta ACK biti | Yok | Yok (parite isteğe bağlı) |
| Mesafe | Kart üzerinde, kısa kablolar | Kart üzerinde, kısa kablolar | Kısa kablolar; uzun mesafede RS485’e dönüştürülür |
| Tipik kullanım | Sensör, EEPROM, RTC, port genişletici | Flash bellek, SD kart, TFT ekran, ADC | GPS, 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
- Pull-up direnci yok: hat hiç 1’e çıkamaz, hiçbir cihaz cevap vermez.
- Fazla pull-up: birçok modülün dirençleri paralel olunca hat zorlanır; toplam direnci ölçün.
- Yanlış adres biçimi: 7 bit ve 8 bit gösterimi karıştırmak en sık NACK sebebidir.
- Gerilim uyumsuzluğu: 5 V’a çekilmiş hat 3,3 V cihaza zarar verebilir; seviye dönüştürücü kullanın.
- Uzun kablo: kapasite arttıkça kenarlar yuvarlanır; hızı düşürün, kabloyu kısaltın veya hat genişletici (bus extender) kullanın.
- Hat 0’da takılı kalması: master tam okuma ortasında sıfırlanırsa slave SDA’yı düşük tutabilir. Master’ın SCL’ye dokuz saat darbesi gönderip ardından stop üretmesi hattı genellikle kurtarır.
- Ortak GND olmaması: farklı kaynaklardan beslenen kartlarda GND’leri birleştirin.
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.




