Why do I sometimes see DDC Transaction failures when the HDMI Sink requests clock stretching?
This is a known issue which occurs due to the way in which the DDC (I2C) clock stretching is implemented.
The HDMI Transmitter Subsystem has a timeout mechanism, which will time out if the slave holds the SCL low for more than 100ms (@100mhz CPU interface clock).
Once the timeout occurs, the state machine will go back to an idle state.
Therefore, after the slave release the SCL, it will start from an idle state which is then followed by the start condition etc., instead of resuming from the current state.
This can cause DDC transactions to fail.
This issue is resolved in the HDMI Transmitter Subsystem v3.0 in Vivado 2017.3 and later versions.