I2C veri yolu protokolü Eğitimi, Uygulamalar ile arayüz

Sorunları Ortadan Kaldırmak Için Enstrümanımızı Deneyin





Günümüzde protokoller, gömülü sistem tasarımı . Protokollere gitmeden mikrodenetleyicinin çevresel özelliklerini genişletmek isterseniz karmaşıklık ve güç tüketimi artacaktır. USART, SPI, CAN gibi farklı tipte veri yolu protokolleri mevcuttur. I2C veri yolu protokolü iki sistem arasında veri aktarımı için kullanılan vb.

I2C Protokolü

I2C Otobüs nedir?




Bilginin iki veya ikiden fazla cihaz arasında iletilmesi ve alınması, veri yolu sistemi olarak adlandırılan bir iletişim yolunu gerektirir. Bir I2C veri yolu, verileri entegre devreler arasında taşımak için kullanılan çift yönlü iki kablolu bir seri veri yoludur. I2C, 'Inter Integrated Circuit' anlamına gelir. İlk olarak 1982'de Philips yarı iletkenleri tarafından tanıtıldı. I2C veri yolu, standart, hızlı mod ve yüksek hızlı mod gibi üç veri aktarım hızından oluşur. I2C veriyolu, 7 bit ve 10 bit adres alanı cihazını destekler ve çalışması düşük voltajlarda farklılık gösterir.

I2c Veri Yolu Protokolü

I2c Veri Yolu Protokolü



I2C Sinyal Hatları

I2C Sinyal Hatları

I2C Sinyal Hatları

I2C, cihazlarla iletişim kurmak için kullanılan SCL ve SDL hatları gibi iki sinyal hattından oluşan bir seri veri yolu protokolüdür. SCL, 'seri saat hattı' anlamına gelir ve bu sinyal her zaman 'ana cihaz' tarafından yönlendirilir. SDL, 'seri veri hattı' anlamına gelir ve bu sinyal, ana veya I2C çevre birimleri tarafından yönlendirilir. I2C çevre birimleri arasında aktarım olmadığında bu SCL ve SDL hatlarının her ikisi de açık boşaltma durumundadır.

Açık Drenaj Çıkışları


Açık tahliye, FET transistörü konsepti burada transistörün boşaltma terminali açık durumdadır. Ana cihazın SDL ve SCL pinleri, transistörler açık durumda olacak şekilde tasarlanmıştır, bu nedenle veri aktarımı ancak bu transistörler gerçekleştirildiğinde mümkündür. Bu nedenle, bu hatlar veya boşaltma terminalleri, iletim modu için tam kaldırma dirençleri VCC'ye bağlanır.

I2C Arayüzleri

Birçok bağımlı cihazlar mikro denetleyiciye arabirimlidir aralarındaki bilgileri aktarmak için I2C seviye değiştirici IC aracılığıyla I2C veriyolunun yardımıyla. I2C protokolü, tümü ana ünitenin SCL ve SDL hatlarıyla ve ayrıca bağımlı cihazlarla iletişim kurmak için bağlı olan maksimum 128 cihazı bağlamak için kullanılır. Multimaster iletişimini destekler, yani harici cihazlarla iletişim kurmak için iki ana cihaz kullanılır.

I2C Veri Aktarım Hızları

I2C protokolü, hızlı mod, yüksek hızlı mod ve standart mod gibi üç modu çalıştırır; burada standart mod veri hızı 0Hz ila 100Hz arasında değişir ve hızlı mod verileri 0Hz ila 400 KHz hızda ve yüksek hızlı mod 10 ile aktarılabilir KHz ila 100KHz. Her aktarım için 9 bitlik veri gönderilir, burada 8 bit, verici MSB tarafından LSB'ye gönderilir ve 9'uncu bit, alıcı tarafından gönderilen bir alındı ​​bitidir.

I2C Veri Aktarım Hızları

I2C Veri Aktarım Hızları

I2C İletişimi

