I2C Protocol

Table of Contents

  1. Introduction
  2. I2C Basic Architecture
  3. I2C Hardware
  4. I2C Speed Modes
  5. I2C Data Frames and Protocol
  6. Conclusion

1. Introduction

I2C, or Inter-Integrated Circuit, is a two-wire half-duplex serial communication interface developed by Philips Semiconductors (now NXP Semiconductors) in the 1980s. It is used to connect low-speed devices, such as sensors and microcontrollers, with each other or with higher-level devices such as controllers, memory chips, or other integrated circuits. The I2C protocol was designed to reduce the number of wires required to connect multiple devices and to allow simple and efficient communication between them.

2. I2C Basic Architecture

I2C uses a master-slave architecture, where the master initiates and controls the communication between the devices. A single master device can communicate with multiple slave devices by selecting them using a unique address. The protocol uses only two signal lines: SDA (Serial Data) and SCL (Serial Clock). The SDA line is bidirectional, and data is transmitted serially, one bit at a time. The SCL line is used to synchronize the communication between the devices.

i2c Basic Architecture

3. I2C Hardware

I2C is an open-drain communication protocol. This means that the bus lines used for transmitting and receiving data are connected to ground through a transistor that acts as a switch. In this configuration, the I2C bus can be pulled low by any device on the bus, but can only be pulled high by the pull-up resistors connected to the bus. This allows multiple devices to communicate on the same bus without any conflicts or collisions. The value of these resistors should be between 2.2 kohm and 10 kohm.

I2C HardwareI2C uses a master-slave architecture, where the master initiates and controls the communication between the devices. A single master device can communicate with multiple slave devices by selecting them using a unique address. The protocol uses only two signal lines: SDA (Serial Data) and SCL (Serial Clock). The SDA line is bidirectional, and data is transmitted serially, one bit at a time. The SCL line is used to synchronize the communication between the devices.

4. I2C Speed Modes

There are three main speed modes of I2C:

    1. Standard Mode (up to 100 kbit/s)
    2. Full Speed Mode (up to 400 kbit/s)
    3. Fast Mode (up to 1 Mbit/s)
    4. High-Speed Mode (up to 3.4 Mbit/s)

5. I2C Data Frames and Protocol

An I2C data frame consists of a Start Bit, a device address, a read/write bit, data bytes, acknowledge bit and Stop Bit.

I2C Frame

I2C starts with a start condition, which is a sequence of signals that indicates the beginning of a communication cycle. The start condition is a high to low transition on the SDA line while the SCL line is high. After the start condition, the slave device's address is sent over the SDA line. I2C supports two addressing modes: 7-bit addressing and 10-bit addressing. In 7-bit addressing, each device is assigned a unique 7-bit address.

The master device sends the slave address in the first byte after the start condition, and the eighth bit of the byte is used to indicate if the master wants to write to or read from the slave device. In 10-bit addressing, each device is assigned a unique 10-bit address. The 10-bit addressing mode is used when a large number of devices need to be connected to the I2C bus, and the 7-bit addressing mode does not provide enough address space.

 

I2C Start Conditions I2C Stop Condtions

Once the slave address is received, the master device can send or receive data from the slave device.

The stop condition is a sequence of signals that indicates the end of a communication cycle. The stop condition is a low to high transition on the SDA line while the SCL line is high. The stop condition is used to release the SDA and SCL lines and to signal the end of the communication cycle.

During communication, the acknowledge (ACK) is a signal sent by the receiver to the sender to indicate that the data has been successfully received. The ACK signal is sent by pulling the SDA line low during the ACK clock pulse. If the receiver does not send an ACK signal, the communication cycle is aborted, and the master device must send a stop condition to release the bus.

In some cases, a slave device may not be able to process data as quickly as the master device is transmitting it. To prevent data corruption, the I2C protocol uses a mechanism called clock stretching. In clock stretching, the slave device holds the SCL line low to prevent the master from transmitting data until it is ready to receive more data. Once the slave device has processed the data, it releases the SCL line, and the master continues transmitting.

I2C Frame

In I2C Communication, it may be necessary to have multiple master devices on the I2C bus. This is known as a multi-master configuration. In this configuration, any master device can initiate communication with any slave device. To prevent collisions, the I2C protocol uses a mechanism called bus arbitration. In bus arbitration, if two or more master devices attempt to transmit data at the same time, the device with the highest priority (determined by its address) is allowed to continue transmitting.

Similarly, it is also possible to have multiple slave devices on the I2C bus. In this configuration, each slave device has a unique address, and the master device can communicate with each slave device by selecting its address. In a multi-slave configuration, each slave device must be able to differentiate between its own address and the addresses of other devices on the bus.

6. Conclusion

In conclusion, I2C is a widely used communication protocol in electronics that enables reliable communication between devices. It's simple and efficient and can be used for various applications such as sensors, microcontrollers, and other peripherals. The protocol's features, including arbitration, multi-master and multi-slave configurations, and clock stretching, make it flexible and reliable. With its ease of use and low overhead, I2C is an excellent choice for designers looking for a simple and efficient way to communicate between electronic devices.