# I3C
Source: [https://docs.qualcomm.com/doc/80-70015-8/topic/i3c.html](https://docs.qualcomm.com/doc/80-70015-8/topic/i3c.html)
The improved interintegrated circuit (I3C) interface has been developed to provide a
fast, low-cost, low-power, 2-wire digital interface for connected I3C devices. The I3C
interface is intended to improve upon the features of the I2C interface, preserving
backward compatibility.
The 2-wire serial interface supports up to 12.5 MHz. Legacy I2C devices co-exist on the
same bus. The I3C bus supports the in‑band support and hot join. Synchronous timing
support and asynchronous time stamping. During the write operation, the transition bit
is of 8‑bit data parity. During read, the controller uses the transition bit to either
proceed with the next data or abort the read.
The data phase can be either push-pull or open-drain, based on the I3C capability of the
device (for mixed bus, the I3C controller can address the I2C target).
- The address followed by the START condition is open-drain (arbitration
phase).
- The address followed by a repeated START condition is push-pull.
The following figure illustrates the I3C hardware and software entities.
Figure : I3C block diagram
The main features of the I3C architecture are as follows:
- I3C controller driver software – software-privileged entity, capable of
enumeration and bus configuration.
- I3C client software – software entities that use the I3C bus for read/write to
devices.
### I3C packet frame structure
A frame begins with START, command (8), data (8), transition (1), and STOP.
Figure : I3C packet frame
Where,
- ACK: Acknowledge (SDA low)
- S: Start condition
- Sr: Repeat start condition
- P: Stop condition
- T: Transition bit alternative to ACK/NACK
Figure : I3C sequence

### I3C bus initialization
The I3C bus initialization procedure is as follows:
1. The I3C controller driver software initializes the I3C controller (firmware
and configuration settings).
2. The I3C controller driver software reads the I3C configuration and the
device database, including:
- List of I2C static address devices.
- List of I3C static address devices.
- List of expected I3C dynamic devices: vendor ID, device ID,
predefined dynamic address, and associated drivers.
- Optional hot-join allowed devices (vendor ID, device ID, and
predefined address).
3. Using the I3C controller software, the driver enumerates the devices on the
bus (set local addresses).
4. The I3C controller driver software writes an I3C controller with the
required devices and the bus characteristic information:
- Operation frequency
- Pure/legacy I2C mode
- SDR/HDR enable/disable (and types)
- IBI capable devices and expected data bytes
5. The I3C client software stack receives the following information about the
I3C configuration and device database.
- List of I2C, static address devices.
- List of I3C, static address devices.
- List of expected I3C dynamic devices: vendor ID, device ID,
predefined dynamic address, and associated drivers.
- Optional hot-join allowed devices (vendor ID, device ID, and
predefined address).
## I3C features
Source: [https://docs.qualcomm.com/doc/80-70015-8/topic/i3c.html](https://docs.qualcomm.com/doc/80-70015-8/topic/i3c.html)
The aDSP/SDC I3C subsystem supports the following features.
- Address phase at frequency 400 kHz.
- Data phase at frequency 12,500 kHz.
- Backward compatibility with legacy I2C.
- Dynamic addressing of targets.
- Single data rate (SDR) mode.
- CCC commands according to the MIPI I3C specification
## I3C interface
Source: [https://docs.qualcomm.com/doc/80-70015-8/topic/i3c.html](https://docs.qualcomm.com/doc/80-70015-8/topic/i3c.html)
I3C use cases in the aDSP/SLPI software support sensor device communication.
Note: I3C does not support Linux use cases.
The software
driver and the configuration support for the I3C functionality for device communication
are listed in the following table.
Table : aDSP/SLPI/SDC
| File type | Description |
| --- | --- |
| QUP v3 serial engine configuration | For QUP v3 serial engine configuration settings in the aDSP subsystem
to enable the I3C interface, see the following file paths.