I²C
From Wikipedia, the free encyclopedia
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 stands for Inter-Integrated Circuit and is pronounced I-squared-C. As of the 1st of October 2006, no licensing fees are required to implement the I²C protocol. However, fees are still required in order to obtain I²C slave addresses.[1]
Contents |
[edit] Design
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), and also support other extended features, such as 10-bit addressing.
[edit] Revisions
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.
[edit] Applications
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.
- PICAXE microcontrollers (only the "X" version.)
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 swapping of 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.
[edit] Operating System Support
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 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.
[edit] Derivative Technologies
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.
[edit] See also
- I²S
- 1-Wire Bus
- Serial Peripheral Interface Bus
- SMBus
[edit] External links
- 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
- I2C Licensing Information