Electronic – Is I2C mixed frequency possible

i2c

Suppose we have a 400 kHz I2C bus. There is one master and a bunch of slave devices. We would like to introduce one more slave device, but unfortunately it only goes to 100 kHz .

Clearly, the solid design choices are:

  • just run that bus at 100 kHz
  • use separate buses for the 400 kHz and 100 kHz peripherals

But the question is just about a hack: what if we use one bus, and address the 400 kHz devices at 400 kHz, and switch the bus to 100 kHz when speaking to the 100 kHz slave?

Or could the slower slave misbehave in response to the 400 kHz hash that it sees on the I2C lines because it mistakenly thinks that it is being addressed?

Can we depend on 100 kHz devices to still be able to process 400 kHz I2C signal sufficiently well to reliably ignore messages addressed toward other slaves?

Best Answer

As you suggest, doing so is not a good engineering practice. While some devices would most ignore traffic that they are not able to receive (undersample), other devices might clutter the bus with erroneous frames.

Thus, the answer you are looking for depends on your the specifics of your application such as:

  • length of your I2C connections
  • pull-up resistors value
  • device compatibility

Of course, it's hard to predict what would happen to a device operated outside its specs a few years down the road.

Another option is to run a shutdown line to slow devices or pass the clock line (provided they cannot generate clock signal) through an AND gate.