Teknoloji

I2C İletişim Protokolü ve Nasıl Çalıştığı

Belki I2C hakkında duymuşsunuzdur ya da daha önce I2C kullanmışsınızdır, ama I2C’nin ne olduğunu hiç anladınız mı? I2C nasıl çalışır? Bu blog, size bu I2C bilgisini gösterecek.

I2C Nedir

I²C (Inter-Integrated Circuit), çoklu-master-slave mimarisi kullanan bir seri iletişim hattıdır. 1980’lerin başında Philips tarafından tasarlanmıştır (şimdi NXP Semiconductors). I2C, anakartlar, gömülü sistemler veya cep telefonları ile çevresel bileşenler arasındaki iletişim için uygundur. Basitliği nedeniyle, I2C mikrodenetleyiciler ile sensör dizileri, ekranlar, IoT cihazları, EEPROM’lar vb. arasındaki iletişim için yaygın olarak kullanılmaktadır. I2C, SCL ve SDA olmak üzere iki hat içerir. Bu iki veri hattı, pull-up dirençlerine bağlanmalıdır. Hattın boşta olduğu durumda, SCL ve SDA yüksek seviyededir. I2C hattı belirli bir protokole göre çalışır. Şimdi, I2C protokolüne bir göz atalım. I2C, birden fazla slave’i destekler, yani bir I2C kontrolcüsüne birden fazla I2C slave cihazı bağlanabilir. Bu farklı I2C slave cihazlarının farklı cihaz adresleri vardır, böylece I2C master kontrolcüsü, I2C cihazının cihaz adresi aracılığıyla belirtilen cihaz adresine erişebilir. I2C cihazı, bir I2C hattı birden fazla I2C cihazını bağlar, bu şekilde gösterilmiştir:

SDA ve SCL bağlantıları, genellikle 4.7K’lık bir pull-up direncine bağlanmalıdır. Diğer I2C slave’leri, birden fazla I2C cihazının SDA ve SCL hatları aracılığıyla erişilebilmesi için SDA ve SCL hatlarına bağlanır.

Belki hala I2C hakkında kafanız karışık, işte I2C’nin bazı özellikleri

I2C’nin Özellikleri:

1. Sadece bir veri hattı SDA ve bir saat hattı SCL gereklidir, SDA (seri veri hattı) ve SCL (seri saat hattı) her ikisi de iki yönlü I/O hatlarıdır.

SCL (Seri Saat): CLK sinyallerini ileten seri saat hattı, genellikle master cihaz tarafından slave cihaza sağlanır.

SDA (Seri Veri): iletişim verilerini ileten seri veri hattıdır.

2. Gerçek bir çoklu-master hattı gerçekleştirir, herhangi bir cihaz hem master hem de slave olarak kullanılabilir, ancak aynı anda yalnızca bir master olabilir.

3. Harici bağlantı ile tespit edilebilir, bu da sistem arıza teşhisi ve hata ayıklama için uygundur.

4. Aynı hatta bağlı IC’ler yalnızca hattın maksimum kapasitansı ile sınırlıdır. Seri 8-bit iki yönlü veri aktarım bit hızı, standart modda 100Kbit/s, hızlı modda 400Kbit/s ve yüksek hızlı modda 3.4Mbit/s kadar ulaşabilir.

5. Hattaki tüketilen akım çok küçüktür. Bu nedenle, hattaki cihaz sayısı esas olarak kapasitif yükle belirlenir, bu da yüksek gürültü parazitine dayanıklıdır. Bir hat sürücüsü eklemek, hattın kapasitansını 10 kat artırabilir ve iletim mesafesi 15m‘ye kadar ulaşabilir; geniş çalışma sıcaklığı aralığına sahip farklı voltaj seviyeleri cihazları ile uyumludur.

