Carregamento / ventilação máxima do dispositivo do barramento I2C do RPi?

Aug 19 2020

Eu tenho um RPi4 e tenho usado o barramento I2C com 4 expansores gpio MCP23017 e funciona bem. Minha intenção é utilizar 8 dispositivos MCPMCP23017, pois eles possuem apenas 3 bits de endereçamento, este é o máximo em 1 barramento I2C. Minha pergunta é se o barramento I2C do RPi tem um carregamento / ventilação máximo do dispositivo?

Respostas

2 Milliways Aug 20 2020 at 14:37

Você não entende I²C - este é um barramento de dreno aberto, portanto, o conceito de fanout não se aplica. O carregamento é mais limitado pela capacitância - que por sua vez está relacionada ao comprimento e layout do barramento, além do número de dispositivos. Você pode maximizar o número de dispositivos utilizando pullups de baixo valor ou buffering.

Consulte Buffer e multiplexação em https://en.wikipedia.org/wiki/I²C

"Veja quando houver muitos dispositivos I2C em um sistema, pode haver necessidade de incluir buffers de barramento ou multiplexadores para dividir grandes segmentos de barramento em segmentos menores. Isso pode ser necessário para manter a capacitância de um segmento de barramento abaixo do valor permitido ou para permitir que vários dispositivos com o mesmo endereço sejam separados por um multiplexador. "

Com qualquer layout adequado, você não deve ter problemas de carregamento com 8 dispositivos MCPMCP23017.

GeertVc Aug 21 2020 at 12:45

Se você estiver preocupado com a capacitância do barramento muito alta, fan-out muito alto (se for relevante neste caso ...) ou se você quiser conectar mais de 8 expansores IO MCP23017 ao RPi, então há uma solução muito simples : conecte um switch I2C como o PCA9548 (8 barramentos I2C) - ou similar - aos pinos I2C originais do RPi. Como o kernel do Linux tem suporte implícito para isso há alguns anos, a única coisa que você precisa fazer é adicionar a seguinte linha ao arquivo /boot/config.txt(as sudo):

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

Desta forma, você terá um extra de 8 barramentos I2C onde você pode conectar seus dispositivos extras (use i2cdetect -lpara ver os barramentos extras e seus nomes). A única coisa que você precisa fazer em seu código é informar ao software a qual /dev/i2c-xdispositivo seus dispositivos I2C estão conectados.

Algumas vantagens:

  • Propagação da capacitância do barramento
  • Você não precisa se preocupar com os comandos de comutação do I2C MUX, o módulo do kernel do Linux está fazendo isso para você com base no /dev/i2c-xbarramento.
  • Você pode adicionar um total de 64 dispositivos MCP23017 ao RPi (indiretamente, isto é), o que significa um total (louco) de 64 x 16 = 1024 IOs (o que mais você quer ...)
  • Importante : você pode trabalhar com uma mistura de fontes de alimentação "do outro lado" do I2C MUX. Pode ser 3V3, mas também 1V8 ou 5V. Extremamente conveniente! Observe que a extremidade frontal do I2C MUX deve obedecer à fonte de alimentação do RPi (ou seja, 3V3) para evitar danos aos pinos de entrada / saída.

Desvantagem:

Sim, há um: você precisa adicionar hardware extra (embora limitado) ao seu projeto, mas recebe muito por esse pequeno esforço extra.