
Bir mühendis olarak, bir gün I2C iletişimini kullanmanız gerekecek. I2C, hızlı hızı ve esnekliği nedeniyle en popüler iletişim arayüzlerinden biridir.
Bugün, bu blog aracılığıyla I2C hakkında her şeyi, temellerini ve nasıl çalıştığını öğreneceksiniz.
Kapsanacak konular:
- Arayüz
- Özellikler
- İletişim protokolü
- Avantajlar ve dezavantajlar
- I2C örnekleri ve uygulamaları
Daha fazla uzatmadan, I²C nedir? konusuna geçelim.
I²C Nedir? (Sinyaller)
- I²C, Entegre Devreler Arası İletişim anlamına gelir.
- İki yönlü, iki telli senkron seri veri yolu olan seri bir iletişim arayüzüdür; genellikle iki telden oluşur – SDA (Seri veri hattı) ve SCL (Seri saat hattı) ve pull-up dirençleri içerir.
- Birçok farklı parçanın (örneğin sensörler, pinler, genişletmeler ve sürücüler) birlikte çalışmasını gerektiren projelerde kullanılır; çünkü ana karta 128 cihaza kadar bağlanabilirken net bir iletişim yolu sağlar!
- Düşük hızlı cihazları birbirine bağlamak için kullanılır; mikrodenetleyiciler, EEPROM’lar, A/D ve D/A dönüştürücüler vb.
- UART veya SPI’nin aksine, I2C veri yolu sürücüleri açık drenajdır; bu, veri yolu çatışmasını önler ve sürücülere zarar verme olasılığını ortadan kaldırır.
- I2C’deki her sinyal hattında, hiçbir cihazın sinyali düşük çekmediği zaman sinyali yüksek seviyeye geri döndürmek için pull-up dirençleri bulunur.
- Tüm veri transferleri “ana cihaz” tarafından başlatılır ve sonlandırılır; “ana cihaz”, bir veya daha fazla “köle cihaza” veri yazabilir veya “köle cihazlardan” veri talep edebilir. “Ana” ve “Köle” sistemde sabit değildir. Aslında, uygun donanım veya yazılımla yapılandırıldığı sürece herhangi bir cihaz “Ana” veya “Köle” olarak kullanılabilir.
- Veri bir bayt olarak iletilir ve her bayt, ACK/NACK biti (onaylama/cevap yok) olarak 1 bitlik bir el sıkışma sinyali ile takip edilir.
Neden I2C kullanmalıyız?
- I2C veri yolu, şu anda çeşitli devreler tarafından kullanılan yaygın bir iletişim arayüzüdür ve uygulanması basittir. Veri yoluna bağlı kaç tane cihaz olursa olsun, yalnızca iki sinyal hattı (saat SCL ve veri SDA) gereklidir.
- Gerçek bir çoklu anahtar veri yoludur, bu da SPI’den üstündür.
- Ayrıca, I2C arayüzü esneklik sağlar; bu, yavaş cihazlarla iletişim kurmasına olanak tanırken büyük verileri iletmek için yüksek hızlı modlara da sahiptir. İletim hızı standart modda 100 kbit/s, hızlı modda 400 kbit/s ve yüksek hızlı modda 3.4 Mbit/s’ye ulaşabilir;
- Ne kadar esnek olduğu nedeniyle, I2C her zaman cihazları bağlamak için en iyi iletişim arayüzlerinden biri olarak kalacaktır.
Özellikler
| Teller | 2 (SCL ve SDA) |
| Veri Çerçevesi Boyutu | 8 Bit paketler |
| Maksimum hız | Standart mod = 100 Kbps |
| Hızlı Mod = 400 Kbps | |
| Yüksek Hızlı mod = 3.4 Mbps | |
| Ultra Hızlı Mod = 5 Mbps | |
| Kesin Baud Hızı? | Hayır (UART ile karşılaştırıldığında) |
| Ana Sayısı | Sınırsız |
| Köle Sayısı | Bağlıdır (127’ye kadar ama 400 pf’ye kadar daha fazla olabilir) |
I²C iletişim protokolü
I²C nasıl çalışır?
- I2C verileri, veri çerçevelerine bölünen mesajlar halinde iletilir.
- Her mesaj şunları içerir:
- Başlatma durumu
- Durdurma durumu
- Okuma ve yazma bitleri
- ACK/NACK bitleri
- Kölenin adresi
- Veri çerçevesi
Başlatma ve Durdurma Durumu
- Başlatma Durumu:
- İletim, ana cihaz SDA hattını yüksek voltaj seviyesinden düşük voltaj seviyesine geçirdiğinde başlayacak, ardından SCL hattını yüksekten düşüğe geçirecektir.
- Diğer köle cihazlara bir iletimin gerçekleşeceğini sinyaller.
- İki ana cihaz aynı anda bir başlatma durumu gönderirse ve veri yolunun sahipliğini almak isterse, ilk olarak SDA’yı düşük çeken “kazanır”.
- Durdurma Durumu:
- Tüm veri çerçeveleri gönderildikten sonra bir durdurma durumu iletilecektir.
- SCL hattı önce düşük voltaj seviyesinden yüksek voltaj seviyesine geçecek, ardından SDA hattı düşük voltajdan yüksek voltaja geçecektir.
- SDA üzerindeki değer, normal veri yazma işlemi sırasında SCL yüksekken değişmemelidir; aksi takdirde yanlış durdurma durumlarına neden olabilir.
Okuma/Yazma Bit
- Tek bir bit, ana cihazın köleye veri iletip iletmediğini (düşük voltaj seviyesi) veya ondan veri talep edip etmediğini (yüksek voltaj seviyesi) belirtir.
ACK/NACK Bit
- Her çerçeveden sonra alıcı cihaz tarafından gönderilir; bu, vericiye veri çerçevesinin başarıyla alınıp alınmadığını (ACK) veya alınmadığını (NACK) sinyaller.
Adresleme
- SPI ile karşılaştırıldığında, I2C’nin köle seçme hatları yoktur; bu, köle cihazların kendisine veri gönderilip gönderilmediğini bilmemesine neden olur.
- Bu sorunu çözmek için, I2C yeni bir mesajdaki başlatma bitinden sonraki ilk çerçeve olan bir adres çerçevesi kullanır.
- Ana cihazlar, iletişim kurmak istediği kölenin benzersiz adresini önce gönderir. I
- Eğer adres kölenin kendi adresiyle eşleşirse, ana cihaza bir ACK biti geri gönderir.
- Eğer eşleşmezse, köle hiçbir şey yapmaz ve SDA hattını yüksek bırakır.
Adresleme:
Ana cihaz, iletişim kurmak istediği köle cihazın adresini ona bağlı her köle cihaza gönderir. Köle cihaz, alınan adresi kendi adresiyle karşılaştırır.
- Eşleşme başarılı olursa, köle cihaz ana cihazla iletişim kuracağını bilir. Ana cihaza bir ACK biti geri gönderir.
- SPI ile karşılaştırıldığında, I2C’nin köle seçme hatları yoktur; bu, köle cihazların kendisine veri gönderilip gönderilmediğini bilmemesine neden olur.
- Bu sorunu çözmek için, I2C yeni bir mesajdaki başlatma bitinden sonraki ilk çerçeve olan bir adres çerçevesi kullanır.
- Ana cihazlar, iletişim kurmak istediği kölenin benzersiz adresini önce gönderir. I
- Eğer adres kölenin kendi adresiyle eşleşirse, ana cihaza bir ACK biti geri gönderir.
- Eğer eşleşmezse, köle hiçbir şey yapmaz ve SDA hattını yüksek bırakır.
10-bit cihaz adresi
- I2C genellikle 7-bit adrese sahiptir ve yalnızca 127 farklı I2C cihazı vardır. Ancak gerçekte, çok daha fazla türde I2C cihazı vardır ve bir I2C cihazının bir veri yolunda aynı adrese sahip olma olasılığı yüksektir.
- Bu sınırlamayı aşmak için, birçok cihaz harici yapılandırma pinleri aracılığıyla çift adres kullanır ve ayrıca 10-bit adresleme şemasını kullanır.
- 10-bit adresleme şemasının normal I2C protokolü üzerinde iki etkisi vardır:
- Adres çerçevesi artık 1 bayt yerine 2 bayta sahiptir.
- İlk baytın en yüksek beş bitinin 10-bit adresi tanımlamak için kullanıldığı kural “11110” şeklindedir.

