Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

SDA = Serial Data = Streams/Receives binary data onto the bus
SCL = Serial Clock = Synchronizes binary data. SDA is sampled on the rising edge of SCL

Take an example waveform:

...

We notice that I2C is an uses 8-bit communication protocol, meaning that for data frames. For every 8 bits, we receive an ACK/NACK on the 9th bit. We can also take note of the following characteristics:

START BIT = Pulling SDA low while SCL is high
END BIT = Pulling SCL high while SDA is low
ACK/NACK BIT = This is the 9th bit. ACK means the message was received properly, bit will be 0. NACK means the message was not received, bit will be 1

Standard I2C Communication Steps:

...

Notice that there is only 1 NMOS transistor that controls Vout. A Pull-up/Pull-down GPIO has two transistors. When Vin is HIGH, Vout = GND. However, when Vin is LOW, we notice that Vout is left floating. That's when the pull-up resistor pulls the line HIGH.

I2C Speeds

...

Standard Mode (100 kbps)

...

Fast Mode (400 kbps)

...

Compared to SPI and CAN it is slower.


Pull-up Resistors:

The value of your pull-up resistor plays a crucial role in efficient communication. The following relations are important in choosing your pull-up resistance:

Higher supply voltage → Higher pull-up resistor (V/I = R)
More resistance → Lower power and current consumption (V2/R = Power) (V/R = I)
Lower resistance → Higher bandwidth/frequencies; faster rise time
More capacitance → Lower pull-up resistor

https://www.youtube.com/watch?v=sCHK3P5tn7s

Take this example from a random forum online https://electronics.stackexchange.com/questions/102611/what-happens-if-i-omit-the-pullup-resistors-on-i2c-lines

...

The first image captures an I2C waveform with a very high pull-up resistor. This is evident in the slow rise time and incomplete waveform. The poster was actually using the internal pull-up resistors of the ATMEGA Arduino board (20k-50k ohms)

...

The poster added 4.7k ohm pull-up resistors, increasing the rise time significantly. Make sure to choose the appropriate pull-up resistance for your application! Also having I2C test points can really save your sanity 🤠

Multi-Slave Busses

I2C buses can hold up to 127 slaves on a single bus. Unlike SPI, I2C does not have a chip select line to control communication. Instead, I2C relies on IC addressing (each IC on the bus has a different address). Typically each slave has alternative addresses that can be configured in the situation two slaves have the same address.

...