A Brief Review of the I2C and SMBus Specifications

The I2C specification was developed by Phillips Semiconductors (now NXP Semiconductors) to communicate between devices connected to a two-wire bus. Phillips 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, Phillips 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 defining a standard protocol 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 protocol. One line carries the Serial Data (SDA), and one line carries the Serial Clock (SCL). Each I2C device has its own unique address: either 7-bits or 10-bits in length. An I2C device may operate as a bus host, bus client, or both, depending on the device and application. The I2C Specification defines the data transfer rates as follows:

The SMBus Specification is a derivative of the I2C Specification. Both buses are basically compatible with each other, but it is important to understand the subtle differences.

The important differences between bus configurations are:

Figure 1. Minimum Pull-Up Resistor Calculation
RP(MIN)=VDDVOL(MAX)IOLwhere:RP(min)=minimumpullupresistorvalueVDD  = supply voltageVOL(max)  =maximumoutputlowvoltageIOL  =minimumsinkcurrent