- I2C ayrıca özel amaçlar için ayrılmış adreslere de sahiptir.
Veri Çerçevesi (iletilecek veri)
- Adres çerçevesi gönderildikten ve ana cihaz köleden bir ACK biti aldıktan sonra, 8 bit uzunluğunda veri iletmeye başlanır; en yüksek bitler (MSB) önce gönderilir.
- Ana cihaz, düzenli aralıklarla saat darbeleri üreteceği için, veriler SDA üzerinde ana veya köle tarafından gönderilir; bu, Okuma/Yazma bitine bağlıdır.
- Her veri çerçevesi, verinin başarıyla alınıp alınmadığını sinyal vermek için bir ACK/NACK bit ile takip edilir. ACK biti, bir sonraki veri çerçevesi gönderilmeden önce ya ana ya da köle tarafından alınmalıdır.
- Bu işlem tamamlandıktan sonra, ana cihaz köleye bir durdurma durumu gönderir ve iletimi sonlandırır.
I2C iletişiminin adım adım süreci
- Adım 1: Ana cihaz tarafından bir başlatma sinyali oluşturulacak; bu, diğer cihazlara veri yolunu dinlemeye başlamalarını ve veri almaya hazırlanmalarını sinyaller. (SCL yüksek, SDA yüksekten düşüğe geçer)
- Bir başlatma sinyali durumu iletildiğinde, veri yolu, mevcut veri transferinin yalnızca seçilen ana ve köle ile sınırlı olduğu meşgul bir duruma girecektir. Sadece bir durdurma durumu oluşturulduğunda veri yolu serbest bırakılacak ve tekrar boşta kalacaktır.
- Adım 2: Ana cihaz, her cihaza 7-bit cihaz adresi ve bir okuma ve yazma bitini içeren veri çerçevesini gönderecektir. Bit, bir sonraki veri iletiminin yönünü de gösterecektir. 0 = Ana cihaz, köle cihazlara veri yazar. 1 = Ana cihaz, köle cihazlardan veri okur.
- Adım 3: Her köle, ana cihaz tarafından gönderilen adresi kendi adresiyle karşılaştırır. Adresi başarıyla eşleştiren köle cihaz, SDA hattını düşük çekerek ACK bitini geri gönderir.
- Adım 4: Ana cihaz, köle cihazdan bir onay sinyali aldığında, veri iletmeye veya almaya başlayacaktır. Aşağıda, belirtilen cihaza veri iletme sürecinin bir diyagramı bulunmaktadır.

