Pemuatan / penyebaran perangkat maksimum bus I2C RPi?

Aug 19 2020

Saya memiliki RPi4 dan saya telah menggunakan bus I2C dengan 4 ekspander gpio MCP23017 dan ini berfungsi dengan baik. Maksud saya adalah menggunakan 8 perangkat MCPMCP23017, karena mereka hanya memiliki 3 bit pengalamatan, ini adalah maksimum pada 1 bus I2C. Pertanyaan saya adalah apakah bus I2C RPi memiliki pemuatan / kipas perangkat yang maksimal?

Jawaban

2 Milliways Aug 20 2020 at 14:37

Anda tidak mengerti I²C - ini adalah bus pembuangan terbuka, jadi konsep fanout tidak berlaku. Pemuatan lebih dibatasi oleh kapasitansi - yang pada gilirannya terkait dengan panjang dan tata letak bus di samping jumlah perangkat. Anda dapat memaksimalkan jumlah perangkat dengan memanfaatkan pull-up atau buffering bernilai rendah.

Lihat Buffering dan multiplexing in https://en.wikipedia.org/wiki/I²C

"Lihat Jika ada banyak perangkat I2C dalam suatu sistem, mungkin ada kebutuhan untuk menyertakan buffer bus atau multiplexer untuk membagi segmen bus besar menjadi yang lebih kecil. Hal ini dapat diperlukan untuk menjaga kapasitansi segmen bus di bawah nilai yang diizinkan atau untuk memungkinkan beberapa perangkat dengan alamat yang sama dipisahkan oleh multiplekser. "

Dengan tata letak yang masuk akal, Anda seharusnya tidak mengalami masalah pemuatan dengan 8 perangkat MCPMCP23017.

GeertVc Aug 21 2020 at 12:45

Jika Anda khawatir tentang kapasitansi bus yang terlalu tinggi, fan-out yang terlalu tinggi (jika relevan dalam hal ini ...) atau jika Anda ingin menghubungkan lebih dari 8 ekspander MCP23017 IO ke RPi, maka ada solusi yang sangat sederhana : sambungkan sakelar I2C seperti PCA9548 (8 bus I2C) - atau serupa - ke pin I2C asli dari RPi. Karena kernel Linux memiliki dukungan implisit untuk ini sejak beberapa tahun, satu-satunya hal yang harus Anda lakukan adalah menambahkan baris berikut ke file /boot/config.txt(sebagai sudo):

dtoverlay=i2c-mux,pca9548,addr=0x70

Dengan cara ini, Anda akan memiliki tambahan 8 bus I2C di mana Anda dapat menghubungkan perangkat tambahan Anda (gunakan i2cdetect -luntuk melihat bus tambahan dan namanya). Satu-satunya hal yang harus Anda lakukan dalam kode Anda adalah memberi tahu perangkat lunak Anda ke /dev/i2c-xperangkat mana perangkat I2C Anda terhubung.

Beberapa keuntungan:

  • Penyebaran kapasitansi bus
  • Anda tidak perlu peduli tentang perintah pengalihan I2C MUX, modul kernel Linux melakukan ini untuk Anda berdasarkan /dev/i2c-xbus.
  • Anda dapat menambahkan total 64 perangkat MCP23017 ke RPi (secara tidak langsung, yaitu), yang berarti total (gila) 64 x 16 = 1024 IO (apa lagi yang Anda inginkan ...)
  • Penting : Anda dapat bekerja dengan campuran catu daya "di sisi lain" dari I2C MUX. Ini bisa 3V3, tapi juga 1V8 atau 5V. Sangat nyaman! Perhatikan bahwa ujung depan MUX I2C harus mematuhi catu daya RPi (yaitu, 3V3) untuk menghindari kerusakan pada pin masuk / keluar.

Kerugian:

Ya, ada satu: Anda harus menambahkan perangkat keras ekstra (meskipun terbatas) ke proyek Anda, tetapi Anda mendapatkan banyak untuk upaya ekstra kecil ini.