I2C Haberleşme Protokolü Nedir ve Nasıl Gerçekleşir?

OLED ekranlar, barometrik basınç sensörleri veya jiroskop/ivmeölçer modülleri kullanan projeler geliştirdiyseniz, muhtemelen kendinizi I2C Haberleşme Protokolünü kullanırken bulacaksınız. Bu yazımızda I2C Haberleşme Protokolünü anlatacağız.

Yazımıza başlamadan önce SPI ve UART haberleşme protokollerini öğrenmediyseniz ilk onları okumanızı öneririz.

I2C Haberleşme Protokolü Nedir?

I2C, SPI ve UART’ların en iyi özelliklerini birleştirir. I2C ile birden fazla slave’i tek bir master’a (SPI gibi) bağlayabilirsiniz ve tek veya çoklu slave’leri kontrol eden birden fazla master’a sahip olabilirsiniz. Bu, birden fazla mikro denetleyicinin tek bir bellek kartına veri kaydetmesini veya tek bir LCD’de metin görüntülemesini istediğinizde gerçekten kullanışlıdır.

UART iletişimi gibi, I2C de cihazlar arasında veri iletmek için yalnızca iki kablo kullanır:

I2C Haberleşme Protokolü Master Slave
I2C Haberleşme Protokolü Master Slave

I2C Haberleşme Protokolü Pinleri ve Özellikleri

  • SDA (Seri Veri): Master ve slave’in veri göndermesi ve aldığı hat.
  • SCL (Seri Saat): Saat sinyalini taşıyan hat.

I2C bir seri iletişim protokolüdür, bu nedenle veriler tek bir kablo (SDA hattı) boyunca azar azar aktarılır. SPI gibi, I2C de senkronizedir, bu nedenle bitlerin çıkışı, master ve slave arasında paylaşılan bir saat sinyali ile bitlerin örneklenmesine senkronize edilir. Saat sinyali her zaman master tarafından kontrol edilir.

Kullanılan Kablo Sayısı?2
Maksimum Hız?Standart Mod= 100 Kpbs
Hızlı Mod= 400 Kpbs
Yüksek Hızlı Mod= 3.4 Mbps
Ultra Hızlı Mod= 5 Mbps
Senkron veya Asenkron?Senkron
Seri veya Parelel?Seri
Master(Yönetici) Sayısı?Sınırsız
Slave(Köle) Sayısı?1008
I2C Haberleşme Protokolü Özellikleri

I2C Haberleşme Protokolü Nasıl Gerçekleşmektedir?

I2C ile ulaşım araçlarıda aktarılır. Mesajlar veri sistemlerine bölünür. Her iletin, bağımlı birimin ikili kapsamlı bir adres çerçevesi ve iletilen verileri içeren bir veya daha fazla veri çerçevesi vardır. Mesaj ayrıca onu veri paketinden ve dayanmadan okuma, okuma/yazma bitleri ve ACK/NACK bitlerini içerir:

I2C Haberleşme Biti
I2C Haberleşme Biti

Başlatma Koşulu(Start Condition): SDA hattı, SCL hattı yüksekten düşüğe geçmeden önce yüksek voltaj seviyesinden düşük voltaj seviyesine geçer.

Durma Durumu(Stop Condition): SCL hattı düşükten yükseğe geçtikten sonra SDA hattı düşük voltaj seviyesinden yüksek voltaj seviyesine geçer.

Adres Çerçevesi(Adress Frame): Master onunla konuşmak istediğinde slave’i tanımlayan, her bir slave’e özgü 7 veya 10 bitlik bir dizi.

Okuma/Yazma Biti(Read/Write Bit): Master’ın slave’e veri gönderip göndermediğini (düşük voltaj seviyesi) veya ondan veri isteyip istemediğini (yüksek voltaj seviyesi) belirten tek bir bit.

ACK/NACK Biti(ACK/NACK Bit): Bir mesajdaki her çerçeveyi bir onay/onay yok biti takip eder. Bir adres çerçevesi veya veri çerçevesi başarıyla alındıysa, alıcı cihazdan göndericiye bir ACK biti döndürülür.

Adresleme(Adressing)

I2C’de SPI gibi bağımlı seçim hatları yoktur, bu nedenle bağımlıya verinin kendisine gönderildiğini bildirmek için başka bir yol gerekir, başka bir bağımlı değil. Bunu adresleyerek yapar. Adres çerçevesi her zaman yeni bir mesajda başlangıç bitinden sonraki ilk çerçevedir.

Master, haberleşmek istediği slave’in adresini kendisine bağlı her slave’e gönderir. Daha sonra her bir köle, master’dan gönderilen adresi kendi adresiyle karşılaştırır. Adres eşleşirse, master’a düşük voltajlı bir ACK biti gönderir. Adres eşleşmezse, slave hiçbir şey yapmaz ve SDA hattı yüksek kalır.

Okuma/Yazma Biti(Read/Write Bit)

Adres çerçevesi, sonunda, master’ın kendisine veri yazmak mı yoksa ondan veri almak mı istediğini bağımlıya bildiren tek bir bit içerir. Master, slave’e veri göndermek isterse, okuma/yazma biti düşük voltaj seviyesidir. Master, slave’den veri talep ediyorsa, bit yüksek voltaj seviyesidir.

Veri Çerçevesi(The Data Frame)

