Longitud máxima del bus I2C?

38

¿Cuál es la longitud máxima de cable que podría usarse para conectar dos dispositivos I2C (maestro I2C-> esclavo I2C)?

Sí, sé que I2C está realmente diseñado para la comunicación interna. Se me ha encomendado una "meta de diseño" de usar un bus I2C común para múltiples esclavos I2C para admitir una demostración.

Por motivos de claridad, supongamos que la velocidad del bus I2C estándar es de 100 kHz.

Nate
fuente
1
La longitud máxima viene a jugar con la capacitancia introducida por la longitud. Demasiada capacitancia y podría afectar su velocidad. Entonces, como siempre, esto depende.
Gustavo Litovsky
@GustavoLitovsky Tienes razón sobre la capacitancia. También depende del tipo de cables que se usen (apantallados frente a no apantallados). Estoy más interesado en una guía general.
Nate
2
Directriz @Nate: capacidad máxima del bus neto de 400pF. (Algo relacionado con la pregunta: Memorias de un autobús I2C cubierto ).
Nick Alexeev
1
I2C = bus de circuito interintegrado. No está diseñado para largas distancias entre cajas, y ciertamente no a 400kHz.
Spehro Pefhany
1
Solo quería aportar algo de experiencia personal aparte de los cálculos. He hecho una demostración que va de una placa de desarrollo a un convertidor I2C a USB con un cable sin blindaje de aproximadamente 3 pies. No se veía bonito, pero funcionó el 90% del tiempo.
mcmiln

Respuestas:

16

Para el modo rápido y el pullup de resistencia, la capacitancia debe ser inferior a 200pF, de acuerdo con este documento NXP, especificación del bus I2C y manual del usuario .

Con pullups de fuente actual puede ir a 400pF, pero no con resistencias.

Si su cable mide 20pF / 30cm y tiene otros 50pF de capacitancia parásita y de entrada, está limitado a 2.25m de longitud de cable. Supuestos diferentes conducirán a números diferentes.

Spehro Pefhany
fuente
1
@ KrunalDesai Se menciona específicamente en el documento NXP vinculado anteriormente. I2C-bus especificación y manual de usuario
Spehro Pefhany
1
Para un ejemplo del mundo real, el "Wiimote" de Nintendo Wii utiliza IkC de 400 kHz ( wiibrew.org/wiki/Wiimote/Extension_Controllers ) para comunicarse con periféricos como el Nunchuk ( wiibrew.org/wiki/Wiimote/Extension_Controllers/Nunchuck ) que, como puedes ver, tiene un cable de aproximadamente 1 m. Los extensores pasivos se venden para dar un 1m adicional ( amazon.com/Extension-Cable-Wii-Nunchuck-Nintendo/dp/B0039OEV9K ), por lo que están presionando, pero se mantienen dentro de ese límite de 2.25m.
Rob Starling
16

Las longitudes de sonido locas como 10,25 y 100m son perfectamente posibles, y uso el método a menudo (con UART no I2C, pero el método permanece) cuando necesito armar cosas rápidamente. Sin embargo, no es exactamente la mejor manera.

La clave es conocer su umbral de voltaje de entrada. Asegúrese de que la caída de voltaje en el cable de conexión a tierra esté muy por debajo de esto, de lo contrario, un transmisor con un alto potencial de conexión a tierra no podrá tirar del voltaje lo suficientemente bajo. Falta de tolerancia para las compensaciones de tierra En mi humilde opinión, la razón principal para usar transceptores RS485 o de lata (en algunas notas de aplicación se menciona I2C sobre CAN).

Idealmente, todos los dispositivos tendrán su propia verruga de pared y batería y no se enviará energía a través del cable de tierra entre los dispositivos.

Pero, tomemos CAT5 por ejemplo. CAT5 no puede ser superior a 52pf / m, o no es CAT5.

100 m de cable de 52pf tienen una capacidad de 5200pf o 5.2nf.

