Lunghezza massima del bus I2C?


38

Qual è la lunghezza massima del cavo che potrebbe essere utilizzata per collegare due dispositivi I2C (I2C master-> I2C slave)?

Sì, so che I2C è davvero progettato per la comunicazione intra-board. Mi è stato assegnato un "obiettivo di progettazione" di utilizzare un bus I2C comune per più slave I2C per supportare una demo.

Per motivi di chiarezza, supponiamo che il bus I2C standard sia di 100 kHz.


1
La lunghezza massima arriva per giocare con la capacità introdotta dalla lunghezza. Troppa capacità e potrebbe influire sulla velocità. Quindi, come sempre, questo dipende.
Gustavo Litovsky,

@GustavoLitovsky Hai ragione sulla capacità. Dipende anche dal tipo di cavi utilizzati (schermati e non schermati). Sono più interessato a una linea guida generale.
Nate,

2
@Nate Guideline: capacità netta massima del bus di 400pF. (In qualche modo correlato alla domanda: memorie di un bus I2C invaso .)
Nick Alexeev

1
I2C = bus circuito integrato. Non è progettato per lunghe distanze tra le scatole e certamente non a 400kHz.
Spehro Pefhany,

1
Volevo solo mettere in qualche esperienza personale a parte i calcoli. Ho fatto una demo passando da una scheda di sviluppo a un convertitore da I2C a USB con un filo non schermato di circa 3 piedi. Non sembrava carino, ma ha funzionato il 90% delle volte.
mcmiln,

Risposte:


16

Per la modalità veloce e il pullup della resistenza, la capacità dovrebbe essere inferiore a 200pF, secondo questo documento NXP sulle specifiche del bus I2C e sul manuale dell'utente .

Con i pullup di sorgenti attuali puoi andare a 400pF, ma non con resistori.

Se il tuo filo è 20pF / 30 cm e hai altri 50pF di capacità parassita e di ingresso, hai un limite di 2,25 m di lunghezza del cavo. Diverse ipotesi porteranno a numeri diversi.


1
@KrunalDesai È specificamente menzionato nel documento NXP linkato sopra. Specifiche del bus I2C e manuale utente
Spehro Pefhany,

1
Per un esempio reale, il "Wiimote" di Nintendo Wii utilizza I2C a 400kHz ( wiibrew.org/wiki/Wiimote/Extension_Controllers ) per comunicare con periferiche come il Nunchuk ( wiibrew.org/wiki/Wiimote/Extension_Controllers/Nunchuck ) che, come puoi vedere, ha un cavo che è di circa 1 m. Gli extender passivi vengono venduti per dare 1 m in più ( amazon.com/Extension-Cable-Wii-Nunchuck-Nintendo/dp/B0039OEV9K ), quindi stanno spingendo, ma restando entro quel limite di 2,25 m.
Rob Starling

16

Le lunghezze del suono folle come 10,25 e 100m sono perfettamente possibili, e uso spesso il metodo (con UART non I2C, ma il metodo è valido) quando ho bisogno di mettere insieme le cose rapidamente. Non è esattamente il modo migliore, però.

La chiave è conoscere la soglia della tensione di ingresso. Assicurarsi che la caduta di tensione nel cavo di massa sia ben al di sotto di questa, altrimenti un trasmettitore con un potenziale di terra elevato non sarà in grado di abbassare la tensione abbastanza in basso. Mancanza di tolleranza per offset di messa a terra L'IMHO è il motivo principale per utilizzare i transceiver RS485 o can (I2C su CAN è menzionato in alcune note di applicazione).

Idealmente, tutti i dispositivi avranno la propria verruca a muro e la batteria e nessuna alimentazione verrà inviata attraverso il filo di terra tra i dispositivi.

Ma prendiamo ad esempio CAT5. CAT5 non può essere superiore a 52pf / m o non è CAT5.

100 m di cavo 52pf hanno una capacità di 5200pf o 5,2nf.

5,2n volte 20kohms (pullup) fornisce una costante di tempo di circa 104 microsecondi. Ciò limita la velocità a circa 10 kHz o giù di lì.

