{
  "compatibility_notes": "Logic thresholds scale with VDDIO (VIH >= 0.7 * VDDIO, VIL <= 0.3 * VDDIO). The host interface supports only 7-bit slave addresses 0x68 and 0x69. The same physical pins (AP_SCL, AP_SDA, AP_CS, AP_SDO) are multiplexed across I3C, I2C, and SPI; pick one host protocol per board design. Unlike the Bosch BMI270, the ICM-42688-P does NOT expose an AUX I2C master for an external magnetometer.",
  "previewArtifactId": "art_thumbnail",
  "usage_notes": "ICM-42688-P is a bare LGA-14 IC, not a ready-to-wire breakout. Use it when the PCB can support the TDK LGA-14 footprint, local decoupling, and a 1.71 V to 3.6 V logic-level host. The simplest configuration is I2C with AP_CS tied to VDDIO and AP_AD0 strapped for address selection. For lowest noise and tightest ODR accuracy, drive a 32 kHz CLKIN on pin 9 and use SPI at up to 24 MHz.",
  "design_rules": [
    "Tie pin 12 (AP_CS) to VDDIO when operating in I3C or I2C mode; pin 12 is SPI chip select only when SPI is selected.",
    "For I2C/I3C address selection, pull pin 1 (AP_AD0) to GND for 0x68 or to VDDIO for 0x69.",
    "External pull-up resistors to VDDIO are required on AP_SDA and AP_SCL when using I2C.",
    "Place a 100 nF decoupling capacitor close to pin 5 (VDDIO) and 100 nF (plus 2.2 uF bulk recommended) close to pin 8 (VDD).",
    "Pin 7 (RESV) must be tied to GND. Pins 2, 3, 10, 11 (RESV) may be left No Connect or tied to GND.",
    "Pin 9 (INT2/FSYNC/CLKIN) provides exactly one function at a time; if unused, tie to GND.",
    "VDD and VDDIO supplies should both lie within 1.71 V to 3.6 V; both supplies must be present for proper operation."
  ],
  "application_examples": [
    "AR/VR/XR head and controller motion tracking.",
    "Robotics pose, vibration, and gesture sensing.",
    "High-performance IoT motion analytics.",
    "Industrial and consumer inertial measurement where CLKIN-based timing accuracy is required."
  ],
  "metadata": {
    "name": "TDK InvenSense ICM-42688-P",
    "version": "1.0",
    "part_number": "ICM-42688-P",
    "description": "TDK InvenSense ICM-42688-P is a high-precision 6-axis MEMS MotionTracking IMU combining a 3-axis gyroscope and 3-axis accelerometer with selectable gyro full-scale ranges from +/-15.625 dps to +/-2000 dps and accelerometer ranges from +/-2 g to +/-16 g. It supports host interfaces of I3C (up to 12.5 MHz), I2C (up to 1 MHz), and SPI (up to 24 MHz), a 2 KB FIFO, programmable INT1 and INT2 (with FSYNC / CLKIN multiplexed on INT2), and APEX motion functions including pedometer, tap, tilt, wake-on-motion, and significant motion detection.",
    "datasheet_url": "https://product.tdk.com/system/files/dam/doc/product/sensor/mortion-inertial/imu/data_sheet/ds-000347-icm-42688-p-v1.6.pdf",
    "thumbnail": "https://storage.googleapis.com/protoboard-delta.firebasestorage.app/protoparts/icm-42688-p/thumbnail.png",
    "taxonomy": [
      "sensor.motion"
    ],
    "id": "icm-42688-p",
    "type": "sensor",
    "schema_version": "1.5.0",
    "manufacturer": "TDK InvenSense",
    "tags": [
      "icm-42688-p",
      "icm42688",
      "tdk",
      "invensense",
      "imu",
      "accelerometer",
      "gyroscope",
      "6-axis",
      "i2c",
      "spi",
      "i3c",
      "fifo",
      "interrupts",
      "fsync",
      "clkin",
      "apex",
      "motion-tracking"
    ]
  },
  "warnings": [
    "This is a fine-pitch surface-mount LGA IC and is not suitable for solderless breadboard use without a breakout board.",
    "Pin 7 RESV must be connected to GND; floating it can cause unspecified behavior.",
    "VDD and VDDIO must be applied per the datasheet power-up sequence; absolute-max VDD/VDDIO is 3.96 V.",
    "Current, noise, and timing specs depend on selected power mode, ODR, filters, and VDDIO level."
  ],
  "artifacts": [
    {
      "size": 27745,
      "name": "ICM-42688-P product photo (DigiKey)",
      "id": "art_product_image",
      "mimeType": "image/jpeg",
      "storagePath": "protoparts/icm-42688-p/artifacts/art_product_image.jpg",
      "url": "https://storage.googleapis.com/protoboard-delta.firebasestorage.app/protoparts/icm-42688-p/artifacts/art_product_image.jpg",
      "type": "image"
    },
    {
      "name": "TDK InvenSense ICM-42688-P thumbnail",
      "id": "art_thumbnail",
      "url": "https://storage.googleapis.com/protoboard-delta.firebasestorage.app/protoparts/icm-42688-p/thumbnail.png",
      "type": "image"
    }
  ],
  "domains": [
    {
      "metadata": {
        "gyroscope_noise_density_mdps_rt_hz": 2.8,
        "gyroscope_odr_hz": [
          12.5,
          32000
        ],
        "accelerometer_noise_density_ug_rt_hz": 70,
        "i2c_addresses_7bit": [
          "0x68",
          "0x69"
        ],
        "gyroscope_ranges_dps": [
          15.625,
          31.25,
          62.5,
          125,
          250,
          500,
          1000,
          2000
        ],
        "fifo_size_bytes": 2048,
        "i2c_max_frequency_hz": 1000000,
        "package_type": "LGA-14",
        "esd_hbm_kV": 2,
        "i3c_max_frequency_hz": 12500000,
        "accelerometer_ranges_g": [
          2,
          4,
          8,
          16
        ],
        "spi_max_frequency_hz": 24000000,
        "logic_levels": {
          "vil_max": "0.3*VDDIO",
          "vih_min": "0.7*VDDIO"
        },
        "esd_cdm_V": 500,
        "accelerometer_odr_hz": [
          1.5625,
          32000
        ],
        "low_noise_6axis_current_mA": 0.88
      },
      "domain": "electrical",
      "power_consumption_mW": 1.584,
      "pin_count": 14,
      "supply_voltage_V": [
        1.71,
        3.6
      ],
      "interfaces": [
        {
          "requires": [
            {
              "function": "SCL",
              "count": 1
            },
            {
              "count": 1,
              "function": "SDA"
            },
            {
              "function": "Addr",
              "count": 1
            }
          ],
          "name": "Host I2C",
          "id": "i2c_slave",
          "constraints": {
            "max_connections": 1,
            "requires_matching_voltage_domain": true,
            "max_lane_rate_mbps": 1
          },
          "protocol": {
            "role": "slave",
            "type": "i2c"
          },
          "description": "I2C target interface, fast-mode-plus up to 1 MHz. Pin mapping: pin 13 SCL, pin 14 SDA, pin 1 Addr/AP_AD0 strap. 7-bit slave address is 0x68 when AP_AD0 is pulled low, 0x69 when pulled high. Pin 12 (AP_CS) must be tied to VDDIO for I2C mode; SCL and SDA require external pull-ups to VDDIO."
        },
        {
          "description": "SPI 4-wire target interface up to 24 MHz, mode 0/3. Pin mapping: pin 12 CS/AP_CS, pin 13 SCLK/AP_SCLK, pin 14 MOSI/AP_SDI, pin 1 MISO/AP_SDO.",
          "requires": [
            {
              "count": 1,
              "function": "CS"
            },
            {
              "count": 1,
              "function": "SCLK"
            },
            {
              "function": "MOSI",
              "count": 1
            },
            {
              "function": "MISO",
              "count": 1
            }
          ],
          "constraints": {
            "max_connections": 1,
            "requires_matching_voltage_domain": true,
            "max_lane_rate_mbps": 24
          },
          "protocol": {
            "role": "slave",
            "type": "spi"
          },
          "name": "Host SPI 4-Wire",
          "id": "spi_4wire_slave"
        },
        {
          "constraints": {
            "requires_matching_voltage_domain": true,
            "max_lane_rate_mbps": 24,
            "max_connections": 1
          },
          "protocol": {
            "role": "slave",
            "type": "spi"
          },
          "name": "Host SPI 3-Wire",
          "id": "spi_3wire_slave",
          "requires": [
            {
              "count": 1,
              "function": "CS"
            },
            {
              "function": "SCLK",
              "count": 1
            },
            {
              "function": "MOSI/MISO",
              "count": 1
            }
          ],
          "description": "SPI 3-wire target interface up to 24 MHz. Pin mapping: pin 12 CS/AP_CS, pin 13 SCLK/AP_SCLK, pin 14 MOSI/MISO via AP_SDIO. Pin 1 AP_SDO/MISO is unused in this mode."
        },
        {
          "description": "MIPI I3C SDR target interface, up to 12.5 MHz SCL. Pin mapping: pin 13 SCL/AP_SCL, pin 14 SDA/AP_SDA, pin 1 Addr/AP_AD0 strap. AP_CS (pin 12) must be tied to VDDIO when using I3C.",
          "requires": [
            {
              "count": 1,
              "function": "SCL"
            },
            {
              "count": 1,
              "function": "SDA"
            },
            {
              "function": "Addr",
              "count": 1
            }
          ],
          "name": "Host I3C",
          "id": "i3c_slave",
          "constraints": {
            "requires_matching_voltage_domain": true,
            "max_lane_rate_mbps": 12,
            "max_connections": 1
          },
          "protocol": {
            "role": "slave",
            "type": "custom"
          }
        },
        {
          "requires": [
            {
              "count": 1,
              "function": "INT1"
            }
          ],
          "name": "Interrupt 1 Output",
          "id": "int1_output",
          "constraints": {
            "max_connections": 1
          },
          "protocol": {
            "role": "output",
            "type": "digital"
          },
          "description": "Programmable interrupt output for data ready, FIFO, motion, and APEX events. Push-pull or open-drain, polarity selectable."
        },
        {
          "requires": [
            {
              "count": 1,
              "function": "INT"
            }
          ],
          "name": "Aggregate Interrupt Output",
          "id": "int_output",
          "constraints": {
            "max_connections": 1
          },
          "protocol": {
            "role": "output",
            "type": "digital"
          },
          "description": "Aggregate interrupt output on pin 4 when all interrupts are mapped to INT. This is the same physical pin as INT1 and is mutually exclusive with using pin 4 as a named INT1-only connection."
        },
        {
          "description": "Programmable interrupt output on pin 9 when not configured as FSYNC or CLKIN. Push-pull or open-drain, polarity selectable.",
          "name": "Interrupt 2 Output",
          "id": "int2_output",
          "constraints": {
            "max_connections": 1
          },
          "protocol": {
            "role": "output",
            "type": "digital"
          },
          "requires": [
            {
              "count": 1,
              "function": "INT2"
            }
          ]
        },
        {
          "requires": [
            {
              "count": 1,
              "function": "FSYNC"
            }
          ],
          "constraints": {
            "max_connections": 1
          },
          "protocol": {
            "role": "input",
            "type": "digital"
          },
          "name": "Frame Sync Input",
          "id": "fsync_in",
          "description": "Optional external frame-sync input on pin 9. Used to timestamp gyro/accel samples against an external strobe (for example a camera VSYNC)."
        },
        {
          "requires": [
            {
              "function": "CLKIN",
              "count": 1
            }
          ],
          "constraints": {
            "max_connections": 1
          },
          "protocol": {
            "role": "input",
            "type": "digital"
          },
          "name": "External Reference Clock",
          "id": "clkin",
          "description": "Optional external reference clock input on pin 9 (32 kHz nominal) used to drive the internal sampling clock and reduce ODR temperature drift / device-to-device variation."
        },
        {
          "description": "1.71 V to 3.6 V core and sensor supply (typical 1.8 V).",
          "requires": [
            {
              "count": 1,
              "function": "VDD"
            },
            {
              "function": "GND",
              "count": 1
            }
          ],
          "name": "VDD Power",
          "id": "vdd_power_in",
          "protocol": {
            "role": "input",
            "type": "power"
          }
        },
        {
          "name": "VDDIO Power",
          "id": "vddio_power_in",
          "protocol": {
            "role": "input",
            "type": "power"
          },
          "requires": [
            {
              "function": "VDDIO",
              "count": 1
            },
            {
              "function": "GND",
              "count": 1
            }
          ],
          "description": "1.71 V to 3.6 V digital I/O supply (typical 1.8 V)."
        }
      ],
      "power_domains": [
        {
          "name": "VDD Core/Sensor Supply",
          "id": "vdd",
          "voltage_range_V": [
            1.71,
            3.6
          ],
          "isolation_type": "non_isolated",
          "nominal_voltage_V": 1.8,
          "ground_reference": "common",
          "max_current_mA": 1,
          "description": "Analog and digital core supply, 1.71 V to 3.6 V (typical 1.8 V). Datasheet table 4.2 lists low-noise-mode 6-axis current consumption of 0.88 mA at typical conditions."
        },
        {
          "nominal_voltage_V": 1.8,
          "description": "Digital I/O supply for the host interface, INT1, and INT2/FSYNC/CLKIN pins. 1.71 V to 3.6 V.",
          "ground_reference": "common",
          "max_current_mA": 1,
          "voltage_range_V": [
            1.71,
            3.6
          ],
          "name": "VDDIO I/O Supply",
          "id": "vddio",
          "isolation_type": "non_isolated"
        }
      ],
      "resources": [
        {
          "power_domain_id": "vddio",
          "description": "AP_SDO / AP_AD0",
          "name": "Pin 1",
          "id": "pin_1",
          "connector_type": "surface_pad",
          "functions": [
            {
              "description": "AP_SDO: SPI serial data output in 4-wire mode.",
              "signal_class": "data",
              "direction": "source",
              "name": "MISO"
            },
            {
              "description": "AP_AD0: I3C/I2C slave address LSB strap.",
              "signal_class": "data",
              "direction": "sink",
              "name": "Addr"
            }
          ],
          "notes": "Pull to GND for 7-bit I2C/I3C slave address 0x68, or to VDDIO for 0x69."
        },
        {
          "description": "RESV",
          "power_domain_id": "vddio",
          "notes": "TDK datasheet pinout table: 'No Connect or Connect to GND'.",
          "name": "Pin 2",
          "id": "pin_2",
          "connector_type": "surface_pad",
          "functions": [
            {
              "description": "Reserved pin; no connect or connect to GND.",
              "name": "RESV"
            }
          ]
        },
        {
          "power_domain_id": "vddio",
          "description": "RESV",
          "connector_type": "surface_pad",
          "functions": [
            {
              "description": "Reserved pin; no connect or connect to GND.",
              "name": "RESV"
            }
          ],
          "name": "Pin 3",
          "id": "pin_3",
          "notes": "TDK datasheet pinout table: 'No Connect or Connect to GND'."
        },
        {
          "description": "INT1 / INT",
          "power_domain_id": "vddio",
          "notes": "Drive type and polarity programmable via INT_CONFIG register.",
          "connector_type": "surface_pad",
          "functions": [
            {
              "direction": "source",
              "name": "INT1",
              "description": "Interrupt 1 output.",
              "signal_class": "data"
            },
            {
              "direction": "source",
              "name": "INT",
              "description": "All interrupts mapped to pin 4.",
              "signal_class": "data"
            }
          ],
          "name": "Pin 4",
          "id": "pin_4"
        },
        {
          "power_domain_id": "vddio",
          "description": "VDDIO",
          "name": "Pin 5",
          "id": "pin_5",
          "connector_type": "surface_pad",
          "functions": [
            {
              "description": "I/O power supply voltage.",
              "signal_class": "power",
              "direction": "sink",
              "name": "VDDIO"
            }
          ],
          "notes": "Place a 100 nF decoupling capacitor close to this pin per TDK application schematic."
        },
        {
          "name": "Pin 6",
          "id": "pin_6",
          "connector_type": "surface_pad",
          "functions": [
            {
              "name": "GND",
              "direction": "sink",
              "signal_class": "ground"
            }
          ],
          "power_domain_id": "vdd",
          "description": "GND"
        },
        {
          "notes": "TDK datasheet pinout table requires this pin to be tied to GND.",
          "connector_type": "surface_pad",
          "functions": [
            {
              "description": "Reserved pin; connect to GND.",
              "name": "RESV"
            },
            {
              "direction": "sink",
              "name": "GND",
              "signal_class": "ground"
            }
          ],
          "name": "Pin 7",
          "id": "pin_7",
          "description": "RESV",
          "power_domain_id": "vdd"
        },
        {
          "notes": "Place a 100 nF (and recommended 2.2 uF bulk) decoupling capacitor close to this pin per TDK application schematic.",
          "connector_type": "surface_pad",
          "functions": [
            {
              "name": "VDD",
              "direction": "sink",
              "description": "Power supply voltage.",
              "signal_class": "power"
            }
          ],
          "name": "Pin 8",
          "id": "pin_8",
          "description": "VDD",
          "power_domain_id": "vdd"
        },
        {
          "name": "Pin 9",
          "id": "pin_9",
          "connector_type": "surface_pad",
          "functions": [
            {
              "description": "Interrupt 2 output.",
              "signal_class": "data",
              "name": "INT2",
              "direction": "source"
            },
            {
              "name": "FSYNC",
              "direction": "sink",
              "description": "Frame sync input.",
              "signal_class": "data"
            },
            {
              "description": "External clock input.",
              "signal_class": "clock",
              "direction": "sink",
              "name": "CLKIN"
            }
          ],
          "notes": "If FSYNC and CLKIN are not used, configure this pin as INT2 output, or tie to GND when unused per datasheet.",
          "power_domain_id": "vddio",
          "description": "INT2 / FSYNC / CLKIN"
        },
        {
          "description": "RESV",
          "power_domain_id": "vddio",
          "notes": "TDK datasheet pinout table: 'No Connect or Connect to GND'.",
          "connector_type": "surface_pad",
          "functions": [
            {
              "name": "RESV",
              "description": "Reserved pin; no connect or connect to GND."
            }
          ],
          "name": "Pin 10",
          "id": "pin_10"
        },
        {
          "description": "RESV",
          "power_domain_id": "vddio",
          "notes": "TDK datasheet pinout table: 'No Connect or Connect to GND'.",
          "name": "Pin 11",
          "id": "pin_11",
          "connector_type": "surface_pad",
          "functions": [
            {
              "name": "RESV",
              "description": "Reserved pin; no connect or connect to GND."
            }
          ]
        },
        {
          "notes": "Connect to VDDIO when using I3C or I2C host interface (per datasheet pinout description).",
          "name": "Pin 12",
          "id": "pin_12",
          "connector_type": "surface_pad",
          "functions": [
            {
              "direction": "sink",
              "name": "CS",
              "description": "AP_CS: SPI chip select.",
              "signal_class": "data"
            },
            {
              "description": "Tie AP_CS to VDDIO when using the I3C or I2C host interface.",
              "signal_class": "power",
              "name": "VDDIO",
              "direction": "sink"
            }
          ],
          "description": "AP_CS",
          "power_domain_id": "vddio"
        },
        {
          "description": "AP_SCL / AP_SCLK",
          "power_domain_id": "vddio",
          "name": "Pin 13",
          "id": "pin_13",
          "connector_type": "surface_pad",
          "functions": [
            {
              "name": "SCL",
              "direction": "sink",
              "description": "AP_SCL: I3C/I2C serial clock.",
              "signal_class": "clock"
            },
            {
              "description": "AP_SCLK: SPI serial clock.",
              "signal_class": "clock",
              "direction": "sink",
              "name": "SCLK"
            }
          ]
        },
        {
          "description": "AP_SDA / AP_SDIO / AP_SDI",
          "power_domain_id": "vddio",
          "notes": "External pull-up resistor to VDDIO required when used as I2C SDA.",
          "name": "Pin 14",
          "id": "pin_14",
          "connector_type": "surface_pad",
          "functions": [
            {
              "description": "AP_SDA: I3C/I2C serial data.",
              "signal_class": "data",
              "direction": "bidirectional",
              "name": "SDA"
            },
            {
              "name": "MOSI/MISO",
              "direction": "bidirectional",
              "description": "AP_SDIO: SPI serial data I/O in 3-wire mode.",
              "signal_class": "data"
            },
            {
              "description": "AP_SDI: SPI serial data input in 4-wire mode.",
              "signal_class": "data",
              "direction": "sink",
              "name": "MOSI"
            }
          ]
        }
      ]
    },
    {
      "resources": [
        {
          "connector_type": "surface_mount",
          "functions": [
            {
              "signal_class": "mechanical_drive",
              "name": "MECHANICAL_MOUNT",
              "direction": "bidirectional"
            }
          ],
          "name": "LGA-14 Package",
          "id": "pkg",
          "description": "Surface-mount 14-pad LGA package body."
        }
      ],
      "interfaces": [
        {
          "description": "Surface-mount LGA-14 solder attachment to PCB land pattern. Package body 2.5 mm x 3.0 mm x 0.91 mm.",
          "protocol": {
            "role": "mounting_point",
            "type": "mechanical_connection"
          },
          "name": "PCB Surface Mount",
          "id": "pcb_mount",
          "requires": [
            {
              "count": 1,
              "function": "MECHANICAL_MOUNT"
            }
          ]
        }
      ],
      "dimensions_mm": {
        "height": 0.91,
        "length": 3,
        "width": 2.5
      },
      "metadata": {
        "requires_special_tools": false,
        "field_serviceable": false,
        "mounting_method": "surface_mount"
      },
      "package_type": "LGA-14",
      "domain": "mechanical"
    },
    {
      "operating_temperature_C": [
        -40,
        85
      ],
      "resources": [],
      "interfaces": [],
      "metadata": {
        "requires_thermal_management": false
      },
      "domain": "thermal"
    }
  ]
}