¿Por qué un bus I2C requiere un valor mínimo de capacitancia en el reloj para funcionar?

2

Tengo un microcontrolador (LPC1768FBD100) y estoy usando I2C para configurar un conmutador de Internet de 3 puertos (KSZ8863RLLI). He hecho unas 100 tablas hasta ahora y todas han funcionado bien, excepto una. Por alguna razón, la configuración del switch (realizada a través de la interfaz I2C) está fallando. Al sondear las señales de control con un osciloscopio, de repente cobró vida. En una inspección más cercana, parece que agregar la capacitancia de la sonda (15pF) a la línea del reloj es suficiente para que todo funcione.

Si entiendo el bus I2C correctamente, oficialmente no necesita un valor mínimo de capacitancia de línea para que funcione, pero ¿hay algún tipo de valor mínimo de capacitancia para un funcionamiento confiable?

======= Especificaciones / Notas =======

Velocidad de reloj I2C = 370kHz.

I2C pull up resistors = 4k7.

Los

Pull up están ubicados cerca del microcontrolador.

I2C Clock Length = 91mm.

Longitud de datos I2C = 78 mm.

No hay fuentes de ruido cercanas que puedan estar interfiriendo con el reloj y ambas trazas se ejecutan junto a un plano de tierra continuo.

======= Pruebas =======

Intenté reducir la velocidad del reloj a 100kHz, no funcionó.

Probé 1k, 4k7, 10k, 47k resistencia a la tracción. Ninguno funcionó

Intenté agregar 8pF de capacidad de conexión a tierra al pullup del reloj 4k7, no funcionó.

Intenté agregar 16pF de capacidad de conexión a tierra al pullup del reloj 4k7, el sistema funciona y arranca de manera confiable.

Cuando reviso el reloj y las líneas de señal de datos, no hay signos de timbre. Sin embargo, creo que potencialmente podría haber algún sonido que el 15 pF de la capacidad de la sonda está ocultando.

========= INFORMACIÓN ACTUALIZADA =========

Estamos utilizando la implementación de hardware de I2C integrada en el LPC1768FBD100

No creo que sea un problema mecánico. He reflejado todas las uniones y cuando pruebo la línea, lo hago en un punto de prueba, no en una conexión de soldadura.

Con respecto al ruido y la conversación cruzada, mi intuición me dice que no es el problema, ya que las trazas no son tan largas (~ 80 mm), se ejecutan adyacentes a un plano de tierra continuo y estoy usando pull ups de 4k7. Aunque podría estar equivocado.

Formas de onda. Notaciones añadidas a cada captura de pantalla.

TrazasI2C.Elenrutamientonoesmío.Heredéestodeotroingeniero.

    
pregunta philby

1 respuesta

6

Puedo pensar en tres posibles mecanismos que pueden hacer que el sistema comience a funcionar si tocas la línea SCL con una sonda de osciloscopio. Los tres indican una falla en la unidad.

Primero, puede tratarse de un problema mecánico, como una soldadura defectuosa. Cuando lo empujas con la sonda, puede reparar la conexión y la señal comienza a fluir.

Segundo, puede ser un problema de ruido; la interferencia, el ruido acoplado de cualquier fuente y la aplicación de la capacitancia de la sonda amortiguan ese ruido. Pero eso significaría que las resistencias de pull-up de su bus I2C son demasiado pequeñas. Deberían ser algo así como unos cuantos kilo-ohmios.

Tercero, sus señales SCL y SDA pueden estar cambiando al mismo tiempo, lo cual es un no-no en el bus I2C. No debe cambiar ambos estados de señal en la misma operación; debe haber un retardo de tiempo entre cualquier borde en la señal SDA a cualquier borde en la señal SCL. Si ambos conmutan al mismo tiempo, la aplicación de la capacitancia de la sonda a SCL puede retrasar el borde SCL lo suficiente como para que los datos de entrada del dispositivo I2C se estabilicen antes de ver el borde en la señal del reloj. Y este mecanismo de falla indicaría un error en su código del microcontrolador.

Editar: Para una referencia, aquí hay una imagen de una forma de onda i2c adecuada de la hoja de datos del microcontrolador que está utilizando el autor de la pregunta.

Fuentedelaimagen:LPC1769 hoja de datos página 59

    
respondido por el PkP

Lea otras preguntas en las etiquetas