Back to home page

OSCL-LXR

 
 

    


0001 =============================
0002 Introduction to I2C and SMBus
0003 =============================
0004 
0005 I²C (pronounce: I squared C and written I2C in the kernel documentation) is
0006 a protocol developed by Philips. It is a slow two-wire protocol (variable
0007 speed, up to 400 kHz), with a high speed extension (3.4 MHz).  It provides
0008 an inexpensive bus for connecting many types of devices with infrequent or
0009 low bandwidth communications needs.  I2C is widely used with embedded
0010 systems.  Some systems use variants that don't meet branding requirements,
0011 and so are not advertised as being I2C but come under different names,
0012 e.g. TWI (Two Wire Interface), IIC.
0013 
0014 The latest official I2C specification is the `"I2C-bus specification and user
0015 manual" (UM10204) <https://www.nxp.com/webapp/Download?colCode=UM10204>`_
0016 published by NXP Semiconductors. However, you need to log-in to the site to
0017 access the PDF. An older version of the specification (revision 6) is archived
0018 `here <https://web.archive.org/web/20210813122132/https://www.nxp.com/docs/en/user-guide/UM10204.pdf>`_.
0019 
0020 SMBus (System Management Bus) is based on the I2C protocol, and is mostly
0021 a subset of I2C protocols and signaling.  Many I2C devices will work on an
0022 SMBus, but some SMBus protocols add semantics beyond what is required to
0023 achieve I2C branding.  Modern PC mainboards rely on SMBus.  The most common
0024 devices connected through SMBus are RAM modules configured using I2C EEPROMs,
0025 and hardware monitoring chips.
0026 
0027 Because the SMBus is mostly a subset of the generalized I2C bus, we can
0028 use its protocols on many I2C systems.  However, there are systems that don't
0029 meet both SMBus and I2C electrical constraints; and others which can't
0030 implement all the common SMBus protocol semantics or messages.
0031 
0032 
0033 Terminology
0034 ===========
0035 
0036 Using the terminology from the official documentation, the I2C bus connects
0037 one or more *master* chips and one or more *slave* chips.
0038 
0039 .. kernel-figure::  i2c_bus.svg
0040    :alt:    Simple I2C bus with one master and 3 slaves
0041 
0042    Simple I2C bus
0043 
0044 A **master** chip is a node that starts communications with slaves. In the
0045 Linux kernel implementation it is called an **adapter** or bus. Adapter
0046 drivers are in the ``drivers/i2c/busses/`` subdirectory.
0047 
0048 An **algorithm** contains general code that can be used to implement a
0049 whole class of I2C adapters. Each specific adapter driver either depends on
0050 an algorithm driver in the ``drivers/i2c/algos/`` subdirectory, or includes
0051 its own implementation.
0052 
0053 A **slave** chip is a node that responds to communications when addressed
0054 by the master. In Linux it is called a **client**. Client drivers are kept
0055 in a directory specific to the feature they provide, for example
0056 ``drivers/media/gpio/`` for GPIO expanders and ``drivers/media/i2c/`` for
0057 video-related chips.
0058 
0059 For the example configuration in figure, you will need a driver for your
0060 I2C adapter, and drivers for your I2C devices (usually one driver for each
0061 device).