{
  "schema_version": 1,
  "type": "component",
  "slug": "bmm350-bosch-v1-075000",
  "title": "BMM350_Bosch_v1",
  "brief": "9-contact breakout for the Bosch BMM350 WLCSP magnetometer. Separate 1.8 V VDD rail. Default address 0x15 (ADSEL pulled high via R5).",
  "version": "1.0.0",
  "tags": [],
  "license": "MIT",
  "component": {
    "mpn": "BMM350_Bosch_v1",
    "manufacturer": "",
    "package": "",
    "pin_count": null,
    "category": "other",
    "subcategory": "",
    "body_size": null,
    "parts": {},
    "distributor_links": {},
    "molecule_id": 9901275824055075000
  },
  "readme": "# BMM350 Molecule — Hardware Reference\n\nCompact 9-contact breakout for the Bosch BMM350 3-axis magnetometer (WLCSP). Brings out separate VDD and VDDIO rails (the BMM350 has a stricter VDD range than most Bosch parts).\n\n- **Source:** [adom-inc/bosch-molecules/Moecule_BMM350_Bosch_V1](https://github.com/adom-inc/bosch-molecules/tree/main/Moecule_BMM350_Bosch_V1) — imported 2026-04-17 (folder name misspelled `Moecule` upstream; we preserve that on disk)\n- **KiCad project:** `Moecule_BMM350_Bosch_V1.kicad_pro`\n- **Wiki page:** [molecules/bmm350-bosch-v1-075000](https://wiki-ufypy5dpx93o.adom.cloud/wiki/molecules/bmm350-bosch-v1-075000)\n- **Board:** 9 contacts — 4 corner mount-pins carry I²C + VDDIO, 3 side contacts carry VDD / INT / address strap, silk revision `V1: 2025-09-03`\n- **IC:** BMM350 (Bosch BGA-9, 1.28 × 1.28 × 0.5 mm WLCSP, U1)\n\n## Component summary\n\n| Ref | Part | Function |\n|---|---|---|\n| U1 | BMM350 | 3-axis magnetometer |\n| C1 | 2.2 µF 0805 X7R | CRST reset / reservoir cap (schematic note: *\"CRST 2.2uF Recommended, X7R\"*) |\n| C2 | 100 nF 0402 | VDDIO decoupling |\n| C3 | 100 nF 0402 | VDD decoupling |\n| R5 | 10 kΩ 0402 | **Default pull-up** from +VDDIO → `/0x15` strap net (→ default address **0x15**) |\n\n## External contact map\n\nPositions in mm on the front copper. **Two columns:** west (X=139.8) and east (X=147.8).\n\n### West edge\n\n| Ref | Silk | Net | Role |\n|---|---|---|---|\n| MP2 | `VDDIO` | `+VDDIO` | Logic rail — 1.72–3.6 V |\n| MC6 | `VDD` *(silk `y`)* | `+VDD` | **Analog rail — 1.72–1.98 V only** (tight tolerance!) |\n| MC4 | `INT` | `BMM_INT` | Interrupt (push-pull or open-drain, pull-up at host if OD) |\n| MP1 | `GND` | `GND` | Ground |\n\n### East edge\n\n| Ref | Silk | Net | Role |\n|---|---|---|---|\n| MP3 | `SDA` *(silk `BMM350`)* | `BMM_SDA` | I²C SDA |\n| MC12 | `BMM350` | `/0x15` | Strap test-point (pulled to +VDDIO via R5) |\n| MC3 | `ADSEL` | `BMM_ADSEL/0x14/0x15` | **I²C address select** — routed to U1 pin B2 |\n| MC10 | `0x14` | `GND` | Strap option: bridge MC3 ↔ MC10 for 0x14 |\n| MP4 | `SCK` | `BMM_SCK` | I²C SCL |\n\n## I²C address strap\n\nBMM350 I²C slave address is set by ADSEL at power-up:\n\n| ADSEL tied to | I²C address |\n|---|---|\n| GND (bridge MC3 ↔ MC10, silk `0x14`) | 0x14 |\n| +VDDIO (default — R5 pull-up to `/0x15` net) | **0x15** (demo firmware target ✓) |\n\nSchematic text: *\"ADSEL (Legacy I2C, LSB): GND = 0x14, VDDIO = 0x15.\"*\n\n**Default is 0x15** — matches the firmware. Unless you intend to run it at 0x14, leave MC3 / MC10 unbridged.\n\n### Address conflict check on the arm bus\n\nThe arm I²C bus has: BMI270 @ 0x68, BMA400 @ 0x14, BMA580 @ 0x18, **BMM350 @ 0x15** (this molecule), BHI360 @ 0x28, BHI385 @ 0x29.\n\nIf you accidentally strap BMM350 to 0x14 it will collide with the BMA400 on the same bus.\n\n## Power\n\n| Rail | Voltage | Source |\n|---|---|---|\n| VDD (analog) | 1.72–1.98 V | **1.8 V supply required** — cannot run at 3.3 V |\n| VDDIO | 1.72–3.6 V | Host via MP2 (3.3 V in demo) |\n\nThis is the one molecule in the arm bus that **needs a 1.8 V rail**. The HARDWARE_CONFIG.md power plan uses the 1.8 V LDO (fed from 3.3 V) for BMV080 core + BHI360 VDD + BHI385 VDD + **BMM350 VDD**. Do not accidentally tie MC6 (silk `y` = VDD) to 3.3 V — that exceeds the BMM350 absolute maximum.\n\nAlso from schematic: *\"VDDIO is 300 mV max when VDD = 0 V.\"* If you shut off VDD during operation, VDDIO must drop too or the chip sustains stress. Not an issue if both rails come up together and stay up.\n\nTypical active current: 200 µA.\n\n## Interrupt\n\nINT (MC4) is software-configurable for data-ready, FIFO watermark, or threshold events. Output can be push-pull or open-drain; if open-drain, supply an external pull-up on the host (not present on this molecule).\n\n## Magnetic field range\n\nSchematic annotation: *\"Max ±2000 µT: (Bx, By, Bz < 0.75 × 2400 µT).\"* The BMM350's full-scale is ±2400 µT on each axis, and for linear behavior Bosch recommends staying under 2000 µT. Keep magnets / motors / ferrous tooling away from the mounted sensor.\n\n## Wiring to the Arm RM2 I²C bus\n\n```\nBMM350 MP2 (VDDIO) ──── RM2 +3V3\nBMM350 MC6  (VDD)  ──── +1.8 V rail (NOT +3V3!)\nBMM350 MP1 (GND)   ──── RM2 GND\nBMM350 MP3 (SDA)   ──── RM2 GPIO4 (I²C0 SDA, shared bus)\nBMM350 MP4 (SCK)   ──── RM2 GPIO5 (I²C0 SCL, shared bus)\nBMM350 MC4 (INT)   ──── (optional; if open-drain, needs external pull-up)\nBMM350 MC3 (ADSEL) ──── (leave floating — default 0x15 via R5 pull-up)\n```\n\n## Gotchas for firmware bring-up\n\n- **VDD is 1.8 V only.** Do not feed 3.3 V into MC6 — the BMM350 will be damaged. This is the most common wiring mistake on the arm bus.\n- **Default address is 0x15** (matches firmware). Only bridge MC3↔MC10 if you explicitly want 0x14.\n- **CRST cap (C1, 2.2 µF X7R)** is on-board — no external reset circuitry needed. But if you see the sensor NACKing after a brown-out, verify C1 is charging properly and the supply is stable.\n- **BMM350 OTP trim + self-test** must run at init before the first measurement — already handled in `firmware/sensors/bmm350.c`.\n- **No 4.7 kΩ I²C pull-ups on this board** — provided by the RM2 carrier / main arm bus.\n",
  "author": {
    "id": "695820315b5f1e4db2fcf602",
    "name": "Kyle Bergstedt",
    "email": "kyle@adom.inc"
  },
  "visibility": {
    "public": true
  },
  "hero": null,
  "sample_prompts": [],
  "discovery_triggers": [],
  "discovery_pitch": null,
  "metadata": {},
  "created_at": "2026-05-28T05:31:14.137Z",
  "updated_at": "2026-05-28T05:31:14.137Z"
}