I2C velocidad de reloj mínima y confiabilidad

12

¿Existe una frecuencia de reloj mínima especificada por I2C? Sé que la frecuencia de reloj más utilizada es de 100kHz y hay un modo "rápido" de 400kHz compatible con algunos dispositivos, y un modo más rápido pero compatible con otros dispositivos (¿creo que 1MHz?). Dado que la señal SCK es generada por el maestro, supongo que uno podría operar a una velocidad mucho más lenta que cualquiera de ellas: ¿hay un límite inferior en la práctica? ¿En qué medida los dispositivos esclavos se preocupan por la velocidad del reloj (por ejemplo, es común que tengan tiempos de espera cortos)? La razón por la que pregunto es porque me pregunto si podría ejecutar I2C a una distancia mayor (por ejemplo, 20 pies) para programar EEPROM I2C de manera confiable en una configuración de probador de producción. Supongo que no funcionará de manera confiable en esa distancia a las velocidades de datos estándar.

vicatcu
fuente
El modo de alta velocidad permite un reloj de 3.4 MHz a máx. Capacitancia de bus de 100 pF.
stevenvh

Respuestas:

16

No, no hay una frecuencia mínima, la frecuencia mínima del reloj es 0 o DC. Consulte las especificaciones , página 48.

Pero deberá prestar atención a los tiempos de subida y bajada. Esos son 1000 ns y 300 ns como máximo, resp. Y un cable más largo, con algo de capacidad, influirá en los bordes, independientemente de la frecuencia.

Es esa capacitancia, junto con las resistencias pull-up lo que determinará el tiempo de subida. El tiempo de caída no es un problema porque el FET que baja la línea tiene una resistencia muy baja, y la constante de tiempo de caída también será muy baja. Entonces nos quedamos con el tiempo de subida. Para obtener un tiempo de subida de 1000 ns en un cable de 200 pF, sus resistencias pull-up no deben ser mayores de 2.2 kΩ. (tiempo de subida al 90% del valor final)

ingrese la descripción de la imagen aquí

El gráfico muestra la resistencia máxima de extracción (en Ω) frente a la capacitancia del cable (en pF) para obtener bordes ascendentes de 1000 ns. Tenga en cuenta que los dispositivos I2C no tienen que hundir más de 3 mA, por lo tanto, a 3.3 V, la capacitancia del bus no debe ser superior a aproximadamente 395 pF; de lo contrario, la resistencia de pull-up debería ser menor a 1100 Ω y permitir más que los 3 mA. Esas son las líneas discontinuas verdosas. Para la operación de 5 V, la capacidad permitida es incluso de 260 pF, para un valor de extracción de 1667 Ω (las líneas discontinuas de color púrpura).

stevenvh
fuente
¿Quién dice que el dispositivo I2C puede hundir un máximo de 3 mA? Mis dispositivos I2C tienen VOL = 0,4 V para IOL = 20mA. Esto significa que puede absorber mucha más corriente, por lo que las resistencias pull-up pueden ser más pequeñas. Esto hace que se pueda manejar más capacitancia. @stevenvh
Kono
Un ejemplo son los esclavos Arduino. Pueden hundirse hasta 10 mA antes de VOL = 0,4-0,5V. Esto significa que pueden conducir autobuses cargados mucho más altos.
Kono
La mayoría de los dispositivos I2C pueden hundir solo 3 mA, pero hoy en día hay muchos más dispositivos con más capacidades de sumidero. ¡Suerte!
Kono
4

He ejecutado I2C a aproximadamente 100Hz sin ningún problema. Como dijo @stevenvh, solo preocúpese por la velocidad máxima y la capacitancia de línea.

Sergio Sena
fuente
2
Tengo un solo paso i2c. Eso no garantiza que cada dispositivo que encuentre se haga de esa manera, pero técnicamente no hay nada que evite que funcione "hasta DC".
gbarry
4

Debería poder resolver los problemas de longitud de línea con una selección cuidadosa de los controladores y la coincidencia de impedancia.

Otra opción, suponiendo que el largo plazo sea parte de la configuración y no del producto, podría ser usar algo que maneje bien la distancia, como RS422 (o prácticamente hablando incluso RS232) para hablar con un microcontrolador colocado en el conector del arnés de prueba, que luego hablaría i2c en una distancia bastante corta al objetivo.

O probablemente podría hacerlo sin la inteligencia, utilizando una pequeña placa que conectó un protocolo de señalización diferencial con receptores de activación Schmidt hacia y desde la señalización i2c en el objetivo.

Es probable que sus ejecuciones no sean lo suficientemente largas como para que los tiempos de propagación de la señal (en ausencia de problemas de establecimiento) requieran velocidades de reloj particularmente lentas para evitar girar el autobús mientras los datos antiguos aún están en vuelo.

Por supuesto, querrá hacer una verificación de lectura de los datos que acaba de programar.

Solo a modo de comparación, los monitores VGA IIRC tienen una lectura de ID i2c (o similar a i2c), que probablemente todavía funcione si agrega un cable de extensión de 6 pies al cable de 3 o 4 pies de serie.

Chris Stratton
fuente