0% found this document useful (0 votes)
73 views10 pages

Basics of The I2C Communication Protocol

The document discusses the basics of I2C communication protocol, including how it works, addressing, read/write bits, data frames, single and multiple masters with slaves, and advantages and disadvantages of I2C.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
73 views10 pages

Basics of The I2C Communication Protocol

The document discusses the basics of I2C communication protocol, including how it works, addressing, read/write bits, data frames, single and multiple masters with slaves, and advantages and disadvantages of I2C.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 10

   

Raspberry Pi Arduino DIY Electronics Programming Videos Resources

SEARCH …

BASICS OF THE I2C FOLLOW US

COMMUNICATION
PROTOCOL SUBSCRIBE

Posted by Scott Campbell | DIY Electronics | 55 


Get new
tutorials sent to
your inbox!

EMAIL ADDR

SUBSCRIBE

So far, we’ve talked about the basics of SPI


communication and UART communication, so now
let’s go into the final protocol of this series, the Inter-
Integrated Circuit, or I2C.

You’ll probably find yourself using I2C if you ever build 


projects that use OLED displays, barometric pressure
sensors, or gyroscope/accelerometer modules.
INTRODUCTION TO I2C
COMMUNICATION
I2C combines the best features of SPI and UARTs.
With I2C, you can connect multiple slaves to a single
master (like SPI) and you can have multiple masters
controlling single, or multiple slaves. This is really
useful when you want to have more than one
microcontroller logging data to a single memory card
or displaying text to a single LCD.

Like UART communication, I2C only uses two wires to


transmit data between devices:

SDA (Serial Data) – The line for the master and slave
to send and receive data.

SCL (Serial Clock) – The line that carries the clock


signal.

I2C is a serial communication protocol, so data is


transferred bit by bit along a single wire (the SDA
line).

Like SPI, I2C is synchronous, so the output of bits is


synchronized to the sampling of bits by a clock signal
shared between the master and the slave. The clock
signal is always controlled by the master.


HOW I2C WORKS
With I2C, data is transferred in messages. Messages
are broken up into frames of data. Each message has
an address frame that contains the binary address of
the slave, and one or more data frames that contain
the data being transmitted. The message also
includes start and stop conditions, read/write bits,
and ACK/NACK bits between each data frame:

Start Condition: The SDA line switches from a high


voltage level to a low voltage level before the SCL line
switches from high to low.

Stop Condition: The SDA line switches from a low


voltage level to a high voltage level after the SCL line
switches from low to high.

Address Frame: A 7 or 10 bit sequence unique to


each slave that identifies the slave when the master
wants to talk to it.

Read/Write Bit: A single bit specifying whether the


master is sending data to the slave (low voltage level)
or requesting data from it (high voltage level).

ACK/NACK Bit: Each frame in a message is followed
by an acknowledge/no-acknowledge bit. If
an address frame or data frame was successfully
received, an ACK bit is returned to the sender from
the receiving device.

ADDRESSING
I2C doesn’t have slave select lines like SPI, so it needs
another way to let the slave know that data is being
sent to it, and not another slave. It does this
by addressing. The address frame is always the first
frame after the start bit in a new message.

The master sends the address of the slave it wants to


communicate with to every slave connected to it.
Each slave then compares the address sent from the
master to its own address. If the address matches, it
sends a low voltage ACK bit back to the master. If the
address doesn’t match, the slave does nothing and
the SDA line remains high.

READ/WRITE BIT
The address frame includes a single bit at the end
that informs the slave whether the master wants to
write data to it or receive data from it. If the master
wants to send data to the slave, the read/write bit is a
low voltage level. If the master is requesting data
from the slave, the bit is a high voltage level.

THE DATA FRAME


After the master detects the ACK bit from the
slave, the first data frame is ready to be sent.

The data frame is always 8 bits long, and sent with


the most significant bit first. Each data frame is
immediately followed by an ACK/NACK bit to verify
that the frame has been received successfully. The
ACK bit must be received by either the master or the
slave (depending on who is sending the data) before
the next data frame can be sent.


After all of the data frames have been sent, the
master can send a stop condition to the slave to halt
the transmission. The stop condition is a voltage
transition from low to high on the SDA line after a low
to high transition on the SCL line, with the SCL line
remaining high.

STEPS OF I2C DATA


TRANSMISSION
1. The master sends the start condition to every
connected slave by switching the SDA line from a
high voltage level to a low voltage
level before switching the SCL line from high to low:

2. The master sends each slave the 7 or 10 bit address


of the slave it wants to communicate with, along with
the read/write bit:


3. Each slave compares the address sent from the
master to its own address. If the address matches, the
slave returns an ACK bit by pulling the SDA line low
for one bit. If the address from the master does not
match the slave’s own address, the slave leaves the
SDA line high.

4. The master sends or receives the data frame:


5. After each data frame has been transferred, the
receiving device returns another ACK bit to the
sender to acknowledge successful receipt of the
frame:

6. To stop the data transmission, the master sends a


stop condition to the slave by switching SCL high
before switching SDA high:

SINGLE MASTER WITH MULTIPLE
SLAVES
Because I2C uses addressing, multiple slaves can be
controlled from a single master. With a 7 bit address,

128 (27) unique address are available. Using 10 bit


addresses is uncommon, but provides 1,024 (210)
unique addresses. To connect multiple slaves to a
single master, wire them like this, with 4.7K Ohm
pull-up resistors connecting the SDA and SCL lines to
Vcc:


MULTIPLE MASTERS WITH
MULTIPLE SLAVES
Multiple masters can be connected to a single slave
or multiple slaves. The problem with multiple
masters in the same system comes when
two masters try to send or receive data at the same
time over the SDA line. To solve this problem, each
master needs to detect if the SDA line is low or high
before transmitting a message. If the SDA line is low,
this means that another master has control of the
bus, and the master should wait to send the
message. If the SDA line is high, then it’s safe to
transmit the message. To connect multiple masters
to multiple slaves, use the following diagram, with
4.7K Ohm pull-up resistors connecting the SDA and
SCL lines to Vcc:

ADVANTAGES AND 
DISADVANTAGES OF I2C
There is a lot to I2C that might make it sound
complicated compared to other protocols, but there
are some good reasons why you may or may not
want to use I2C to connect to a particular device:

ADVANTAGES

Only uses two wires

Supports multiple masters and multiple slaves

ACK/NACK bit gives confirmation that each


frame is transferred successfully

Hardware is less complicated than with UARTs

Well known and widely used protocol

DISADVANTAGES

Slower data transfer rate than SPI

The size of the data frame is limited to 8 bits

More complicated hardware needed to


implement than SPI

Thanks for reading! Hope you learned something


from this series of articles on electronic
communication protocols. In case you haven’t read
them already, part one covers the SPI
communication protocol, and part two covers UART
driven communication.

If you have any questions or have anything to add,


feel free to leave a comment below. And be sure to
subscribe to get more articles like this in your inbox!

SHARE:
    

You might also like