I2C no está diseñado para usarse a largas distancias, pero conozco varias aplicaciones en las que realmente se usa a una distancia de aproximadamente 2 metros. También sé de un caso en el que tuvieron problemas con eso y que eventualmente se solucionó arreglando bucles de tierra, creo.
Para asegurarse de que funcionará, debe usar un extensor de bus I2C como el P82B715.
Sin embargo, la hoja de datos del PB2B715 dice lo siguiente en la sección 8.2:
Para los cables planos o de par trenzado típicos, como los utilizados para telefonía o cableado Ethernet (Cat5e), esa capacitancia es de alrededor de 50 pF a 70 pF / metro, por lo que el cable podría, en teoría, tener hasta 50 m de largo . Según la experiencia práctica, 30 m han demostrado una longitud de cable segura para ser conducida de esta manera simple, hasta 100 kHz, con los valores mostrados. Son posibles distancias más largas y velocidades más altas, pero requieren un diseño más cuidadoso.
Entonces, los expertos (NXP es el ex Philips, el inventor de I2C) dicen que se ha comprobado que una distancia de 30 metros es factible. Mi experiencia dice que 2 metros es una distancia factible, y las experiencias que me informaron indican que también son posibles autobuses I2C más cargados sin ningún extensor.
Los puntos clave para trabajar en autobuses I2C en largas distancias son:
- Usando un cable de baja capacitancia (par trenzado / Ethernet);
- Limitar la velocidad del autobús;
- Tener dominadas que tengan el tamaño correcto.
Cálculo pullup
Texas Instruments tiene una buena nota de aplicación (SLVA689) sobre el cálculo de pull-up .
- El límite inferior del pullup (valor mínimo) está determinado por la corriente que puede extraer el periférico más débil del bus y el voltaje máximo que representa 0 para cualquier periférico. Entonces, si 1V sigue siendo 0, su VCC es máximo 3V6 y su dispositivo más débil solo puede extraer 20mA, su resistencia está determinada por la pérdida de voltaje sobre la resistencia y la corriente extraída por ese dispositivo: .( 3,6 V - 1 V ) / 20 m A = 130 Ω
- El límite superior está determinado por el tiempo de subida máximo: su frecuencia I2C máxima está directamente relacionada con eso, pero también hay un límite superior definido por el protocolo. El límite superior es . Donde es el tiempo de subida máximo y es la capacitancia del bus. Entonces, si es 400pF, y el bus está operando en modo estándar ( = 1ms), entonces encontrará . La nota de aplicación de TI tiene gráficos para que pueda encontrar los valores apropiados rápidamente.Rmax=tr/(0.8473∗Cb)trCbCbtrRmetroax= 2950 Ω
- Por supuesto, el valor del pullup es el valor equivalente de todos los pullups en paralelo combinados. Puede tener un pullup en el extremo maestro, el extremo esclavo y cualquier otro esclavo / maestro en el bus.
- Cuanto más esté "en el límite", más deberá tener en cuenta los "parásitos", como la caída de voltaje en el cable.