Bugünkü yazımda seri haberleşme protokolleri içerisinde ünlü olan I2C seri haberleşme protokolleri hakkında bilgi vereceğim. I2C kullanıcının kısa mesafeli, seri veri aktarımına izin vermek için tasarlanmış veriyolu protokolüdür. I2C, Philips (Yeni şirket ismi NXP) şirketi tarafından tasarlanan iki telli iletişim protokolüdür. Bu iletişim protokolü, akıllı telefon, TV ve dizüstü bilgisayarlar gibi elektronik cihazlarda yaygın olarak kullanılan güç yönetimi çiplerini, bellek cihazlarını, giriş cihazlarını vb. kontrol etmek için kullanılmaktadır.

1) I2C Protokolü Nedir ?
I2C bir seri iletişim protokolüdür. Örneğin EEPROM, ADC ve RTC gibi yavaş cihazlara iyi bir destek sağlamaktadır. I2C sadece tek kartla birlikte kullanılmaz, aynı zamanda kablolar aracılığıyla panolarla bağlanan diğer harici bileşenlerle de kullanılır. I2C temelde iki telli iletişim protokolüdür. İletişim için sadece iki tel kullanır. Veri için kullanılan tel (SDA) ve saat için kullanılan başka tel (SCL) olarak adlandırılır. I2C’de, her iki veri yolu da çift yönlüdür; bu, master’ın veriyi gönderilip alınabildiği anlamına gelir. Saat veriyolu master tarafından kontrol edilir, ancak bazı durumlarda slave saat sinyalini de baskılayabilir. Buna ek olarak, çeşitli kontrol mimarisinde bir I2C veriyolu kullanılır; örneğin, SMBus (Sistem Yönetim Veri Yolu), PMBus (Güç Yönetim Veriyolu), IPMI (Akıllı Platform Yönetim Arayüzü) vb.

Seri com portundan farklı olarak I2C senkron iletişimdir, I2C’de hem master hem de slave master tarafından üretilen paylaşılan saati kullanır. Seri portta, hem verici hem de alıcı cihaz kendi saat jeneratörüne sahiptir. Bu nedenle, verici ve alıcı saati arasındaki farkı en aza indirmek çok önemlidir, aksi halde iletişim sırasında veriler bozulur. Eşzamansız seri com portunun bir başka dezavantajı, sadece iki cihazın veriyi iletmesi ve almasıdır, fakat bunun yanında I2C, çoklu-master ve çoklu-slave olabilir. Eşzamansız seri iletişim için UART çip kullanılır.
Eşzamansız iletişim için belirlenmiş belirli bir sınır yoktur, ancak seri aygıtların çoğu maksimum baud hızı 230.400’e (saniyede bit) kadar destekler. SPI, tam dubleks ve I2C’den daha hızlıdır. Bazen I2C daha kolay ve faydalıdır. I2C’de, iletişim için sadece iki kabloya ihtiyacımız vardır, ancak SPI’de iletişim için dört tipe ihtiyacımız vardır. I2C çoklu-master olabilir ama SPI asla çoklu-master olamaz. Master tarafından her zaman bir START ve STOP durumu belirtilir, şimdi bu durumları aşağıda daha detaylı olarak inceleyelim.
2) BAŞLA (START) KOŞULU
SDA ve SCL hattının varsayılan durumu başlangıçta yüksek bit (1) konumundadır. Bir master, iletişimi başlatmak için hat üzerindeki başlangıç ​​koşulunu onaylar. BAŞLA durumu, SDA hattının yüksek biti (1) düşük bite (0) geçtiği durumdur. BAŞLA koşulu her zaman master tarafından onaylanır. I2C veri yolu, BAŞLA bitinin onaylanmasından sonra meşgul olarak kabul edilir.

3) DUR (STOP) DURUMU
DUR koşulu, iletişimin durdurulması için master tarafından onaylanır. SCL hattı DUR durumu, SDA hattının düşük bitten (0) yüksek bite (1) geçtiği durumdur. DUR koşulu her zaman master tarafından onaylanır. DUR bitinin onaylanmasından sonra I2C veriyolu müsait olarak kabul edilir.

4) TEKRAR BAŞLAT (REPEATED START) DURUMU
BAŞLAT durumuna benzer tekrarlanan başlatma koşulu, ancak her ikisi de birbirinden farklıdır. Tekrarlama başlangıcı, durma durumundan önce master tarafından onaylanır (Bus boşta değilken).
Tekrarlayan Başlangıç ​​koşulu, ana bilgisayar tarafından, kontrollerini veriyolundan kaybetmek istemediği zaman icra edilir. Tekrarlanan başlangıç, durdurma koşulunu onaylamadan yeni bir iletişim başlatmak istediğinde master için faydalıdır. Tekrarlanan başlatma, I2c Veriyolu ile bağlı birden fazla master olduğunda yararlıdır. Şimdi I2C protokolündeki byte formatını detaylı olarak inceleyelim.

