5 votos

I2C colgado después de 2 minutos

Información de fondo

Estoy diseñando una pequeña PCB para 4* dispositivos I2C, la tasa de baudios del I2C no es un problema importante así que 100kHz era el objetivo. Los dispositivos I2C son un RTC, un LM75, un 24AA04 y un MSP23017 para manejar un LCD, la placa está hecha con una fresadora LPKF. Antes de llenar por completo la placa pensé en probar uno de los dispositivos y el LM75 parecía la opción más fácil. Edición rápida: VCC es 5V y los Pull-Ups son ambos de 10K

He incluido algunas imágenes para que te hagas una idea de la disposición:

la imagen muestra la vista superior de la PCB (puentes de dirección en la parte superior derecha, todos conectados a tierra para las pruebas) enter image description here

2do. la imagen muestra las trazas I2C, la dimensión de la rejilla mostrada es de 1,27mm (J11 a la izquierda está conectada al pin OS, pero se deja flotante por el momento) enter image description here

El tema

Estoy probando esto con un Arduino Uno (5V VDD) con un código muy simple que sondea el LM75 cada segundo. Establecer una lectura válida es intermitente, pero una vez establecido funciona bien durante unos 2 minutos y luego se cuelga, ambas líneas I2C van alto. Para establecer un enlace de nuevo he encontrado el envío de una dirección de esclavo alternativo un par de veces y volver a la dirección correcta por lo general funciona, entonces lo mismo va a suceder.

De nuevo tengo algunas imágenes más como captura del handshaking en mi osciloscopio:

la imagen muestra la configuración (no es la mejor que conozco, ignorar las resistencias por los puentes originalmente instalado 1k aquí y los enlaces de cortocircuito insertado como por la primera imagen)) enter image description here

4ª. La imagen muestra la primera traza del osciloscopio con datos válidos y algo de interferencia visible (marcada con un círculo rojo), ¿merece la pena preocuparse por este nivel de interferencia? Buen post que estaba leyendo sobre este tema ¿En qué momento la diafonía en I2C se convierte en un problema? enter image description here

la imagen es sólo una base de tiempo más pequeña para que la forma de onda se pueda ver con más detalle enter image description here

Estaría realmente interesado en cualquier consejo posible, probablemente necesite rehacer la placa pero cualquier sugerencia sobre las pruebas sería genial. ¡He leído algunos post y estaba bajo la impresión de I2C en estas longitudes y velocidades bajas debe estar bien, pero bastante seguro de que he hecho un error de novato!

Gracias por adelantado, Hormiga

----UPDATE----

Encontré el problema hace una semana más o menos, pero no tuve tiempo de publicar una actualización hasta ahora. Estaba convencido de que era mi PCB, pero resulta que sólo estaba solicitando 1 byte de la LM75A, cuando tenía que solicitar 2.

Todas las indicaciones sobre el hardware fueron increíblemente útiles, me permitieron mejorar el diseño y finalmente me decidí por pull-ups de 2k2, lo que mejoró la forma de onda I2C (imagen inferior).

enter image description here

He aceptado la única respuesta y también algunos de los comentarios, ya que todos han resultado útiles.

1voto

Al pacino Puntos 415

Los pequeños fallos que ves hacia el final de los dos últimos bytes podrían deberse a que el maestro libera la línea para que el esclavo pueda ACK. Si ese es el caso, no es diafonía, es algo que ocurre con I2C. No debería ser un problema.

Secundo la sugerencia de probar pull-ups más rígidos y añadir un condensador de bypass al LM75 si hay espacio para uno. Si se trata de una placa de circuito hecha en casa, también deberías medir las resistencias de las trazas para verificar que la conexión es buena. También podrías intentar reducir la tasa de bits. Si eso no ayuda, usa el osciloscopio para ver la última transferencia antes del fallo. Un modo de disparo no automático hará esto. Determina si fue ACKed o NAKed o algo más. Intenta averiguar cuántas transferencias se necesitan para producir el fallo. ¿Es el mismo número cada vez? ¿El sondeo más frecuente que una vez por segundo hace que el sistema falle antes?

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