I2C veri yolu protokolü en yaygın olarak ana ve bağımlı iletişimde kullanılır, burada ana 'mikro denetleyici' ve bağımlı, gömülü sistemdeki ADC, EEPROM, DAC ve benzeri cihazlar gibi diğer cihazlar olarak adlandırılır. Slave cihazların sayısı, I2C veriyolu yardımıyla ana cihaza bağlanır, burada her bir slave, iletişim için benzersiz bir adresten oluşur. Ana cihazı ikincil cihaza iletmek için aşağıdaki adımlar kullanılır:

Aşama 1: İlk olarak, ana cihaz, seri veri hattını dinlemeleri için tüm bağımlı cihazları bilgilendirmek için bir başlatma koşulu yayınlar.

Adım 2: Ana cihaz, SCL ve SDL hatlarına bağlı olarak tüm bağımlı cihazların adresleriyle karşılaştırılan hedef bağımlı cihazın adresini gönderir. Herhangi bir adres eşleşirse, o cihaz seçilir ve kalan tüm cihazların SCL ve SDL hatlarıyla bağlantısı kesilir.

Aşama 3: Ana cihazdan alınan eşleşen bir adrese sahip bağımlı cihaz, ana cihaza bir alındı ​​bildirimi ile yanıt verir, ardından veri yolu üzerinde hem ana hem de bağımlı cihazlar arasında iletişim kurulur.

Adım4: Hem master hem de slave, iletişimin okunmasına veya yazılmasına bağlı olarak verileri alır ve iletir.

Adım 5: Daha sonra, ana birim, alıcıya 1 bitlik bir alındı ​​bildirimi ile yanıt veren 8 bitlik veriyi iletebilir.

I2C Eğitimi

Saat darbelerine göre bilginin adım adım seri olarak iletilmesi ve alınması, I2C protokolü olarak adlandırılır. Sistemler arası ve kısa mesafeli bir protokoldür, yani devre kartı içinde ana ve yardımcı cihazlarla iletişim kurmak için kullanılır.

I2C Protokolü Temelleri

Genel olarak, I2C veri yolu sistemi, ADC, EEROM ve RTC gibi giriş ve çıkış çevre özelliklerini genişletmek için kolayca kullanılan iki kablodan oluşur ve diğer temel bileşenler karmaşıklığı çok daha az olan bir sistem yapmak.

Misal: 8051 mikro denetleyicide dahili ADC bulunmadığından - bu nedenle, 8051 mikro denetleyiciye herhangi bir analog sensör arabirimi oluşturmak istiyorsak - ADC0804-1 kanallı ADC, ADC0808- 8 kanallı ADC, vb. Gibi ADC cihazları kullanmalıyız. Bu ADC'leri kullanarak, Analog sensörleri mikro denetleyiciye bağlayabiliriz.

Herhangi bir mikrodenetleyicinin veya işlemcinin I / O özelliklerini genişletmek için protokol kullanmadan, 8255 ICit 8-pinli cihaza gidebiliriz. 8051 mikro denetleyici, 40 pinli bir mikro denetleyicidir 8255 IC'yi kullanarak 3-I / O portlarını her portta 8 pinli genişletebiliriz. Çevre birimi devrelerini genişletmek için RTC, ADC, EEPROM, Zamanlayıcılar vb. Gibi tüm cihazları kullanarak karmaşıklık, maliyet, güç tüketimi ve ürün boyutu da artırılır.

Bu sorunun üstesinden gelmek için, donanım karmaşıklığını ve güç tüketimini azaltmak için protokol kavramı devreye giriyor. Bu I2C protokolünü kullanarak I / 0 çevre birimleri, ADC'ler, T / C ve bellek cihazları gibi daha fazla sayıda özelliği 128 cihaza kadar genişletebiliriz.
I2C Protokollerinde Kullanılan Terminoloji

Verici: Veri yoluna veri gönderen cihaza verici denir.

Alıcı: Veriyolundan veri alan cihaza alıcı denir.

Usta: Bir saat sinyali üretmek için transferleri başlatan ve bir transferi sonlandıran cihaza master denir.

Köle: Bir master tarafından adreslenen cihaza slave denir.

Multimaster: Birden fazla ana birim, mesajı bozmadan aynı anda veri yolunu kontrol etmeye çalışabilir, buna Multimaster denir.