6. Arayüz devresi açık-drenaj çıkışıdır. Güç kaynağı VCC’ye bir pull-up direnci aracılığıyla bağlanması gerekir. Hattın boşta olduğu durumda, her iki hat da yüksektir. Hatta bağlı dış cihazlar CMOS cihazlarıdır. Çıkış aşaması da açık-drenaj devresidir.

Veri İletimi:

Master cihaz ve slave cihaz, veri iletimi için aşağıdaki protokol formatını takip eder. Master ve slave cihazlar arasında SDA veri hattı üzerinden 0 ve 1’lerin seri veri aktarımı yapılır, seri veri dizisinin yapısı şunlara ayrılabilir:

  • Başlangıç Bit
  • Adres Bitleri(7bit veya 10bit)
  • Okuma ve Yazma Bitleri(1bit)
  • Cevap Bit (1bit)
  • Veri bit + cevap bit (veri bit 8bit; cevap bit 1bit; veri + cevap birçok kez iletilebilir, durdurma bitine kadar)
  • Durdurma Bit
Ref: CSDN

Başlangıç Bit

Master cihaz iletişime başlama kararı aldığında, bir başlangıç sinyali göndermesi gerekir ve aşağıdaki işlemler gerçekleştirilmelidir:

  • Öncelikle, SDA’yı VOH’dan VOL’a geçirin
  • Sonra SCL’yi VOH’dan VOL’a değiştirin

Master cihaz sinyal gönderip başlangıç koşulunu sağladıktan sonra, tüm slave’ler aktif hale gelir, uyku modunda bile ve bir adres bitini almak için bekler.

Ref: CSDN

Adres Bit

Adres bitleri 7bit ve 10bit’i destekler. Eğer master, slave’e veri göndermek/almak istiyorsa, önce adresi göndermelidir, ardından slave karşılık verecek ve daha sonra hattaki slave’in adresi ile eşleşecektir.

Cevap Bit 

Cevap Bit’in 2 türü vardır:

  • ACK: Slave, veri veya adres bitini + okuma ve yazma bitlerini doğru bir şekilde alır
  • NACK: slave cevap vermez ve anormal çalışır

Master her veri ve okuma/yazma bitini gönderdiğinde, slave cihazdan ACK cevap sinyalini bekleyecektir.

  • Eğer slave cihaz cevap bit sinyali ACK gönderirse
  • Eğer cevap sinyali NACK yoksa, SDA VOH çıkışı verecek ve bu, master cihazın yeniden başlatılmasına veya durmasına neden olacaktır
Ref: CSDN

Veri Bit

Her veri iletimi toplamda 8 bit içerir, bu bitleri gönderen ayarlar ve alıcıya iletmesi gerekir.

İletim, bir ACK/NACK bitinin ardından gelir ve eğer alıcı veriyi başarıyla alırsa, slave bir ACK gönderir. Aksi takdirde, slave bir NACK gönderir.

Veri, bir durdurma bitine kadar birden fazla kez gönderilebilir.

Durdurma Bit

Master cihaz iletişimi sonlandırmaya karar verdiğinde, bir bitiş sinyali göndermesi gerekir ve aşağıdaki işlemler gerçekleştirilmelidir.

  • Öncelikle SDA’yı VOL’dan VOH’a geçirin
  • Sonra SCL’yi VOH’dan VOL’a değiştirin
Ref: CSDN

İşte tamamlanmış I2C zamanlama diyagramını gösteren şekil:

Ref: CSDN

Çoklu Anahtar Arbitrajı

Çoklu anahtar iletişim sisteminde, bus üzerinde birden fazla düğüm bulunmaktadır. Her birinin kendi adresleme adresleri vardır, diğer düğümler tarafından köle düğümler olarak erişilebilirler ve hepsi kontrol baytları göndermek ve diğer düğümlere veri aktarmak için anahtar düğüm olarak kullanılabilir. Ancak iki veya daha fazla düğüm aynı anda bus’a başlangıç sinyalleri gönderirse ve veri iletmeye başlarsa, bir çakışma meydana gelir. Bu çakışmayı çözmek için bir arbitraj kararı gereklidir; bu, I2C bus üzerindeki arbitrajdır.