Usando i pullup da 2,2kohm, probabilmente potresti arrivare a 100kHz.

Ho sentito che i dispositivi dovrebbero avere una resistenza su SDL e SCK, a causa del grande carico capacitivo che stanno guidando, di qualcosa come 180 o 200 ohm.

Ma onestamente, I2C non è affatto la strada da percorrere per lunghe distanze. I ricetrasmettitori CAN o RS485 utilizzati con UART normale sono una soluzione robusta con un'ottima protezione dai guasti, resistenza ESD, velocità, distanza, ecc., Al costo di circa un dollaro un chip o giù di lì, gli offset a terra non contano tanto quanto te libero di trasportare energia insieme ai dati.

L'unico aspetto negativo è che un ricetrasmettitore di lattine può raggiungere 70ma di trasmissione e 1 o 2ma solo in ascolto, quindi I2C o UART TTL diretto potrebbero essere utili in situazioni di bassissima potenza, ma considera quanto tempo impieghi effettivamente a inviare.


7

Lavoro per un'azienda che produce sensori USB. La maggior parte di essi si basa su chip del sensore I2C, i dispositivi possono essere divisi in due, quindi è possibile installare la parte CPU in un punto e la parte sensore in un altro. Abbiamo condotto numerosi test sulla connessione I2C tra la CPU del dispositivo e i sensori I2C. A 100 kHz, con un buon protocollo di recupero errori, 25m possono essere facilmente raggiunti usando cavi di base. Siamo riusciti persino a raggiungere i 100m una volta con il cavo CAT5.


Sembra che tu stia parlando della lunghezza del cavo USB . L'OP sta chiedendo di cablare I2C grezzo . Questo è un argomento completamente diverso. Se non sono corretto, modifica la tua risposta e rimuoverò il mio voto negativo.
DoxyLover,

1
25m è abbastanza anche per un usb ...
Vladimir Cravero,

3
No, sto davvero parlando della connessione I2C tra la CPU del dispositivo e i chip del sensore I2C, non della connessione USB tra l'host e la CPU. Ecco un esempio: yoctopuce.com/EN/products/yocto-meteo/doc/…
martinm

1
Se volessi usare la coppia twistata per I2C e potenza, quale coppia faresti insieme? (SDA, SCL), (VCC, GND) o (SDA, GND), (SCL, VCC)?
Cano64,

4
Idealmente, non usi affatto i doppini. La coppia intrecciata è utile per segnali bilanciati. Se non si dispone di altri cavi, attorcigliare il segnale con terra. Se hai davvero solo quattro fili, pensa a quanta energia consuma l'estremità remota - potresti finire con un offset di terra superiore a quello tollerabile - prima di impegnarti a usare solo un filo per GND. Di solito uso un vecchio cavo Cat5 (non più alto! Il doppio schermo aggiunge capacità che non ti serve) con una coppia di terra, una coppia + 5V e SDA + GND e SCL + GND.
Matthias Urlichs,

5

Qualcosa come il P82B96 di NXP potrebbe essere utilizzato per modificare i livelli di tensione sul bus, consentendo distanze molto più lunghe.

Il foglio dati contiene esempi di cavi I2C di 3m, 25m, 100m e 250m.

Esistono altri chip con funzionalità simili.


Il problema con il chip NXP è che si richiede il doppio dei cavi. Altre idee? i circuiti integrati bidirezionali che ho trovato non vanno oltre + 5V.
Matthias Urlichs,

4

IIC è un protocollo sincrono e, come tale, può essere eseguito arbitrariamente lentamente per soddisfare i requisiti di sistema in termini di distanza e rumore.

Esistono molti esempi di utilizzo di IIC su un cavo, da ACCESS.bus negli anni '90 a come viene utilizzato oggi per recuperare informazioni EDID dai display video.


Un altro esempio è il Wii Nunchuck, collegato al telecomando Wii tramite I²C mediante un cavo schermato da 4 piedi.
tcrosley,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.