I3C is supported for aDSP sensor communication only. It is not supported for Linux use cases.
Overview
Bus Characteristics
- 2-wire serial interface (SDA + SCL) supporting up to 12.5 MHz
- Backward compatible with legacy I2C devices on the same bus
- Address phase: 400 kHz
- Data phase: 12.5 MHz
Advanced Features
- In-band interrupt (IBI) support
- Hot-join (dynamic device addition)
- Synchronous timing and asynchronous timestamping
- 8-bit data parity during write operations
- Dynamic addressing of targets
- Single Data Rate (SDR) mode
- CCC (Common Command Codes) per MIPI I3C specification
Data Phase Modes
| Mode | Usage |
|---|---|
| Push-pull | I3C-capable devices |
| Open-drain | Mixed bus with I2C devices |

Packet Frame Structure
| Component | Description |
|---|---|
| S / Sr | Start or Repeat Start condition |
| I3C Dynamic Address | 7-bit dynamic address assigned during enumeration |
| R/W | Direction bit (1=Read, 0=Write) |
| ACK | Acknowledge (SDA low) |
| Data | 8-bit data payload |
| T | Transition bit (alternative to ACK/NACK) |
| P | Stop condition |
Bus Initialization
Controller Initialization
The I3C controller driver initializes the controller, including firmware loading and configuration settings.
Configuration and Device Database Reading
The driver reads the I3C configuration and device database:
- List of I2C static address devices
- List of I3C static address devices
- Expected I3C dynamic devices (vendor ID, device ID, predefined dynamic address, associated drivers)
- Optional hot-join allowed devices
Bus Configuration
The driver writes bus configuration to the controller:
- Operation frequency
- Pure/legacy I2C mode
- SDR/HDR enable/disable
- IBI-capable devices and expected data bytes
Software Configuration
Firmware Loading
I3C firmware for the QUP v3 serial engine loads with SSC QUP during aDSP bootup. Configuration files:GPIO Configuration
Default GPIO configuration is set per serial engine in:TLMM_MAP(active_pull, drive_strength, sleep_pull) — I3C uses pull-up active, 2 mA drive, keeper sleep.
APIs
| Header | Purpose |
|---|---|
api/buses/i2c_api.h | I3C/I2C API |
api/buses/qup_common.h | QUP common API |
Troubleshooting
Devices Not Enumerated
Devices Not Enumerated
- Verify SDA/SCL physical connections and pull-up resistors (1–4.7 kΩ)
- Confirm vendor ID and device ID match expected values
Address Phase Timing Issues (400 kHz)
Address Phase Timing Issues (400 kHz)
Symptom: Devices not responding during enumeration.Verify SCL frequency is 400 kHz during address phase. Adjust clock divider settings in firmware configuration if needed.
Data Phase Timing Issues (12.5 MHz)
Data Phase Timing Issues (12.5 MHz)
Symptom: Data corruption or read/write failures.Check bus capacitance — reduce if necessary. Verify SCL frequency is 12.5 MHz during data phase.
Hot-Join Not Working
Hot-Join Not Working
- Verify hot-join is enabled in configuration
- Add device to the hot-join allowed list (vendor ID + device ID)
- Check IBI configuration and device power-up sequence
Mixed I2C/I3C Bus Problems
Mixed I2C/I3C Bus Problems
- Verify bus mode (pure vs. legacy I2C)
- Check for address conflicts between I2C and I3C devices
- Confirm open-drain vs. push-pull mode switching is correct
IBI (In-Band Interrupt) Not Received
IBI (In-Band Interrupt) Not Received
- Enable IBI for the specific device in configuration
- Configure the correct number of expected data bytes
- Verify interrupt handler registration
Signal Integrity Issues
Signal Integrity Issues
Symptom: Intermittent communication failures.
- Measure rise/fall times on SDA and SCL
- Adjust pull-up resistor values
- Add series termination resistors
- Reduce bus length or capacitance
Common Error Codes
| Error | Description | Solution |
|---|---|---|
ENXIO | Device not found | Verify connection and enumeration |
ETIMEDOUT | Transfer timeout | Check clock signals and device power |
EIO | I/O error | Check signal quality and pull-ups |
EBUSY | Resource busy | Check for bus arbitration conflicts |
EPROTO | Protocol error | Verify timing parameters and protocol compliance |
Resources
- MIPI I3C Specification
- Qualcomm Linux Interfaces Guide
- QUP v3 Serial Engine Documentation

