DEV Community

Cover image for I C Bus in Modern Embedded Systems: Why Engineers Still Rely on It After Four Decades
Kevin zhang
Kevin zhang

Posted on

I C Bus in Modern Embedded Systems: Why Engineers Still Rely on It After Four Decades

I²C Bus in Modern Embedded Systems: Why Engineers Still Rely on It After Four Decades

When discussing embedded hardware, engineers often focus on technologies that appear in marketing materials. High-resolution displays, multi-core processors, Gigabit Ethernet, Wi-Fi 6, PCIe storage, and AI accelerators usually attract the most attention.

However, if you examine the schematic of a real embedded product, you will often discover that some of the most important functions depend on a communication bus that was introduced in the early 1980s.

That bus is I²C.

Unlike modern high-speed interfaces, I²C rarely appears in product brochures. Customers never ask whether a device contains an I²C bus. Yet countless products would not function without it.

From industrial controllers and medical equipment to smart home devices and Linux-based development boards, I²C remains one of the most widely used communication standards in embedded electronics.

This article explores the practical role of I²C, its advantages, common implementation challenges, and why it continues to survive despite the arrival of faster alternatives.


The Original Design Goal

The creators of I²C were not trying to build a high-performance communication protocol.

Their goal was much simpler.

They wanted a method that would allow integrated circuits on the same board to exchange small amounts of information without requiring a large number of signal lines.

The result was a bus that uses only two signals:

Signal Purpose
SDA Serial Data
SCL Serial Clock

Using only these two lines, multiple devices can communicate with a processor or microcontroller.

This simplicity remains one of the protocol's greatest strengths.


Why Speed Is Not Everything

A common misconception among new engineers is that faster interfaces automatically represent better engineering solutions.

In practice, communication requirements vary significantly between devices.

Consider the following examples:

Device Typical Data Volume
Temperature Sensor Few bytes
RTC Few bytes
EEPROM Small configuration data
PMIC Register access only
Touch Controller Low bandwidth
Ambient Light Sensor Very small data packets

These devices do not need hundreds of megabytes per second.

They simply need a reliable way to exchange small pieces of information.

Using PCIe, USB, or another high-speed interface would provide little practical benefit.

For these applications, I²C is often the more efficient choice.


Where I²C Appears Inside Real Products

Many people assume I²C is only used for sensors.

In reality, it supports a wide range of functions.

A typical embedded Linux system may contain:

Device Category Example
Power Management PMIC
Timekeeping RTC
Configuration Storage EEPROM
Environmental Monitoring Temperature Sensors
User Input Touch Controllers
Audio Configuration Codec Control
Expansion Devices GPIO Expanders
Display Configuration Bridge Controllers

A product that appears simple from the outside may contain ten or more I²C devices internally.


Why Hardware Engineers Appreciate I²C

Every signal routed on a PCB consumes resources.

More signals mean:

  • More routing effort
  • Larger connectors
  • Additional testing
  • Increased manufacturing complexity

I²C minimizes these costs.

Instead of dedicating separate control lines to each peripheral, all devices share the same communication bus.

This reduces:

Design Factor Benefit
PCB Routing Simpler
Connector Size Smaller
GPIO Usage Lower
Validation Effort Reduced
Manufacturing Cost Lower

These advantages become especially important in compact products.


Addressing Simplifies Expansion

One of the key concepts behind I²C is device addressing.

Each peripheral on the bus has an address.

When communication begins, the master device specifies which address should respond.

Examples might include:

Device Address Example
EEPROM 0x50
RTC 0x68
Sensor 0x48
Touch Controller 0x5D

This approach allows multiple devices to coexist on the same bus without requiring separate chip-select signals.

For systems containing many peripherals, this dramatically simplifies design.


Linux and I²C

Engineers working with embedded Linux encounter I²C frequently.

Many Linux drivers rely on I²C communication during system initialization.

Common examples include:

  • Touchscreen drivers
  • Sensor drivers
  • PMIC drivers
  • EEPROM drivers
  • Audio codec drivers

A typical Device Tree entry may define:

  • Device address
  • Interrupt GPIO
  • Reset GPIO
  • Power regulators

For example:

touch@5d {
    compatible = "goodix,gt911";
    reg = <0x5d>;
};
Enter fullscreen mode Exit fullscreen mode

Although the configuration looks simple, a small mistake can prevent device detection entirely.


The Importance of Pull-Up Resistors

Perhaps the most misunderstood aspect of I²C hardware design is the pull-up resistor.

Unlike many digital interfaces, I²C uses open-drain outputs.

This means devices can pull signals low, but external resistors are required to return the lines high.

Typical values include:

Voltage Common Value
1.8V 2.2kΩ - 4.7kΩ
3.3V 4.7kΩ
5V 4.7kΩ - 10kΩ

Incorrect resistor selection may cause:

  • Slow signal transitions
  • Communication instability
  • Random failures
  • Detection issues

Many debugging sessions ultimately lead back to pull-up resistor problems.


Common Problems During Hardware Bring-Up

When a new board is powered for the first time, I²C devices often become the source of unexpected issues.

Typical examples include:

Problem Possible Cause
Device Not Found Wrong address
Bus Lockup SDA held low
Intermittent Communication Power instability
Random Read Errors Noise issues
Startup Failure Reset timing problem

Interestingly, software is often blamed first.

In reality, hardware-related causes are extremely common.


Touch Controllers and I²C

Modern displays frequently use high-speed interfaces such as:

  • RGB
  • LVDS
  • MIPI DSI
  • eDP

However, touch controllers often continue using I²C.

Popular examples include:

Controller Interface
GT911 I²C
GT9271 I²C
FT5426 I²C
ILITEK Series I²C

This creates a common debugging situation.

The display shows graphics correctly, but touch functionality does not work.

Because the display and touch interfaces are independent, engineers must diagnose them separately.


PMIC Communication Is Critical

Power Management ICs represent another major use case.

Modern processors often depend on PMIC devices to control:

  • CPU voltage
  • DDR voltage
  • Startup sequencing
  • Battery charging
  • Thermal protection

Communication with these devices is typically performed through I²C.

If PMIC communication fails, symptoms may include:

  • Boot failures
  • Random resets
  • Voltage issues
  • Thermal shutdowns

As a result, I²C can directly influence overall system stability.


I²C and Embedded Linux Debugging

Linux provides several useful tools for I²C debugging.

Detect connected devices:

i2cdetect -y 1
Enter fullscreen mode Exit fullscreen mode

Read a register:

i2cget -y 1 0x68 0x00
Enter fullscreen mode Exit fullscreen mode

Write a register:

i2cset -y 1 0x68 0x00 0x12
Enter fullscreen mode Exit fullscreen mode

Dump device registers:

i2cdump -y 1 0x68
Enter fullscreen mode Exit fullscreen mode

These commands often allow engineers to identify hardware problems without writing custom software.

For board bring-up, they are among the most valuable diagnostic tools available.


Why Long Cables Create Problems

I²C was originally intended for communication between devices located on the same PCB.

As cable length increases, several challenges appear:

Issue Result
Increased Capacitance Slower signal edges
Noise Pickup Communication errors
Reflections Timing instability
Ground Differences Reliability issues

Practical guidelines are often:

Distance Expected Reliability
Under 10 cm Excellent
10-50 cm Usually Good
50 cm-1 m Requires Careful Design
Over 1 m Often Problematic

For longer distances, engineers frequently choose CAN, RS-485, or Ethernet instead.


Comparing I²C and SPI

Both interfaces are widely used in embedded systems.

Choosing between them depends on the application.

Feature I²C SPI
Wiring Simplicity Excellent Moderate
Speed Moderate High
GPIO Usage Low Higher
Device Expansion Easy More Complex
Cost Low Low
Sensor Applications Excellent Good

I²C is usually preferred for configuration and monitoring tasks.

SPI is generally preferred for high-speed data transfer.


Why Industrial Products Continue Using I²C

Industrial products often remain in service for many years.

Manufacturers value:

  • Reliability
  • Proven technology
  • Long-term component availability
  • Predictable behavior
  • Ease of maintenance

I²C performs well in all of these areas.

Its age has become a strength rather than a weakness.

Decades of deployment have produced:

  • Mature drivers
  • Stable hardware designs
  • Extensive engineering experience

This reduces development risk.

For industrial products, reducing risk is often more important than increasing speed.


Looking Forward

Many technologies disappear after a few years.

I²C has survived for more than four decades.

The reason is simple.

Embedded systems will always contain devices that need:

  • Configuration
  • Monitoring
  • Low-speed communication

These tasks do not require high bandwidth.

They require reliability and simplicity.

As long as embedded products continue using sensors, PMICs, EEPROMs, and control devices, I²C will remain relevant.


Conclusion

I²C is one of the most influential communication buses in embedded electronics despite receiving relatively little attention.

It enables processors to communicate with the components responsible for sensing, power management, storage, touch input, and system monitoring.

Its low hardware complexity, minimal signal requirements, mature software ecosystem, and proven reliability continue to make it a preferred solution across industrial, medical, consumer, and Linux-based embedded systems.

New interfaces will continue to emerge, but few provide the same combination of simplicity, flexibility, and practical value that has allowed I²C to remain a cornerstone of embedded hardware design for more than forty years.

Top comments (0)