Tahkim: Birden fazla ana birimin eşzamanlı olarak veri yolunu kontrol etmeye çalışması durumunda, yalnızca birinin bunu yapmasına izin verilir, kazanan mesajın bozulmaması sağlanır.

Senkronizasyon: İki veya daha fazla cihazın tekli saatlerini senkronize etme prosedürüne senkronizasyon adı verilir.

I2C Temel Komut Dizisi

  1. Başlangıç ​​Bit Durumu
  2. Bit Durumu Durdur
  3. Onay Koşulu
  4. Master'dan bağımlıya Yazma işlemi
  5. Köle Operasyonunu Master'a Okuyun

Başlatma ve Durdurma Bit Durumu

Ana birim (mikro denetleyici) bir yardımcı cihazla (örneğin ADC) konuşmak istediğinde, I2C veriyolunda bir başlatma koşulu yayınlayarak iletişime başlar ve ardından bir durdurma koşulu yayınlar. I2C başlatma ve durdurma mantık seviyeleri şekilde gösterilmiştir.

I2C başlatma koşulu, SCL hattı yüksekken SDA hattının yüksekten alta geçişi olarak tanımlanır. SCL hattı yüksekken SDA hattı düşükten yükseğe geçtiğinde AN I2C durma koşulu oluşur.

I2C master her zaman S ve P koşullarını oluşturur. I2C master'ı bir BAŞLAT koşulu başlattığında, I2c veri yolu meşgul durumda kabul edilir.

Başlatma ve Durdurma Bit Durumu

Başlatma ve Durdurma Bit Durumu

Programlama:

BAŞLATMA Durumu:

sbit SDA = P1 ^ 7 // mikro denetleyicinin SDA ve SCL pinlerini başlatın //
sbit SCL = P1 ^ 6
void delay (unsigned int)
void main ()
{
SDA = 1 // verileri işlemek //
SCL = 1 // saat yüksektir //
gecikme ()
SDA = 0 // verileri gönderdi //
gecikme ()
SCL = 0 // saat sinyali düşük //
}
Boşluk gecikmesi (int p)
{
unsignedinta, b
(A = 0a için<255a++) //delay function//
(B = 0b için}

DURDURMA Durumu:

void main ()
{
SDA = 0 // Veriyi işlemeyi durdur //
SCL = 1 // saat yüksektir //
gecikme ()
SDA = 1 // Durduruldu //
gecikme ()
SCL = 0 // saat sinyali düşük //
}
Boşluk gecikmesi (int p)
{
unsignedinta, b
(A = 0a için<255a++) //delay function//
(B = 0b için}

Alındı ​​(ACK) ve Onaysız (NCK) Durumu

I2C veriyolu üzerinden iletilen her bir baytın ardından alıcıdan bir onay koşulu gelir; bu, ana birimin 8 bitlik iletimi tamamlamak için SCL'yi düşük çekmesinden sonra, SDA alıcı tarafından ana bilgisayara düşük çekilecektir. Alıcının iletimi çekilmezse, SDA hattı DÜŞÜK bir NCK koşulu olarak kabul edilir.

Teşekkür (ACK)

Teşekkür (ACK)

Programlama

Teşekkür
void main ()
{
SDA = 0 // SDA hattı alçakta //
SCL = 1 // saat yüksekten düşüğe //
gecikme (100)
SCL = 0
}
Teşekkür Yok:
void main ()
{
SDA = 1 // SDA hattı yükseğe gider //
SCL = 1 // saat yüksekten düşüğe //
gecikme (100)
SCL = 0
}

Master to Slave, İşlemi Yazıyor

I2C protokolü, verileri paketler veya baytlar biçiminde aktarır. Her baytın ardından bir alındı ​​biti gelir.

Veri Aktarım Formatı

Veri Aktarım Formatı

Veri Aktarım Formatı

Başlat: Öncelikle, başlangıç ​​koşulunu oluşturan ana birim tarafından başlatılan veri aktarım dizisi.

7 bitlik Adres: Bundan sonra master, tek bir 16-bit adres yerine iki 8-bitlik formatta slave adresini gönderir.

R / W: Okuma ve yazma biti yüksekse, yazma işlemi gerçekleştirilir.

ALAS: Bağımlı cihazda yazma işlemi gerçekleştirilirse, alıcı 1 bitlik ACK'yı mikro denetleyiciye gönderir.

Dur: Bağımlı cihazdaki yazma işleminin tamamlanmasından sonra, mikro denetleyici durdurma koşulunu bağımlı cihaza gönderir.

Programlama

Yazma İşlemi

voidwrite (işaretsiz karakter d)
{
İmzasız karakter k, j = 0x80
(K = 0k için<8k++)
{
SDA = (d & j)
J = j >> 1
SCL = 1
gecikme (4)
SCL = 0
}
SDA = 1
SCL = 1
gecikme (2)
c = SDA
gecikme (2)
SCL = 0
}

Master - Slave Okuma İşlemi

Veriler, bağımlı cihazdan bit veya bayt şeklinde geri okunur - önce en önemli biti ve en son en az anlamlı biti okuyun.

Veri Okuma Formatı

Veri Okuma Formatı

Veri Okuma Formatı

Başlat: Öncelikle, veri aktarım dizisi, başlatma koşulunu oluşturan ana birim tarafından başlatılır.

7 bitlik Adres: Bundan sonra master, tek bir 16-bit adres yerine iki 8-bitlik formatta slave adresini gönderir.

R / W: Okuma ve yazma biti düşükse, okuma işlemi gerçekleştirilir.

ALAS: Bağımlı cihazda yazma işlemi gerçekleştirilirse, alıcı 1 bitlik ACK'yı mikro denetleyiciye gönderir.

Dur: Bağımlı cihazdaki yazma işleminin tamamlanmasından sonra, mikro denetleyici durdurma koşulunu bağımlı cihaza gönderir.

Programlama

Boş okuma ()
{
İmzasız karakter j, z = 0x00, q = 0x80
SDA = 1
için (j = 0j<8j++)
{
SCL = 1
gecikme (100)
bayrak = SDA
eğer (bayrak == 1)
q)
q = q >> 1
gecikme (100)
SCL = 0

8051 Mikrodenetleyici ile ADC Arayüzünün Pratik Örneği

ADC, analog verileri dijitale ve dijitalden analoğa dönüştürmek için kullanılan bir cihazdır. 8051 mikro denetleyicide dahili bir ADC yoktur, bu nedenle I2C protokolü aracılığıyla harici olarak eklememiz gerekir. PCF8591, I2C tabanlıdır analogdan dijitale ve dijitalden analoğa dönüştürücü. Bu cihaz, maksimum 4 analog giriş kanalının yanı sıra 2,5 ila 6 v voltajları destekleyebilir.

Analog Çıkışlar

Analog çıkışlar voltaj şeklinde gelir. Örneğin, 5v analog sensör 0.01v ile 5v arası çıkış mantığı verir.
5v'lik maksimum dijital değer = 256'dır.
Maksimum voltaj değerine göre 2.5v değeri = 123'tür.

Analog çıkışın formülü:

Dijital Çıktıların Formülü:

ADC

ADC'yi 8051 Mikrodenetleyiciye arayüzleme

Yukarıdaki şekil, ADC cihazından 8051 mikro denetleyiciye I2C protokolü kullanılarak veri aktarımını göstermektedir. SCL ve SDA'nın ADC pinleri, aralarında iletişim kurmak için mikrodenetleyicinin 1.7 ve 1.6 pinlerine bağlanır. Sensör, ADC'ye analog değerler verdiğinde dijitale dönüştürür ve verileri I2C protokolü üzerinden mikrodenetleyiciye aktarır.

Bu, uygun programlarla I2C veri yolu protokolü öğreticisiyle ilgilidir. Verilen içeriğin, I2C iletişimini kullanarak mikrodenetleyicilerle birkaç cihaz arasında arayüz oluşturma konusunda size pratik bir konsept vereceğini umuyoruz. Bu protokolün arayüz oluşturma prosedürü ile ilgili herhangi bir şüpheniz varsa, aşağıya yorum yaparak bize ulaşabilirsiniz.