- Adım 5: Her veri çerçevesi iletildikten sonra, alıcı cihaz, çerçevenin başarıyla alındığını onaylamak için göndericiye başka bir ACK biti döner ve ardından gönderici veri çerçevesini iletmeye devam eder, ve bu şekilde devam eder.
- Adım 6: Veri transferi tamamlandığında, ana cihaz, diğer cihazlara otobüsü serbest bırakma sinyali gönderecek ve otobüs boşta bir duruma geçecektir.
I²C otobüs çalışması
I2C otobüsünün çalışması, ana ve köle cihazlar arasında bir okuma ve yazma sürecidir. Temelde 3 işleme ayrılır:
- Ana cihaz, köle cihaza veri yazar:

- Ana cihaz, köle cihazdan veri okur:

- Tekrar başlatma koşulları:
- Otobüsün boşta olduğu durumda, başka bir ana cihazın otobüsü kontrol etmesine izin vermeyen ve durdurma koşulunun mevcut olmadığı durumlarda kullanılır.
- Bu, tek bir ana sistemdir. Tekrar başlatma koşul mekanizmaları, transferi sonlandırmak ve otobüsü yeniden başlatmak için bir durdurma sinyali kullanmaktan daha verimlidir.
- Örneğin,
- Ana cihaz, köle cihaza veri yazar, ardından başlatma koşulunu yeniden başlatır ve ardından köle cihazdan veri okur VEYA
- Ana cihaz, köle cihazdan veri okur, ardından başlatma koşulunu yeniden başlatır ve ardından ana cihaz köle cihaza veri yazar:

