Overview

The MPU9250 is a 9-axis MotionTracking System in Package (SiP) manufactured by InvenSense (TDK). It combines two dies into a single 3×3×1 mm3\times 3\times 1\text{ mm} QFN package: an MPU6500 (containing a 3-axis 16-bit accelerometer and 3-axis 16-bit gyroscope) and an AK8963 3-axis 16-bit digital magnetometer (compass).

It replaces the legacy MPU6050 + HMC5883L dual-chip setups, providing complete 9-DOF orientation sensing for drones (INAV, Betaflight, ArduPilot), robotics, and VR motion tracking over I2C or high-speed SPI (up to 20 MHz).

Quick reference

Module VCC3.3 V to 5.0 V DC (onboard 3.3V LDO)
Chip VDD / VDDIO2.4 V to 3.6 V DC
Degrees of Freedom (DOF)9-DOF (3-axis Accel + 3-axis Gyro + 3-axis Magnetometer)
Accelerometer Full-Scale Ranges±2g,±4g,±8g,±16g\pm 2g, \pm 4g, \pm 8g, \pm 16g
Gyroscope Full-Scale Ranges±250,±500,±1000,±2000/s\pm 250, \pm 500, \pm 1000, \pm 2000^\circ\text{/s}
Magnetometer Full-Scale Range±4900 μT\pm 4900\text{ }\mu\text{T} (16-bit resolution, 0.6 μT/LSB0.6\text{ }\mu\text{T/LSB})
Communication interfacesI2C (default 0x68, alternate 0x69, up to 400 kHz), SPI (up to 20 MHz)
FIFO Buffer512-byte FIFO buffer

Pinout

Standard GY-9250 10-Pin Breakout Header

PinNameTypeDescription
1VCCPowerSupply voltage (+3.3 V to +5.0 V DC)
2GNDPowerGround (0 V)
3SCL / SCLKDigital InputI2C Serial Clock / SPI Serial Clock
4SDA / SDIDigital I/OI2C Serial Data / SPI Data Input (MOSI)
5EDA / AUX_DADigital I/OAuxiliary I2C Data line (for external barometer)
6ECL / AUX_CLDigital OutputAuxiliary I2C Clock line
7AD0 / SDODigital I/OI2C Address bit 0 (LOW = 0x68, HIGH = 0x69) / SPI Data Output (MISO)
8INTDigital OutputInterrupt output pin
9NCS / CSDigital InputSPI Chip Select (HIGH = I2C Mode, LOW = SPI Mode)
10FSYNCDigital InputFrame Sync input (tie to GND if unused)

Specifications

ParameterSymbolMinTypMaxUnitConditions
Supply Voltage (Chip)VDDV_{DD}2.43.03.6VDC
Operating Current (9-axis)IDDI_{DD}3.54.5mAFull 9-axis active mode
Gyro Noise DensityNgyroN_{gyro}0.01dps/√Hzf=10 Hzf = 10\text{ Hz}
Accel Noise DensityNaccelN_{accel}300µg/√Hz
Mag ResolutionRESmagRES_{mag}0.6µT/LSB16-bit mode
SPI Clock FrequencyfSPIf_{SPI}20MHzRead registers mode

Internal AK8963 Magnetometer I2C Bypass Setup

The internal AK8963 magnetometer is connected to an auxiliary internal I2C bus inside the MPU9250 package. To access the AK8963 directly from the host MCU:

  1. Write 0x02 to register 0x37 (INT_PIN_CFG register: Bit 1 BYPASS_EN = 1).
  2. The AK8963 magnetometer becomes directly accessible on the main I2C bus at 0x0C.
  3. Read AK8963 Device ID from register 0x00 of address 0x0C (returns 0x48).

Wiring

MPU9250 Breakout PinMicrocontroller (Arduino / ESP32)
VCC3.3V (or 5V)
GNDGND
SCLSCL (A5 on Uno, GPIO22 on ESP32)
SDASDA (A4 on Uno, GPIO21 on ESP32)
NCS3.3V (keep HIGH for I2C mode)
AD0GND (sets default I2C address 0x68)

Common mistakes

  • Forgetting to enable I2C Bypass Mode: Attempting to communicate with the AK8963 magnetometer at I2C address 0x0C before enabling BYPASS_EN on register 0x37 will fail with I2C address errors.
  • Floating SPI Chip Select (NCS): Leaving NCS disconnected can cause the MPU9250 to inadvertently drop out of I2C mode into SPI mode due to noise. Tie NCS to VCC when using I2C.
  • Reading AK8963 status register (ST2) omission: After reading 6 bytes of magnetometer data (0x030x08), software MUST read register 0x09 (ST2) to unlock the data registers for the next measurement conversion.

Notes

  • For high-speed Flight Controller applications (>1 kHz>1\text{ kHz} update loop), use 4-wire SPI mode instead of I2C.

Assets & downloads