Yanıtlar:
Sensör göbeği düzenlemesi
Bu senaryoda, iki I²C otobüsü vardır. Onlara yerel otobüs ve ana otobüs diyelim . Yerel veri yolunun amacı bir mikrodenetleyiciye (μC) bir grup sensör bağlamaktır. ΜC'nin amacı sensörleri yoklamak, onlardan bilgi toplamak ve belirli olayları tespit etmektir. Böyle bir roldeki μC'ye sensör hub'ı denir . Sensör göbeği, daha yüksek seviyeli işlevlerden sorumlu değildir; bunun için güçlü bir ana işlemci var. Ana veri yolu, sensör göbeğini ana işlemciye bağlar. Bu nedenle, sensör merkezi μC, yerel I²C veriyolunda bir master ve I²C ana veri yolunda bir slave'dir.
SPI ve I²C
Orijinal gönderide bağlı olan PIC, SPI ve I²C arasındaki pinleri paylaşmaz. Ancak, donanım SPI ve I²C için aynı pinleri kullanan başka PIC'ler de vardır, çünkü her ikisi de aynı MSSP çevre birimi ile uygulanmaktadır. Bir PIC'nin iki ayrı MSSP çevre birimi varsa, biri donanım SPI için kullanılabilirken diğeri donanım I²C için kullanılabilir.
Birden fazla veriyoluna ihtiyaç duymanın çok yaygın bir nedeni, farklı hızlarda çalışan cihazlara sahip olmaktır. Başlangıçta, I²C maksimum 100 kHz'de çalışıyordu. Daha sonra, hız maksimum 400 kHz'e ve daha sonra 1 MHz ve üzerine yükseltildi.
Gotcha, her cihazın adresi I²C protokolüne gömülü olduğundan, aynı veriyolunda, örneğin 100 kHz ve 400 kHz gibi farklı hız değerlerine sahip cihazlarınız varsa, otobüsü her zaman ortak en düşük hızda çalıştırmanız gerekir. aynı veri yolundaki tüm cihazlara (bu durumda 100 kHz).
Veri yolunu daha yüksek hızda (400 kHz) çalıştırırsanız, açıkçası daha düşük hızlı aygıt düzgün çalışmaz ve hatta yüksek hızlı aygıtın adresini kendi olarak yorumlayabilir ve 400 kHz aygıtın iyi. Ancak otobüsü başlangıçta 100 kHz'de çalıştırıp daha sonra daha yüksek hızlı bir yongaya hitap ettikten sonra otobüsü 400 kHz'e kadar hızlandırmaya çalışsanız bile, düşük hızlı yongaların birini yorumlaması (muhtemelen olası olmasa da) yüksek hızlı veri paketlerini adres olarak yanlış ve böylece veri yolundaki iletişimi bozar. Her iki durumda da, 400 kHz cihazla yapılan alışverişin sonunda 100 kHz cihaz muhtemelen bilinmeyen bir durumda olacaktır.
Bu nedenle, farklı hızlarda çalışan cihazlarınız varsa ve birden fazla I²C bağlantı noktasına sahipseniz ve böyle bir lüksün sağlanmasına izin veren, 100 kHz cihazlar için bir I²C'nin, diğeri 400 kHz cihazlar için ve başka bir ihtiyaçlarınızı belirleyebileceğinden 1 MHz cihazlar için.
Bu, SPI ile ilgili bir sorun değildir, çünkü her aygıt donanımda ayrı bir yonga seçme hattı ile etkinleştirilir (adreslenir). Böylece saat hızı, etkin olmadıkları için aynı veri yolundaki diğer yongalar üzerinde herhangi bir etkiye sahip olmadan seçilen yonganın hızıyla (10 MHz, 20 MHz, ne olursa olsun) eşleştirilebilir.
Ayrıca, aynı adrese sahip iki cihazı desteklemenize izin verebilir. Evet, çoğu cihaz adreslerinin alt iki bitini kayışlarla seçmenize izin verir. Son zamanlarda, her biri adreslerinin LSB'sini bir dirençle ayarlamanıza izin veren 4 cihazı desteklemem gerekiyordu. İki limana sahip olmak benim için ekstra bir maliyet anlamına gelmez.
Belki birinin bir grup cihaz için efendi olmasını ve diğerini köle portu olarak sunmasını istiyorum, bu yüzden efendim 10.000. saati.
Sadece 2 sent ekleyerek, bu iş parçacığında diğer iyi yanıtlar bir demet gibi görünüyor.
Hız.
İki I2C cihaza aynı anda erişmeniz gerekiyorsa, önemli bir çakışma yaşayabilirsiniz. Ya da birinin diğerini beklemesi gerekirdi.
İkincisi, I²C daha fazla bant genişliği elde etmek için kullanılabilir (aynı anda iki bayt alabilir veya gönderebilirsiniz).
Sürekli çalışan bir ADC'niz varsa, bir I²C her zaman meşgul olur.
Adres değiştirme de biraz zaman alır, bu nedenle bazı durumlarda iki cihaz için iki bağlantı noktası kullanabilir ve zaman kazanmak için adres değişikliklerinden kaçınabilirsiniz.
Diğerleri bunu yapmak için birçok neden belirtti, bir tane ekleyeceğim:
Bir grup 5V I2C cihazınız ve bir grup 3V3 I2C cihazınız var.
Örneğin, biri 5V toleranslı, diğeri sadece 3V3 olmak üzere iki I2C bağlantı noktasına sahip 3.3V mikro'm var.