Massimo caricamento / ventola del dispositivo del bus I2C di RPi

Aug 19 2020

Ho un RPi4 e sto usando il bus I2C con 4 espansori gpio MCP23017 e questo funziona bene. La mia intenzione è di utilizzare 8 dispositivi MCPMCP23017, poiché hanno solo 3 bit di indirizzamento, questo è il massimo su 1 bus I2C. La mia domanda è: il bus I2C di RPi ha un carico / ventaglio massimo del dispositivo?

Risposte

2 Milliways Aug 20 2020 at 14:37

Non capisci I²C - questo è un bus a drain aperto, quindi il concetto di fanout non si applica. Il caricamento è limitato maggiormente dalla capacità, che a sua volta è correlata alla lunghezza e al layout del bus oltre al numero di dispositivi. È possibile massimizzare il numero di dispositivi utilizzando pullup o buffering di valore basso.

Vedere Buffering e multiplexing in https://en.wikipedia.org/wiki/I²C

"Vedere Quando ci sono molti dispositivi I2C in un sistema, può essere necessario includere buffer di bus o multiplexer per dividere segmenti di bus grandi in segmenti più piccoli. Ciò può essere necessario per mantenere la capacità di un segmento di bus al di sotto del valore consentito o per consentire a più dispositivi con lo stesso indirizzo di essere separati da un multiplexer. "

Con qualsiasi layout ragionevole non dovresti avere problemi di caricamento con 8 dispositivi MCPMCP23017.

GeertVc Aug 21 2020 at 12:45

Se sei preoccupato per una capacità del bus troppo alta, un fan-out troppo alto (se del tutto rilevante in questo caso ...) o se vuoi collegare più di 8 espansori IO MCP23017 all'RPi, allora c'è una soluzione molto semplice : collegare uno switch I2C come il PCA9548 (8 bus I2C) - o simile - ai pin I2C originali dell'RPi. Poiché il kernel Linux ha supporto implicito per questo da un paio d'anni, l'unica cosa che devi fare è aggiungere la seguente riga al file /boot/config.txt(as sudo):

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

In questo modo, avrai un extra di 8 bus I2C a cui puoi collegare i tuoi dispositivi extra (usa i2cdetect -lper vedere i bus extra ei loro nomi). L'unica cosa che devi fare nel tuo codice è dire al tuo software a quale /dev/i2c-xdispositivo sono collegati i tuoi dispositivi I2C.

Alcuni vantaggi:

  • Diffusione della capacità del bus
  • Non devi preoccuparti dei comandi di commutazione del MUX I2C, il modulo del kernel Linux lo fa per te in base al /dev/i2c-xbus.
  • Puoi aggiungere un totale di 64 dispositivi MCP23017 all'RPi (indirettamente, cioè), il che significa un totale (pazzo) di 64 x 16 = 1024 IO (cosa vuoi di più ...)
  • Importante : puoi lavorare con un mix di alimentatori "dall'altra parte" dell'I2C MUX. Può essere 3V3, ma anche 1V8 o 5V. Estremamente conveniente! Notare che l'estremità anteriore del MUX I2C deve obbedire all'alimentazione dell'RPi (cioè 3V3) per evitare danni ai pin di ingresso / uscita.

Svantaggio:

Sì, ce n'è uno: devi aggiungere hardware extra (anche se limitato) al tuo progetto ma ricevi molto indietro per questo piccolo sforzo extra.