Master, slave’den ACK bitini algıladıktan sonra, ilk veri çerçevesi gönderilmeye hazırdır.

Veri çerçevesi her zaman 8 bit uzunluğundadır ve en önemli bit önce gönderilir. Çerçevenin başarıyla alındığını doğrulamak için her veri çerçevesini hemen bir ACK/NACK biti takip eder. ACK biti, bir sonraki veri çerçevesinin gönderilebilmesi için ya master ya da bağımlı (verileri kimin gönderdiğine bağlı olarak) tarafından alınmalıdır.

Tüm veri çerçeveleri gönderildikten sonra, master, aktarımı durdurmak için bağımlıya bir durdurma koşulu gönderebilir. Durdurma koşulu, SCL hattında düşükten yükseğe geçişten sonra SCL hattı yüksek kalacak şekilde SDA hattında düşükten yükseğe bir voltaj geçişidir.

I2C Veri İletim Adımları

  • Master, SCL hattını yüksekten düşüğe değiştirmeden önce SDA hattını yüksek voltaj seviyesinden düşük voltaj seviyesine çevirerek bağlı her bağımlıya başlatma koşulunu gönderir:
I2C Veri İletimi Başlatma Koşulu
I2C Veri İletimi Başlatma Koşulu
  • Master, her bir slave’e, okuma/yazma bitiyle birlikte iletişim kurmak istediği slave’in 7 veya 10 bitlik adresini gönderir:
I2C Veri İletimi Adres Biti
  • Her bir slave, master’dan gönderilen adresi kendi adresiyle karşılaştırır. Adres eşleşirse, bağımlı SDA hattını bir bit için aşağı çekerek bir ACK biti döndürür. Master’dan gelen adres slave’in kendi adresiyle eşleşmiyorsa, slave SDA hattını yüksekte bırakır.
I2C Veri İletimi ACK Bitinin Slaveden Mastera Gönderilmesi
  • Master, veri çerçevesini gönderir veya alır:
I2C Veri İletimi Veri Bitinin Gönderilmesi
  • Her veri çerçevesi aktarıldıktan sonra, alıcı cihaz, çerçevenin başarılı bir şekilde alındığını onaylamak için göndericiye başka bir ACK biti gönderir:
I2C Veri İletimi Slaveden Mastera Paket Alındı Biti Gönderilmesi

Veri iletimini durdurmak için master, SDA’yı yüksek olarak değiştirmeden önce SCL’yi yüksek olarak değiştirerek bağımlıya bir durdurma koşulu gönderir:

I2C Veri İletimi Durdurma Koşulu

Tekli Yönetici(Master) ve Çoklu Köle(Slave) İle Bağlantısı

I2C adresleme kullandığından, tek bir master’dan birden fazla slave kontrol edilebilir. 7 bit adres ile 128 (27) benzersiz adres mevcuttur. 10 bit adreslerin kullanılması yaygın değildir, ancak 1.024 (210) benzersiz adres sağlar. Birden fazla bağımlı birimi tek bir ana bilgisayara bağlamak için, bunları SDA ve SCL hatlarını Vcc’ye bağlayan 4,7K Ohm çekme dirençleriyle şu şekilde bağlayın:

I2C Master Slave Bağlantısı
I2C Master Slave Bağlantısı

Çoklu Yönetici(Master) ve Çoklu Köle(Slave) Bağlantısı

Birden fazla master, tek bir slave’e veya birden fazla slave’e bağlanabilir. Aynı sistemdeki birden fazla master ile ilgili sorun şudur, iki master SDA hattı üzerinden aynı anda veri göndermeye veya almaya çalıştığında ortaya çıkar. Bu sorunu çözmek için, her bir yöneticinin bir mesajı iletmeden önce SDA hattının düşük mü yoksa yüksek mi olduğunu algılaması gerekir. SDA hattı düşükse, bu, başka bir master’ın bus’ı kontrol ettiği ve master’ın mesajı göndermek için beklemesi gerektiği anlamına gelir. SDA hattı yüksekse, mesajı iletmek güvenlidir. Birden çok master’ı birden çok bağımlıya bağlamak için, SDA ve SCL hatlarını Vcc’ye bağlayan 4,7K Ohm çekme dirençleriyle aşağıdaki şemayı kullanın:

I2C Veri İletimi Çoklu Master ve Çoklu Slave Bağlantı Şemsı

I2C’nin Avantajları Ve Dezavantajları

I2C’yi diğer protokollere kıyasla karmaşık hale getirebilecek çok şey var, Ancak belirli bir cihaza bağlanmak için I2C’yi kullanmak isteyip istememenizin bazı iyi nedenleri de bulunmakta bunlar şunlardır:

I2C Haberleşme Protokolünün Avantajları

  • Sadece iki kablo kullanır.
  • Birden fazla master ve birden fazla slave’i destekler.
  • ACK/NACK biti, her çerçevenin başarıyla aktarıldığını onaylar.
  • Donanım olarak, UART’lardan daha az karmaşıktır.
  • İyi bilinen ve yaygın olarak kullanılan protokoldür.

I2C Haberleşme Protokolünün Dezavantajları

  • SPI’den daha yavaş veri aktarım hızı vardır.
  • Veri çerçevesinin boyutu 8 bit ile sınırlıdır.
  • SPI’dan daha karmaşık bir donanımı vardır.