Skip to content

ICM-42688-P

TDK InvenSense ICM-42688-P 6-axis IMU (accelerometer + gyroscope + temperature).

Live catalog

Prefer labwired_describe with the catalog id over guessing pins or addresses.

Status at a glance

Aspect Status
Catalog id icm42688
Bus I²C
Address 0x68 (AP_AD0 low); 0x69 (AP_AD0 high)
Source configs/devices/icm42688.yaml (declarative, no Rust model)
Datasheet TDK InvenSense DS-000347, User Bank 0 register map; cross-checked against Zephyr icm4268x_reg.h
Tier smoke-proven (register-level tests: crates/core/tests/everyday_sensor_set.rs)

Pins / attachment

Pin / net Role
SDA I²C SDA
SCL I²C SCL
VDD/GND Power (digital twin)

Support matrix

Behavior Status Notes
WHO_AM_I 0x75 = 0x47 ✅
Accel / gyro / temp data (0x1D..0x2A, int16 BE) ✅ Sensitivity follows ACCEL_FS_SEL / GYRO_FS_SEL; saturates at ±32767
Sensor power modes (PWR_MGMT0) ✅ Data reads the datasheet's 0x8000 while a sensor is off
DATA_RDY_INT (INT_STATUS) ✅ 1 ms after power-on of a sensor; INT_STATUS clear-on-read; RESET_DONE at power-up
REG_BANK_SEL (0x76) ⚠️ Switches banks; only bank 0 is modelled
FIFO, APEX, timestamps, INT pins ❌
SENSOR_DATA_ENDIAN = 0 ❌ Stored; data stays big-endian
Analog / power ❌ Bench

Stimulus

Host inputs: accel_x/y/z (g), gyro_x/y/z (dps), temperature (°C).

How to run

  1. Place the part and an MCU in Playground, or add it to a system YAML:
    external_devices:
      - id: "icm42688"
        type: "icm42688"
        connection: "i2c0"   # the bus id your chip system uses
    
  2. Agent: labwired_list → labwired_describe id=icm42688 → wire → labwired_validate → labwired_run / labwired_verify.
  3. Register-level smoke: cargo test -p labwired-core --test everyday_sensor_set — WHO_AM_I 0x47; accel Z 0x8000 while off; 2048 counts at 1 g on ±16 g after PWR_MGMT0 = 0x0F. The same file's negative control proves the check fails against a part that answers only 0x00 or only 0xFF.

Limitations

  • Banks 1–4 read 0x00.
  • ODR / filter settings are stored but inert; data-ready period is always 1 ms.

See the YAML header for the full datasheet trace and every named approximation.