blob: 13ab076dcd92484149eec9ef9e8bc1fc33031397 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001I2C and SMBus
2=============
3
4I2C (pronounce: I squared C) is a protocol developed by Philips. It is a
David Brownell4298cfc2007-05-01 23:26:31 +02005slow two-wire protocol (variable speed, up to 400 kHz), with a high speed
6extension (3.4 MHz). It provides an inexpensive bus for connecting many
7types of devices with infrequent or low bandwidth communications needs.
8I2C is widely used with embedded systems. Some systems use variants that
9don't meet branding requirements, and so are not advertised as being I2C.
Linus Torvalds1da177e2005-04-16 15:20:36 -070010
David Brownell4298cfc2007-05-01 23:26:31 +020011SMBus (System Management Bus) is based on the I2C protocol, and is mostly
12a subset of I2C protocols and signaling. Many I2C devices will work on an
13SMBus, but some SMBus protocols add semantics beyond what is required to
14achieve I2C branding. Modern PC mainboards rely on SMBus. The most common
15devices connected through SMBus are RAM modules configured using I2C EEPROMs,
16and hardware monitoring chips.
Linus Torvalds1da177e2005-04-16 15:20:36 -070017
David Brownell4298cfc2007-05-01 23:26:31 +020018Because the SMBus is mostly a subset of the generalized I2C bus, we can
19use its protocols on many I2C systems. However, there are systems that don't
20meet both SMBus and I2C electrical constraints; and others which can't
21implement all the common SMBus protocol semantics or messages.
Linus Torvalds1da177e2005-04-16 15:20:36 -070022
23
24Terminology
25===========
26
27When we talk about I2C, we use the following terms:
28 Bus -> Algorithm
29 Adapter
30 Device -> Driver
31 Client
32
33An Algorithm driver contains general code that can be used for a whole class
Jean Delvare45ccc6c2007-12-12 13:45:24 +010034of I2C adapters. Each specific adapter driver either depends on one algorithm
35driver, or includes its own implementation.
David Brownell4298cfc2007-05-01 23:26:31 +020036
Linus Torvalds1da177e2005-04-16 15:20:36 -070037A Driver driver (yes, this sounds ridiculous, sorry) contains the general
38code to access some type of device. Each detected device gets its own
39data in the Client structure. Usually, Driver and Client are more closely
40integrated than Algorithm and Adapter.
41
Jean Delvare45ccc6c2007-12-12 13:45:24 +010042For a given configuration, you will need a driver for your I2C bus, and
43drivers for your I2C devices (usually one driver for each device).
Linus Torvalds1da177e2005-04-16 15:20:36 -070044
David Brownell4298cfc2007-05-01 23:26:31 +020045At this time, Linux only operates I2C (or SMBus) in master mode; you can't
46use these APIs to make a Linux system behave as a slave/device, either to
47speak a custom protocol or to emulate some other device.