• bazı mikrokontrolcuların haberleşme protokolü. i2c bus protocol. seri bir protokol olup, destekleyen cihazların programlanmaları için kullanılır.
  • philips in chipler için geliştirdiği bi protokoldur....burdan dehşetli para vurduklarını zannediyorum...gavurcası "ay sukuart si " diye okunuyor......bünyesindeki i lar "data bus" ve "clock bus" larının gösteriyor...
  • i2c'nin standartta belirtilen 400 kbp/s gibi bir özelliği yoktur. bahsedilen hız, i2c saatinin hızıdır ve bu hız da standartta 400 khz olarak belirtilmiştir. etkin bantgenişliği adres bilgisi, başlangıç-bitiş bitleri (start stop bit), acknowledge bitleri, okuma işleminde adresin 2 kere yollanması nedeniyle daha düşüktür.

    yazma işleminde, master'dan sırasıyla 1 start biti, 7 adres biti, 1 yazma biti yollanır. slave'den acknowledge biti geri okunduğunda master sırayla 8 data bitini slave'e yollar. slave data bitlerini tamamen aldığını acknowledge bitiyle belirtir ve master stop bitiyle bir baytın yazılması işlemini tamamlar. 1 baytın master'dan slave'e yollanma işlemi kısacası toplam 20 bit ile tanımlanmış olur. 400 khz saat ile çalışan bir i2c bus'ta 8 * (400.000 / 20) = 160 kbps bantgenişliği elde edilir. eğer baytlar ardarda yollanacaksa, saniyedeki max. yazma bantgenişliği (400.000 - (1+7+1+1)) / (8 + 1) = 355 kbps olur.

    okuma işleminde durum daha kötüdür. master sırasıyla gene 1 start, 7 adres, 1 yazma biti yollar. slave'den acknowledge geri okunduğunda bu sefer okuma işlemini başlatmak için tekrar 1 start, 7 adres, 1 okuma biti yollar. acknowledge alındığında 8 bit slave'den alınır. slave her bayt yollama işlemini bitirdiğini acknowledge ile belirtir. master-slave arasında ardarda bytelar alınmayacaksa master stop bitiyle komünikasyonunu bitirir. 1 baytın slave'den mastera yollanma işlemi için kısacası toplam 30 bit gerekir. dolayısıyla 400 khz ile saat ile çalışan bir i2c busta 8 * (400.000 / 30) = 107 kbps bantgenişliği elde edilir. eğer baytlar ardarda yollanacaksa, saniyedeki max. okuma bantgenişliği (400.000 - (1+7+1+1) - (1+7+1+1)) / (8 + 1) = 355 kbps olur.

    i2c bus, osi referans modelinde physical layer'a denk gelen bir standart olup, elektronik sistemlerde elemanlar arası veri iletişiminin en az donanımla ve en az pcb bağlantısıyla yapılmasını, dolayısıyla elektronik sistemlerin daha ucuza tasarlanmasını sağlamak için geliştirilmiştir. aynı zamanda düşük bantgenişliği ile karmaşık yazılımla programlama gerektirmeyen donanımların yazılım maaliyetini de düşürür.

    half-duplex, seri bir telekomünikasyon protokolü olduğundan elektronik sistemler arası minimum bilgi alışverişi için de kullanılır. eskiden hdlc ve benzeri data link layer protokolleriyle gerçeklenen chipler arası haberleşmeyi, basit yapısı sayesinde physical layer'de gerçekler ve ürün maaliyetini düşürür.
  • birden fazla mikroişlemcinin master-slave yapıda olmasını sağlayıp hızlı bir şekilde haberleşmelerini sağlayan bir protokoldür.
  • http://www.robotfuzz.co.uk/osif

    adresinden bir tane usb-i2c çevirici projesine ulaşabilirsiniz.
  • (bkz: i2s)
  • biraz hikayeleştirerek anlatmamız gerekirse:

    bir sahip ve köleleri var.(örnek olarak sahibi bir mikroişlemci-örneğin bir arduino, köleleri de bir sıcaklık ve bir basınç sensörü olarak düşünebiliriz.)

    sahibin adı arduino recep, kölelerin isimleri de sıcaklık ahmet ve basınç binali olsun.

    recep de kölelerde odalarında telefonları başında oturuyorlar. sonra recep'in canı sıkılıyor ve köleleriyle i2c üzerinden iletişime geçip, ellerindeki dosyaları(sensörlerin kendi register ları) değiştirmek(writing), bazen de bu dosyaların içerikleriyle ilgili bilgi almak(reading) istiyor.

    arduino recep ilk önce telefonu açıyor. telefonu açtığı zaman, sıcaklık ahmet ve basınç binalinin telefonlarına bir nur(i2c start sinyali) iniyor. ikisi de merakla bekliyorlar acaba hangimizi arayacak diye.

    sonra arduino recep o gür sesiyle haykırıyor "binaliiiii!"(basınç sensörünün device adresini i2c bus ına yolluyor). bunu duyan binali sesi duyar duymaz hazırola geçip gelecek emirleri bekliyor.

    arduino recep tekrar haykırıyor "kupon araziler!"(kupon araziler register ının sensör üzerindeki 8 bir adresi). binali hemen anlıyor ve kupon araziler dosyasını önüne alıyor ve gelecek diğer emirleri bekliyor.

    şimdi recep'in yapabileceği 2 şey var. ya kupon araziler dosyasında bir bilgiyi değiştirecek ya da oradan bir bilgi isteyecek. (ya reading yapacaz ya da writing).

    iki senaryoyu da inceleyelim.
    1. dosyaya birşey yazılacak. (mesela configure register ına data yazmak )

    recep bağırıyor "başla!"(tekrar i2c start sinyali) ve hemen arkasından "bişey söyleyecem not al!"(device registerı rw biti 0). sonrasında doyaya yazılacak bilgileri (seçtiğimiz register a yazılacak 8 bitlik data) yolluyor.

    ve akabinde de kölesiyle çok yüz göz olmadan yüzüne kapatıyor.(i2c stop signal)

    2. dosyadan birşeyler okunacak. (mesela son basınç ölçümü datası)
    recep bağırıyor "başla!"(i2c start sinyali) ve hemen arkasından "oku!"(device registerı rw biti 1). binali dosyada yazanları recep'e okuyor.(register daki datayı master a gönderiyor. register adresi 0x70 olsun). binali ilk dosyayı okuyup bitiriyor(0x70 i iletti). sonra recep diyor ki "hıhı anlıyorum"(acknowledge ediyor). binali de iyi madem anladıysan sıradaki dosyayı da okuyayım diyip onu da okuyor.şimdi (0x71 i iletiyor).
    recep "hıhı anlıyorum" dedikçe (acknowledge ettikçe) binali okuyor da okuyor(0x72, 0x73...). taa ki recep "tamam yeter siktir git"(not-acknowledge) diyene kadar.

    recep mutlu, recep bilgili.
  • nefret edilesi bus.
hesabın var mı? giriş yap