Estoy usando un SMT32F030R8 para comunicarme a través de I2C con otros dispositivos, y el problema es que estoy capturando algunos problemas en el bit ACK de I2C. Como se muestra en la imagen, al final de uno de los bytes, la línea de datos debe permanecer baja porque ha sido confirmada por el esclavo; sin embargo, el SDA va alto y es rápidamente llevado a GND nuevamente.
Mi primer pensamiento fue que podría haber algún problema de temporización, pero he intentado diferentes frecuencias y configuraciones de configuración y retención de datos y el mismo problema sigue ocurriendo. Lo que estoy pensando ahora es que esto es el resultado de un retraso del esclavo para bajar la línea SDA (aunque ya ha reconocido el byte).
¿Alguien ha tenido el mismo problema y ha encontrado la respuesta?
He visto gente que sugiere agregar capacidad a la línea, pero eso no es resolver el problema, simplemente lo está ocultando.
He configurado los puertos I2C como de drenaje abierto sin ningún pull-up interno, y he agregado resistencias de pull-up externas de 10k. He capturado el mismo tipo de problema con diferentes dispositivos y no es algo que pase con todos los bytes.
Si ustedes necesitan más información o tienen alguna sugerencia, háganmelo saber.