I2C bus üzerindeki arbitraj iki kısma ayrılır: SCL hattının senkronizasyonu ve SDA hattının arbitrajı.

SCL Hattının Senkronizasyonu (Saat Senkronizasyonu)

SCL senkronizasyonu, bus hattının mantıksal işlevi olan “VE” (açık drenaj çıkışı) nedeniyle gerçekleşir; yani, bir düğüm düşük seviye gönderdiği sürece, bus düşük seviye görünür. Bus yalnızca tüm düğümler yüksek seviye gönderdiğinde yüksek görünür. Birden fazla düğüm aynı anda saat sinyalleri gönderdiğinde, bus üzerinde tek bir saat sinyali görüntülenir; bu, hattın “VE” mantıksal işlevinin ilkesidir. Bu, SCL’nin senkronizasyon ilkesidir.

Ref: CSDN

SDA Arbitrajı

SDA hattının arbitrajı da bus’ın “VE” mantıksal işlevine dayanmaktadır. Düğüm 1-bit veri gönderdiğinde, bus’ta sunulan verinin, gönderdiği veriyle tutarlı olup olmadığını karşılaştırır (CAN bus’ın geri okuma mekanizmasına benzer). Eğer tutarlıysa, göndermeye devam eder; aksi takdirde, rekabetten çıkar. SDA hattının arbitrajı, birden fazla anahtar düğüm aynı anda bus’ı kontrol etmeye çalıştığında I2C bus sisteminin normal iletişim kurmasını ve verilerin kaybolmamasını sağlar. Bus sistemi, yalnızca bir anahtar düğümün arbitraj yoluyla bus’ı işgal etmesine izin verir.

Arbitraj Süreci

DATA1 ve DATA2, sırasıyla anahtar düğüm tarafından bus’a gönderilen veri sinyalleridir, SDA bus’ta sunulan veri sinyalidir ve SCL bus’ta sunulan saat sinyalidir. Anahtar düğüm 1 ve 2 aynı anda başlangıç sinyalleri gönderdiğinde, her iki anahtar düğüm yüksek seviye sinyalleri gönderir. Bu durumda, bus üzerindeki sinyal yüksektir ve her iki anahtar düğüm de bus üzerindeki sinyalin kendileri tarafından gönderilen sinyalle aynı olduğunu tespit eder ve veri göndermeye devam eder. İkinci saat döngüsünde, her iki anahtar düğüm de düşük seviye sinyalleri gönderir ve bus’ta sunulan sinyaller düşük seviyededir ve veri göndermeye devam eder. Üçüncü saat döngüsünde, anahtar düğüm 1 yüksek seviye sinyali gönderirken, anahtar düğüm 2 düşük seviye sinyali gönderir. Bus’ın “VE” mantıksal işlevine göre, bus üzerindeki sinyal düşük seviyededir. Bu durumda, anahtar düğüm 1 bus’taki verinin kendisi tarafından gönderilen veriden farklı olduğunu tespit eder ve veri çıkış aşamasını keser, durumu almak için köle düğüme geçer. Böylece, anahtar düğüm 2 bus’ı kazanır ve veri kaybolmaz; yani bus’taki veri, anahtar düğüm 2 tarafından gönderilen veriye eşittir ve anahtar düğüm 1 köle düğüm haline geldikten sonra veri almaya devam eder ve SDA hattındaki veriyi de kaybetmez. Bu nedenle, arbitraj süreci sırasında veri kaybolmaz.

Özet: SDA arbitrajı ve SCL saat senkronizasyonu işlemleri ardışık değildir, aynı anda gerçekleştirilir.

I2C Kilitlenmesi

