Using I3C on SAMA7D65
Introduction
MIPI I3C Host Controller
SAMA7D6 has a dedicated one I3C controller. The MIPI I3C Controller (I3CC) implements the protocol functions related to the I3C bus host as defined in the MIPI I3C Specification. The I3CC provides an interface, as specified in MIPI I3C HCI 1.0 Specification, between the system (application) and the I3C bus, allowing communication between I3C devices and legacy I2C devices, with limitations as specified in MIPI I3C Specification. The I3C system ensures reliable transmission and reception of data. The I3C interface is intended to improve upon the features of the I2C interface, while preserving backward compatibility, with some features not supported, such as clock stretching, clock synchronization, High-Speed mode, and 10-bit addressing.
- Supports I3C HCI 1.0 PIO Mode
- Supports Data Transfer to Legacy I2C Devices
- Supports Various Data Rates (FM, FM+, SDR, HDR-DDR)
- 8 Addressable Devices
- Command Queue Comprised of 16 Entries of 32 Bits
- Response Queue Comprised of 8 Entries
- Transmit Data Queue Comprised of 64 Entries of 32 Bits
- Receive Data Queue Comprised of 64 Entries
I/O Lines and Description
| Pin Name | Pin Description | Type |
|---|---|---|
| I3CC_SCL | I3C Serial Clock | I/O |
| I3CC_SDA | I3C Serial Data | I/O |
| I3CC_SDASPUE | I3C Serial Data Pull-up Enable | O |
Defining a I3C Sensor node
The I3C nodes are defined in the DT as per the I3C DT binding Document
- reg: contains 3 cells
+ first cell : encodes the static I2C address. Should be 0 if the device does
not have one (0 is not a valid I2C address).
+ second and third cells: should encode the ProvisionalID. The second cell
contains the manufacturer ID left-shifted by 1.
The third cell contains ORing of the part ID
left-shifted by 16, the instance ID left-shifted
by 12 and the extra information. This encoding is
following the PID definition provided by the I3C
specification.
Reference:
sensor@0,208006c100b {
reg = <0x0 0x208 0x6c100b>;
};
// I3C device with a static I2C address
sensor@68,39200144004 {
reg = <0x68 0x392 0x144004>;
};
Interfacing with STEVAL MKI239A
The STEVAL-MKI239A is an adaptor board designed to facilitate the evaluation of MEMS devices in the LSM6DSV product family. LSM6DSV is a 6-axis inertial measurement unit (IMU) with embedded sensor fusion, I3C, OIS/EIS for smart applications. SPI / I²C & MIPI I3C® v1.1 serial interface with main processor data synchronization.The LSM6DSV offers flexibility to connect the pins in order to have two different mode connections and functionalities.

I3C Adaptor board
The LSM6DSV slave is interfaced to the Ourasi curiosity using the in-house I3C adaptor board which fits on the J25 Mikrobus connector. The schematic for the adaptor board is attached below for reference.

Hardware Setup: Sensor to board


Software Support
From Linux4Microchip-2026.04 Release, DT-overlay file sama7d65_curiosity_i3c_lsm6dsv.dtso supports LSM6DSV sensor
Steps to Test LSM6DSV
To load LSM6DSV from Linux4Microchip-2026.04 release, follow the below steps in the u-boot prompt,
edit: fatload mmc 0:1 0x63000000 sama7d65_curiosity.itb; bootm 0x63000000#kernel_dtb${at91_overlays_config}#lsm6dsv
=> saveenv
Saving Environment to FAT... OK
In contrast to I2C, there is currently no dedicated Linux utility for testing I3C peripheral devices. However, because I3C devices support Dynamic Address Assignment (DAA), they are inherently discoverable and typically do not require entries in the Device Tree. Once discovered under /sys/bus/i3c, a device can be verified by reading its raw angular velocity data (X, Y, and Z axes) from the corresponding sysfs entries to confirm the sensor is functional.