component
BMM350
Public Made by Adomby adom
Bosch Sensortec Specialized Sensors, WLCSP-9(1.3x1.3). Pinout cross-checked by two models against the datasheet, KiCad symbol/footprint/3D.
← Commit history
README.mdadded+233@@ -0,0 +1,233 @@+**Source:** [Bosch Sensortec Datasheet (BST-BMM350-DS001-27)](https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bmm350-ds001.pdf)+**Manufacturer:** Bosch Sensortec+**Part Number:** BMM350+**Document:** BST-BMM350-DS001-27 — Rev 1.27, February 2025++## Description++The BMM350 is a high-performance 3-axis geomagnetic sensor based on Bosch Sensortec's proprietary TMR (tunnel magnetoresistance) technology. It measures magnetic field strength in three perpendicular axes and is designed for demanding consumer applications such as electronic compass, tilt-compensated navigation, augmented/virtual/mixed reality, image stabilization, indoor navigation, dead-reckoning, and robotics.++An evaluation ASIC converts the TMR transducer output to 21-bit digital results accessible over I2C or I3C interfaces. Each device is factory-calibrated and compensated via an on-chip OTP and a host-side API. The BMM350 features an excellent temperature behavior with outstanding low temperature coefficients of offset (TCO) and sensitivity (TCS). The ultra-small WLCSP package (1.28 x 1.28 x 0.5 mm) makes it ideal for space-constrained mobile and wearable designs.++## Key Specifications++| Parameter | Value |+| --- | --- |+| Magnetic Field Range | +/-2000 uT (all axes) |+| Field Resolution | ~0.1 uT |+| Output Noise (X/Y, RMS) | 190 nT @ ODR=100 Hz, avg=2 |+| Output Noise (Z, RMS) | 450 nT @ ODR=100 Hz, avg=2 |+| Supply Voltage (VDD) | 1.72V to 1.98V |+| I/O Supply Voltage (VDDIO) | 1.72V to 3.6V |+| Current (Normal, 100 Hz) | 200 uA typical (regular power) |+| Current (Suspend) | 1.8 uA typical |+| Output Data Rates | 1.5625 Hz to 400 Hz |+| Data Resolution | 21-bit signed integer |+| Digital Interface | I2C (up to Fast+ mode), I3C (SDR up to 12.5 MHz) |+| Operating Temperature | -40 C to +85 C |+| Package | WLCSP 9-ball, 1.28 x 1.28 x 0.5 mm |+| Pin Count | 9 |++## Features++- 3-axis magnetic field sensing based on proprietary TMR technology+- Ultra-small WLCSP package: 1.28 x 1.28 x 0.5 mm (9-ball, 0.4 mm pitch)+- Digital interfaces: I2C (standard/fast/fast+) and I3C (SDR, 12.5 MHz) with in-band interrupt+- Wide VDDIO range from 1.72V to 3.6V for flexible system integration+- Ultra-low power: 200 uA typical at 100 Hz ODR (regular power preset)+- Four noise/power presets: Low Power, Regular Power, Low Noise, Ultra Low Noise+- Normal mode (periodic) and forced mode (triggered, single-shot) operation+- On-chip interrupt controller with configurable polarity, drive type, and latching+- Automatic magnetic reset for recovery from excessive field exposure+- Built-in self-test for X and Y axis verification+- 24-bit sensortime counter with 40 us resolution+- Factory-calibrated with OTP compensation coefficients+- Comprehensive C API for rapid host integration+- I2C watchdog for communication fault recovery+- RoHS compliant and halogen-free++## Pin Configuration++| Pin | Name | Type | Description |+| --- | --- | --- | --- |+| C1 | VDD | Power | Digital and analog supply (1.72V to 1.98V), use 100 nF decoupling capacitor |+| B3 | VDDIO | Power | I/O supply (1.72V to 3.6V), use 100 nF decoupling capacitor |+| B1 | GND | Power | Analog, digital and I/O ground |+| A3 | SCK | Digital | I2C / I3C serial clock (SCL) |+| A2 | SDA | Digital | I2C / I3C serial data (SDA) |+| A1 | INT | Output | Interrupt output (push-pull or open-drain, configurable polarity) |+| B2 | ADSEL | Input | I2C address LSB select; connect to GND (0x14) or VDDIO (0x15) |+| C2 | CRST | Analog | External 2.2 uF capacitor for magnetic reset (low-inductance, low-ESR) |+| C3 | BYPASS | Power | Connect to ground |++## Absolute Maximum Ratings++| Parameter | Condition | Min | Max | Unit |+| --- | --- | --- | --- | --- |+| VDD Pin Voltage | — | -0.3 | 2 | V |+| VDDIO Pin Voltage | — | -0.3 | 3.6 | V |+| Non-Supply Pin Voltage | — | -0.3 | VDDIO + 0.3 | V |+| Operating Temperature | Active operation | -40 | +85 | C |+| Storage Temperature | <=65% rel. humidity | -50 | +125 | C |+| OTP Data Retention | T = 85 C | — | 10 | years |+| Mechanical Shock | Duration <=500 us | — | 20,000 | g |+| ESD (HBM) | Any pin | — | +/-2 | kV |+| ESD (CDM) | — | — | +/-500 | V |+| Latch-up | — | — | +/-100 | mA |+| Magnetic Field | Any direction | -250 | 250 | mT |++## Electrical Characteristics++| Parameter | Condition | Min | Typ | Max | Unit |+| --- | --- | --- | --- | --- | --- |+| Supply Voltage VDD | — | 1.72 | — | 1.98 | V |+| Supply Voltage VDDIO | — | 1.72 | — | 3.6 | V |+| Input Low Voltage | I2C/I3C | — | — | 0.3 VDDIO | V |+| Input High Voltage | I2C/I3C | 0.7 VDDIO | — | — | V |+| Output Low Voltage | IOL <= 2 mA | — | — | 0.23 VDDIO | V |+| Output High Voltage | IOH <= 2 mA | 0.8 VDDIO | — | — | V |+| Magnetic Field Range | All axes | -2000 | — | +2000 | uT |+| Zero-Field Offset Drift | Before/after solder | — | — | +/-25 | uT |+| Zero-B Offset (calibrated) | With eCompass SW, RT | — | — | +/-2 | uT |+| Sensitivity Error (X/Y) | After API compensation, RT | — | +/-1 | — | % |+| Sensitivity Error (Z) | After API compensation, RT | — | +/-3 | — | % |+| Sensitivity Temp Drift (TCS) | -40 to +85 C, all axes | — | +/-0.010 | — | %/K |+| TCO Error | -40 to +85 C | — | — | +/-200 | nT/K |+| Hysteresis (X/Y) | RT, after FSS | — | 0.02 | — | %FS |+| Hysteresis (Z) | RT, after FSS, no reset | — | 0.4 | — | %FS |+| Integral Nonlinearity (X/Y) | Deviation from best-fit line | — | — | +/-10 | uT |+| Integral Nonlinearity (Z) | Deviation from best-fit line | — | — | +/-20 | uT |+| Output Noise RMS (X/Y) | ODR=100, avg=2 | — | 190 | — | nT(rms) |+| Output Noise RMS (Z) | ODR=100, avg=2 | — | 450 | — | nT(rms) |+| ODR Drift over Temp | -5 to 65 C | -3 | — | +3 | % |+| ODR Drift over Temp | -40 to 85 C | -4 | — | +4 | % |+| 3 dB Bandwidth | — | — | ODR/2 | — | Hz |+| Startup Time (Suspend to Normal) | — | — | 70 | — | ms |+| Startup Time (OFF to Suspend) | — | — | 2.5 | — | ms |+| Peak Supply Current | Measurement phase, before bit reset | — | 3.5 | — | mA |++## Power Consumption++| Noise Mode | Averaging | ODR 400 Hz | ODR 200 Hz | ODR 100 Hz | ODR 50 Hz | ODR 25 Hz | ODR 12.5 Hz |+| --- | --- | --- | --- | --- | --- | --- | --- |+| Ultra Low Noise | 8 samples (avg=3) | — | — | — | 325 uA | 180 uA | 108 uA |+| Low Noise | 4 samples (avg=2) | — | — | 335 uA | 175 uA | 96 uA | 57 uA |+| Regular Power | 2 samples (avg=1) | — | 370 uA | 190 uA | 100 uA | 55 uA | 33 uA |+| Low Power | 1 sample (avg=0) | 455 uA | 235 uA | 122 uA | 70 uA | 40 uA | 23 uA |+| Suspend Mode | — | — | — | 1.8 uA | — | — | — |++Forced mode maximum trigger rates: avg=1: 200 Hz, avg=2: 150 Hz, avg=4: 80 Hz, avg=8: 40 Hz.++## Communication Interface++The BMM350 supports **I2C** (standard, fast, fast+ modes) and **I3C** (SDR up to 12.5 MHz) digital interfaces. The sensor acts as a slave device on both protocols.++**I2C Address:** 7-bit address is 0x14 (ADSEL=LOW) or 0x15 (ADSEL=HIGH). The 5 MSBs are fixed (00101); bit 1 is OTP-backed (default 0); bit 0 is set by the ADSEL pin level at boot.++**I2C Features:**+- Single and multiple byte write (register address + data pairs, not auto-incremented)+- Single and multiple byte read (auto-incremented addresses)+- 2 dummy bytes prepended to every read (must be discarded)+- Configurable watchdog: short timeout (1.28 ms) or long timeout (40.96 ms)++**I3C Features:**+- SDR mode up to 12.5 MHz clock+- In-band interrupt (IBI) for data-ready signaling+- Timing control asynchronous mode 0 (4.32 MHz internal slave clock)+- Provisional ID: MIPI Member ID 0x03b8, Part ID includes CHIP_ID (0x33)+- Supported CCCs: ENEC, DISEC, RSTDAA, ENTDAA, SETAASA, SETDASA, SETNEWDA, RSTACT, SETXTIME, GETXTIME, GETPID, GETBCR, GETDCR, GETSTATUS, GETCAPS++**Interrupt Configuration:**+- Data-ready interrupt mapped to INT pin (configurable)+- Polarity: active-high or active-low+- Drive type: push-pull or open-drain+- Latching or non-latching (pulsed, 1.25 ms auto-clear)+- I3C in-band interrupt with optional auto-clear of status++## Packages++| Package | Pins | Body Size | Ball Pitch | Height |+| --- | --- | --- | --- | --- |+| WLCSP | 9 | 1.28 mm x 1.28 mm | 0.4 mm | 0.5 mm |++**External Components Required:**+- 100 nF decoupling capacitor on VDD to GND+- 100 nF decoupling capacitor on VDDIO to GND+- 2.2 uF low-inductance, low-ESR capacitor on CRST (recommended: TDK CGB4B3X7R0J225K055AB)++**PCB Design Notes:**+- Reserve 1.3 x 1.3 mm footprint area for the IC+- Peak current up to 400 mA (< 1 us) between CRST capacitor and CRST/GND pins+- VDD pin: 20 mA max short-term, 750 uA max average+- ADSEL pin must not be left floating+- CRST capacitor must have non-magnetic properties++## Software API++The BMM350 is supported by Bosch Sensortec's official C API available at [github.com/boschsensortec/BMM350_SensorAPI](https://github.com/boschsensortec/BMM350_SensorAPI/blob/main/README.md).++**Key API Functions:**+- `BMM350_init()` — Initialize sensor, download OTP compensation data, terminate boot phase+- `BMM350_set_powermode()` — Switch between suspend, normal, and forced modes+- `BMM350_set_odr_performance()` — Configure output data rate and noise/averaging preset+- `BMM350_read_mag_data_and_compensate()` — Read raw data and apply full compensation (offset, gain, temperature)+- `BMM350_check_for_highfield_and_reset()` — Detect excessive field and trigger magnetic reset+- `BMM350_magnetic_reset_and_wait()` — Perform manual magnetic reset (for suspend-mode recovery)+- `BMM350_perform_self_test()` — Run built-in self-test on X and Y channels+- `BMM350_enable_interrupt()` / `BMM350_configure_interrupt()` — Set up data-ready interrupt+- `BMM350_set_int_ctrl_ibi()` — Configure I3C in-band interrupt+- `BMM350_enable_axes()` — Enable/disable individual measurement axes+- `BMM350_set_pad_drive()` — Configure pad driver strength (0=weakest to 7=strongest)+- `BMM350_set_i2c_wdt()` — Enable/configure I2C watchdog+- `BMM350_set_ctrl_user()` — Enable sensortime always-on mode+- `BMM350_soft_reset_and_wait()` — Trigger soft reset (CMD = 0xB6 then 0x00)++**Register Map:** 8-bit register space from 0x00 to 0x7E. Key registers include CHIP_ID (0x00, value 0x33), PMU_CMD (0x06), data registers (0x31-0x3F for X/Y/Z magnetic + temperature + sensortime), INT_CTRL (0x2E), and CMD (0x7E).++**Data Format:** Magnetic and temperature data are provided in 24-bit registers using 21-bit signed integer format. Burst read is mandatory to ensure data consistency (the sensor halts register updates during burst reads).++## Applications++- Magnetic heading information and electronic compass+- Tilt-compensated map rotation and navigation+- Augmented reality (AR), virtual reality (VR), and mixed reality (MR)+- Gyroscope calibration in 9-DoF IMU systems+- Indoor navigation and dead-reckoning (e.g., step counting with accelerometer)+- Platform and image stabilization+- Robotics navigation+- High-end gaming controllers+- Man-machine interfaces++## Key Formulas++### Excessive Field Limit+```+SQRT(Hx^2 + Hy^2 + Hz^2) <= 2000 uT+```+The sum of the vector components must remain within the 2000 uT sphere.++### Self-Test Threshold+```+delta_x = mag_x(during_selftest) - mag_x(before_selftest) >= 130 uT+delta_y = mag_y(during_selftest) - mag_y(before_selftest) >= 130 uT+```++### Sensortime Resolution+```+sensortime_seconds = sensortime_register_value * 40e-6+```+24-bit unsigned counter, wraps around at 2^24 (no saturation). Resolution is 40 us per tick.++### I2C Address Calculation+```+I2C_address = 0b0010_10X (7-bit)+X = ADSEL pin level at boot+ADSEL=LOW -> 0x14+ADSEL=HIGH -> 0x15+```++### Noise Improvement with Averaging+```+noise_rms_improved = noise_rms_single / SQRT(averaging_samples)+averaging_samples = 2^avg (avg = 0,1,2,3 -> 1,2,4,8 samples)+```
page.jsonadded+37@@ -0,0 +1,37 @@+{+ "schema_version": 1,+ "type": "component",+ "slug": "bmm350",+ "title": "BMM350 — 3-Axis High-Performance Magnetometer",+ "brief": "Bosch Sensortec BMM350. TMR-based 3-axis magnetometer, +/-2000 uT range, 190 nT noise, I2C/I3C, 1.28x1.28mm WLCSP. Standardized datasheet with 14 extracted diagrams.",+ "version": "1.0.0",+ "tags": [],+ "license": "MIT",+ "component": {+ "mpn": "BMM350 — 3-Axis High-Performance Magnetometer",+ "manufacturer": "",+ "package": "",+ "pin_count": null,+ "category": "datasheet",+ "subcategory": "",+ "body_size": null,+ "parts": {},+ "distributor_links": {}+ },+ "readme": "**Source:** [Bosch Sensortec Datasheet (BST-BMM350-DS001-27)](https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bmm350-ds001.pdf)\n**Manufacturer:** Bosch Sensortec\n**Part Number:** BMM350\n**Document:** BST-BMM350-DS001-27 — Rev 1.27, February 2025\n\n## Description\n\nThe BMM350 is a high-performance 3-axis geomagnetic sensor based on Bosch Sensortec's proprietary TMR (tunnel magnetoresistance) technology. It measures magnetic field strength in three perpendicular axes and is designed for demanding consumer applications such as electronic compass, tilt-compensated navigation, augmented/virtual/mixed reality, image stabilization, indoor navigation, dead-reckoning, and robotics.\n\nAn evaluation ASIC converts the TMR transducer output to 21-bit digital results accessible over I2C or I3C interfaces. Each device is factory-calibrated and compensated via an on-chip OTP and a host-side API. The BMM350 features an excellent temperature behavior with outstanding low temperature coefficients of offset (TCO) and sensitivity (TCS). The ultra-small WLCSP package (1.28 x 1.28 x 0.5 mm) makes it ideal for space-constrained mobile and wearable designs.\n\n## Key Specifications\n\n| Parameter | Value |\n| --- | --- |\n| Magnetic Field Range | +/-2000 uT (all axes) |\n| Field Resolution | ~0.1 uT |\n| Output Noise (X/Y, RMS) | 190 nT @ ODR=100 Hz, avg=2 |\n| Output Noise (Z, RMS) | 450 nT @ ODR=100 Hz, avg=2 |\n| Supply Voltage (VDD) | 1.72V to 1.98V |\n| I/O Supply Voltage (VDDIO) | 1.72V to 3.6V |\n| Current (Normal, 100 Hz) | 200 uA typical (regular power) |\n| Current (Suspend) | 1.8 uA typical |\n| Output Data Rates | 1.5625 Hz to 400 Hz |\n| Data Resolution | 21-bit signed integer |\n| Digital Interface | I2C (up to Fast+ mode), I3C (SDR up to 12.5 MHz) |\n| Operating Temperature | -40 C to +85 C |\n| Package | WLCSP 9-ball, 1.28 x 1.28 x 0.5 mm |\n| Pin Count | 9 |\n\n## Features\n\n- 3-axis magnetic field sensing based on proprietary TMR technology\n- Ultra-small WLCSP package: 1.28 x 1.28 x 0.5 mm (9-ball, 0.4 mm pitch)\n- Digital interfaces: I2C (standard/fast/fast+) and I3C (SDR, 12.5 MHz) with in-band interrupt\n- Wide VDDIO range from 1.72V to 3.6V for flexible system integration\n- Ultra-low power: 200 uA typical at 100 Hz ODR (regular power preset)\n- Four noise/power presets: Low Power, Regular Power, Low Noise, Ultra Low Noise\n- Normal mode (periodic) and forced mode (triggered, single-shot) operation\n- On-chip interrupt controller with configurable polarity, drive type, and latching\n- Automatic magnetic reset for recovery from excessive field exposure\n- Built-in self-test for X and Y axis verification\n- 24-bit sensortime counter with 40 us resolution\n- Factory-calibrated with OTP compensation coefficients\n- Comprehensive C API for rapid host integration\n- I2C watchdog for communication fault recovery\n- RoHS compliant and halogen-free\n\n## Pin Configuration\n\n| Pin | Name | Type | Description |\n| --- | --- | --- | --- |\n| C1 | VDD | Power | Digital and analog supply (1.72V to 1.98V), use 100 nF decoupling capacitor |\n| B3 | VDDIO | Power | I/O supply (1.72V to 3.6V), use 100 nF decoupling capacitor |\n| B1 | GND | Power | Analog, digital and I/O ground |\n| A3 | SCK | Digital | I2C / I3C serial clock (SCL) |\n| A2 | SDA | Digital | I2C / I3C serial data (SDA) |\n| A1 | INT | Output | Interrupt output (push-pull or open-drain, configurable polarity) |\n| B2 | ADSEL | Input | I2C address LSB select; connect to GND (0x14) or VDDIO (0x15) |\n| C2 | CRST | Analog | External 2.2 uF capacitor for magnetic reset (low-inductance, low-ESR) |\n| C3 | BYPASS | Power | Connect to ground |\n\n## Absolute Maximum Ratings\n\n| Parameter | Condition | Min | Max | Unit |\n| --- | --- | --- | --- | --- |\n| VDD Pin Voltage | — | -0.3 | 2 | V |\n| VDDIO Pin Voltage | — | -0.3 | 3.6 | V |\n| Non-Supply Pin Voltage | — | -0.3 | VDDIO + 0.3 | V |\n| Operating Temperature | Active operation | -40 | +85 | C |\n| Storage Temperature | <=65% rel. humidity | -50 | +125 | C |\n| OTP Data Retention | T = 85 C | — | 10 | years |\n| Mechanical Shock | Duration <=500 us | — | 20,000 | g |\n| ESD (HBM) | Any pin | — | +/-2 | kV |\n| ESD (CDM) | — | — | +/-500 | V |\n| Latch-up | — | — | +/-100 | mA |\n| Magnetic Field | Any direction | -250 | 250 | mT |\n\n## Electrical Characteristics\n\n| Parameter | Condition | Min | Typ | Max | Unit |\n| --- | --- | --- | --- | --- | --- |\n| Supply Voltage VDD | — | 1.72 | — | 1.98 | V |\n| Supply Voltage VDDIO | — | 1.72 | — | 3.6 | V |\n| Input Low Voltage | I2C/I3C | — | — | 0.3 VDDIO | V |\n| Input High Voltage | I2C/I3C | 0.7 VDDIO | — | — | V |\n| Output Low Voltage | IOL <= 2 mA | — | — | 0.23 VDDIO | V |\n| Output High Voltage | IOH <= 2 mA | 0.8 VDDIO | — | — | V |\n| Magnetic Field Range | All axes | -2000 | — | +2000 | uT |\n| Zero-Field Offset Drift | Before/after solder | — | — | +/-25 | uT |\n| Zero-B Offset (calibrated) | With eCompass SW, RT | — | — | +/-2 | uT |\n| Sensitivity Error (X/Y) | After API compensation, RT | — | +/-1 | — | % |\n| Sensitivity Error (Z) | After API compensation, RT | — | +/-3 | — | % |\n| Sensitivity Temp Drift (TCS) | -40 to +85 C, all axes | — | +/-0.010 | — | %/K |\n| TCO Error | -40 to +85 C | — | — | +/-200 | nT/K |\n| Hysteresis (X/Y) | RT, after FSS | — | 0.02 | — | %FS |\n| Hysteresis (Z) | RT, after FSS, no reset | — | 0.4 | — | %FS |\n| Integral Nonlinearity (X/Y) | Deviation from best-fit line | — | — | +/-10 | uT |\n| Integral Nonlinearity (Z) | Deviation from best-fit line | — | — | +/-20 | uT |\n| Output Noise RMS (X/Y) | ODR=100, avg=2 | — | 190 | — | nT(rms) |\n| Output Noise RMS (Z) | ODR=100, avg=2 | — | 450 | — | nT(rms) |\n| ODR Drift over Temp | -5 to 65 C | -3 | — | +3 | % |\n| ODR Drift over Temp | -40 to 85 C | -4 | — | +4 | % |\n| 3 dB Bandwidth | — | — | ODR/2 | — | Hz |\n| Startup Time (Suspend to Normal) | — | — | 70 | — | ms |\n| Startup Time (OFF to Suspend) | — | — | 2.5 | — | ms |\n| Peak Supply Current | Measurement phase, before bit reset | — | 3.5 | — | mA |\n\n## Power Consumption\n\n| Noise Mode | Averaging | ODR 400 Hz | ODR 200 Hz | ODR 100 Hz | ODR 50 Hz | ODR 25 Hz | ODR 12.5 Hz |\n| --- | --- | --- | --- | --- | --- | --- | --- |\n| Ultra Low Noise | 8 samples (avg=3) | — | — | — | 325 uA | 180 uA | 108 uA |\n| Low Noise | 4 samples (avg=2) | — | — | 335 uA | 175 uA | 96 uA | 57 uA |\n| Regular Power | 2 samples (avg=1) | — | 370 uA | 190 uA | 100 uA | 55 uA | 33 uA |\n| Low Power | 1 sample (avg=0) | 455 uA | 235 uA | 122 uA | 70 uA | 40 uA | 23 uA |\n| Suspend Mode | — | — | — | 1.8 uA | — | — | — |\n\nForced mode maximum trigger rates: avg=1: 200 Hz, avg=2: 150 Hz, avg=4: 80 Hz, avg=8: 40 Hz.\n\n## Communication Interface\n\nThe BMM350 supports **I2C** (standard, fast, fast+ modes) and **I3C** (SDR up to 12.5 MHz) digital interfaces. The sensor acts as a slave device on both protocols.\n\n**I2C Address:** 7-bit address is 0x14 (ADSEL=LOW) or 0x15 (ADSEL=HIGH). The 5 MSBs are fixed (00101); bit 1 is OTP-backed (default 0); bit 0 is set by the ADSEL pin level at boot.\n\n**I2C Features:**\n- Single and multiple byte write (register address + data pairs, not auto-incremented)\n- Single and multiple byte read (auto-incremented addresses)\n- 2 dummy bytes prepended to every read (must be discarded)\n- Configurable watchdog: short timeout (1.28 ms) or long timeout (40.96 ms)\n\n**I3C Features:**\n- SDR mode up to 12.5 MHz clock\n- In-band interrupt (IBI) for data-ready signaling\n- Timing control asynchronous mode 0 (4.32 MHz internal slave clock)\n- Provisional ID: MIPI Member ID 0x03b8, Part ID includes CHIP_ID (0x33)\n- Supported CCCs: ENEC, DISEC, RSTDAA, ENTDAA, SETAASA, SETDASA, SETNEWDA, RSTACT, SETXTIME, GETXTIME, GETPID, GETBCR, GETDCR, GETSTATUS, GETCAPS\n\n**Interrupt Configuration:**\n- Data-ready interrupt mapped to INT pin (configurable)\n- Polarity: active-high or active-low\n- Drive type: push-pull or open-drain\n- Latching or non-latching (pulsed, 1.25 ms auto-clear)\n- I3C in-band interrupt with optional auto-clear of status\n\n## Packages\n\n| Package | Pins | Body Size | Ball Pitch | Height |\n| --- | --- | --- | --- | --- |\n| WLCSP | 9 | 1.28 mm x 1.28 mm | 0.4 mm | 0.5 mm |\n\n**External Components Required:**\n- 100 nF decoupling capacitor on VDD to GND\n- 100 nF decoupling capacitor on VDDIO to GND\n- 2.2 uF low-inductance, low-ESR capacitor on CRST (recommended: TDK CGB4B3X7R0J225K055AB)\n\n**PCB Design Notes:**\n- Reserve 1.3 x 1.3 mm footprint area for the IC\n- Peak current up to 400 mA (< 1 us) between CRST capacitor and CRST/GND pins\n- VDD pin: 20 mA max short-term, 750 uA max average\n- ADSEL pin must not be left floating\n- CRST capacitor must have non-magnetic properties\n\n## Software API\n\nThe BMM350 is supported by Bosch Sensortec's official C API available at [github.com/boschsensortec/BMM350_SensorAPI](https://github.com/boschsensortec/BMM350_SensorAPI/blob/main/README.md).\n\n**Key API Functions:**\n- `BMM350_init()` — Initialize sensor, download OTP compensation data, terminate boot phase\n- `BMM350_set_powermode()` — Switch between suspend, normal, and forced modes\n- `BMM350_set_odr_performance()` — Configure output data rate and noise/averaging preset\n- `BMM350_read_mag_data_and_compensate()` — Read raw data and apply full compensation (offset, gain, temperature)\n- `BMM350_check_for_highfield_and_reset()` — Detect excessive field and trigger magnetic reset\n- `BMM350_magnetic_reset_and_wait()` — Perform manual magnetic reset (for suspend-mode recovery)\n- `BMM350_perform_self_test()` — Run built-in self-test on X and Y channels\n- `BMM350_enable_interrupt()` / `BMM350_configure_interrupt()` — Set up data-ready interrupt\n- `BMM350_set_int_ctrl_ibi()` — Configure I3C in-band interrupt\n- `BMM350_enable_axes()` — Enable/disable individual measurement axes\n- `BMM350_set_pad_drive()` — Configure pad driver strength (0=weakest to 7=strongest)\n- `BMM350_set_i2c_wdt()` — Enable/configure I2C watchdog\n- `BMM350_set_ctrl_user()` — Enable sensortime always-on mode\n- `BMM350_soft_reset_and_wait()` — Trigger soft reset (CMD = 0xB6 then 0x00)\n\n**Register Map:** 8-bit register space from 0x00 to 0x7E. Key registers include CHIP_ID (0x00, value 0x33), PMU_CMD (0x06), data registers (0x31-0x3F for X/Y/Z magnetic + temperature + sensortime), INT_CTRL (0x2E), and CMD (0x7E).\n\n**Data Format:** Magnetic and temperature data are provided in 24-bit registers using 21-bit signed integer format. Burst read is mandatory to ensure data consistency (the sensor halts register updates during burst reads).\n\n## Applications\n\n- Magnetic heading information and electronic compass\n- Tilt-compensated map rotation and navigation\n- Augmented reality (AR), virtual reality (VR), and mixed reality (MR)\n- Gyroscope calibration in 9-DoF IMU systems\n- Indoor navigation and dead-reckoning (e.g., step counting with accelerometer)\n- Platform and image stabilization\n- Robotics navigation\n- High-end gaming controllers\n- Man-machine interfaces\n\n## Key Formulas\n\n### Excessive Field Limit\n```\nSQRT(Hx^2 + Hy^2 + Hz^2) <= 2000 uT\n```\nThe sum of the vector components must remain within the 2000 uT sphere.\n\n### Self-Test Threshold\n```\ndelta_x = mag_x(during_selftest) - mag_x(before_selftest) >= 130 uT\ndelta_y = mag_y(during_selftest) - mag_y(before_selftest) >= 130 uT\n```\n\n### Sensortime Resolution\n```\nsensortime_seconds = sensortime_register_value * 40e-6\n```\n24-bit unsigned counter, wraps around at 2^24 (no saturation). Resolution is 40 us per tick.\n\n### I2C Address Calculation\n```\nI2C_address = 0b0010_10X (7-bit)\nX = ADSEL pin level at boot\nADSEL=LOW -> 0x14\nADSEL=HIGH -> 0x15\n```\n\n### Noise Improvement with Averaging\n```\nnoise_rms_improved = noise_rms_single / SQRT(averaging_samples)\naveraging_samples = 2^avg (avg = 0,1,2,3 -> 1,2,4,8 samples)\n```\n",+ "author": {+ "id": "695820315b5f1e4db2fcf602",+ "name": "Kyle Bergstedt",+ "email": "[email protected]"+ },+ "visibility": {+ "public": true+ },+ "hero": null,+ "sample_prompts": [],+ "discovery_triggers": [],+ "discovery_pitch": null,+ "metadata": {},+ "created_at": "2026-05-28T05:37:00.649Z",+ "updated_at": "2026-05-28T05:37:00.649Z"+}