Microcontrollers, Sensors, Telecomunications

I2C communication protocol

The communication protocol I2C is very used in microcontrollers such as Arduino. But what is I2C? It’s this post’s subject.

What is I2C?

Was developed by Philips in the 1980s. It’s currently the most popular synchronous communication protocol for short distances. The name I2C is abbreviation for Inter-Integrated Circuit. Allows communication between many peripherals, integrated circuits, microcontrollers, sensors, etc.

Connection in I2C
This protocol uses only two pins (SCL and SDA) to make communication between devices. The master transmits commands for the slave to execute. Source: Circuit Basics.

The I2C allows communication between many masters and slaves in a single 2 wire bus. The SCL carries clock signal and SDA is where data travels. Clock is a square wave signal, that coordinates actions of sequencial digital circuits.

How it works?

Pull-up resistors

The SDA and SCL buses need pull-up resistors, so that the lines stay in “HIGH” level, when there is no data communication. Devices on bus are “open-drain”, consome electric current, but can’t provide current to bus. The pull-up resistors allow the communication between many devices in digital values “0” and “1”.

I2C bus
Pull-up resistors Rp are linked to supply power source (V_{DD}). Without these resistors, there would be signal loss on bus. Source: Haruncetin.

The formula to calculate pull-up resistor minimum value R_{p(min)}.



  • V_{bus} is voltage on bus.
  • V_{OL} is the maximum voltage on “LOW” level.
  • I_{OL} is current on “LOW” level.

To calculate maximum pull-up resistor level.

R_{p(max)}=\frac{t_{r}}{0,8473\cdot C_{b}}


  • t_{r} is the signal’s rise time, in other words, the time it takes to go from “LOW” level to “HIGH”.
  • C_{b} is total capacitance on bus, which must include parasitic capacitances between SDA and SCL wires and, between wires and ground.
The number of devices on network also influences on bus capacitance. Source: All about circuits.

I2C message

Each device on network has an address from 7 to 10 bits. Starts from most significative bit (MSB) until the least significative (LSB). 

I2C data
Source: Circuit Basics.

The master sends a start condition to a device, which is a transition from “HIGH” level to “LOW” on SDA, before SCL do the same transition. For a condition end of transmission, SDA makes a transition from “LOW” to “HIGH” after SCL.

Start and end of I2C message.
Source: I2C info.

After device’s address, comes the read/write bit. It indicates if the master is sending data to slave (0 bit) or requesting data (1 bit). The ACK/NACK is the acknowledgment bit, always comes after a data frame. Serves to receiver device or slave to inform to emitter if receives the data frame. The ACK/NACK bit is on “0” level, when the slave receives data frame, the bit is on “1” level, if it does not receive the bit sequence.

These pulses are an example of message on I2C protocol. Source: Sparkfun.

Transmission speed

ModesMaximum speed
Standard (Sm)100 kbps
Fast (Fm)400 kbps
High speed (Fm+)3,4 Mbps
Ultra fast (Hs-mode)5 Mbps
I2C protocol modes transmission speed table.

About Pedro Ney Stroski

Leave a Reply

Your email address will not be published. Required fields are marked *