¿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.
Respuestas:
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.
fuente
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.
fuente
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.
fuente
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.
fuente
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.
fuente