One of the first and most important decisions an embedded systems engineer must answer when designing electronic systems is how the master and slave devices will communicate, that is, which communication protocol will be used to transfer data. There are several types of communication protocols that are typically used in embedded systems, including I2C, SPI, eSPI, USB, CAN, and many more. To determine which option is most suitable, engineers must understand the differing characteristics and advantages offered by each.
A common misconception that we've noticed relates to the relationship between the Inter-Integrated Circuit (I2C) and System Management Bus (SMBus) communication protocols. On the surface, these two communication protocols are quite similar, but there are some subtle differences that make them different and each one uniquely suitable for specific types of serial communication. Engineers must be aware of the distinctions between these two communication protocols in order to make the best decision about which one to leverage for a given project.
In this week's blog post, we're taking a deep dive into the I2C and SMBus communication protocols. We'll start with some background information, defining each of these protocols and giving a brief history of its development. Next, we'll work to flesh out the core differences and identify any similarities and opportunities for compatibility between SMBus and I2C.
The I2C communication protocol was first created in 1982 by Philips Semiconductor, a company known today as NXP Semiconductors. Since its inception, the protocol has been revised seven times. The 1992 revision saw the addition of a 400 kbit/s fast mode in addition to the standard 100 kbit speed, as well as an optional 10-bit addressing mode that increased the node capacity to 1008 nodes - well beyond what was possible with the 7-bit addressing used in the 1982 version.
I2C protocol uses two wires to transmit data between master and slave devices. The first line, known as the SDA line, is a bidirectional line used to transmit data between a master device and a slave device. The second line, known as the SCL line, is a unidirectional line controlled by the master device that carries a clock signal that ensures synchronicity between the master and slave device.
One of the great benefits of I2C protocol is that it supports a large number of devices on the same circuit. I2C protocol allows an unlimited number of master devices to communicate with a maximum of 1008 slave devices on the bus. All configurations here are possible: one master with one slave, multiple masters with a single slave, a single master with multiple slaves, or a multi master configuration with multiple slaves.
The SMBus communication protocol was first created in 1994 as a collaborative project between Intel and Duracell. SMBus is a two-wire communication protocol that was developed to support lightweight communication between low-bandwidth devices in embedded systems and specifically on computer motherboards.
In an SMBus system, each device is assigned a unique device address using the familiar addressing system of I2C. Unlike I2C though, any device may be addressed by any other device on the network and any devices may assume the role of master or slave for a particular data transfer. Like the I2C protocol, SMBus also uses a dedicated line (often annotated SMBDAT) for data transfer and a clock line (often annotated SMBCLK). However, both of these lines are bidirectional in an SMBus system, which enables any device to act as the master and transmit the clock signal to the slave device for a specific data transfer.
Image courtesy of Unsplash
SMBus can be considered a subset of I2C. The standard borrowed many core design features from the existing I2C protocol, but introduced changes that promote efficient, low-bandwidth communication between devices. Below, we summarize the most important differences between the two protocols.
Timeout and clock speed are the two most important differences between the I2C and SMBus communication protocols. A timeout happens when the clock line is pulled low for longer than the timeout value. In the original I2C protocol specification, there is no established timeout value. Because the system never times out, there is a need for an error recovery process. In an I2C bus, error recovery is impossible in cases where the slave device holds Clock or Data low. In contrast, SMBus systems will timeout whenever the clock is held low for more than 35 milliseconds.
Because the clock in an SMBUs system can time out, the system must prescribe a minimum clock speed to prevent timeouts. Therefore, SMBus systems have a minimum clock speed of 10 kHz and a maximum of 100 kHz. I2C systems have no minimum clock speed. They operate either in standard mode at 100 kHz, fast mode at 400 kHz, fast mode plus at 1 MHz, or in high-speed mode at 3.4 MHz.
In addition to the changes in timeout and clock speed, there are differences in electrical characteristics between I2C and SMBus systems. Voltage levels in an I2C system typically range in value between 1.5V and 3.3V and are fixed. In contrast, the voltage levels in an SMBus system often range between 0.8V and 2.1V. In addition, SMBus specifies a minimum sink current of 100 micro amperes and a maximum of 350 micro amperes, while the I2C standard permits a maximum sink current of 3mA.
In an I2C system, slaves are typically assigned an address during the development of the printed circuit board. It is worth noting that while the I2C protocol is free to implement, I2C slave addresses are typically allocated by NXP for a small fee. In addition to supporting fixed slave addresses, SMBus systems can also dynamically assign slave addresses at run time. Here, the SMBus master device uses a process called SMBus Address Resolutions Protocol (ARP) to reliably identify slaves and prevent two slaves from using the same address.
Despite these minor differences, I2C and SMBus systems are generally mutually compatible. Both systems make use of two-wire communication and both can be operated at 100 kHz, which is essential for interoperability. To ensure compatibility between I2C and SMBUs systems, the most important factors are the clock speed and voltage characteristics. Compatibility is typically ensured when either:
When it comes to choosing a communication protocol for your next embedded systems project, you may find it useful to investigate other successful applications of your candidate protocols. While I2C protocol has been used successfully in many products and by many manufacturers, applications of SMBus are relatively more narrow. The primary application for SMBus systems has been monitoring of supply voltage, temperature, and cooling functions in computer motherboards.
Are you building a product that will use the I2C communication protocol? Total Phase builds industry-leading diagnostic tools for I2C product development, like our Beagle I2C/SPI protocol analyzer that offers non-intrusive monitoring of I2C and SPI communications along with real-time data display.
Learn how our diagnostic tools for embedded systems can help you perfect your product and get to market faster than you thought was possible.