Saat Genişletme
- I2C’de, ana cihaz saat hızını kontrol eder ve sinyal yalnızca ana cihaz tarafından iletilebilir.
- Saat genişletme, köle cihazın saat hattını kontrol etmesine izin vermek için saat hattına basarak ana cihazın beklemesini sağlamak için kullanılır; bu, saat hattını serbest bıraktığında iletişimin devam etmesine olanak tanır.
- Bu, bir köle cihazın I2C yapısındaki ana cihazın hızına ayak uyduramadığı durumlarda kullanılır.
Hızlı Mod (=400 Kbps)
- Hızlı mod cihazları, 400kbit/s ile senkronize edilebilir.
- Hızlı mod cihazları geriye dönük uyumludur ve I²C otobüs sisteminde standart mod cihazlarıyla 0~100kbit/s hızında iletişim kurabilir.
- Ancak, standart mod cihazları yukarıya dönük uyumlu değildir, bu nedenle hızlı mod I²C otobüs sisteminde çalışamazlar.
Yüksek Hız Modu
- Hız, I2C otobüs uygulamasını sınırlayan faktörlerden biridir. Mantık 1’i ayarlayan bir pull-up direnci kullanmak, otobüsün maksimum transfer hızını sınırlar; bu nedenle, 3.4 Mbit/s hızında yüksek hızlı mod tanıtılmıştır.
- Bu mod, önce yüksek hızlı bir sinyal iletecek olan ana cihaz tarafından değiştirilebilirken, düşük hızlı modda (örneğin, hızlı mod) bulunur.
- Sinyal periyodunu kısaltmak ve otobüs hızını artırmak için, bu mod ek bir I/O tamponu ile kullanılmalıdır.
- Bu mod sırasında, otobüs tahsisi maskelemeye alınabilir. (Daha fazla bilgi için otobüs standart belgelerine başvurun.)
I2C’nin Avantajları ve Dezavantajları
Avantajlar
- Otobüste birçok cihaz olmasına rağmen düşük pin/sinyal sayısı
- Esnek = çoklu ana ve çoklu köle iletişimini destekler
- Basit = yalnızca 2 tel kullanır
- Uyumlu = çeşitli köle cihazların ihtiyaçlarına uyum sağlar.
- Güvenilir = ACK/NACK, her çerçevenin başarıyla iletildiğini onaylar.
- Cihazlar, otobüste herhangi bir zamanda takılabilir veya çıkarılabilir.
Dezavantajlar
- SPI’ye kıyasla daha yavaş hız, çünkü pull-up dirençleri kullanır.
- Açık drenaj tasarımı = sınırlı hız.
- Dirençlerin kullanımı nedeniyle daha fazla alan gerektirir.
- Cihaz sayısı arttıkça karmaşık hale gelir.
Mikrodenetleyicilerde I2C Örnekleri
Ne kadar esnek olduğu nedeniyle, I²C her zaman cihazları bağlamak için en iyi iletişim çevresel birimlerinden biri olarak kalacaktır. Aşağıda, I²C’nin mikrodenetleyicilerde nasıl kullanıldığına dair 3 örnek bulunmaktadır:
Grove – I2C Hub (6 Port)

- I2C, çok popüler bir iletişim protokolüdür. Grove sisteminde, 80’den fazla sensör iletişim için I2C’yi kullanmaktadır; bunlardan 19’u çevresel izleme ile ilgilidir.
- Günümüzde daha fazla MCU 3.3V iletişim seviyelerini kullanıyor, ancak geleneksel Arduino Uno hala 5V kullanıyor, bu da birçok modülün, özellikle sensör modüllerinin, kullanıldığında seviye ayarlaması gerektirmesine neden oluyor.
- Aslında bu alanda çalıştık ve şimdi çoğu Grove sensör modülü seviye kaydırma işlevine sahip ve kullanıcılar, bunu kullanırken 3.3V veya 5V MCU kullanma konusunda endişelenmek zorunda değiller. Bu, Grove’un motto’suna uygundur; takın ve kullanın, bu kadar basit. Daha ayrıntılı sensör inceleme uyumluluğu için Grove Seçim Kılavuzu‘nu görüntüleyebilirsiniz.
MCP 4725
- Düşük güç, yüksek hassasiyet, 12-bit tamponlu voltaj çıkışı dijitalden analoğa çevirici (DAC) ile tek kanallı ve kalıcı bellek.
- Analog sensörlerden sinyalleri okumamıza ve bunları dijital dile dönüştürmemize olanak tanır.
- Standart bir I2C pin düzenini kullanır.
Raspberry Pi I2C ve Arduino I2C
- I2C, Raspberry Pi ve Arduino ile de kullanılır ve mikrodenetleyiciler ile çevresel birimler arasında veri alışverişine olanak tanır, az bir kablolama ile.
- Raspberry Pi = Bilgisayar monitörüne veya TV’ye takılabilen düşük maliyetli, kredi kartı boyutunda bir bilgisayardır.
- Arduino = Işık gibi girişleri okuyabilen açık kaynaklı bir elektronik platformudur; bir sensörde, bir düğmede parmak ve bunu bir çıkışa dönüştürür. (bir motoru etkinleştirmek – bir LED’i açmak)
- I2C ile her iki cihazı bir araya getirebilirsiniz!
I2C Arduino

