Strange i2c clock low pulse behaviour on target when clock stretch is enabled (default).
- February 13, 2026
- 7 replies
- 680 views
Hello everyone.
I am trying to build an i2c multi-drop network with STM32C0316CT6 targets. To achieve that i use the differential buffer PCA9615. Each target (and the master of course) has its own PCA9615, the topology is as shown in the picture below.
My problem is that when clock stretch is enabled (default) and master pulls the clock low, then the target pulls the clock also low for a tiny amount of time during the normal pulse duration. PCA9615 i2c a-side (non-differential) sets the SCL (a-side) low to ~0.3V (as expected) and then the target pulls the SCL to 0V for that tiny amount of time. For that tiny amount of time, the master and the target are both holding the clock low. That results in an extra voltage offset on the differential side of the buffer.
On the multi-drop network, all targets do the same and the differential voltage offset is multiplied and gets huge. The expected behaviour would be from the target to pull the line low only in the stretched pulse and not on every single pulse.
This phenomenon happens only when clock stretch is enabled, independently of clock speed or any other i2c settings.
Increasing the I2C Speed Mode parameter shortens the extra low pulse duration (actual i2c speed same).
Increasing the Digital Filter, the pulse appears a few ns later.
Analog Filter makes no difference.
Changing Rise and Fall time affect the extra low pulse duration.
I am using 2.21K external pull-ups.
In the following images blue is the differential SCL pulse and yellow the a-side (MCU side) SCL pulse. In one image the differential pulse is multiplied.
PLEASE help me understand why this extra low pulse appears and how to get rid of it.