Gerçek kullanımda, I2C kilitlenmeye eğilimlidir. Kilitlenmenin meydana geldiği iki yaygın durum vardır:

  • Biri, köle cihaz ACK yanıtı verirken anahtar cihazın anormal bir şekilde sıfırlanmasıdır.
  • Diğeri, köle cihaz 0 veri biti yanıtı verirken anahtar cihazın anormal bir şekilde sıfırlanmasıdır.

Her iki durumda da ortak nokta, anahtar cihaz anormal bir şekilde sıfırlanırken SDA’nın köle cihaz tarafından düşük çekilme durumunda olmasıdır; SCL ise anahtar cihaz sıfırlandığında VOH (boşta durumu) durumundadır. Bu durumda, köle cihaz ACK veya veri bitini almak için anahtar cihazın SCL’yi düşük çekmesini bekleyecek, anahtar cihaz ise köle cihazın SDA hattını serbest bırakmasını bekleyecektir. Anahtar cihaz ve köle cihaz birbirlerini bekler, havada bakışırlar ve bir kilitlenme durumuna girerler.

Kilitlenme sorununu çözmek için bazı yaygın yöntemler şunlardır:

  • Anahtar cihaz, SDA’nın belirli bir süre boyunca düşük çekildiğini tespit ettiğinde, aktif olarak köle cihazı sıfırlayarak SDA’yı serbest bırakır. Bu yöntemin ön koşulu, köle cihazın bir sıfırlama pinine sahip olmasıdır ve MCU, köle cihazın sıfırlama pinini kontrol edebilir.
  • Anahtar cihaz, SDA’nın belirli bir süre boyunca düşük çekildiğini tespit ettiğinde, saat bus’una 9 saat gönderir ve köle cihazın ACK bitini alarak SDA’yı VOH durumuna serbest bırakmasını sağlar.
  • Anahtar ve köle cihazlar arasında bir I2C tamponu seri olarak bağlayarak, kilitlenme koşullarını otomatik olarak tespit edebilir. Kilitlenme tespit edildiğinde, anahtar cihazdan aktif olarak bağlantıyı keser ve köle cihaza 9 saat gönderir. Köle cihaz SDA hattını serbest bıraktıktan sonra, anahtar cihazla yeniden bağlantı kurar.

I2C kilitlenme sorunu temelde önlenemez. MCU’nun anormal sıfırlanmasından kaynaklanan I2C kilitlenmesine ek olarak, köle cihaz normal iletişim sürecinde SDA’yı anormal bir şekilde düşük çekerek de kilitlenmeye neden olabilir. Bu nedenle, yazılımın kilitlenme meydana geldiğinde kurtulabilmesi için tasarlanması gerekir, böylece I2C iletişimi devam edebilir.

Saat Genişletme

I2C Saat Genişletmesi nedir? I2C’nin anahtar-köle iletişim sürecinde, bus üzerindeki SCL saati her zaman anahtar tarafından üretilir ve kontrol edilir, ancak eğer köle anahtarın hızına yetişemezse, I2C protokolü kölenin SCL saat hattını aşağı çekmesine izin verir. Bir transfer, köle SCL hattını serbest bırakana kadar askıya alınır ve transfer devam eder.

Ref: CSDN

Saat Genişletme, köle için isteğe bağlı bir yapılandırmadır. Eğer etkinleştirilmemişse, köle SCL’yi kontrol edemez; etkinleştirildiğinde, köle SCL’yi zorla düşük çekerek iletim hızını azaltabilir. SCL VOL durumundayken, ana bilgisayar yalnızca kölenin SCL’yi serbest bırakmasını bekleyebilir.

Tekrar Başlatma

Bazen anahtar, farklı kölelerle mesaj alışverişi yapmak gibi bir iletişimde birden fazla mesaj alışverişi gerçekleştirmesi gerektiğinde veya okuma ve yazma işlemlerini değiştirmek istediğinde ve bu süre zarfında diğer anahtarlar tarafından müdahale edilmesini istemediğinde, ‘tekrar başlatma koşulu’ kullanabilir – Bir iletişimde, anahtar birden fazla başlangıç koşulu üretebilir ve birden fazla mesaj alışverişini tamamlayabilir ve sonunda tüm iletişim sürecini sonlandırmak için bir durdurma koşulu oluşturabilir. Bu süre zarfında durdurma koşulu olmadığı için, anahtar bus’ı işgal etmeye devam eder ve diğer anahtarlar geçiş yapamaz.

