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.
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.
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.
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.
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.
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.
- 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.
- 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.