Inter-Integrated Circuit (I²C): How the Two-Wire Serial Bus Works
The Inter-Integrated Circuit, usually written as I²C or I2C, is a simple serial communication protocol that lets integrated circuits exchange data using only two shared signal wires. It is widely used to connect microcontrollers with sensors, displays, memory chips, real-time clocks, I/O expanders, and other low-speed peripherals. Originally developed by Philips Semiconductors, now NXP Semiconductors, I²C is designed for short-distance, board-level communication. Its combination of minimal wiring, device addressing, and support for multiple devices on one bus makes it a lasting choice in embedded-system design.
What Is an Inter-Integrated Circuit Bus?
An I²C bus is a synchronous, serial communication bus. “Synchronous” means that data transmission is coordinated by a clock signal. Unlike point-to-point protocols, I²C allows several devices to share the same communication lines.
The bus has two signals:
- SDA (Serial Data) carries addresses, commands, and data.
- SCL (Serial Clock) synchronizes the transfer.
Both lines normally use pull-up resistors. Devices pull a line low to communicate; when no device pulls it low, the resistor returns it to a high state. This open-drain design lets multiple devices safely share the bus.
How Does I²C Work?
An I²C connection typically has one controller – often a microcontroller – and one or more target devices, such as a temperature sensor or EEPROM. The controller initiates communication and generates the clock. A target responds when the controller sends its address.
A typical I²C transaction follows this sequence:
- The controller creates a START condition.
- It sends the target device address and a read/write bit.
- The addressed target responds with an ACK (acknowledge) bit.
- The controller and target exchange one or more bytes of data.
- The receiver acknowledges each received byte, except normally the final byte of a read.
- The controller creates a STOP condition to release the bus.
Each data byte contains eight bits, followed by an acknowledge bit. This structured exchange helps the controller confirm that an addressed device is present and responding.
Inter-Integrated Circuit Addressing Explained
Every target on an I²C bus needs an address so the controller can select the correct device. Most devices use a 7-bit address, allowing a broad range of device identifiers. Some devices support 10-bit addressing when more address space is required.
In practice, an I²C device’s usable address may be partly fixed by its manufacturer and partly configured through address pins. Before connecting devices, confirm that no two targets will use the same address. Address conflicts are one of the most common causes of I²C communication failures.

I²C Bus Speeds
I²C supports several standardized speed modes. The right choice depends on the microcontroller, the connected devices, bus capacitance, cable length, and timing requirements.
| I²C mode | Maximum data rate | Typical use |
|---|---|---|
| Standard-mode | 100 kbit/s | Basic sensors and control peripherals |
| Fast-mode | 400 kbit/s | Common embedded applications |
| Fast-mode Plus | 1 Mbit/s | Faster board-level peripheral communication |
| High-speed mode | 3.4 Mbit/s | Higher-throughput compatible devices |
Higher speeds are not automatically better. A faster bus may need stronger pull-ups, better layout, lower capacitance, and devices that explicitly support the selected mode.
Common Applications of Inter-Integrated Circuit
I²C is especially useful when a microcontroller must communicate with multiple low-bandwidth devices without consuming many pins. Common applications include:
- Temperature, pressure, humidity, and motion sensors
- Real-time clock modules
- EEPROM and configuration memory
- OLED and LCD display controllers
- Battery-management and power-monitoring ICs
- GPIO expanders
- Digital-to-analog and analog-to-digital converters
- Board-management and system-monitoring hardware
For example, one microcontroller can connect to a temperature sensor, accelerometer, display, and EEPROM through the same SDA and SCL lines, provided that their addresses do not conflict.
Advantages of I²C Communication
The biggest benefit of I²C is simplicity. Only two signal lines are required regardless of how many compatible devices share the bus. This can reduce connector size, routing complexity, and microcontroller pin usage.
Other benefits include:
- Multi-device support: Many targets can share the same bus.
- Address-based communication: The controller selects devices without separate chip-select wires.
- Bidirectional transfers: The same bus supports reading and writing.
- Multi-controller capability: The protocol includes arbitration mechanisms for systems with more than one controller.
- Mature ecosystem: I²C support is built into many microcontrollers and peripheral ICs.
Inter-Integrated Circuit Limitations to Consider
I²C is excellent for many embedded systems, but it is not ideal for every application. It is generally slower than SPI and is intended for relatively short, capacitance-limited connections.
Key limitations include:
- The shared bus can become a bottleneck when many devices communicate frequently.
- Pull-up resistor values must balance rise time, power consumption, and device current limits.
- Long cables and high capacitance can distort signals or limit speed.
- Devices with identical, non-configurable addresses cannot coexist on one bus without additional hardware.
- Voltage-level compatibility must be checked when devices use different logic levels.
When an application requires very high throughput, long-distance communication, or dedicated device connections, SPI, UART, CAN, or another protocol may be a better fit.
I²C vs. SPI vs. UART
I²C, SPI, and UART are all common serial communication interfaces, but they solve different problems.
| Feature | I²C | SPI | UART |
|---|---|---|---|
| Typical wires | 2 | 3–4 plus chip-select lines | 2 |
| Clock signal | Yes | Yes | No |
| Multiple devices | Yes, addressed | Yes, with chip-selects | Usually point-to-point |
| Typical speed | Low to moderate | High | Low to moderate |
| Best for | Sensors and peripherals | Fast peripherals | Simple device-to-device links |
Choose I²C when pin count and multi-device connectivity matter more than maximum transfer speed.
Practical Inter-Integrated Circuit Design Tips
A reliable I²C design starts with the electrical details. Use appropriately sized pull-up resistors, keep traces short where possible, and verify the voltage tolerance of every connected device. Check each component datasheet for supported address values, timing limits, and maximum bus speed.
During troubleshooting, start with the basics:
- Confirm that SDA and SCL have pull-up resistors.
- Verify a common ground between all devices.
- Scan the bus to check whether the expected device address responds.
- Ensure the selected bus speed is supported by every device.
- Check for address conflicts.
- Use a logic analyzer or oscilloscope to inspect START, STOP, clock, and acknowledge signals.
Conclusion
The Inter-Integrated Circuit bus remains one of the most practical communication standards in embedded electronics. Its two-wire design, addressing scheme, and broad device support make I²C ideal for connecting sensors, displays, memory, and control ICs to a microcontroller. For dependable results, match the bus speed to the system’s electrical constraints, avoid address conflicts, and follow the timing and pull-up requirements in each device’s datasheet.