I2C PROTOKOLÜNDE BYTE FORMATI

I2C’de, SDA hattı üzerinden iletilen her veri sekiz bit uzunluğunda olmalıdır. I2C’de, veri bitinin daima MSB’den aktarıldığını ve başlangıç ​​ve bitiş durumu arasında I2C’de herhangi bir sayıda bayt gönderebileceğimizi veya alabileceğimizi bilmemiz çok önemlidir.


Baytları I2C’ye gönderdiğimiz veya aldığımızda, her bayt iletişim sırasında aktarıldıktan sonra her zaman bir NACK biti veya ACK biti alırız. I2C’de, her saatte bir bit her zaman iletilir. I2C’de iletilen bir bayt, cihazın bir adresi, yazmacın adresi veya slave’e yazılan veya okunan verilerin adresi olabilir. I2C’de, SDA hattı, başlatma durumu, durma durumu ve tekrarlı başlatma koşulu dışında, yüksek saat fazı boyunca her zaman stabildir. SDA hattı sadece düşük saat fazında durumunu değiştirir.
5) I2C Protokolünde El Sıkıştırma Süreci
Her bayt için I2C’de, alıcı tarafından bir alındı ​​bildiriminin gönderilmesi gerekir, bu bilgilendirme biti, verilerin alıcı tarafından uygun şekilde alındığının ve iletişimi sürdürmek istediğinin bir kanıtıdır. Bir master, bus üzerinde bir start koşulu icra etmek için iletişimi başlatır. Adres baytının aktarılmasından sonra master, veri hattını (SDA) yüksek empedans durumunda kalması için veri hatlarını serbest bırakır, bu da alıcının onay vermesini sağlar. Aktarılan bu adres herhangi bir alıcıyla eşleşirse, onay için düşük olan SDA bitini aşağı çeker ve onaylamadan sonra veri hatlarını serbest bırakır. Master, bu bilgilendirme bitini okumak ve okuma veya yazma işlemine devam etmek için bir saat darbesi üretir. Aktarılan bu adres herhangi bir alıcıyla eşleşmezse, master bir NACK olduğunu anlar ve bu durumda, master daha fazla iletişim için bir durma bitini veya tekrarlayan başlangıç ​​biti varsayar.

6) Kabul Edilmez (NACK) Biti
Alıcı verileri alamıyor veya iletemiyorsa, bu durumda iletişimi durdurmak için bir NACK biti üretir. İletişim sırasında, alıcı, alıcı tarafından anlaşılmayan herhangi bir veri veya komut aldığında, bir NACK biti üretir. Aktarım sırasında, alıcı herhangi bir gerçek zamanlı işlem gerçekleştirir ve master ile iletişim kuramazsa bir NACK biti üretir. Master bir alıcı olduğunda ve veriyi slave’den okuduğunda, tüm verilerin okunmasından sonra, iletişimi durdurmak için veri hatlarında bir NACK biti üretir. Master tarafından iletilen aynı adresin I2C veriyolunda herhangi bir cihaz yoksa, master herhangi bir slave tarafından onay alamaz ve bu durumu NACK olarak kabul eder.
7) I2C Yazma İşlemi
I2C’de yazma işlemi gerçekleştirmeden önce master, I2C veriyolu üzerinde slave adresi ve yazma kontrol biti ile bir başlangıç ​​koşulu (yazma işlemi kontrol biti için 0 olacak) göstermelidir. İletilen adres, I2C veriyoluna bağlı herhangi bir slave ile eşleşiyorsa, master bir onay biti alır. ACK bit yöneticisini aldıktan sonra register’in adresini yazmak istediği yere gönderdikten sonra, slave tekrar kabul edip, master’ın yazım işlemi için hazır olduğunu bilmesine izin verir.

Bu onay alındıktan sonra, master, verileri slave’e göndermeye başlayacaktır. Master, iletilen her bir bayt verisinin onayını alacaktır. Eğer master, slave’den onay alamıyorsa, master iletişimi durdurmak için bir durma koşulu ya da yeni bir iletişim kurmak için tekrarlanan başlangıç durumunu yürütecektir. Master, master’den tüm verileri gönderdiğinde iletişimi durdurmak için başka bir seçenek de, STOP durumuyla iletimin sonlandırılmasıdır.
8) I2C Okuma İşlemi
I2C Okuma işlemi, I2C yazma işlemi ile aynıdır, burada master, okuma işleminden önce başlangıç ​​koşulunu verir. Başlatma koşulu master’ı okuma kontrol biti ile birlikte gönderdikten sonra (okuma işlemi kontrol biti 1 olacaktır), iletilen adres I2C veriyolundaki herhangi bir cihazla eşleşiyorsa, veri yolu SDA bitini sıfıra çekmek için master’ı onaylar.