5.2n veces 20kohms (pullup) da una constante de tiempo de aproximadamente 104 microsegundos. Eso limita la velocidad a aproximadamente 10kHz más o menos.

Usando pullups de 2.2kohm, probablemente podría llegar a 100kHz.

Escuché que los dispositivos deberían tener una resistencia en SDL y SCK, debido a la gran carga capacitiva que conducen, de algo así como 180 o 200 ohmios.

Pero, sinceramente, I2C no es el camino a seguir para largas distancias. Los transceptores CAN o RS485 utilizados con UART normal son una solución robusta con muy buena protección contra fallas, resistencia ESD, velocidad, distancia, etc. libre de transportar energía junto con datos.

El único inconveniente es que un transceptor de lata puede alcanzar 70 ma de transmisión y 1 o 2 ma solo escuchar, por lo que I2C o TTL UART directo pueden ser útiles en situaciones de baja potencia extrema, pero tenga en cuenta cuánto tiempo realmente pasa enviando.

EternidadBosque
fuente
7

Trabajo para una empresa que fabrica sensores USB. La mayoría de ellos se basan en chips sensores I2C, esos dispositivos se pueden dividir en dos, por lo que puede instalar la parte de la CPU en un lugar y la parte del sensor en otro. Realizamos muchas pruebas en la conexión I2C entre la CPU del dispositivo y los sensores I2C. A 100 kHz, con un buen protocolo de recuperación de errores, se puede llegar fácilmente a 25 m utilizando cables básicos. Incluso pudimos alcanzar los 100 m una vez con el cable CAT5.

martinm
fuente
Parece que estás hablando de la longitud del cable USB . El OP pregunta por el cableado de I2C sin procesar . Este es un tema completamente diferente. Si soy incorrecto, edite su respuesta y eliminaré mi voto negativo.
DoxyLover
1
25m es bastante incluso para un usb ...
Vladimir Cravero
3
No, realmente estoy hablando de la conexión I2C entre la CPU del dispositivo y los chips del sensor I2C, no la conexión USB entre el host y la CPU. Aquí hay un ejemplo: yoctopuce.com/EN/products/yocto-meteo/doc/…
martinm
1
Si quisieras usar un par trenzado para I2C y potencia, ¿qué par girarías juntos? (SDA, SCL), (VCC, GND) o (SDA, GND), (SCL, VCC)?
Cano64
44
Idealmente, no usa par trenzado en absoluto. El par trenzado es útil para señales balanceadas. Si no tiene ningún otro cable, gire la señal con tierra. Si realmente solo tiene cuatro cables, piense en la cantidad de energía que consume el extremo remoto (puede terminar con una compensación de tierra más alta que la tolerable) antes de comprometerse a usar solo un cable para GND. Por lo general, uso un cable Cat5 antiguo (¡no más alto! El doble blindaje agrega capacidad que no necesita) con un par de tierra, un par + 5V y pares SDA + GND y SCL + GND.
Matthias Urlichs
5

Algo como el P82B96 de NXP podría usarse para cambiar los niveles de voltaje en el bus, permitiendo distancias mucho más largas.

La hoja de datos contiene ejemplos de longitudes de cable I2C de 3 m, 25 m, 100 my 250 m.

Hay otros chips que tienen una funcionalidad similar.

Jeffrey Nichols
fuente
El problema con el chip NXP es que terminas requiriendo el doble de cables. ¿Alguna otra idea? los circuitos integrados bidireccionales que he encontrado no superan los + 5V.
Matthias Urlichs
4

IIC es un protocolo síncrono y, como tal, se puede ejecutar arbitrariamente lentamente para cumplir con los requisitos del sistema con respecto a la distancia y el ruido.

Hay muchos ejemplos de uso de IIC a través de un cable, desde ACCESS.bus en la década de 1990 hasta cómo se usa hoy para recuperar información EDID de pantallas de video.

Dave Tweed
fuente
Otro ejemplo es el Wii Nunchuck, que se conectó al Wii Remote a través de I²C usando un cable blindado de 4 pies.
tcrosley