I²C
I²C is a
serial computer bus invented by
Philips that is used to attach low-speed peripherals to a
motherboard,
embedded system, or
cellphone. The name is an abbreviation for
Inter-Integrated Circuit and is pronounced
I-squared-C.
I²C uses only two bidirectional
open-collector lines, serial data (SDA) and serial clock (SCL), pulled up with
resistors. The maximum voltage is +5 V, although +3.3 V systems are common and other voltages are permitted.
The I²C
reference design has a 7-bit
address space with 16 reserved addresses, so a maximum of 112 nodes can communicate on the same bus. The most common I²C bus modes are the 100
kbit/s standard mode and the 10 kbit/s
low-speed mode, but clock frequencies down to zero are also allowed. Recent revisions of I²C can host more nodes and run faster (400 kbit/s
Fast mode and 3.4
Mbit/s High Speed mode) .
The original I²C system was created in the early
1980s as a simple internal bus system for building control electronics with various Philips chips.
In
1992 the first standardized version was released, which added a new
fast mode at 400 kbit/s and a 10-bit addressing mode to increase capacity to 1008 nodes. Version 2.0 from
1998 added
high-speed mode at 3.4 Mbit/s with reduced voltage and current requirements that saved power. Version 2.1 from
2001 is a minor cleanup of version 2.0 and is the latest standard.
I²C is appropriate for peripherals where simplicity and low manufacturing cost are more important than speed. Common applications of the I²C bus are:
* Accessing
NVRAM chips that keep user settings.
* Accessing low speed
DACs.
* Accessing low speed
ADCs.
* Changing contrast, hue, and color balance settings in monitors.
* Changing sound volume in intelligent speakers.
* Controlling
LED displays, like in a cellphone.
* Reading hardware monitors and diagnostic sensors, like a CPU thermostat and fan speed.
* Reading
real time clocks.
* Turning on and turning off the power supply of system components.
A particular strength of I²C is that a
microcontroller can control a network of device chips with just two general-purpose I/O pins and software.
Peripherals can also be added to or removed from the I²C bus while the system is running, which makes it ideal for applications that require hot swappable components.
Buses like I²C became popular when computer engineers realized that much of the manufacturing cost of an integrated circuit design results from its package size and pin count. A smaller package also usually weighs less and consumes less power, which is especially important in
cellphones and portable computing.
In
Linux, I²C is handled with a specific
kernel module for the specific device. Details on how to write I²C client can be found in the kernel-related documentation and in the /usr/include/linux/i2c.h
header file.
OpenBSD has recently added an I²C framework, with support for a number of common master controllers and sensors.
In
Sinclair QDOS and
Minerva (QDOS reimplementation) QL operating systems I²C is supported via a set of extensions provided by
TF Services.
In
AmigaOS the shared library
i2c.library of Wilhelm Noeker allows I²C access.
eCos supports I²C for several hardware architectures.
I²C is the basis for the
ACCESS.bus, the
VESA Display Data Channel (DDC) interface, the
System Management Bus (SMBus), and the Intelligent Platform Management Bus (IPMB, one of the protocols of
IPMI). These implementations have differences in voltage and clock frequency ranges, and may have
interrupt lines.
*
I²S*
1-Wire Bus
*
Serial Peripheral Interface Bus
*
SMBus*
Philips I2C specifications*
Detailed introduction, Primer*
Introduction to I2C*
I2C Bus / Access Bus*
Using the I2C Bus with Linux*
OpenBSD iic(4) manual page* Linux package
lm-sensors support I2C bus among others.
*
massmind i2c page Source code, samples and technical information for using i2c with PC, PIC and SX microcontrollers.
*
I2C bus*
Serial buses information page*
I2C Bus Technical Overview and Frequently Asked Questions*
The I2C Faq Version 2.0*
The Bus Buffer Resource. For 2-wire buses such as I2C, SMBus, PMBus, IPMB & IPMI