Максимальная загрузка устройства / разветвление шины I2C RPi?

Aug 19 2020

У меня есть RPi4, и я использовал шину I2C с 4 расширителями GPIO MCP23017, и это прекрасно работает. Я намерен использовать 8 устройств MCPMCP23017, так как они имеют только 3-битную адресацию, это максимум на 1 шине I2C. У меня вопрос: есть ли у шины I2C RPi максимальная загрузка / разветвление устройства?

Ответы

2 Milliways Aug 20 2020 at 14:37

Вы не понимаете I²C - это шина с открытым стоком, поэтому концепция разветвления не применяется. Нагрузка в большей степени ограничивается емкостью, которая, в свою очередь, зависит от длины и схемы шины, а также от количества устройств. Вы можете максимально увеличить количество устройств, используя подтягивания с низким значением или буферизацию.

См. Раздел «Буферизация и мультиплексирование» в https://en.wikipedia.org/wiki/I²C

"См. Когда в системе много устройств I2C, может возникнуть необходимость во включении буферов шины или мультиплексоров для разделения больших сегментов шины на более мелкие. Это может быть необходимо для сохранения емкости сегмента шины ниже допустимого значения или для того, чтобы позволяют разделить несколько устройств с одним и тем же адресом с помощью мультиплексора ».

При любой разумной раскладке проблем с загрузкой 8 устройств MCPMCP23017 возникнуть не должно.

GeertVc Aug 21 2020 at 12:45

Если вас беспокоит слишком высокая емкость шины, слишком большое разветвление (если это вообще актуально в этом случае ...) или если вы хотите подключить более 8 расширителей ввода-вывода MCP23017 к RPi, то есть очень простое решение. : подключите переключатель I2C, такой как PCA9548 (8 шин I2C) или аналогичный, к исходным контактам I2C RPi. Поскольку ядро ​​Linux неявно поддерживает это уже несколько лет, единственное, что вам нужно сделать, это добавить в файл следующую строку /boot/config.txt(as sudo):

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

Таким образом, у вас будет 8 дополнительных шин I2C, к которым вы можете подключить свои дополнительные устройства (используйте, i2cdetect -lчтобы увидеть дополнительные шины и их названия). Единственное, что вам нужно сделать в своем коде, - это указать своему программному обеспечению, к какому /dev/i2c-xустройству подключены ваши устройства I2C.

Некоторые преимущества:

  • Разброс емкости шины
  • Вам не нужно заботиться о командах переключения I2C MUX, модуль ядра Linux делает это за вас на основе /dev/i2c-xшины.
  • Вы можете добавить в общей сложности 64 устройства MCP23017 к RPi (то есть косвенно), что означает (сумасшедшее) всего 64 x 16 = 1024 ввода-вывода (что еще вы хотите ...)
  • Важно : вы можете работать с несколькими источниками питания «на другой стороне» I2C MUX. Это может быть 3V3, а также 1V8 или 5V. Чрезвычайно удобно! Обратите внимание, что передний конец I2C MUX должен подчиняться источнику питания RPi (то есть 3V3), чтобы избежать повреждения контактов входа / выхода.

Недостаток:

Да, есть одно: вам нужно добавить дополнительное оборудование (хотя и ограниченное) к вашему проекту, но вы получите много денег за эти небольшие дополнительные усилия.