1 I2C Specification

The I2C specification was developed by Philips Semiconductors to communicate between devices connected to a two-wire bus. Philips recognized that there were many similarities between consumer electronics, industrial electronics, and telecommunications designs. Since the various designs often contained similar components, such as Analog-to-Digital Converters (ADCs), LCDs, or EEPROMs, Philips determined that they could simplify system design and maximize hardware efficiency by creating a communication bus that could be used to transfer data between any device connected to the bus. This allowed designers to use devices from multiple manufacturers, or use one device in several designs. The specification also solved interfacing problems by creating a scheme that is now held as an industry standard, meaning any I2C device could communicate with any other I2C device without having to change the hardware or firmware of either device.

The I2C specification defines the bus as a two-wire, bidirectional communications scheme. One line carries the Serial Data (SDA), and one line carries the Serial Clock (SCL). Each I2C device has its unique address, either 7-bits or 10-bits in length. An I2C device can operate as either a bus host, bus client, or both, depending on the device and application. The specification defines the data transfer rates as follows:

  • Standard mode – transfer rates up to 100 Kbits/s
  • Fast mode – transfer rates up to 400 Kbits/s
  • Fast mode Plus – transfer rates up to 1 Mbit/s
  • High-Speed mode – transfer rates up to 3.4 Mbits/s

Microchip’s I2C module implements host and client hardware that supports Standard mode, Fast mode, and Fast mode Plus. Throughout this technical brief, the I2C Specification will be referred to so that the reader gains an understanding of both the I2C module and the I2C Specification.

I2C Protocol Terminology

To properly understand the language used in the specification, the following is a list of terms commonly used by the specification and found throughout this technical brief:

Table 1-1. I²C Bus Terminology
TermDescription
TransmitterThe device that shifts data out onto the bus
ReceiverThe device that shifts data in from the bus
HostThe device that initiates data transfer, generates the clock signal, and terminates transmission
ClientThe device addressed by the host
Multi-hostA bus with more than one device that can initiate data transfers
ArbitrationProcedure that ensures that only one host at a time controls the bus
SynchronizationProcedure to synchronize the clocks of two or more devices on the bus
IdleBoth the SDA and SCK lines are in a logic high state; no activity on the bus
ActiveAny time in which one or more host devices are controlling the bus
Address ClientClient device that has received a matching address and is actively being clocked by a host
Matching AddressAddress byte clocked into a client that matches the value stored in one of the I2CxADR registers
Write RequestHost sends an address byte with the R/W bit cleared; host intends to write data to the client
Read RequestHost sends an address byte with the R/W bit set; host intends to receive data from a client
Clock StretchingWhen a device holds the clock line low to pause communications
Bus CollisionCondition in which the expected data on SDA is a logic high, but is sampled as a logic low
Bus Time-OutCondition in which a device on the bus is holding the bus for longer than a specified period