- I2C iletişimi, iki Arduino kartı veya diğer cihazlar arasında da kullanılabilir.
- I2C, sensörleri ve ekranları Arduino ile birleştirmeyi basit hale getirir; çünkü yalnızca iki tel içerir ve otobüste birçok cihaz olmasına rağmen pin sayısını da azaltabilir.
- Bu, senkronize bir saat darbesi ile yalnızca kısa mesafe iletişim için kullanılır ve esasen bilgi göndermesi gereken sensörler veya diğer cihazlarla iletişim kurmak için kullanılır.
- Ayrıca, Arduino için I2C cihazlarıyla kolayca iletişim kurmanıza olanak tanıyan standart bir I2C kütüphanesi olan wire kütüphanesi de bulunmaktadır.
Seeed I2C Ürünleri
- Seeed’de çeşitli I²C ürünleri sunuyoruz! Örneğin, aşağıda gösterilen iki harika I²C ürünümüz var:
I2C LCD (Evrensel Grove kablosu ile)

- Bu I2C LCD, kullanımı kolay bir ekran modülüdür, ekran oluşturmayı çok daha kolay hale getirir.
- Kullanıcıların karmaşık grafikler ve metin görüntüleme özelliklerini elde etmek için yalnızca birkaç satır kod yazması gereken I2C LCD için Arduino kütüphanesini geliştirdik.
- Ayrıca, karmaşık programlama gerektirmeden, I2C LCD’ye en sevdiğiniz resmi koymanıza olanak tanıyan veri dönüştürme yazılımı (bitmap dönüştürücü) geliştirdik; bu yazılım PC Windows, Linux, Mac OS’yi destekler.
- Ayrıca, kendi modüler, standartlaştırılmış konektör prototipleme sistemimiz olan Grove tarafından da desteklenmektedir.
I2C Sürücü/Adaptör – I2C Cihazlarını Kolayca Sürün

- Kendi I²C Sürücümüz var; bu, I²C cihazlarını kontrol etmek için kullanımı kolay, açık kaynaklı bir araçtır.
- Windows, Mac ve Linux ile çalışır ve tüm I²C etkinliğinin canlı “gösterge panelini” gösteren yerleşik bir renkli ekrana sahiptir.

- PC ile iletişim kurmak için standart bir FTDI USB seri çipi kullanır, bu nedenle özel sürücülerin yüklenmesi gerekmez. Kart, voltaj ve akım izleme ile ayrı bir 3.3 V kaynağı içerir.
- I²C bağlantınızın yanlış gidebileceğinden endişeli misiniz? Acı verici hata ayıklamadan kaçınmak mı istiyorsunuz? İşte bu I²C Sürücü, I²C’yi çok daha kullanıcı dostu hale getirir ve bunu önleyebilir.
I²C ürünlerimiz ve sunduğumuz şeyler hakkında daha fazla bilgi edinmek isterseniz, buradan Bazaar web sitemizi kontrol edebilirsiniz:
Seeed Studio I2C ürünleri
İlgili Ürünler (I2C Değil)
SPI Sürücü/Adaptör – SPI Cihazlarını Kolayca Sürün

- Ayrıca SPI cihazlarını kontrol etmek için açık kaynaklı bir araç olan bir SPI Sürücüsü sunuyoruz.
- Tüm SPI trafiğinin canlı mantık analizörü görüntüsünü gösteren aynı yerleşik renkli ekrana sahiptir. Ayrıca, PC ile iletişim kurmak için standart bir FTDI USB seri çipi kullanır, bu nedenle özel sürücülerin yüklenmesine gerek yoktur.

- LED’leri ve LCD ekranları doğrudan bir mikrodenetleyiciye yaklaşmadan kontrol edebilirsiniz. Eğer bir SPI flaşını incelemek, yedeklemek veya klonlamak gerekiyorsa, SPIDriver ideal bir araçtır.
Özet
Ve I2C ile ilgili her şey bu kadar! I2C hakkında bilmeniz gereken her şeyi, arayüzünden uygulamasına ve örneklerine kadar ele aldık. Umarım artık I2C’yi daha iyi anlayabiliyorsunuzdur. Eğer bu tür bloglarla ilgileniyorsanız, aşağıdaki bağlantıya göz atmayı unutmayın!
Kaynaklar
SPI ve UART gibi diğer iletişim çevre birimleri hakkında daha fazla bilgi edinmek ve I2C ile karşılaştırmalarını görmek isterseniz, ADS1115, MCP23017 ve PCF 8574 gibi I2C örneklerinin de bulunduğu diğer makaleme göz atabilirsiniz:
UART vs I2C VS SPI – İletişim Protokolleri ve Kullanımları
