54 votos

¿Longitud máxima del bus I2C?

¿Cuál es la longitud máxima de cable que se puede utilizar para conectar dos dispositivos I2C (maestro I2C-> esclavo I2C)?

Sí, ya sé que I2C está realmente diseñado para la comunicación intraplaca. Me han encargado un "objetivo de diseño" de utilizar un bus I2C común para múltiples esclavos I2C para apoyar una demostración.

Para mayor claridad, vamos a suponer que la velocidad estándar del bus I2C es de 100 kHz.

1 votos

La longitud máxima viene yo a jugar con la capacitancia introducida por la longitud. Demasiada capacitancia y podría afectar a la velocidad. Así que como siempre, esto depende.

0 votos

@GustavoLitovsky Tienes razón en cuanto a la capacitancia. También depende del tipo de cables que se utilicen (apantallados vs no apantallados). Lo que más me interesa es una orientación general.

2 votos

@Nate Directriz: capacitancia neta máxima del bus de 400pF. (Algo relacionado con la pregunta: Memorias de un bus I2C sobredimensionado .)

25voto

DrYak Puntos 484

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

La clave es conocer el umbral de tensión de entrada. Asegúrate de que la caída de tensión en el cable de tierra está muy por debajo de éste, o de lo contrario un transmisor con un alto potencial de tierra no podrá bajar la tensión lo suficiente. La falta de tolerancia a las desviaciones de tierra, en mi opinión, es la mayor razón para utilizar transceptores RS485 o CAN (I2C sobre CAN se menciona en algunas notas de aplicación).

Lo ideal es que todos los dispositivos tengan su propio cable de pared y su propia batería y que no se envíe energía por el cable de tierra entre los dispositivos.

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

100m de cable de 52pf tienen una capacitancia de 5200pf o 5,2nf.

5,2n por 20kohms (pullup) da una constante de tiempo de unos 104 microsegundos. Eso limita la velocidad a unos 10kHz más o menos.

Usando pullups de 2,2kohm, probablemente podrías llegar a los 100kHz.

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

Pero honestamente, I2C no es en absoluto el camino a seguir para largas distancias. Los transceptores CAN o RS485 utilizados con UART normales son una solución robusta con muy buena protección contra fallos, resistencia ESD, velocidad, distancia, etc, a un coste de un dólar el chip o así, las compensaciones de tierra no importan casi nada, así que eres libre de llevar energía junto con los datos.

El único inconveniente es que un transceptor de lata puede llegar a 70ma transmitiendo y 1 o 2ma sólo escuchando, por lo que I2C o TTL UART directo podrían ser útiles en situaciones de extrema baja potencia, pero considera cuánto tiempo pasas realmente enviando.

0 votos

Un poco fuera de tema, pero veo que la Raspberry Pi tiene 2 pines I2C y el resto son SPI visto aquí . ¿Sabe usted si habría alguna diferencia en estos pines?

23voto

Spehro Pefhany Puntos 90994

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

Con los pullups de fuente de corriente se puede llegar a 400pF, pero no con las resistencias.

Si tu cable es de 20pF/30cm y tienes otros 50pF de capacitancia perdida y de entrada, estás limitado a 2,25m de longitud de cable. Las diferentes suposiciones conducirán a números diferentes.

1 votos

@KrunalDesai Se menciona específicamente en el documento de NXP enlazado anteriormente. Especificación del bus I2C y manual de usuario

3 votos

Para un ejemplo del mundo real, el "Wiimote" de la Nintendo Wii utiliza I2C de 400kHz ( wiibrew.org/wiki/Wiimote/Controladores_de_extensión ) para comunicarse con periféricos como el Nunchuk ( wiibrew.org/wiki/Wiimote/Extension_Controllers/Nunchuck ) que, como puede ver, tiene un cable de aproximadamente 1 m. Se venden extensores pasivos que dan 1m adicional ( amazon.com/Cable de extensión-Wii-Nunchuck-Nintendo/dp/B0039OEV9K ), por lo que están empujando, pero manteniéndose dentro de ese límite de 2,25 m.

13voto

Trabajo en una empresa que fabrica sensores USB. La mayoría de ellos se basan en chips de sensores I2C, esos dispositivos se pueden dividir en dos, de modo que se puede instalar la parte de la CPU en un lugar y la parte del sensor en otro. Hicimos bastantes pruebas con 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 pueden alcanzar fácilmente 25m utilizando cables básicos. Incluso fuimos capaces de alcanzar 100m una vez con cable CAT5.

0 votos

Parece que estás hablando de USB longitud del cable. El OP está preguntando sobre el cableado crudo I2C. Este es un tema totalmente diferente. Si me equivoco, edita tu respuesta y eliminaré mi voto negativo.

1 votos

25m es mucho incluso para un usb...

7 votos

No, en realidad estoy hablando de la I2C conexión entre la CPU del dispositivo y los chips sensores I2C, no la conexión USB entre el host y la CPU. Aquí hay un ejemplo: yoctopuce.com/ES/productos/yocto-meteo/doc/

7voto

pnewhook Puntos 101

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

El hoja de datos contiene ejemplos para longitudes de cable I2C de 3m, 25m, 100m y 250m.

Hay otros chips que tienen una funcionalidad similar.

0 votos

El problema del chip de NXP es que acaba necesitando el doble de cables. ¿Alguna otra idea? Los CI bidireccionales que he encontrado no pasan de +5V.

5voto

GSerg Puntos 33571

El IIC es un protocolo síncrono y, como tal, puede ejecutarse con una lentitud arbitraria para cumplir los requisitos del sistema en cuanto a distancia y ruido.

Hay muchos ejemplos de uso de IIC en un cable, desde ACCESO.bus en la década de 1990 a cómo se utiliza hoy en día para recuperar EDID información de las pantallas de vídeo.

1 votos

Otro ejemplo es el Nunchuck de Wii, que se conecta al mando de Wii a través de I²C mediante un cable apantallado de 4 pies.

0 votos

Mientras que en teoría se podrían cronometrar los protocolos síncronos de forma arbitrariamente lenta, esto en realidad no es cierto para I2C en general, de ahí que este consejo sea malo. La razón es que muchos chips I2C tienen una frecuencia SCL mínima soportada debido a detalles de implementación específicos del proveedor. Esto lleva a que no se puedan sincronizar dichos ICs con frecuencias inferiores a 70-100 Khz (límite real que se encuentra en los manuales correspondientes, por supuesto). No todos los chips I2C tienen este límite inferior de frecuencia SCL, pero bastantes lo tienen.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X