Ref: CSDN

İşte UART, I2C ve SPI arasındaki fark

Protokol Karmaşıklık Hız Cihaz Sayısı Kablo Sayısı Duplex Master ve slave sayısı
UART Basit En yavaş 2 cihaza kadar 1 Tam Duplex Tekil ile Tekil
I2C Birden fazla cihazı bağlamak kolay UART’tan daha hızlı 127’ye kadar, ama karmaşık hale gelir 2 Yarım Duplex Birden fazla slave ve master
SPI Cihaz sayısı arttıkça karmaşık En hızlı Birçok, ama karmaşık hale gelir 4 Tam Duplex 1 master, birden fazla slave

Bu üç iletişim yönteminden hangisinin en iyi olduğunu merak ediyor olabilirsiniz? UART mı, I2C mi yoksa SPI mi?
Ne yazık ki, “en iyi” iletişim arayüzü yoktur. Her iletişim arayüzünün kendi avantajları ve dezavantajları vardır.

Bu nedenle, kullanıcılar projelerine en uygun iletişim arayüzlerini seçmelidir. Örneğin, en hızlı iletişim arayüzlerine ihtiyacınız varsa, SPI ideal olacaktır. Öte yandan, kullanıcı birden fazla cihazı çok karmaşık olmadan bağlamak istiyorsa, I2C ideal olacaktır çünkü 127 cihaza kadar bağlanabilir ve yönetimi kolaydır.

I2C İletişim Protokollerini Destekleyen Bazı Ürünler

XIAO Serisi

I2C, UART veya SPI’yi destekleyen tüm XIAO Serisi Mikrodenetleyicileri burada inceleyebilirsiniz Seeed Studio XIAO Serisi. Ve şimdi çoğu XIAO Serisi için Ücretsiz Kargo!

XIAO Serisi’nin bazı özellikleri

  • Parmak boyutunda form faktörü, sadece 20×17.5mm. Alan kısıtlı senaryolar için tasarlandı.
  • Analog, dijital, IIC, UART, SPI ve daha fazlasını içeren birden fazla arayüzü destekleyen 11 IO’ya kadar.
  • Çeşitli ve karmaşık uygulamalar için güçlü bir performansa sahip güçlü çekirdek.
  • Tek taraflı bileşenler, yüzey montaj tasarımı. XIAO’yu diğer kartlara kolayca entegre edin ve seri üretim için kullanın.

Wio Terminal

Wio Terminal, hem Bluetooth hem de Wi-Fi Kablosuz bağlantı özelliklerine sahip bir ATSAMD51 tabanlı mikrodenetleyicidir ve Realtek RTL8720DN tarafından desteklenmektedir, Arduino ve MicroPython ile uyumludur.

Wio Terminal’in bazı özellikleri

  • Güçlü MCU: 120MHz’de çalışan ARM Cortex-M4F çekirdeğine sahip Microchip ATSAMD51P19
  • Güvenilir Kablosuz Bağlantı: Realtek RTL8720DN ile donatılmış, çift bant 2.4Ghz / 5Ghz Wi-Fi
  • Ekran + Geliştirme Kartı + Giriş/Çıkış Arayüzü + Kasa ile donatılmış tam sistem
  • Raspberry Pi 40-pin Uyumlu GPIO, Raspberry Pi’ye çevre birimi olarak kurulum sağlar
  • Arduino, CircuitPython, Micropython, ArduPy (ArduPy Nedir?), AT Firmware, Visual Studio Code desteği
  • USB OTG Desteği

Leave a Reply

Your email address will not be published. Required fields are marked *