I2C protokolü nasıl çalışır? Adresleme, ACK/NACK ve clock stretching nedir?

Cevap

I2C, iki hatlı (SDA veri, SCL saat), senkron, multi-master/multi-slave bir bus'tır. Hatlar open-drain'dir ve pull-up direnci gerektirir. Hızlar: 100 kHz (standard), 400 kHz (fast), 1 MHz (fast-mode plus).

İşlem sırası

  1. START: SCL HIGH iken SDA HIGH'tan LOW'a düşer.
  2. Adres byte'ı: 7 bit slave adresi + 1 bit R/W (0 yazma, 1 okuma).
  3. ACK: Adresi tanıyan slave 9. saat darbesinde SDA'yı LOW çeker.
  4. Veri byte'ları: Her byte MSB önce, ardından ACK/NACK.
  5. STOP: SCL HIGH iken SDA LOW'dan HIGH'a çıkar.
S | 1010000 0 | A | 0x10 (register) | A | Sr | 1010000 1 | A | DATA | N | P
  adres+W                              repeated start, adres+R        NACK STOP

Register okumada repeated start (Sr) kullanılır; böylece bus bırakılmadan yön değişir.

ACK ve NACK

  • Slave adres veya veri sonrası ACK vermezse (NACK): cihaz yok, meşgul (EEPROM yazma döngüsü) veya komut hatalı.
  • Master okumada son byte'tan sonra NACK gönderir; slave'e veri göndermeyi bırakmasını söyler.

Clock stretching

Slave veriyi hazırlayamıyorsa SCL'yi LOW tutarak master'ı bekletir. Master SCL'yi bıraktıktan sonra hattın gerçekten HIGH olduğunu kontrol etmelidir. Bazı master'lar (ör. eski Raspberry Pi donanımı) bunu düzgün desteklemez.

10 bit adres ve arbitration

10 bitlik adresler 11110xx önekiyle iki byte'ta gönderilir. Birden fazla master aynı anda yazarsa, HIGH göndermek isteyip hattı LOW gören master kaybeder ve çekilir (wired-AND).

Pratik sorunlar

  • Pull-up değeri: Bus kapasitansına göre seçilir (tipik 4.7 kΩ @100 kHz, 2.2 kΩ @400 kHz). Çok büyük direnç yavaş yükselen kenar üretir.
  • Bus takılması: Slave transfer ortasında reset olursa SDA'yı LOW tutabilir. Çözüm: SCL'yi GPIO olarak 9 kez toggle edip STOP üretmek.
  • Adres çakışması: Aynı sensörden iki tane varsa adres pinleri veya I2C multiplexer (TCA9548A) kullanılır.
  1. UART, SPI ve I2C arasındaki farklar nelerdir?OrtaHaberleşme ProtokolleriEmbedded
  2. CAN bus nasıl çalışır? Arbitration, hata yönetimi ve CAN FD farkını açıklayın.ZorHaberleşme ProtokolleriEmbedded
  3. SPI'da CPOL ve CPHA nedir? Dört SPI modu arasındaki fark nasıl açıklanır?OrtaHaberleşme ProtokolleriEmbedded
  4. UART'ta baud rate, frame yapısı ve parity nedir? RS-485 UART'tan nasıl farklıdır?KolayHaberleşme ProtokolleriEmbedded

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle