Is the SCK line in I2C unidirectional or bidirectional?

It's supposed to be bidirectional so that slave devices can hold it low and "stretch" the clock during internal processing or whatever. However, not all master implementations actually look at the state of SCL, and not all slave devices have the capability to stretch the clock.


The clock line can be bi-directional for two reasons.

  • Clock stretching
  • Multi-master.

Typically on slave devices that are entirely implemented in hardware the clock line is input-only. Such devices have no need to stretch the clock.

On the other hand microcontroller based slaves typically do need to stretch the clock to give them time to interpret the incoming bytes and prepare an appropriate response.

Unfortunately there are some masters out there that do not fully implement I2C and don't take any notice of clock-stretching or worse try to drive the line hard high. Such masters will not work correctly with a slave that needs to clock stretch.