Problema con la comunicación I2C EEPROM

Tengo una MCU STM32L conectada a M24LR64E, una EEPROM I2C. Anteriormente, tenía esta configuración funcionando, pero luego cambié algunas cosas (diseño, firmware) y de alguna manera arruiné el I2C y ahora no funciona.

Lo estoy usando con el modo I2C_DutyCycle_2 a 100 khz, 4,7 k pull-up en las líneas SDA y SCL. Todo en el tablero está funcionando a 3.3v. A continuación se muestra una toma de ambas líneas SCL/SDA en mi alcance, lamentablemente no tengo un analizador lógico con el que jugar.

Toma del inicio de los datos I2C

La mayoría de las tomas I2C que he encontrado en Google parecen muy 'agradables' con señales cuadradas de subida/bajada, y la mía se ve muy diferente.

¿Alguna sugerencia? ¿La imagen adjunta se ve bien para un bus I2C?

Muchas gracias.

Parece que ciertamente hay un problema. ¿Cuánto duran ahora las huellas de los autobuses? ¿Hay alguna resistencia en serie o capacitancia en derivación en el bus? ¿ Estás seguro de que estás usando resistencias de 4.7k? (¿los ha medido?) ¿El problema persiste cuando desconecta la EEPROM? ¿Puede publicar una captura ampliada (menor escala de tiempo) de un par de ciclos de reloj, por favor?
Las huellas de los autobuses miden un cm de largo, un poco más cortas que antes. El bus comienza en el pin MCU, va a la resistencia pullup y termina en el pin EEPROM. Las resistencias son 1210 SMD y el ancho del bus es de 0,2 mm. Sí, los medí fuera del circuito. Ahora voy a desoldar la eeprom y probar las señales, gracias. Obtendré las tomas ampliadas también. Muchas gracias.
Aquí hay una captura del comienzo, i36.tinypic.com/2hg6cmo.jpg . Exactamente la misma captura que en la publicación principal pero con una escala de tiempo más corta.
Dos capturas más con la EEPROM desoldada de la placa: i37.tinypic.com/2hycpwg.jpg i36.tinypic.com/ay7pde.jpg
Bien gracias. A partir de esos disparos, parece que hay una falla deshonesta en cada ciclo, al menos en la línea del reloj. Con una longitud de bus de 1 cm, a menos que haya algo realmente mal, no debería haber problemas a 100 kHz, y los tiempos de subida/bajada parecen correctos, por lo que creo que el firmware debe examinarse de cerca. ¿Puede publicar los bits relevantes: el código de configuración I2C y las rutinas de envío/recepción, por favor? Idealmente, el código antes y después de que dejó de funcionar. Cualquier otra cosa que crea que puede valer la pena agregar también (por ejemplo, ¿cambió la frecuencia del reloj principal/periférico?)
¿Está sondeando en la configuración de sonda 10x o 1x?
10x en ambos canales

Respuestas (1)

Fijado. Gracias a Oli Glaser , arreglé la rutina de configuración del reloj y las capturas de alcance se ven muy bien ahora, pero el problema principal (MCU no lee la EEPROM) persistió. Después de horas y horas de depuración, prueba/error, hojas de datos, erratas, foros, etc., descubrí que de alguna manera cambié la DIRECCIÓN DEL DISPOSITIVO ESCLAVO en mi código, ¡así que la EEPROM no respondía porque no la estaba llamando correctamente!

Para cualquier futuro lector, la dirección del dispositivo de 7 bits para este dispositivo debe ser 0x53 o 1010011b (no olvide el desplazamiento a la izquierda adecuado y configure el bit de lectura/escritura para obtener el byte completo).

Gracias por toda la ayuda y, como era de esperar, ¡aprendí MUCHO de este problema!