ESP32 + MCP4725 a 400 kHz: ¿por qué aparece un espacio vacío en SCL?

Hola a todos,

Estoy trabajando con un ESP32 que controla un MCP4725 (DAC) por bus I2C.
Tengo el bus configurado a 400 kHz y trabajando con la libreria <Adafruit_MCP4725.h>

El sistema funciona, pero al observar la señal con el osciloscopio me encuentro con que, entre los bits 35 y 36 de SCL, aparece un espacio vacío (tiempo muerto) relativamente largo (~20 µs).
En el datasheet no me queda claro si esto es normal o si es algún tipo de pausa (¿ACK, STOP/START, escritura en memoria del DAC…?).

¿Es normal en el protocolo I2C que aparezca ese espacio en la señal de reloj?
Aclaro que soy principiante en este mundo y quiero entender si este comportamiento es parte estándar del protocolo o si debo preocuparme por la configuración.

La pregunta es, el DAC funciona?

En la pagina 24 y 25 hay un diagrama de tiempos y muestra que hay 4 bits del 4to byte no utilizados

Tal vez responda tu pregunta.
Ahh no lo hace porque tu preguntaste por SCL no por SDA.
Se termina el clock. Tal vez tenga que ver con que al no haber nada que sincronizar para que poner Clock. Solo lo supongo.

EDITO 1:
Mirando mas a fondo (cosa que debí hacer desde el comienzo) puede ser un
Clock stretching un esclavo puede mantener el SCL en LOW para ganar tiempo antes del siguiente bit.
Creo que eso responde tu pregunta, con mas exactitud. es mi mejor respuesta también.

EDITO 2:
Clock stretching is a method used in communication protocols like I2C and as a CPU safety feature to slow down or halt a communication bus by extending the clock signal. In I2C, slave devices use it to temporarily slow down the clock by holding the SCL line low, allowing them time to process data. For AMD Ryzen CPUs, clock stretching is a safety mechanism that reduces the CPU's clock speed when voltage is too low to maintain stability, preventing system crashes.

Clock Stretching in I2C Communication

  • Purpose:

    To allow slave devices to manage data processing by slowing down the bus speed.

  • Mechanism:

    A slave device holds the SCL (Serial Clock) line low, forcing the master device into a wait state.

  • When it occurs:

    Typically after the slave receives and acknowledges a byte of data but needs more time to store it or prepare the next byte for transmission.

  • Impact:

    It reduces the overall bus bandwidth, so it's important for system designers to consider the slowest I2C device on the bus.