RPi'nin I2C veri yolu maksimum cihaz yükleniyor / yayılıyor mu?
Bir RPi4'üm var ve 4 MCP23017 gpio genişleticili I2C veriyolunu kullanıyorum ve bu iyi çalışıyor. Niyetim 8 MCPMCP23017 cihazı kullanmaktır, çünkü sadece 3 bit adresleme vardır, bu 1 I2C veriyolunda maksimumdur. Sorum şu: RPi'nin I2C veriyolunda maksimum cihaz yükleme / fan çıkışı var mı?
Yanıtlar
I²C'yi anlamıyorsunuz - bu açık bir tahliye barasıdır, dolayısıyla fanout kavramı geçerli değildir. Yükleme, kapasitansla daha fazla sınırlandırılır - bu da cihaz sayısına ek olarak veriyolu uzunluğu ve düzeni ile ilgilidir. Düşük değerli pullups veya tamponlama kullanarak cihaz sayısını en üst düzeye çıkarabilirsiniz.
Arabelleğe alma ve çoğullamaya bakın https://en.wikipedia.org/wiki/I²C
"Bkz. Bir sistemde çok sayıda I2C cihazı olduğunda, büyük veri yolu bölümlerini daha küçük bölümlere ayırmak için veri yolu arabellekleri veya çoklayıcıları dahil etme ihtiyacı olabilir. Bu, veri yolu bölümünün kapasitansını izin verilen değerin altında tutmak veya aynı adrese sahip birden fazla cihazın bir çoklayıcı ile ayrılmasına izin ver. "
Mantıklı herhangi bir düzen ile 8 MCPMCP23017 cihazıyla yükleme problemi yaşamazsınız.
Çok yüksek veri yolu kapasitansı, çok yüksek fan çıkışı (bu durumda ilgiliyse ...) konusunda endişeliyseniz veya RPi'ye 8'den fazla MCP23017 IO genişletici bağlamak istiyorsanız, çok basit bir çözüm var : RPi'nin orijinal I2C pinlerine PCA9548 (8 I2C veriyolu) veya benzeri bir I2C anahtarı bağlayın. Birkaç yıldan beri Linux çekirdeği bunun için örtük bir desteğe sahip olduğundan, yapmanız gereken tek şey aşağıdaki satırı /boot/config.txt
(as sudo
) dosyaya eklemektir :
dtoverlay=i2c-mux,pca9548,addr=0x70
Bu şekilde, ekstra cihazlarınızı bağlayabileceğiniz fazladan 8 I2C veri yoluna sahip olacaksınız ( i2cdetect -l
ekstra otobüsleri ve adlarını görmek için kullanın ). Eğer yapmak gereken tek şey sizin kod hangi yazılım söylemektir /dev/i2c-x
sizin I2C cihazları bağlıyken cihazı.
Bazı avantajlar:
- Veri yolu kapasitansının yayılması
- I2C MUX'un anahtarlama komutlarını önemsemenize gerek yok, Linux çekirdek modülü bunu sizin için
/dev/i2c-x
veriyoluna bağlı olarak yapıyor . - RPi'ye toplam 64 MCP23017 cihazı ekleyebilirsiniz (dolaylı olarak), yani (çılgın) toplam 64 x 16 = 1024 IO (daha ne istiyorsunuz ...)
- Önemli : I2C MUX'un "diğer tarafında" bir güç kaynağı karışımı ile çalışabilirsiniz. Bu 3V3 olabileceği gibi 1V8 veya 5V de olabilir. Son derece kullanışlı! Giriş / çıkış pimlerinin hasar görmesini önlemek için I2C MUX'un ön ucunun RPi'nin güç kaynağına (yani 3V3) uyması gerektiğini unutmayın.
Dezavantaj:
Evet, bir tane var: projenize fazladan donanım (sınırlı olsa da) eklemeniz gerekiyor, ancak bu küçük ekstra çaba için çok şey geri alıyorsunuz.