Estoy tratando de leer datos de/escribir datos en un Xilinx Zedboard (plataforma FPGA) usando un microcontrolador externo a través del bus I2C. El esquema para esto se vería actualmente de la siguiente manera:
Como puede ver en el esquema, el microcontrolador usa resistencias pull-up de 1k para el bus I2C.
Noté que después de la primera transacción, el microcontrolador no leerá/escribirá más datos.
No puedo depurar esto en el microcontrolador porque no puedo hacer ningún cambio en el software del microcontrolador. Se ha verificado que el microcontrolador funciona correctamente con otros periféricos I2C.
Cuando observo la traza de un osciloscopio, puedo ver que el Zedboard no baja la línea SDA al nivel lógico bajo del microcontrolador mientras envía un reconocimiento. Creo que esta podría ser la razón por la cual la transacción falla. Vea la captura a continuación, donde puede ver que el mínimo SDA del Zedboard está aproximadamente 600 mV por encima del mínimo SDA del microcontrolador.
Creo que la razón de esto podría deberse a que las resistencias pull-up son bastante bajas. Sin embargo, no puedo hacer ningún cambio en la placa del microcontrolador y, por lo tanto, no puedo reemplazarlos por resistencias más altas.
¿Tiene alguna idea de cuál podría ser el problema aquí y cómo puedo resolverlo?
gracias y saludos
El voltaje que ve en su línea de bus corresponde a una resistencia del interruptor del lado bajo de algo más de 200 ohmios.
Una mirada rápida al esquema de la ZedBoard muestra que algunos pines de entrada tienen una resistencia en serie de 200 ohmios, probablemente para protección ESD. Supongo que usó un pin de este tipo para su comunicación I2C, pero como no nos dijo cómo conectó exactamente el µC al ZedBoard, no puedo decirlo con seguridad.
Tendrá que usar un pin de entrada sin esta resistencia en serie para obtener un buen nivel bajo.
Una opción sería usar un búfer I2C para que pueda usar sus propios pull-ups en el lado del dispositivo.
Sólo yo
Roy Meijer
Janka
Sólo yo
Gil