I2C colgando después de 2 minutos

5

Información de fondo

Estoy diseñando una PCB pequeña para dispositivos 4 * I2C, la velocidad en baudios del I2C no es un problema importante, por lo que 100 kHz era el objetivo. Los dispositivos I2C son un RTC, LM75, 24AA04 y un MSP23017 para manejar un LCD, la placa se fabrica utilizando una máquina de fresado LPKF. Antes de poblar completamente el tablero, pensé que probaría 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 10K

Se han incluido algunas imágenes para darle una idea del diseño:

La imagen

1ª muestra la vista superior de la PCB (los puentes de dirección están en la parte superior derecha, todos conectados a tierra para la prueba)

LasegundaimagenmuestralostrazadosI2C,ladimensióndelacuadrículaquesemuestraesde1.27mm(J11alaizquierdaestáconectadaalpindelsistemaoperativo,perosedejaflotandoenestemomento)

El problema

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 aproximadamente 2 minutos y luego se cuelga, ambas líneas I2C se elevan. Para establecer un enlace nuevamente, encontré que enviar una dirección de esclavo alternativa varias veces y volver a la dirección correcta normalmente funciona, entonces ocurrirá lo mismo.

Una vez más, tengo algunas más imágenes para capturar el apretón de manos en mi osciloscopio:

La tercera imagen muestra la configuración (no es la mejor que conozco, ignora las resistencias de los puentes que se ajustaron originalmente 1k aquí y los enlaces de cortocircuito insertados como en la primera imagen))

Laimagen

4ªmuestralaprimeratrazadelosciloscopiocondatosválidosyalgunasconversacionescruzadasvisibles(conuncírculoenrojo).¿Valelapenapreocuparseporesteniveldeconversacionescruzadas?Buenapublicaciónqueestabaleyendosobreestetema En qué punto en el que la interferencia en I2C se convierte en un problema

Laimagen

5ªessolounabasedetiempomáspequeñaparaquelaformadeondasepuedaverconmásdetalle

Estaría realmente interesado en cualquier consejo posible, probablemente necesito volver a trabajar con la junta, pero cualquier sugerencia sobre las pruebas sería genial. He leído algunas publicaciones y tuve la impresión de que I2C en estas longitudes y velocidades bajas debería estar bien, ¡pero estoy seguro de que he cometido un error de novato!

Gracias de antemano, Hormiga

----UPDATE----

Encontré el problema finalmente una semana atrás, pero no tuve tiempo de publicar una actualización hasta ahora. Estaba convencido de que era mi PCB, pero resultó que solo estaba solicitando 1 byte del LM75A cuando necesitaba solicitar 2.

Todos los punteros en el hardware fueron increíblemente útiles, me permitieron mejorar el diseño y, finalmente, me decidí por los pull-ups 2k2, lo que mejoró la forma de onda I2C (imagen de abajo).

Acepté la única respuesta y también algunos de los comentarios, ya que todos demostraron ser útiles.

    
pregunta Ant

1 respuesta

1

Los pequeños fallos que ve hacia los extremos de los últimos dos bytes pueden deberse a que el maestro haya liberado la línea para que el esclavo pueda ACK. Si ese es el caso, no es interferencia, es algo que sucede con I2C. No debería ser un problema.

Sigo la sugerencia de probar pull-ups más rígidos y agregar un capacitor de derivación al LM75 si hay espacio para uno. Si se trata de una placa de circuito hecha en casa, también debe medir las resistencias de traza para verificar que la conexión sea buena. También puedes intentar reducir la tasa de bits. Si eso no ayuda, use su alcance para ver la última transferencia antes de que falle. Un modo de disparo no automático hará esto. Determine si fue ACKed o NAKed o algo más. Trate de averiguar cuántas transferencias se necesitan para producir el fallo. ¿Es el mismo número cada vez? ¿Las encuestas más de una vez por segundo hacen que el sistema falle antes?

    
respondido por el Adam Haun

Lea otras preguntas en las etiquetas