Depuración del protocolo I2C usando un osciloscopio

0

Estamos probando un acelerómetro I2C conectado al microcontrolador ATMega32A. El acelerómetro funcionaba bien. Podemos escribir y leer los registros utilizando el protocolo I2C. Cuando está conectado al osciloscopio, nos resulta muy difícil descodificar las señales al valor normal.

Solo estamos escribiendo un valor 0x08 ( 00001000 ) en el registro 0x10 ( 00010000 ).

Según el protocolo I2C, después de la condición de inicio tenemos que escribir SLA + W (dirección de esclavo + comando de escritura). La dirección del esclavo de 8 bits con comando de escritura para el acelerómetro es 0x30 ( 00110000 ).

Los datos I2C deben ser así

0 0 1 1 0 0 0 0       0(ack)      0 0 0 1 0 0 0 0     0(ack)     0 0 0 0 1 0 0 0     0(ack)

0 (ack) es el reconocimiento del esclavo I2C (acelerómetro). Sin embargo, la señal que obtuvimos del osciloscopio no da ninguna pista

El reloj y la configuración de I2C son los siguientes

  • Reloj del controlador: reloj interno de 4 MHz
  • Frecuencia I2C: 100 kHz
  • Resistencias pull-up: 4.7 kOhms

Aquí está la imagen de las líneas I2C-clock (Señal amarilla) y I2C-data (Señal azul).

Realmente necesito la mano de alguien para ayudar en la decodificación

    
pregunta gzix

1 respuesta

-1

Debido a que I2C no usa un reloj continuo, siempre es un poco difícil sincronizar y capturar un mensaje, pero es factible, y 100 Khz no es una tasa extrema. Ahora, si estuviera desarrollando un conjunto de nuevas rutinas de interfaz I2C desde cero para una nueva biblioteca, definitivamente querrá reducir la velocidad aún más hasta que se pruebe el código. Sin embargo, si está utilizando rutinas probadas existentes, es posible que desee reducir la velocidad de todas formas por ahora, porque por los rastros que ha capturado, ¡puedo decirle que estos bordes son terribles! Dudo que cualquier receptor I2C pueda decodificar una señal como esa con cualquier grado de confiabilidad.

Me gustaría esperar, como han sugerido otros, que su tasa de muestreo de alcance es demasiado baja. Pero si cada uno de esos "estantes" pequeños en las líneas verticales son muestras, entonces parece que la velocidad de giro de la señal se está atascando. Además de reducir la velocidad del reloj I2C, es posible que tenga que usar resistores de levantamiento más rígidos, asegúrese de colocarlos en todos los dispositivos a lo largo de la cadena y, lamentablemente, incluso tenga que volver a examinar las huellas de su PCB. ¿Son trazas largas sobre un plano de tierra? ¿Existen otras fuentes de resistencia en serie o capacitancia en derivación en estas líneas I2C?

Debería echar un vistazo con un alcance analógico de 100Mhz si puede, con sondas X10 por supuesto, aunque solo sea para ver si estos bordes son realmente tan malos como parecen, o simplemente un truco del alcance. Haga todo lo que pueda para acelerar estos bordes y averiguar por qué están tan mal definidos. ¡Realmente no quieres ver ningún ejemplo de picos no planos!

    
respondido por el Randy

Lea otras preguntas en las etiquetas