¿Longitud máxima de bus I2C?

34

¿Cuál es la longitud máxima del cable que se podría usar para conectar dos dispositivos I2C (I2C master- > I2C slave)?

Sí, sé que I2C está realmente diseñado para la comunicación dentro de la placa. Se me ha encomendado el "objetivo de diseño" de usar un bus I2C común para varios esclavos I2C para admitir una demostración.

Para mayor claridad, asumamos la velocidad de bus I2C estándar de 100 kHz.

    
pregunta Nate

5 respuestas

14

Para el modo rápido y la activación de la resistencia, la capacitancia debe ser inferior a 200 pF, según este documento NXP Especificación del bus I2C y manual del usuario .

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

Si su cable es de 20pF / 30cm y usted tiene otros 50pF de capacidad de entrada y desvío, está limitado a 2.25m de longitud de cable. Diferentes supuestos llevarán a diferentes números.

    
respondido por el Spehro Pefhany
14

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

La clave es conocer el umbral de voltaje de entrada. Asegúrese de que la caída de voltaje en el cable a tierra esté muy por debajo de esto, o de lo contrario, un transmisor con un potencial de tierra alto no podrá bajar el voltaje lo suficiente. Falta de tolerancia para las compensaciones en tierra La IMHO es la razón principal para usar RS485 o los transceptores de latas (I2C sobre CAN se menciona en algunas notas de la aplicación).

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.

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

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

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

He escuchado que los dispositivos deberían tener una resistencia en SDL y SCK, debido a la gran carga capacitiva que están manejando, de algo así como 180 o 200 ohmios.

Pero, honestamente, I2C no es el camino a recorrer para distancias largas. 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., a un costo de aproximadamente un dólar por chip, las compensaciones en tierra no importan tanto, por lo que son libre para llevar el poder junto con los datos.

El único inconveniente es que un transceptor puede alcanzar una transmisión de 70 mA y 1 o 2 mA solo escucha, por lo que I2C o UART TTL directo pueden ser útiles en situaciones de potencia extremadamente baja, pero considere cuánto tiempo pasa realmente enviando.

    
respondido por el EternityForest
6

Trabajo para una empresa que hace sensores USB. La mayoría de ellos se basan en chips de sensores I2C, estos 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 bastantes 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.

    
respondido por el martinm
4

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 para longitudes de cable I2C de 3m, 25m, 100m y 250m.

Hay otros chips que tienen una funcionalidad similar.

    
respondido por el Jeffrey Nichols
3

IIC es un protocolo síncrono y, como tal, puede ejecutarse de forma arbitraria y lenta para cumplir 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 nuevamente en el Década de 1990 a cómo se usa hoy para recuperar EDID de las pantallas de video.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas

Comentarios Recientes

No recomendamos que utilice campos de bits 0.1 frente a 0.1 a la vez. Por supuesto, para tokens más profundos en la codificación binaria, se pueden requerir 0.1 bits para establecer un número, pero sin una mejor definición de transferencias cortas y sin un reemplazo para ushort definitivamente no sabremos qué significa exactamente esto. Sin embargo, si usted no nos importan en absoluto los bits wei inconsistentes, los campos de 0.1 bits generalmente significan que los datos se mantienen dentro del direccionamiento... Lees verder