The ICM-20948 is a 9-axis motion-tracking IMU that combines a 3-axis gyroscope, a 3-axis accelerometer, and a 3-axis magnetometer in a single compact package, alongside an onboard Digital Motion Processor (DMP) for sensor fusion. By measuring rotational movement, acceleration, and magnetic field direction, it provides accurate motion tracking, orientation sensing, and heading information at extremely low power.
This makes the ICM-20948 ideal for applications that demand full 9-degrees-of-freedom (9-DOF) motion sensing under tight power budgets, such as smartphones, tablets, wearable sensors, drones, robotics, and IoT devices. Its compact size, ultra-low power consumption, and onboard sensor fusion have made it a popular successor to older 9-axis IMUs in embedded projects.
What is ICM-20948?

The ICM-20948 is constructed as a multi-chip module (MCM), consisting of two separate silicon dies integrated into a single QFN package. One die houses the 3-axis gyroscope, the 3-axis accelerometer, and the Digital Motion Processor (DMP); the other die houses the AK09916 3-axis magnetometer. Together, this gives the ICM-20948 full 9-axis MotionTracking in a compact 3 × 3 × 1mm QFN package.
The onboard DMP handles sensor fusion internally, combining gyroscope, accelerometer, and magnetometer data using run-time calibration firmware, and passes the result to the host over I²C or SPI. The device also includes an auxiliary I²C link for external sensors, on-chip 16-bit ADCs, programmable digital filters, an embedded temperature sensor, and programmable interrupts.
Watch out for fakes: As with other popular IMUs, counterfeit or mislabeled units circulate on the market. Always verify the WHO_AM_I register value against the official register map before trusting a new module in production.
ICM-20948 overview
| Parameter | Value |
|---|---|
| Sensor Type | 9-Axis IMU (Gyroscope + Accelerometer + Magnetometer) |
| Construction | Multi-chip module (MCM), 2 dies |
| Magnetometer | AK09916 (separate die) |
| Supply Voltage (VDD) | As low as 1.71V |
| Communication | I²C / SPI (up to 7MHz) |
| I²C Address | 0x68 or 0x69 (AD0 selectable) |
| ADC Resolution | 16-bit (gyro/accel) |
| Onboard DMP | Yes |
| Temperature Sensor | Yes (onboard) |
| FIFO Buffer | 512 bytes (varies with DMP feature set) |
| Auxiliary I²C | Yes — for external sensors |
| Package | 3 × 3 × 1mm QFN (24-pin) |
| Compatible Boards | Arduino, ESP32, Raspberry Pi |
Pinout

ICM-20948 breakout pinout (12-pin)
| Pin | Name | Type | Description |
|---|---|---|---|
| 1 | FS | Input | FSYNC — frame sync input; leave floating if unused |
| 2 | AD | Input | AD0 — I²C address select |
| 3 | AC | I/O | AUX_DA — auxiliary I²C data, for external sensors |
| 4 | G | Input | AUX_CL — auxiliary I²C clock, for external sensors |
| 5 | SDO | Output | SPI data out / alternate I²C address line |
| 6 | CS | Input | SPI chip select — active LOW; tie high for I²C mode |
| 7 | VIN | Power | Supply input — 3.3V to 5V |
| 8 | 1V8 | Output | REGOUT — internal 1.8V regulated rail (output only, do not drive externally) |
| 9 | GND | Power | Ground |
| 10 | SCL | Input | I²C clock / SPI clock |
| 11 | SDA | I/O | I²C data / SPI data in |
| 12 | INT | Output | Interrupt output — signals when new data is ready |
Working principle
The ICM-20948 contains three independent MEMS sensing systems — gyroscope, accelerometer, and magnetometer — feeding into dedicated 16-bit ADCs and a shared onboard DMP.
Gyroscope Measures angular rate around each axis using a user-programmable full-scale range with multiple selectable sensitivity settings. Integrating this data over time yields angular position but accumulates drift without correction from the accelerometer and magnetometer.
Accelerometer Measures linear acceleration along each axis, including gravity, also with a user-programmable full-scale range. Used to determine tilt angle and correct long-term gyroscope drift.
Magnetometer (AK09916) A separate die housing a 3-axis magnetometer with a measurement range of up to roughly ±4900µT. Measures the Earth’s magnetic field to determine absolute heading, solving the yaw drift problem that the gyroscope and accelerometer cannot correct alone.
DMP and sensor fusion: The onboard DMP processes complex motion algorithms, including sensor fusion that combines all three sensors into a complete orientation picture, along with run-time calibration firmware that continuously refines accuracy. Output can be delivered as raw sensor values or as fused orientation data, selectable through register configuration.
Auxiliary I²C bus: The device can act as an I²C master to optional external sensors connected to its auxiliary bus, though it has limited master capabilities and depends on the host system processor to handle initial configuration of those auxiliary sensors.
ICM-20948 module construction
Sensor IC A multi-chip module consisting of two dies in a single 3 × 3 × 1mm QFN package. One die houses the gyroscope, accelerometer, and DMP; the other houses the AK09916 magnetometer. All 9 sensing axes, their ADCs, the DMP, FIFO buffer, temperature sensor, and both I²C and SPI interface logic are contained within this single package.
Onboard Voltage Regulator and Logic Shifting Because the bare IC runs natively at a low core voltage, most breakout modules include an onboard regulator plus logic-shifting circuitry so the board communicates cleanly with either 3.3V or 5V host systems without extra external components.
Pull-up Resistors Onboard pull-up resistors on the SDA, SCL, and nCS lines hold them at a high logic level when idle, as required by the I²C and SPI protocols.
Pull-down / Default-State Resistors Onboard resistors on FSYNC and AD0 set their default idle states, which can be overridden externally if a different address or sync behavior is needed.
Decoupling Capacitors Filter high-frequency noise on the supply rails. Clean power directly affects the accuracy of integrated angle calculations, since supply noise shows up as timing jitter.
Specifications
Internal Components of the ICM-20948 module
| Parameter | Value |
|---|---|
| Supply Voltage | As low as 1.71V |
| Communication | I²C / SPI |
| SPI Speed | Up to 7MHz |
| ADC Resolution | 16-bit (gyroscope/accelerometer) |
| Gyroscope | Multiple selectable full-scale ranges |
| Accelerometer | Multiple selectable full-scale ranges |
| Magnetometer | AK09916, up to ~±4900µT range |
| FIFO Buffer | 512 bytes (DMP feature-set dependent) |
| DMP | Yes — motion fusion + run-time calibration |
| Temperature Sensor | Yes (onboard) |
| Auxiliary I²C | Yes, limited master capability |
| Package | 24-pin QFN, 3 × 3 × 1mm |
| RoHS | Compliant |
Helpful resources
- Download the datasheet: here
- ICM-20948 with Arduino
- ICM-20948 with ESP32
- ICM-20948 with Raspberry Pi