0% found this document useful (0 votes)
20 views2 pages

What Does I2C Stand For? Basic Introduction Brief History: Mode Speed

Uploaded by

QaseemSajjad
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as ODT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
20 views2 pages

What Does I2C Stand For? Basic Introduction Brief History: Mode Speed

Uploaded by

QaseemSajjad
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as ODT, PDF, TXT or read online on Scribd
You are on page 1/ 2

What does I2C stand for?

I2C or IIC stands for Inter-Integrated Circuit.

Basic Introduction
I2C is a wired serial communication protocol used for communication over short distances.

Brief History
I2C was developed by Phillips (now known as Nexperia or NXP for short) and it was intended to
facilitate communication between multiple peripheral devices with single or multiple controller
devices.

Communication Type and Frequency range


I2C is an synchronous Serial communication protocol and it requires only two signal wires Serial Data
Line (SDA) and Serial Clock Line (SCL) for data transfer. It has different speed modes that can be
configured according to the use case:

Mode Speed
Standard Mode 100 kbps
Fast Mode 400 kbps
High Speed Mode 3.4 Mbps
Ultra Fast Mode 5 Mbps

The maximum number of controller devices can be unlimited and the maximum number of slaves in
1008.

Basic Connection Diagram for single and multiple


transmitters and receivers

The concept of Open Drain and its significance


As we can see in the connection diagram, both the SDA and SCL lines have pull-up resistors. That is
because both of these lines are open-drain. To describe it a bit, an open-drain output pin is driven by a
transistor that drives the output to one specific voltage which is usually ground. When the peripheral
device is off, the pin is left in floating state (open or hi-impedance state) and when it is connected or
on, the pin is pulled to ground. To avoid the floating state in the off condition, both lines are pulled up
to the system logic high voltage (5V or 3.3V).

Data Transmission Sequence


Data Frame Structure
START Condition: Start condition is triggered by changing the SDA line to LOW while keeping the
SCL line HIGH. In case of two controller wanting take control of the bus at the same time, the control
gores to the one who pulls the SDA line LOW first.
Address Byte from Controller: After initiating start condition, the controller/master sends a 7 to 10
bit slave address in which the upper 7 bits signify the address and the remaining 8th bit signifies the
read/write command.
[image]
ACK/NACK from Slave: After the successful reception of address and R/W command bit, the
corresponding slave device acknowledges the reception by pulling the SDA line LOW when SCL line
is pulled HIGH.
Data Byte from the selected Peripheral Device: After the acknowledgement from the salve device,
the data bits are transmitted leading with MSB first and each bit synced with the SCL clock signal.
After each byte transmission, there should be an acknowledgment, followed by another byte or a stop
signal in case of end of transmission.
[image]
Command Byte to Address a Specific Slave Register: In the case when the controller wants to write
to or read from a specific register of the slave device, the controller/master first points to that specific
register by writing that register’s address after the slave addressing has been performed.
ACK/NACK from the slave: After the transmission or reception of the data byte, an ACK/NACK
signal is sent depending on the direction of transmission.
STOP Condition: Stop condition is performed by changing SDA line from LOW to HIGH while
keeping the SCL line HIGH.

Implementation for MPU6050 Inertial Sensor using


Arduino Wire Library for Arduino UNO board

Implementation for MPU6050 Inertial Sensor using avr-


gcc in Linux for ATMEGA328P (MCU in Arduino UNO
board)

You might also like