ACK bitini aldıktan sonra, master veri yolunu serbest bırakır ancak saat darbesini göndermeye devam eder, bu durumda master alıcı olur ve slave verici olur. Okuma işleminde, master, slave’in daha fazla veri için hazır olduğunu bilmesini sağlamak için her bayt veriyi alması üzerine slave’e onay verir. Master, beklediği bayt sayısını aldıktan sonra, veri yolunu bırakmak için NACK biti gönderir ve iletişimi durdurmak için durdurma bitini gösterir.
9) I2C'de Saat Senkronizasyonu
Rs232’den farklı olarak I2C, saatin her zaman master tarafından üretildiği ve bu saatin hem ana hem de bağımlı tarafından paylaşıldığı senkron iletişimdir. Çoklu master durumunda, tüm master kendi SCL saatlerini üretir, dolayısıyla tüm master saatlerinin senkronize edilmesi gerekir. I2C’de, bu saat senkronizasyonu kablolu ve lojik ile yapılır. Olayı daha iyi anlamak için iki master bir slave ile iletişim kurmaya çalıştığı bir örneği inceleyelim. Bu durumda, her iki master kendi saatlerini üretir, master M1 clk1 üretir ve master M2 clk2 üretir ve bus’ta gözlenen saat SCL’dir.

SCL saati, clk1 ve clk2’nin VE Lojiği (clk1 AND clk2) olur ve en ilginç şey, SCL çizgisinin en yüksek mantığı 1’in, en düşük lojik 1’e sahip olan CLK tarafından tanımlanmasıdır. Birden fazla masterin eş zamanlı olarak bir slave ile iletişim kurmaya çalıştığı çoklu-master durumunda hakemlik yapılması gereklidir. I2C’de hakemlik SDA hattı ile sağlanır. I2C veriyolunda iki master’ın eş zamanlı olarak bir slave ile iletişim kurmaya çalıştıklarını varsayalım sonra veri yolunda bir başlangıç ​​koşulu ortaya koyacaklardır. I2C veriyolunun SCL saati kablolu ve lojik tarafından zaten senkronize edilmiş olacaktır.

Yukarıdaki durumda, SDA hattının durumu, veri yolundaki master’larda aynısı olana kadar her şey iyi olacaktır. Herhangi bir master, SDA hattının durumunun farklı olduğunu görürse, o zaman ne olur, o zaman iletişimden çıkar ve hakemliği kaybeder.
10) I2C Haberleşme Protokolünün Avantajları
I2C protokolünün bir çok avantajı vardır, bu da kullanıcının birçok uygulamada I2C protokolünü kullanmasına teşfik eder.

  • Senkron iletişim protokolüdür, bu nedenle master ve slave için hassas osilatörlere gerek yoktur.
  • Sadece iki tel, veri için bir tel (SDA) ve saat için diğer tel (SCL) gerektirir.
  • İhtiyaçlara göre aktarım oranını seçmek için kullanıcıya esneklik sağlar.
  • I2C Veriyolu’nda, veri yolundaki her cihaz bağımsız olarak adreslenebilir.
  • Master ve Slave ilişkilerini takip eder.
  • I2C Veri Yolu üzerindeki çoklu master’leri ve çoklu slave’leri işleme kabiliyetine sahiptir.
  • I2C’nin Hakemlik, saat senkronizasyonu gibi bazı önemli özellikleri vardır.
  • I2C, hata işlemede yardım sağlayan ACK / NACK bildirimi özellikleri sağlar.
11) I2C Haberleşme Protokolünün Bazı Önemli Sınırlamaları
I2C protokolünün bir çok avantajının yanı sıra I2C’nin bazı sınırlamalar bulunmaktadır.

  • Açık kanallı topoloji nedeniyle diğer seri iletişim veri yollarından daha fazla güç tüketir.
  • Sadece kısa mesafe için iyidir.
  • I2C protokolü slave sayısı için bazı sınırlamalara sahiptir, Slave sayısı I2C veriyolunun kapasitansına bağlıdır.
  • Sadece 100 kbit/s, 400 kbit/s gibi sınırlı iletişim hızı sağlar.
  • I2C’de, cihazlar iletişim hızlarını ayarlayabilir, daha yavaş işletim cihazları daha hızlı cihazların çalışmasını geciktirebilir.