error de bit ACK I2C

1

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.

    
pregunta Lucas

1 respuesta

4

Lo que usted describe parece normal. Si el último bit de datos en un byte es bajo, el maestro debe controlar SDA a lo largo del ciclo alto-bajo de SCK que sigue a ese bit. Durante el siguiente ciclo alto-bajo de SCK, el maestro necesitará liberar SDA y el esclavo tendrá que conducirlo, pero entre los dos ciclos alto-bajo, el maestro y el esclavo pueden conducir o liberar arbitrariamente el SDA de cualquier manera. consideran necesario. Si el esclavo no comienza a conducir SDA rápidamente, debe mantener bajo el SCK hasta que lo haya hecho.

El circuito bus-maestro del STM parece liberar SDA inmediatamente después del borde descendente de SCK, antes de que el esclavo comience a afirmarlo, pero eso no es un problema ya que el esclavo comienza a afirmar SDA mucho antes del siguiente borde ascendente de SCK.

    
respondido por el supercat

Lea otras preguntas en las etiquetas