← Commit history
README.md+84−227
@@ -1,233 +1,90 @@-**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+# BMM350 -## Description+**Bosch Sensortec** · Specialized Sensors · WLCSP-9(1.3x1.3) -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.+BMM350 from Bosch Sensortec, in a WLCSP-9(1.3x1.3). Pinout and pin descriptions extracted from the manufacturer datasheet (extract_pins, cross-checked by a second model); symbol, footprint, and 3D from KiCad-official CAD. -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.+## Pinout -## Key Specifications+| Pin | Name | Type | Function |+|---|---|---|---|+| A1 | INT | output | Interrupt output of the BMM350. |+| A2 | SDA | bidirectional | I2C / I3C data line. |+| A3 | SCK | input | I2C / I3C clock line. |+| B1 | GND | power_in | Analog, digital and IO ground. |+| B2 | ADSEL | input | Logic status of ADSEL defines the LSB of the I2C legacy address; connect to GND or VDDIO. |+| B3 | VDDIO | power_in | IO supply; use a decoupling capacitor (100 nF per the connection diagram), with a VDDIO range of 1.72 V to 3.6 V. |+| C1 | VDD | power_in | Digital and analog supply; use a decoupling capacitor (100 nF per the connection diagram), with a VDD range of 1.72 V to 1.98 V. |+| C2 | CRST | passive | Connect to an external 2.2 µF low-inductance capacitor (non-magnetic, low-resistance type), which must support 200 mA peak current. |+| C3 | BYPASS | passive | Connect to ground. | -| 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+## Key specifications -## 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)-```+| Parameter | Value |+|---|---|+| Manufacturer | Bosch Sensortec |+| Package | WLCSP-9(1.3x1.3) |+| Category | Sensors |+| Pins | 9 |++## Electrical characteristics++Limits as printed in the datasheet (page.json `metadata.characteristics` carries them as data).++| Parameter | Symbol | Min | Typ | Max | Unit | Conditions | Page |+|---|---|---|---|---|---|---|---|+| Supply voltage, internal domains (VDD) | VDD | 1.72 |  | 1.98 | V |  | 8 |+| Supply voltage, I/O domain (VDDIO) | VDDIO | 1.72 |  | 3.6 | V |  | 8 |+| Voltage input low level | VIL,a |  |  | 0.3 | xVDDIO | I2C&I3C | 8 |+| Voltage input high level | VIH,a | 0.7 |  |  | xVDDIO | I2C&I3C | 8 |+| Voltage output low level | VOL,a |  |  | 0.23 | xVDDIO | IOL<= 2mA | 8 |+| Voltage output high level | VOH | 0.8 |  |  | xVDDIO | IOH <= 2mA | 8 |+| Operating temperature | TA | -40 |  | 85 | °C |  | 8 |+| Current in normal mode (regular power setting) | Idd,n,rp |  | 200 |  | uA | ODR=100, 25°C, averaging=2 samples | 8 |+| Current in normal mode (low noise) | Idd,n,ln |  | 350 |  | uA | ODR=100, 25°C, averaging=4 samples | 8 |+| Current in suspend mode | Idd,sus |  | 1.8 |  | uA | data retention | 8 |+| Peak supply current in active mode (normal or forced mode) | IDDpk,m |  | 3.5 |  | mA | In measurement phase; TA=25°C, before bit reset | 8 |+| Sensor start-up time (suspend to normal mode) | Tsus2nm |  | 70 |  | ms | Start-up time from suspend mode to normal mode | 8 |+| Sensor start-up time (OFF to suspend mode) | Tpon2sus |  | 2.5 |  | ms | Start-up time from OFF to suspend mode | 8 |+| Sensitivity/gain error after soldering, x/y axis | Gerr,m | -1 |  | 1 | % | After API compensation; TA=25°C; Nominal VDD supplies; x/y axis | 10 |+| Sensitivity/gain error after soldering, Z axis | Gerr,m | -3 |  | 3 | % | After API compensation; TA=25°C; Nominal VDD supplies; Z axis | 10 |+| Sensitivity temperature drift | TCSm | -0.01 |  | 0.01 | %/K | After API compensation; -40°C ≤ TA ≤ +85°C; Nominal VDD supplies; all axis | 10 |+| TCO error | TCOerr | -200 |  | 200 | nT/K | -40°C to 85°C | 10 |+| Hysteresis, x/y axis | hystxy |  | 0.02 |  | % | RT, after FSS, in % of FSS | 10 |+| Hysteresis, z axis | hystz |  | 0.4 |  | % | RT, after FSS, no reset, in % of FSS | 10 |+| Integral nonlinearity, x/y axis | INLm,FS | -10 |  | 10 | µT | Max. deviation to best fit straight line; x/y axis | 10 |+| Integral nonlinearity, z axis | INLm,FS | -20 |  | 20 | µT | Max. deviation to best fit straight line; z axis | 10 |+| Output noise rms, x/y channel | nrms,xy | -190 |  | 190 | nTrms | 3dB BW= ODR/2; x.y channel; ODR=100; averaging=2 samples | 10 |+| Output noise rms, z channel | nrms,z | -450 |  | 450 | nTrms | 3dB BW= ODR/2; z channel; ODR=100; averaging=2 samples | 10 |+| Sensitivity drift after magnetic field shock recovery |  | -100 |  | 100 | µT | 250 mT | 10 |+| Sensitivity drift after magnetic field shock recovery (relative) |  | -1 |  | 1 | % | 250 mT | 10 |+| Voltage at supply pin VDD | VDD | -0.3 |  | 2 | V | VDD Pin | 11 |+| Voltage at supply pin VDDIO | VDDIO | -0.3 |  | 3.6 | V | VDDIO Pin | 11 |+| Voltage at any logic pad |  | -0.3 |  |  | V | Non-supply pin | 11 |+| Operating temperature, TA | TA | -40 |  | 85 | °C | Active operation | 11 |+| Passive storage temperature range |  | -50 |  | 125 | °C | ≤ 65% rel. H. | 11 |+| Non-volatile memory (OTP) data retention |  | 10 |  |  | year | T = 85°C | 11 |+| Mechanical shock (JESD22-B104C) |  |  |  | 20000 | g | Duration ≤ 500µs | 11 |+| Drop in reel onto hard surfaces |  |  |  | 2 | m |  | 11 |+| ESD HBM at any pin |  | -2 |  | 2 | kV |  | 11 |+| ESD CDM |  | -500 |  | 500 | V |  | 11 |+| Latch-up | LU | -100 |  | 100 | mA |  | 11 |+| Magnetic field, any direction |  | -250 |  | 250 | mT | Any direction | 11 |+| CRST external capacitor (nominal value) | CRST |  | 2.2 |  | uF |  | 60 |++## CAD (KiCad official)++- Symbol: `BMM350`+- Footprint: `Package_CSP:WLCSP-9_1.21x1.22mm_Layout3x3_P0.4mm`+- 3D model: WLCSP-9(1.3x1.3) (KiCad packages3D, STEP)+- 3D model files: `bmm350-etched.step` / `bmm350-etched.glb` carry the MPN laser-etched on the die in a toggleable `Adom.LaserEtch` group (Fusion-ready); `bmm350.step` / `bmm350.glb` are the bare package body.++## Provenance++Data extracted from the manufacturer datasheet, not a distributor listing:++- **Datasheet:** [Bosch Sensortec datasheet](https://jlcpcb.com/api/file/downloadByFileSystemAccessId/8602823677185060864) (63 pp, sha256 `db26bd71f271fcea`, retrieved 2026-10-17, tier: lcsc)+- **Extractor:** parts-factory `2.0.0` / `extract_pins 0.3`, primary `claude-haiku-5-5` (text), consensus `claude-sonnet-5-5` (agreed), guards: pin_guards 0.1: passed. Pins are checked against the footprint pad set and their cited datasheet pages before publish.+- **CAD:** KiCad official libraries (CC-BY-SA 4.0).++[Datasheet PDF](docs/bmm350-datasheet.pdf)
bmm350-etched.glbadded
⋯ 1 unchanged line ⋯
bmm350-hero.glbadded
⋯ 1 unchanged line ⋯
bmm350-hero.overlay.jsonadded+282
@@ -0,0 +1,282 @@+{+  "spec": "adom-hero 1.4",+  "mpn": "BMM350",+  "kind": "component + footprint reference art",+  "board_use": false,+  "plane_z_mm": -0.02,+  "units": "metre",+  "upAxis": "Z",+  "layers": {+    "pad_outlines": {+      "material": "Footprint pads - teal dashed outlines - 50 percent opacity",+      "rgba": [+        0.0,+        0.902,+        0.863,+        0.5+      ],+      "pads": 9,+      "span_mm": 1.0,+      "dash_mm": 0.12,+      "gap_mm": 0.072,+      "pad_stroke_mm": 0.03+    },+    "silkscreen": {+      "material": "Silkscreen reference lines - 30 percent opacity",+      "rgba": [+        0.92,+        0.96,+        1.0,+        0.3+      ],+      "footprint_items": 5,+      "pin1": {+        "source": "footprint silkscreen",+        "pad": "A1"+      }+    },+    "signal_names": {+      "material": "Signal names - 50 percent opacity",+      "rgba": [+        0.92,+        0.96,+        1.0,+        0.5+      ],+      "font": "DejaVu Sans Mono",+      "labels": 9,+      "sides": "top + mirrored underside (single-sided)",+      "fallback_to_pad_number": 0+    }+  },+  "align": {+    "ok": true,+    "centre_offset_mm": 0.0,+    "tolerance_mm": 0.25,+    "orientation_flipped": false,+    "contacts_bbox_mm": [+      -0.519,+      0.519,+      -0.52,+      0.52+    ],+    "pads_bbox_mm": [+      -0.5,+      0.5,+      -0.5,+      0.5+    ],+    "seating_z_mm": -0.007+  },+  "sources": {+    "glb": "bmm350-etched.glb",+    "glb_sha256": "cf435c22e0869daa68a1f09ef9aa5726adff3426cd1a9540d80d24ed9aa763b3",+    "footprint": "bmm350.kicad_mod",+    "footprint_sha256": "c17b99276873980c2058ef36c9bbee0f4bd4f646fd86821472644d44bd6d9a33",+    "pins": "page.json component.pins",+    "pins_sha256": "022294d74318230ea6347ccc0e45eafd3bd2659e801e27d1a9851042e4529116"+  },+  "generator": "adom-wiki 1.7.73 (component_hero)",+  "labels": [+    {+      "pad": "A1",+      "text": "INT",+      "x": -0.6,+      "y": -0.4,+      "align": "right",+      "vertical": false,+      "h": 0.2+    },+    {+      "pad": "A2",+      "text": "SDA",+      "x": 0.0,+      "y": -0.6,+      "align": "left",+      "vertical": true,+      "h": 0.2+    },+    {+      "pad": "A3",+      "text": "SCK",+      "x": 0.6,+      "y": -0.4,+      "align": "left",+      "vertical": false,+      "h": 0.2+    },+    {+      "pad": "B1",+      "text": "GND",+      "x": -0.6,+      "y": 0.0,+      "align": "right",+      "vertical": false,+      "h": 0.2+    },+    {+      "pad": "B2",+      "text": "ADSEL",+      "x": 0.2,+      "y": 0.0,+      "align": "left",+      "vertical": false,+      "h": 0.2+    },+    {+      "pad": "B3",+      "text": "VDDIO",+      "x": 0.6,+      "y": 0.0,+      "align": "left",+      "vertical": false,+      "h": 0.2+    },+    {+      "pad": "C1",+      "text": "VDD",+      "x": -0.6,+      "y": 0.4,+      "align": "right",+      "vertical": false,+      "h": 0.2+    },+    {+      "pad": "C2",+      "text": "CRST",+      "x": 0.0,+      "y": 0.6,+      "align": "right",+      "vertical": true,+      "h": 0.2+    },+    {+      "pad": "C3",+      "text": "BYPASS",+      "x": 0.6,+      "y": 0.4,+      "align": "left",+      "vertical": false,+      "h": 0.2+    }+  ],+  "pads": [+    {+      "number": "A1",+      "shape": "circle",+      "center_mm": [+        -0.4,+        -0.4+      ],+      "size_mm": [+        0.2,+        0.2+      ],+      "rot": 0.0+    },+    {+      "number": "A2",+      "shape": "circle",+      "center_mm": [+        0.0,+        -0.4+      ],+      "size_mm": [+        0.2,+        0.2+      ],+      "rot": 0.0+    },+    {+      "number": "A3",+      "shape": "circle",+      "center_mm": [+        0.4,+        -0.4+      ],+      "size_mm": [+        0.2,+        0.2+      ],+      "rot": 0.0+    },+    {+      "number": "B1",+      "shape": "circle",+      "center_mm": [+        -0.4,+        0.0+      ],+      "size_mm": [+        0.2,+        0.2+      ],+      "rot": 0.0+    },+    {+      "number": "B2",+      "shape": "circle",+      "center_mm": [+        0.0,+        0.0+      ],+      "size_mm": [+        0.2,+        0.2+      ],+      "rot": 0.0+    },+    {+      "number": "B3",+      "shape": "circle",+      "center_mm": [+        0.4,+        0.0+      ],+      "size_mm": [+        0.2,+        0.2+      ],+      "rot": 0.0+    },+    {+      "number": "C1",+      "shape": "circle",+      "center_mm": [+        -0.4,+        0.4+      ],+      "size_mm": [+        0.2,+        0.2+      ],+      "rot": 0.0+    },+    {+      "number": "C2",+      "shape": "circle",+      "center_mm": [+        0.0,+        0.4+      ],+      "size_mm": [+        0.2,+        0.2+      ],+      "rot": 0.0+    },+    {+      "number": "C3",+      "shape": "circle",+      "center_mm": [+        0.4,+        0.4+      ],+      "size_mm": [+        0.2,+        0.2+      ],+      "rot": 0.0+    }+  ]+}
bmm350.glbadded
⋯ 1 unchanged line ⋯
bmm350.kicad_modadded+216
@@ -0,0 +1,216 @@+(footprint "WLCSP-9_1.21x1.22mm_Layout3x3_P0.4mm"+	(version 20260206)+	(generator "kicad-footprint-generator")+	(layer "F.Cu")+	(descr "WLCSP-9, 1.21x1.22mm, 9 Ball, 3x3 Layout, 0.4mm Pitch, https://www.analog.com/media/en/package-pcb-resources/package/pkg_pdf/wlcspcb/cb_9_3.pdf")+	(tags "CSP 9 0.4")+	(property "Reference" "REF**"+		(at 0 -1.61 0)+		(layer "F.SilkS")+		(effects+			(font+				(size 1 1)+				(thickness 0.15)+			)+		)+	)+	(property "Value" "WLCSP-9_1.21x1.22mm_Layout3x3_P0.4mm"+		(at 0 1.61 0)+		(layer "F.Fab")+		(effects+			(font+				(size 1 1)+				(thickness 0.15)+			)+		)+	)+	(property "KiLib_Generator" "package/grid_array"+		(at 0 0 0)+		(layer "F.SilkS")+		(hide yes)+		(effects+			(font+				(size 1 1)+				(thickness 0.15)+			)+		)+	)+	(attr smd)+	(duplicate_pad_numbers_are_jumpers no)+	(fp_line+		(start -0.76 0.76)+		(end -0.76 -0.435)+		(stroke+			(width 0.12)+			(type solid)+		)+		(layer "F.SilkS")+	)+	(fp_line+		(start -0.435 -0.76)+		(end 0.76 -0.76)+		(stroke+			(width 0.12)+			(type solid)+		)+		(layer "F.SilkS")+	)+	(fp_line+		(start 0.76 -0.76)+		(end 0.76 0.76)+		(stroke+			(width 0.12)+			(type solid)+		)+		(layer "F.SilkS")+	)+	(fp_line+		(start 0.76 0.76)+		(end -0.76 0.76)+		(stroke+			(width 0.12)+			(type solid)+		)+		(layer "F.SilkS")+	)+	(fp_poly+		(pts+			(xy -0.76 -0.76)+			(xy -1.26 -0.76)+			(xy -0.76 -1.26)+		)+		(stroke+			(width 0.12)+			(type solid)+		)+		(fill yes)+		(layer "F.SilkS")+	)+	(fp_line+		(start -0.605 -0.3075)+		(end -0.3025 -0.61)+		(stroke+			(width 0.1)+			(type solid)+		)+		(layer "F.Fab")+	)+	(fp_line+		(start -0.605 0.61)+		(end -0.605 -0.3075)+		(stroke+			(width 0.1)+			(type solid)+		)+		(layer "F.Fab")+	)+	(fp_line+		(start -0.3025 -0.61)+		(end 0.605 -0.61)+		(stroke+			(width 0.1)+			(type solid)+		)+		(layer "F.Fab")+	)+	(fp_line+		(start 0.605 -0.61)+		(end 0.605 0.61)+		(stroke+			(width 0.1)+			(type solid)+		)+		(layer "F.Fab")+	)+	(fp_line+		(start 0.605 0.61)+		(end -0.605 0.61)+		(stroke+			(width 0.1)+			(type solid)+		)+		(layer "F.Fab")+	)+	(fp_text user "${REFERENCE}"+		(at 0 0 -90)+		(layer "F.Fab")+		(effects+			(font+				(size 0.28 0.28)+				(thickness 0.042)+			)+		)+	)+	(pad "A1" smd circle+		(at -0.4 -0.4)+		(size 0.2 0.2)+		(property pad_prop_bga)+		(layers "F.Cu" "F.Mask" "F.Paste")+	)+	(pad "A2" smd circle+		(at 0 -0.4)+		(size 0.2 0.2)+		(property pad_prop_bga)+		(layers "F.Cu" "F.Mask" "F.Paste")+	)+	(pad "A3" smd circle+		(at 0.4 -0.4)+		(size 0.2 0.2)+		(property pad_prop_bga)+		(layers "F.Cu" "F.Mask" "F.Paste")+	)+	(pad "B1" smd circle+		(at -0.4 0)+		(size 0.2 0.2)+		(property pad_prop_bga)+		(layers "F.Cu" "F.Mask" "F.Paste")+	)+	(pad "B2" smd circle+		(at 0 0)+		(size 0.2 0.2)+		(property pad_prop_bga)+		(layers "F.Cu" "F.Mask" "F.Paste")+	)+	(pad "B3" smd circle+		(at 0.4 0)+		(size 0.2 0.2)+		(property pad_prop_bga)+		(layers "F.Cu" "F.Mask" "F.Paste")+	)+	(pad "C1" smd circle+		(at -0.4 0.4)+		(size 0.2 0.2)+		(property pad_prop_bga)+		(layers "F.Cu" "F.Mask" "F.Paste")+	)+	(pad "C2" smd circle+		(at 0 0.4)+		(size 0.2 0.2)+		(property pad_prop_bga)+		(layers "F.Cu" "F.Mask" "F.Paste")+	)+	(pad "C3" smd circle+		(at 0.4 0.4)+		(size 0.2 0.2)+		(property pad_prop_bga)+		(layers "F.Cu" "F.Mask" "F.Paste")+	)+	(embedded_fonts no)+	(model "${KICAD10_3DMODEL_DIR}/Package_CSP.3dshapes/WLCSP-9_1.21x1.22mm_Layout3x3_P0.4mm.step"+		(offset+			(xyz 0 0 0)+		)+		(scale+			(xyz 1 1 1)+		)+		(rotate+			(xyz 0 0 0)+		)+	)+	(fp_poly+		(pts (xy -0.86 -0.86) (xy 0.86 -0.86) (xy 0.86 0.86) (xy -0.86 0.86))+		(stroke (width 0.05) (type solid))+		(fill no)+		(layer "F.CrtYd")+	)+)
bmm350.kicad_symadded+49
@@ -0,0 +1,49 @@+(kicad_symbol_lib (version 20211014) (generator ds2sf_rect)+  (symbol "BMM350" (in_bom yes) (on_board yes)+    (property "Reference" "U" (at 0 10.16 0) (effects (font (size 1.27 1.27))))+    (property "Value" "BMM350" (at 0 -10.16 0) (effects (font (size 1.27 1.27))))+    (property "Footprint" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))+    (symbol "BMM350_0_1"+    (rectangle (start -12.70 7.62) (end 12.70 -7.62)+      (stroke (width 0.254) (type default)) (fill (type background)))+    )+    (symbol "BMM350_1_1"+    (pin output line (at -17.78 5.08 0) (length 5.08)+      (name "INT" (effects (font (size 1.27 1.27))))+      (number "A1" (effects (font (size 1.27 1.27))))+    )+    (pin bidirectional line (at -17.78 2.54 0) (length 5.08)+      (name "SDA" (effects (font (size 1.27 1.27))))+      (number "A2" (effects (font (size 1.27 1.27))))+    )+    (pin input line (at -17.78 0.00 0) (length 5.08)+      (name "SCK" (effects (font (size 1.27 1.27))))+      (number "A3" (effects (font (size 1.27 1.27))))+    )+    (pin power_in line (at -17.78 -2.54 0) (length 5.08)+      (name "GND" (effects (font (size 1.27 1.27))))+      (number "B1" (effects (font (size 1.27 1.27))))+    )+    (pin input line (at -17.78 -5.08 0) (length 5.08)+      (name "ADSEL" (effects (font (size 1.27 1.27))))+      (number "B2" (effects (font (size 1.27 1.27))))+    )+    (pin passive line (at 17.78 2.54 180) (length 5.08)+      (name "BYPASS" (effects (font (size 1.27 1.27))))+      (number "C3" (effects (font (size 1.27 1.27))))+    )+    (pin passive line (at 17.78 0.00 180) (length 5.08)+      (name "CRST" (effects (font (size 1.27 1.27))))+      (number "C2" (effects (font (size 1.27 1.27))))+    )+    (pin power_in line (at 17.78 -2.54 180) (length 5.08)+      (name "VDD" (effects (font (size 1.27 1.27))))+      (number "C1" (effects (font (size 1.27 1.27))))+    )+    (pin power_in line (at 17.78 -5.08 180) (length 5.08)+      (name "VDDIO" (effects (font (size 1.27 1.27))))+      (number "B3" (effects (font (size 1.27 1.27))))+    )+    )+  )+)
bmm350.lbradded+129
@@ -0,0 +1,129 @@+<?xml version="1.0" encoding="utf-8"?>+<!DOCTYPE eagle SYSTEM "eagle.dtd">+<eagle version="9.6.2">+<drawing>+<settings><setting alwaysvectorfont="no"/></settings>+<grid distance="0.1" unitdist="inch" unit="inch" style="lines" multiple="1" display="no" altdistance="0.01" altunitdist="inch" altunit="inch"/>+<layers>+<layer number="1" name="Top" color="4" fill="1" visible="yes" active="yes"/>+<layer number="16" name="Bottom" color="1" fill="1" visible="yes" active="yes"/>+<layer number="17" name="Pads" color="2" fill="1" visible="yes" active="yes"/>+<layer number="18" name="Vias" color="2" fill="1" visible="yes" active="yes"/>+<layer number="19" name="Unrouted" color="6" fill="1" visible="yes" active="yes"/>+<layer number="20" name="Dimension" color="15" fill="1" visible="yes" active="yes"/>+<layer number="21" name="tPlace" color="7" fill="1" visible="yes" active="yes"/>+<layer number="22" name="bPlace" color="7" fill="1" visible="yes" active="yes"/>+<layer number="23" name="tOrigins" color="15" fill="1" visible="yes" active="yes"/>+<layer number="24" name="bOrigins" color="15" fill="1" visible="yes" active="yes"/>+<layer number="25" name="tNames" color="7" fill="1" visible="yes" active="yes"/>+<layer number="26" name="bNames" color="7" fill="1" visible="yes" active="yes"/>+<layer number="27" name="tValues" color="7" fill="1" visible="yes" active="yes"/>+<layer number="28" name="bValues" color="7" fill="1" visible="yes" active="yes"/>+<layer number="29" name="tStop" color="7" fill="3" visible="no" active="yes"/>+<layer number="30" name="bStop" color="7" fill="6" visible="no" active="yes"/>+<layer number="31" name="tCream" color="7" fill="4" visible="no" active="yes"/>+<layer number="32" name="bCream" color="7" fill="5" visible="no" active="yes"/>+<layer number="33" name="tFinish" color="6" fill="3" visible="no" active="yes"/>+<layer number="34" name="bFinish" color="6" fill="6" visible="no" active="yes"/>+<layer number="35" name="tGlue" color="7" fill="4" visible="no" active="yes"/>+<layer number="36" name="bGlue" color="7" fill="5" visible="no" active="yes"/>+<layer number="37" name="tTest" color="7" fill="1" visible="no" active="yes"/>+<layer number="38" name="bTest" color="7" fill="1" visible="no" active="yes"/>+<layer number="39" name="tKeepout" color="4" fill="11" visible="no" active="yes"/>+<layer number="40" name="bKeepout" color="1" fill="11" visible="no" active="yes"/>+<layer number="41" name="tRestrict" color="4" fill="10" visible="no" active="yes"/>+<layer number="42" name="bRestrict" color="1" fill="10" visible="no" active="yes"/>+<layer number="43" name="vRestrict" color="2" fill="10" visible="no" active="yes"/>+<layer number="44" name="Drills" color="7" fill="1" visible="no" active="yes"/>+<layer number="45" name="Holes" color="7" fill="1" visible="no" active="yes"/>+<layer number="46" name="Milling" color="3" fill="1" visible="no" active="yes"/>+<layer number="47" name="Measures" color="7" fill="1" visible="no" active="yes"/>+<layer number="48" name="Document" color="7" fill="1" visible="yes" active="yes"/>+<layer number="49" name="Reference" color="7" fill="1" visible="yes" active="yes"/>+<layer number="91" name="Nets" color="2" fill="1" visible="yes" active="yes"/>+<layer number="92" name="Busses" color="1" fill="1" visible="yes" active="yes"/>+<layer number="93" name="Pins" color="2" fill="1" visible="no" active="yes"/>+<layer number="94" name="Symbols" color="4" fill="1" visible="yes" active="yes"/>+<layer number="95" name="Names" color="7" fill="1" visible="yes" active="yes"/>+<layer number="96" name="Values" color="7" fill="1" visible="yes" active="yes"/>+<layer number="97" name="Info" color="7" fill="1" visible="yes" active="yes"/>+<layer number="98" name="Guide" color="6" fill="1" visible="yes" active="yes"/>+</layers>+<library>+<description></description>+<packages>+<package name="WLCSP-9_1.21x1.22mm_Layout3x3_P0.4mm">+  <description>WLCSP-9, 1.21 x 1.22 mm, 0.4 mm pitch. WLCSP-9, 1.21x1.22mm, 9 Ball, 3x3 Layout, 0.4mm Pitch</description>+  <smd name="A1" x="-0.4000" y="0.4000" dx="0.2000" dy="0.2000" layer="1" roundness="100"/>+  <smd name="A2" x="0.0000" y="0.4000" dx="0.2000" dy="0.2000" layer="1" roundness="100"/>+  <smd name="A3" x="0.4000" y="0.4000" dx="0.2000" dy="0.2000" layer="1" roundness="100"/>+  <smd name="B1" x="-0.4000" y="-0.0000" dx="0.2000" dy="0.2000" layer="1" roundness="100"/>+  <smd name="B2" x="0.0000" y="-0.0000" dx="0.2000" dy="0.2000" layer="1" roundness="100"/>+  <smd name="B3" x="0.4000" y="-0.0000" dx="0.2000" dy="0.2000" layer="1" roundness="100"/>+  <smd name="C1" x="-0.4000" y="-0.4000" dx="0.2000" dy="0.2000" layer="1" roundness="100"/>+  <smd name="C2" x="0.0000" y="-0.4000" dx="0.2000" dy="0.2000" layer="1" roundness="100"/>+  <smd name="C3" x="0.4000" y="-0.4000" dx="0.2000" dy="0.2000" layer="1" roundness="100"/>+  <polygon width="0.1200" layer="21">+    <vertex x="-0.7600" y="0.7600"/>+    <vertex x="-1.2600" y="0.7600"/>+    <vertex x="-0.7600" y="1.2600"/>+  </polygon>+  <wire x1="-0.7600" y1="-0.7600" x2="-0.7600" y2="0.4350" width="0.1200" layer="21"/>+  <wire x1="-0.4350" y1="0.7600" x2="0.7600" y2="0.7600" width="0.1200" layer="21"/>+  <wire x1="0.7600" y1="0.7600" x2="0.7600" y2="-0.7600" width="0.1200" layer="21"/>+  <wire x1="0.7600" y1="-0.7600" x2="-0.7600" y2="-0.7600" width="0.1200" layer="21"/>+  <wire x1="-0.6050" y1="0.3075" x2="-0.3025" y2="0.6100" width="0.1000" layer="51"/>+  <wire x1="-0.6050" y1="-0.6100" x2="-0.6050" y2="0.3075" width="0.1000" layer="51"/>+  <wire x1="-0.3025" y1="0.6100" x2="0.6050" y2="0.6100" width="0.1000" layer="51"/>+  <wire x1="0.6050" y1="0.6100" x2="0.6050" y2="-0.6100" width="0.1000" layer="51"/>+  <wire x1="0.6050" y1="-0.6100" x2="-0.6050" y2="-0.6100" width="0.1000" layer="51"/>+  <text x="0" y="1.360" size="1.27" layer="25" align="bottom-center">&gt;NAME</text>+  <text x="0" y="-1.360" size="1.27" layer="27" align="top-center">&gt;VALUE</text>+</package>+</packages>+<symbols>+<symbol name="BMM350">+  <wire x1="-12.7" y1="7.62" x2="12.7" y2="7.62" width="0.254" layer="94"/>+  <wire x1="12.7" y1="7.62" x2="12.7" y2="-7.62" width="0.254" layer="94"/>+  <wire x1="12.7" y1="-7.62" x2="-12.7" y2="-7.62" width="0.254" layer="94"/>+  <wire x1="-12.7" y1="-7.62" x2="-12.7" y2="7.62" width="0.254" layer="94"/>+  <text x="0.0000" y="10.1600" size="1.27" layer="95" align="center">&gt;NAME</text>+  <text x="0.0000" y="-10.1600" size="1.27" layer="96" align="center">&gt;VALUE</text>+  <pin name="INT" x="-17.78" y="5.08" length="middle" direction="out"/>+  <pin name="SDA" x="-17.78" y="2.54" length="middle" direction="io"/>+  <pin name="SCK" x="-17.78" y="0" length="middle" direction="in"/>+  <pin name="GND" x="-17.78" y="-2.54" length="middle" direction="pwr"/>+  <pin name="ADSEL" x="-17.78" y="-5.08" length="middle" direction="in"/>+  <pin name="BYPASS" x="17.78" y="2.54" length="middle" direction="pas" rot="R180"/>+  <pin name="CRST" x="17.78" y="0" length="middle" direction="pas" rot="R180"/>+  <pin name="VDD" x="17.78" y="-2.54" length="middle" direction="pwr" rot="R180"/>+  <pin name="VDDIO" x="17.78" y="-5.08" length="middle" direction="pwr" rot="R180"/>+</symbol>+</symbols>+<devicesets>+<deviceset name="BMM350" prefix="U">+  <description></description>+  <gates>+    <gate name="G$1" symbol="BMM350" x="0" y="0"/>+  </gates>+  <devices>+    <device name="" package="WLCSP-9_1.21x1.22mm_Layout3x3_P0.4mm">+      <connects>+        <connect gate="G$1" pin="INT" pad="A1"/>+        <connect gate="G$1" pin="SDA" pad="A2"/>+        <connect gate="G$1" pin="SCK" pad="A3"/>+        <connect gate="G$1" pin="GND" pad="B1"/>+        <connect gate="G$1" pin="ADSEL" pad="B2"/>+        <connect gate="G$1" pin="BYPASS" pad="C3"/>+        <connect gate="G$1" pin="CRST" pad="C2"/>+        <connect gate="G$1" pin="VDD" pad="C1"/>+        <connect gate="G$1" pin="VDDIO" pad="B3"/>+      </connects>+      <technologies><technology name=""/></technologies>+    </device>+  </devices>+</deviceset>+</devicesets>+</library>+</drawing>+</eagle>\ No newline at end of file
bmm350.stepadded+446
@@ -0,0 +1,446 @@+ISO-10303-21;+HEADER;+/* WLCSP-9_1.21x1.22mm_Layout3x3_P0.4mm.step 3D STEP model for use in ECAD systems+ * Copyright (C) 2026, KiCAD+ *+ * This work is licensed under the+ * [Creative Commons CC-BY-SA 4.0 License](https://creativecommons.org/licenses/by-sa/4.0/legalcode),+ * with the following exception:+ *+ * To the extent that the creation of electronic designs that use 'Licensed Material' can be+ * considered to be 'Adapted Material', then the copyright holder waives article 3 of the license+ * with respect to these designs and any generated files which use data provided as part of the+ * 'Licensed Material'.+ *+ * You are free to use the library data in your own projects without the obligation to share your+ * project files under this or any other license agreement. However, if you wish to distribute+ * these libraries, or parts thereof (including in modified form) as a collection then the exception+ * above does not apply. Please refer to+ * https://gitlab.com/kicad/libraries/kicad-packages3D/-/blob/master/LICENSE.md for further clarification+ * of the exception.+ *+ * Disclaimer of Warranties and Limitation of Liability.+ * These libraries are provided in the hope that they will be useful, but are provided without warranty of any kind, express or implied.+ * USE 3D CAD DATA AT YOUR OWN RISK+ * DO NOT RELY UPON ANY INFORMATION FOUND HERE WITHOUT INDEPENDENT VERIFICATION.+ */++FILE_DESCRIPTION(+/* description */ ('model of WLCSP-9_1.21x1.22mm_Layout3x3_P0.4mm'),+/* implementation_level */ '2;1');++FILE_NAME(+/* name */ 'WLCSP-9_1.21x1.22mm_Layout3x3_P0.4mm.step',+/* time_stamp */ '1970-01-01T00:00:00',+/* author */ ('KiCAD','kicad'),+/* organization */ ('OCCT'),+/* preprocessor_version */ '',+/* originating_system */ 'KiCAD',+/* authorisation */ '');++FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'));+ENDSEC;++DATA;+#1=APPLICATION_PROTOCOL_DEFINITION('international standard','automotive_design',2000,#2);+#2=APPLICATION_CONTEXT('core data for automotive mechanical design processes');+#3=SHAPE_DEFINITION_REPRESENTATION(#4,#10);+#4=PRODUCT_DEFINITION_SHAPE('','',#5);+#5=PRODUCT_DEFINITION('design','',#6,#9);+#6=PRODUCT_DEFINITION_FORMATION('','',#7);+#7=PRODUCT('WLCSP-9_1.21x1.22mm_Layout3x3_P0.4mm','WLCSP-9_1.21x1.22mm_Layout3x3_P0.4mm','',(#8));+#8=PRODUCT_CONTEXT('',#2,'mechanical');+#9=PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');+#10=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#15),#343);+#11=AXIS2_PLACEMENT_3D('',#12,#13,#14);+#12=CARTESIAN_POINT('',(0.,0.,0.));+#13=DIRECTION('',(0.,0.,1.));+#14=DIRECTION('',(1.,0.,-0.));+#15=MANIFOLD_SOLID_BREP('',#16);+#16=CLOSED_SHELL('',(#17,#46,#66,#89,#103,#194,#201,#219,#234,#247,#260,#273,#286,#299,#312,#325,#338));+#17=ADVANCED_FACE('',(#18),#43,.F.);+#18=FACE_BOUND('',#19,.F.);+#19=EDGE_LOOP('',(#20,#28,#35,#40));+#20=ORIENTED_EDGE('',*,*,#21,.F.);+#21=EDGE_CURVE('',#22,#24,#26,.T.);+#22=VERTEX_POINT('',#23);+#23=CARTESIAN_POINT('',(-0.605,-0.61,0.2));+#24=VERTEX_POINT('',#25);+#25=CARTESIAN_POINT('',(-0.605,-0.61,0.6));+#26=LINE('',#23,#27);+#27=VECTOR('',#13,1.);+#28=ORIENTED_EDGE('',*,*,#29,.T.);+#29=EDGE_CURVE('',#22,#30,#32,.T.);+#30=VERTEX_POINT('',#31);+#31=CARTESIAN_POINT('',(-0.605,0.61,0.2));+#32=LINE('',#23,#33);+#33=VECTOR('',#34,1.);+#34=DIRECTION('',(0.,1.,0.));+#35=ORIENTED_EDGE('',*,*,#36,.T.);+#36=EDGE_CURVE('',#30,#37,#39,.T.);+#37=VERTEX_POINT('',#38);+#38=CARTESIAN_POINT('',(-0.605,0.61,0.6));+#39=LINE('',#31,#27);+#40=ORIENTED_EDGE('',*,*,#41,.F.);+#41=EDGE_CURVE('',#24,#37,#42,.T.);+#42=LINE('',#25,#33);+#43=PLANE('',#44);+#44=AXIS2_PLACEMENT_3D('',#23,#45,#13);+#45=DIRECTION('',(1.,0.,0.));+#46=ADVANCED_FACE('',(#47),#64,.F.);+#47=FACE_BOUND('',#48,.F.);+#48=EDGE_LOOP('',(#49,#55,#56,#61));+#49=ORIENTED_EDGE('',*,*,#50,.F.);+#50=EDGE_CURVE('',#22,#51,#53,.T.);+#51=VERTEX_POINT('',#52);+#52=CARTESIAN_POINT('',(0.605,-0.61,0.2));+#53=LINE('',#23,#54);+#54=VECTOR('',#45,1.);+#55=ORIENTED_EDGE('',*,*,#21,.T.);+#56=ORIENTED_EDGE('',*,*,#57,.T.);+#57=EDGE_CURVE('',#24,#58,#60,.T.);+#58=VERTEX_POINT('',#59);+#59=CARTESIAN_POINT('',(0.605,-0.61,0.6));+#60=LINE('',#25,#54);+#61=ORIENTED_EDGE('',*,*,#62,.F.);+#62=EDGE_CURVE('',#51,#58,#63,.T.);+#63=LINE('',#52,#27);+#64=PLANE('',#65);+#65=AXIS2_PLACEMENT_3D('',#23,#34,#13);+#66=ADVANCED_FACE('',(#67,#77),#87,.T.);+#67=FACE_BOUND('',#68,.T.);+#68=EDGE_LOOP('',(#40,#56,#69,#74));+#69=ORIENTED_EDGE('',*,*,#70,.T.);+#70=EDGE_CURVE('',#58,#71,#73,.T.);+#71=VERTEX_POINT('',#72);+#72=CARTESIAN_POINT('',(0.605,0.61,0.6));+#73=LINE('',#59,#33);+#74=ORIENTED_EDGE('',*,*,#75,.F.);+#75=EDGE_CURVE('',#37,#71,#76,.T.);+#76=LINE('',#38,#54);+#77=FACE_BOUND('',#78,.T.);+#78=EDGE_LOOP('',(#79));+#79=ORIENTED_EDGE('',*,*,#80,.T.);+#80=EDGE_CURVE('',#81,#81,#83,.T.);+#81=VERTEX_POINT('',#82);+#82=CARTESIAN_POINT('',(-0.422,0.488,0.6));+#83=CIRCLE('',#84,6.1E-02);+#84=AXIS2_PLACEMENT_3D('',#85,#86,#45);+#85=CARTESIAN_POINT('',(-0.483,0.488,0.6));+#86=DIRECTION('',(0.,0.,-1.));+#87=PLANE('',#88);+#88=AXIS2_PLACEMENT_3D('',#25,#13,#45);+#89=ADVANCED_FACE('',(#90),#101,.T.);+#90=FACE_BOUND('',#91,.T.);+#91=EDGE_LOOP('',(#92,#35,#97,#98));+#92=ORIENTED_EDGE('',*,*,#93,.F.);+#93=EDGE_CURVE('',#30,#94,#96,.T.);+#94=VERTEX_POINT('',#95);+#95=CARTESIAN_POINT('',(0.605,0.61,0.2));+#96=LINE('',#31,#54);+#97=ORIENTED_EDGE('',*,*,#75,.T.);+#98=ORIENTED_EDGE('',*,*,#99,.F.);+#99=EDGE_CURVE('',#94,#71,#100,.T.);+#100=LINE('',#95,#27);+#101=PLANE('',#102);+#102=AXIS2_PLACEMENT_3D('',#31,#34,#13);+#103=ADVANCED_FACE('',(#104,#111,#120,#129,#138,#147,#156,#165,#174,#183),#192,.F.);+#104=FACE_BOUND('',#105,.F.);+#105=EDGE_LOOP('',(#106,#107,#108,#92));+#106=ORIENTED_EDGE('',*,*,#29,.F.);+#107=ORIENTED_EDGE('',*,*,#50,.T.);+#108=ORIENTED_EDGE('',*,*,#109,.T.);+#109=EDGE_CURVE('',#51,#94,#110,.T.);+#110=LINE('',#52,#33);+#111=FACE_BOUND('',#112,.F.);+#112=EDGE_LOOP('',(#113));+#113=ORIENTED_EDGE('',*,*,#114,.F.);+#114=EDGE_CURVE('',#115,#115,#117,.T.);+#115=VERTEX_POINT('',#116);+#116=CARTESIAN_POINT('',(-0.276603157962,-0.4,0.2));+#117=CIRCLE('',#118,0.123396842038);+#118=AXIS2_PLACEMENT_3D('',#119,#13,#14);+#119=CARTESIAN_POINT('',(-0.4,-0.4,0.2));+#120=FACE_BOUND('',#121,.F.);+#121=EDGE_LOOP('',(#122));+#122=ORIENTED_EDGE('',*,*,#123,.F.);+#123=EDGE_CURVE('',#124,#124,#126,.T.);+#124=VERTEX_POINT('',#125);+#125=CARTESIAN_POINT('',(-0.276603157962,-3.022350952539E-17,0.2));+#126=CIRCLE('',#127,0.123396842038);+#127=AXIS2_PLACEMENT_3D('',#128,#13,#14);+#128=CARTESIAN_POINT('',(-0.4,0.,0.2));+#129=FACE_BOUND('',#130,.F.);+#130=EDGE_LOOP('',(#131));+#131=ORIENTED_EDGE('',*,*,#132,.F.);+#132=EDGE_CURVE('',#133,#133,#135,.T.);+#133=VERTEX_POINT('',#134);+#134=CARTESIAN_POINT('',(0.123396842038,-0.4,0.2));+#135=CIRCLE('',#136,0.123396842038);+#136=AXIS2_PLACEMENT_3D('',#137,#13,#14);+#137=CARTESIAN_POINT('',(0.,-0.4,0.2));+#138=FACE_BOUND('',#139,.F.);+#139=EDGE_LOOP('',(#140));+#140=ORIENTED_EDGE('',*,*,#141,.F.);+#141=EDGE_CURVE('',#142,#142,#144,.T.);+#142=VERTEX_POINT('',#143);+#143=CARTESIAN_POINT('',(0.523396842038,-0.4,0.2));+#144=CIRCLE('',#145,0.123396842038);+#145=AXIS2_PLACEMENT_3D('',#146,#13,#14);+#146=CARTESIAN_POINT('',(0.4,-0.4,0.2));+#147=FACE_BOUND('',#148,.F.);+#148=EDGE_LOOP('',(#149));+#149=ORIENTED_EDGE('',*,*,#150,.F.);+#150=EDGE_CURVE('',#151,#151,#153,.T.);+#151=VERTEX_POINT('',#152);+#152=CARTESIAN_POINT('',(0.123396842038,-3.022350952539E-17,0.2));+#153=CIRCLE('',#154,0.123396842038);+#154=AXIS2_PLACEMENT_3D('',#155,#13,#14);+#155=CARTESIAN_POINT('',(0.,0.,0.2));+#156=FACE_BOUND('',#157,.F.);+#157=EDGE_LOOP('',(#158));+#158=ORIENTED_EDGE('',*,*,#159,.F.);+#159=EDGE_CURVE('',#160,#160,#162,.T.);+#160=VERTEX_POINT('',#161);+#161=CARTESIAN_POINT('',(0.523396842038,-3.022350952539E-17,0.2));+#162=CIRCLE('',#163,0.123396842038);+#163=AXIS2_PLACEMENT_3D('',#164,#13,#14);+#164=CARTESIAN_POINT('',(0.4,0.,0.2));+#165=FACE_BOUND('',#166,.F.);+#166=EDGE_LOOP('',(#167));+#167=ORIENTED_EDGE('',*,*,#168,.F.);+#168=EDGE_CURVE('',#169,#169,#171,.T.);+#169=VERTEX_POINT('',#170);+#170=CARTESIAN_POINT('',(-0.276603157962,0.4,0.2));+#171=CIRCLE('',#172,0.123396842038);+#172=AXIS2_PLACEMENT_3D('',#173,#13,#14);+#173=CARTESIAN_POINT('',(-0.4,0.4,0.2));+#174=FACE_BOUND('',#175,.F.);+#175=EDGE_LOOP('',(#176));+#176=ORIENTED_EDGE('',*,*,#177,.F.);+#177=EDGE_CURVE('',#178,#178,#180,.T.);+#178=VERTEX_POINT('',#179);+#179=CARTESIAN_POINT('',(0.123396842038,0.4,0.2));+#180=CIRCLE('',#181,0.123396842038);+#181=AXIS2_PLACEMENT_3D('',#182,#13,#14);+#182=CARTESIAN_POINT('',(0.,0.4,0.2));+#183=FACE_BOUND('',#184,.F.);+#184=EDGE_LOOP('',(#185));+#185=ORIENTED_EDGE('',*,*,#186,.F.);+#186=EDGE_CURVE('',#187,#187,#189,.T.);+#187=VERTEX_POINT('',#188);+#188=CARTESIAN_POINT('',(0.523396842038,0.4,0.2));+#189=CIRCLE('',#190,0.123396842038);+#190=AXIS2_PLACEMENT_3D('',#191,#13,#14);+#191=CARTESIAN_POINT('',(0.4,0.4,0.2));+#192=PLANE('',#193);+#193=AXIS2_PLACEMENT_3D('',#23,#13,#45);+#194=ADVANCED_FACE('',(#195),#199,.T.);+#195=FACE_BOUND('',#196,.T.);+#196=EDGE_LOOP('',(#61,#108,#197,#198));+#197=ORIENTED_EDGE('',*,*,#99,.T.);+#198=ORIENTED_EDGE('',*,*,#70,.F.);+#199=PLANE('',#200);+#200=AXIS2_PLACEMENT_3D('',#52,#45,#13);+#201=ADVANCED_FACE('',(#202),#216,.T.);+#202=FACE_BOUND('',#203,.F.);+#203=EDGE_LOOP('',(#204,#210,#215,#79));+#204=ORIENTED_EDGE('',*,*,#205,.F.);+#205=EDGE_CURVE('',#206,#81,#208,.T.);+#206=VERTEX_POINT('',#207);+#207=CARTESIAN_POINT('',(-0.422,0.488,0.602));+#208=LINE('',#207,#209);+#209=VECTOR('',#86,1.);+#210=ORIENTED_EDGE('',*,*,#211,.T.);+#211=EDGE_CURVE('',#206,#206,#212,.T.);+#212=CIRCLE('',#213,6.1E-02);+#213=AXIS2_PLACEMENT_3D('',#214,#13,#14);+#214=CARTESIAN_POINT('',(-0.483,0.488,0.602));+#215=ORIENTED_EDGE('',*,*,#205,.T.);+#216=CYLINDRICAL_SURFACE('',#217,6.1E-02);+#217=AXIS2_PLACEMENT_3D('',#214,#218,#45);+#218=DIRECTION('',(-0.,-0.,-1.));+#219=ADVANCED_FACE('',(#220),#232,.T.);+#220=FACE_BOUND('',#221,.T.);+#221=EDGE_LOOP('',(#113,#222,#231));+#222=ORIENTED_EDGE('',*,*,#223,.F.);+#223=EDGE_CURVE('',#224,#115,#226,.T.);+#224=VERTEX_POINT('',#225);+#225=CARTESIAN_POINT('',(-0.4,-0.4,-6.675E-03));+#226=CIRCLE('',#227,0.140175);+#227=AXIS2_PLACEMENT_3D('',#228,#229,#230);+#228=CARTESIAN_POINT('',(-0.4,-0.4,0.1335));+#229=DIRECTION('',(-2.449293598295E-16,-1.,0.));+#230=DIRECTION('',(1.,-2.449293598295E-16,0.));+#231=ORIENTED_EDGE('',*,*,#223,.T.);+#232=SPHERICAL_SURFACE('',#233,0.140175);+#233=AXIS2_PLACEMENT_3D('',#228,#13,#45);+#234=ADVANCED_FACE('',(#235),#245,.T.);+#235=FACE_BOUND('',#236,.T.);+#236=EDGE_LOOP('',(#122,#237,#244));+#237=ORIENTED_EDGE('',*,*,#238,.F.);+#238=EDGE_CURVE('',#239,#124,#241,.T.);+#239=VERTEX_POINT('',#240);+#240=CARTESIAN_POINT('',(-0.4,-2.102288275346E-33,-6.675E-03));+#241=CIRCLE('',#242,0.140175);+#242=AXIS2_PLACEMENT_3D('',#243,#229,#230);+#243=CARTESIAN_POINT('',(-0.4,0.,0.1335));+#244=ORIENTED_EDGE('',*,*,#238,.T.);+#245=SPHERICAL_SURFACE('',#246,0.140175);+#246=AXIS2_PLACEMENT_3D('',#243,#13,#45);+#247=ADVANCED_FACE('',(#248),#258,.T.);+#248=FACE_BOUND('',#249,.T.);+#249=EDGE_LOOP('',(#131,#250,#257));+#250=ORIENTED_EDGE('',*,*,#251,.F.);+#251=EDGE_CURVE('',#252,#133,#254,.T.);+#252=VERTEX_POINT('',#253);+#253=CARTESIAN_POINT('',(8.583243253524E-18,-0.4,-6.675E-03));+#254=CIRCLE('',#255,0.140175);+#255=AXIS2_PLACEMENT_3D('',#256,#229,#230);+#256=CARTESIAN_POINT('',(0.,-0.4,0.1335));+#257=ORIENTED_EDGE('',*,*,#251,.T.);+#258=SPHERICAL_SURFACE('',#259,0.140175);+#259=AXIS2_PLACEMENT_3D('',#256,#13,#45);+#260=ADVANCED_FACE('',(#261),#271,.T.);+#261=FACE_BOUND('',#262,.T.);+#262=EDGE_LOOP('',(#140,#263,#270));+#263=ORIENTED_EDGE('',*,*,#264,.F.);+#264=EDGE_CURVE('',#265,#142,#267,.T.);+#265=VERTEX_POINT('',#266);+#266=CARTESIAN_POINT('',(0.4,-0.4,-6.675E-03));+#267=CIRCLE('',#268,0.140175);+#268=AXIS2_PLACEMENT_3D('',#269,#229,#230);+#269=CARTESIAN_POINT('',(0.4,-0.4,0.1335));+#270=ORIENTED_EDGE('',*,*,#264,.T.);+#271=SPHERICAL_SURFACE('',#272,0.140175);+#272=AXIS2_PLACEMENT_3D('',#269,#13,#45);+#273=ADVANCED_FACE('',(#274),#284,.T.);+#274=FACE_BOUND('',#275,.T.);+#275=EDGE_LOOP('',(#149,#276,#283));+#276=ORIENTED_EDGE('',*,*,#277,.F.);+#277=EDGE_CURVE('',#278,#151,#280,.T.);+#278=VERTEX_POINT('',#279);+#279=CARTESIAN_POINT('',(8.583243253524E-18,-2.102288275346E-33,-6.675E-03));+#280=CIRCLE('',#281,0.140175);+#281=AXIS2_PLACEMENT_3D('',#282,#229,#230);+#282=CARTESIAN_POINT('',(0.,0.,0.1335));+#283=ORIENTED_EDGE('',*,*,#277,.T.);+#284=SPHERICAL_SURFACE('',#285,0.140175);+#285=AXIS2_PLACEMENT_3D('',#282,#13,#45);+#286=ADVANCED_FACE('',(#287),#297,.T.);+#287=FACE_BOUND('',#288,.T.);+#288=EDGE_LOOP('',(#158,#289,#296));+#289=ORIENTED_EDGE('',*,*,#290,.F.);+#290=EDGE_CURVE('',#291,#160,#293,.T.);+#291=VERTEX_POINT('',#292);+#292=CARTESIAN_POINT('',(0.4,-2.102288275346E-33,-6.675E-03));+#293=CIRCLE('',#294,0.140175);+#294=AXIS2_PLACEMENT_3D('',#295,#229,#230);+#295=CARTESIAN_POINT('',(0.4,0.,0.1335));+#296=ORIENTED_EDGE('',*,*,#290,.T.);+#297=SPHERICAL_SURFACE('',#298,0.140175);+#298=AXIS2_PLACEMENT_3D('',#295,#13,#45);+#299=ADVANCED_FACE('',(#300),#310,.T.);+#300=FACE_BOUND('',#301,.T.);+#301=EDGE_LOOP('',(#167,#302,#309));+#302=ORIENTED_EDGE('',*,*,#303,.F.);+#303=EDGE_CURVE('',#304,#169,#306,.T.);+#304=VERTEX_POINT('',#305);+#305=CARTESIAN_POINT('',(-0.4,0.4,-6.675E-03));+#306=CIRCLE('',#307,0.140175);+#307=AXIS2_PLACEMENT_3D('',#308,#229,#230);+#308=CARTESIAN_POINT('',(-0.4,0.4,0.1335));+#309=ORIENTED_EDGE('',*,*,#303,.T.);+#310=SPHERICAL_SURFACE('',#311,0.140175);+#311=AXIS2_PLACEMENT_3D('',#308,#13,#45);+#312=ADVANCED_FACE('',(#313),#323,.T.);+#313=FACE_BOUND('',#314,.T.);+#314=EDGE_LOOP('',(#176,#315,#322));+#315=ORIENTED_EDGE('',*,*,#316,.F.);+#316=EDGE_CURVE('',#317,#178,#319,.T.);+#317=VERTEX_POINT('',#318);+#318=CARTESIAN_POINT('',(8.583243253524E-18,0.4,-6.675E-03));+#319=CIRCLE('',#320,0.140175);+#320=AXIS2_PLACEMENT_3D('',#321,#229,#230);+#321=CARTESIAN_POINT('',(0.,0.4,0.1335));+#322=ORIENTED_EDGE('',*,*,#316,.T.);+#323=SPHERICAL_SURFACE('',#324,0.140175);+#324=AXIS2_PLACEMENT_3D('',#321,#13,#45);+#325=ADVANCED_FACE('',(#326),#336,.T.);+#326=FACE_BOUND('',#327,.T.);+#327=EDGE_LOOP('',(#185,#328,#335));+#328=ORIENTED_EDGE('',*,*,#329,.F.);+#329=EDGE_CURVE('',#330,#187,#332,.T.);+#330=VERTEX_POINT('',#331);+#331=CARTESIAN_POINT('',(0.4,0.4,-6.675E-03));+#332=CIRCLE('',#333,0.140175);+#333=AXIS2_PLACEMENT_3D('',#334,#229,#230);+#334=CARTESIAN_POINT('',(0.4,0.4,0.1335));+#335=ORIENTED_EDGE('',*,*,#329,.T.);+#336=SPHERICAL_SURFACE('',#337,0.140175);+#337=AXIS2_PLACEMENT_3D('',#334,#13,#45);+#338=ADVANCED_FACE('',(#339),#342,.T.);+#339=FACE_BOUND('',#340,.F.);+#340=EDGE_LOOP('',(#341));+#341=ORIENTED_EDGE('',*,*,#211,.F.);+#342=PLANE('',#213);+#343=( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#347)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#344,#345,#346)) REPRESENTATION_CONTEXT('Context #1','3D Context with UNIT and UNCERTAINTY') );+#344=( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );+#345=( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );+#346=( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );+#347=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#344,'distance_accuracy_value','confusion accuracy');+#348=PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7));+#349=MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#350,#360,#361,#362,#363,#364,#373,#374,#375,#376,#377,#378,#379,#380,#381,#382,#391,#392,#393,#394,#395,#396,#397,#398,#399,#400),#343);+#350=STYLED_ITEM('color',(#351),#17);+#351=PRESENTATION_STYLE_ASSIGNMENT((#352,#358));+#352=SURFACE_STYLE_USAGE(.BOTH.,#353);+#353=SURFACE_SIDE_STYLE('',(#354));+#354=SURFACE_STYLE_FILL_AREA(#355);+#355=FILL_AREA_STYLE('',(#356));+#356=FILL_AREA_STYLE_COLOUR('',#357);+#357=COLOUR_RGB('',0.147999998088,0.145000001626,0.145000001626);+#358=CURVE_STYLE('',#359,POSITIVE_LENGTH_MEASURE(0.1),#357);+#359=DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous');+#360=STYLED_ITEM('color',(#351),#46);+#361=STYLED_ITEM('color',(#351),#66);+#362=STYLED_ITEM('color',(#351),#89);+#363=STYLED_ITEM('color',(#351),#103);+#364=OVER_RIDING_STYLED_ITEM('overriding color',(#365),#114,#363);+#365=PRESENTATION_STYLE_ASSIGNMENT((#366,#372));+#366=SURFACE_STYLE_USAGE(.BOTH.,#367);+#367=SURFACE_SIDE_STYLE('',(#368));+#368=SURFACE_STYLE_FILL_AREA(#369);+#369=FILL_AREA_STYLE('',(#370));+#370=FILL_AREA_STYLE_COLOUR('',#371);+#371=COLOUR_RGB('',0.823999987314,0.819999987296,0.781000009244);+#372=CURVE_STYLE('',#359,POSITIVE_LENGTH_MEASURE(0.1),#371);+#373=OVER_RIDING_STYLED_ITEM('overriding color',(#365),#123,#363);+#374=OVER_RIDING_STYLED_ITEM('overriding color',(#365),#132,#363);+#375=OVER_RIDING_STYLED_ITEM('overriding color',(#365),#141,#363);+#376=OVER_RIDING_STYLED_ITEM('overriding color',(#365),#150,#363);+#377=OVER_RIDING_STYLED_ITEM('overriding color',(#365),#159,#363);+#378=OVER_RIDING_STYLED_ITEM('overriding color',(#365),#168,#363);+#379=OVER_RIDING_STYLED_ITEM('overriding color',(#365),#177,#363);+#380=OVER_RIDING_STYLED_ITEM('overriding color',(#365),#186,#363);+#381=STYLED_ITEM('color',(#351),#194);+#382=STYLED_ITEM('color',(#383),#201);+#383=PRESENTATION_STYLE_ASSIGNMENT((#384,#390));+#384=SURFACE_STYLE_USAGE(.BOTH.,#385);+#385=SURFACE_SIDE_STYLE('',(#386));+#386=SURFACE_STYLE_FILL_AREA(#387);+#387=FILL_AREA_STYLE('',(#388));+#388=FILL_AREA_STYLE_COLOUR('',#389);+#389=COLOUR_RGB('',0.690999998585,0.664000007176,0.597999987832);+#390=CURVE_STYLE('',#359,POSITIVE_LENGTH_MEASURE(0.1),#389);+#391=STYLED_ITEM('color',(#365),#219);+#392=STYLED_ITEM('color',(#365),#234);+#393=STYLED_ITEM('color',(#365),#247);+#394=STYLED_ITEM('color',(#365),#260);+#395=STYLED_ITEM('color',(#365),#273);+#396=STYLED_ITEM('color',(#365),#286);+#397=STYLED_ITEM('color',(#365),#299);+#398=STYLED_ITEM('color',(#365),#312);+#399=STYLED_ITEM('color',(#365),#325);+#400=STYLED_ITEM('color',(#383),#338);+ENDSEC;+END-ISO-10303-21;
docs/bmm350-datasheet.pdfadded
⋯ 1 unchanged line ⋯
docs/hero.pngadded
⋯ 1 unchanged line ⋯
package.jsonadded+198
@@ -0,0 +1,198 @@+{+  "slug": "bmm350",+  "version": "0.1.0",+  "type": "component",+  "description": "Bosch Sensortec Specialized Sensors, WLCSP-9(1.3x1.3). Pinout cross-checked by two models against the datasheet, KiCad symbol/footprint/3D.",+  "tags": [+    "component",+    "sensors",+    "bmm350",+    "factory-2.0.0",+    "extractor-text"+  ],+  "dependencies": {},+  "hero": {+    "type": "image",+    "path": "docs/hero.png"+  },+  "files": [+    "page.json",+    "README.md",+    "bmm350.kicad_sym",+    "bmm350.kicad_mod",+    "bmm350.glb",+    "bmm350.step",+    "bmm350.lbr",+    "docs/hero.png",+    "docs/bmm350-datasheet.pdf",+    "viewers/symbol.html",+    "viewers/footprint.html",+    "bmm350-hero.glb",+    "bmm350-hero.overlay.json",+    "bmm350-etched.glb"+  ],+  "component": {+    "mpn": "BMM350",+    "manufacturer": "Bosch Sensortec",+    "package": "WLCSP-9(1.3x1.3)",+    "pin_count": 9,+    "category": "Sensors",+    "subcategory": "Specialized Sensors",+    "datasheet": "https://jlcpcb.com/api/file/downloadByFileSystemAccessId/8602823677185060864",+    "parts": {+      "symbol": "bmm350.kicad_sym",+      "footprint": "bmm350.kicad_mod",+      "model_3d": "bmm350-hero.glb",+      "model_3d_plain": "bmm350-etched.glb",+      "model_3d_step": "bmm350-etched.step",+      "model_3d_step_plain": "bmm350.step",+      "lbr": "bmm350.lbr"+    },+    "distributor_links": {+      "lcsc": "C17225907"+    },+    "distributor_check": {+      "checked_at": "2026-10-17T20:19:31Z",+      "source": "Component Ocean /api/assign-pns",+      "digikey": {+        "pn": null,+        "status": "quota"+      },+      "mouser": {+        "pn": null,+        "status": "quota"+      }+    },+    "pins": [+      {+        "number": "A1",+        "name": "INT",+        "type": "output",+        "description": "Interrupt output of the BMM350."+      },+      {+        "number": "A2",+        "name": "SDA",+        "type": "bidirectional",+        "description": "I2C / I3C data line."+      },+      {+        "number": "A3",+        "name": "SCK",+        "type": "input",+        "description": "I2C / I3C clock line."+      },+      {+        "number": "B1",+        "name": "GND",+        "type": "power_in",+        "description": "Analog, digital and IO ground."+      },+      {+        "number": "B2",+        "name": "ADSEL",+        "type": "input",+        "description": "Logic status of ADSEL defines the LSB of the I2C legacy address; connect to GND or VDDIO."+      },+      {+        "number": "B3",+        "name": "VDDIO",+        "type": "power_in",+        "description": "IO supply; use a decoupling capacitor (100 nF per the connection diagram), with a VDDIO range of 1.72 V to 3.6 V."+      },+      {+        "number": "C1",+        "name": "VDD",+        "type": "power_in",+        "description": "Digital and analog supply; use a decoupling capacitor (100 nF per the connection diagram), with a VDD range of 1.72 V to 1.98 V."+      },+      {+        "number": "C2",+        "name": "CRST",+        "type": "passive",+        "description": "Connect to an external 2.2 µF low-inductance capacitor (non-magnetic, low-resistance type), which must support 200 mA peak current."+      },+      {+        "number": "C3",+        "name": "BYPASS",+        "type": "passive",+        "description": "Connect to ground."+      }+    ],+    "provenance": {+      "extractor": "extract_pins 0.3",+      "factory_chain": {+        "factory": "2.0.0",+        "extractor": "extract_pins 0.3",+        "primary_model": "claude-haiku-5-5",+        "primary_mode": "text",+        "consensus_model": "claude-sonnet-5-5",+        "consensus": "agreed",+        "guards": "pin_guards 0.1: passed",+        "guard_notes": [+          "extractor flagged: Datasheet says only 'Connect to ground' for BYPASS; no electrical class is given, so passive was cho; I2C/I3C electrical types for SCK and SDA are not stated explicitly in the text; SCK was typed as inp; INT is described only as 'Interrupt output'; its drive type (push-pull vs open-drain) and voltage li"+        ],+        "pages_sent": 14,+        "cost_usd": 0.0526,+        "at": "2026-10-17T20:17:31"+      },+      "datasheet": {+        "url": "https://jlcpcb.com/api/file/downloadByFileSystemAccessId/8602823677185060864",+        "pages": 63,+        "sha256": "db26bd71f271fcea",+        "source_tier": "lcsc"+      },+      "cad": "KiCad official (CC-BY-SA 4.0)",+      "pins": {+        "total": 9,+        "described": 9,+        "cites_pages": true,+        "refuses_to_fabricate": true+      }+    },+    "viewers": {+      "symbol": "viewers/symbol.html",+      "footprint": "viewers/footprint.html"+    },+    "models_3d": [+      {+        "file": "bmm350.step",+        "role": "plain",+        "up": "Z",+        "units": "mm",+        "origin": "footprint origin = pad-pattern centre",+        "seat": "z = 0",+        "extents_mm": [+          1.21,+          1.22,+          0.609+        ],+        "zmin_mm": -0.007,+        "centre_offset_mm": 0.0,+        "footprint_binding": "identity",+        "sha256": "2761b77e9764240fbf79c91412b2bd127e1a30cb1a2103ceae4ce4c1a86308df",+        "checked": "2026-10-17",+        "checked_by": "factory/step_pose.py (Z-up, origin, seat, binding)"+      },+      {+        "file": "bmm350-etched.step",+        "role": "eda",+        "up": "Z",+        "units": "mm",+        "origin": "footprint origin = pad-pattern centre",+        "seat": "z = 0",+        "extents_mm": [+          1.21,+          1.22,+          0.609+        ],+        "zmin_mm": -0.007,+        "centre_offset_mm": 0.0,+        "footprint_binding": "identity",+        "sha256": "99673ca84f0bc25052861c92f17162e7afb93a7549f1874cffb1425f8033fca1",+        "checked": "2026-10-17",+        "checked_by": "factory/step_pose.py (Z-up, origin, seat, binding)"+      }+    ]+  }+}
page.json+194−16
@@ -4,34 +4,212 @@   "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": [],+  "version": "0.1.0",+  "tags": [+    "component",+    "sensors",+    "bmm350",+    "factory-2.0.0",+    "extractor-text"+  ],   "license": "MIT",   "component": {-    "mpn": "BMM350 — 3-Axis High-Performance Magnetometer",-    "manufacturer": "",-    "package": "",-    "pin_count": null,-    "category": "datasheet",-    "subcategory": "",-    "body_size": null,-    "parts": {},-    "distributor_links": {}+    "mpn": "BMM350",+    "manufacturer": "Bosch Sensortec",+    "package": "WLCSP-9(1.3x1.3)",+    "pin_count": 9,+    "category": "Sensors",+    "subcategory": "Specialized Sensors",+    "datasheet": "https://jlcpcb.com/api/file/downloadByFileSystemAccessId/8602823677185060864",+    "parts": {+      "symbol": "bmm350.kicad_sym",+      "footprint": "bmm350.kicad_mod",+      "model_3d": "bmm350-hero.glb",+      "model_3d_plain": "bmm350-etched.glb",+      "model_3d_step": "bmm350-etched.step",+      "model_3d_step_plain": "bmm350.step",+      "lbr": "bmm350.lbr"+    },+    "distributor_links": {+      "lcsc": "C17225907"+    },+    "distributor_check": {+      "checked_at": "2026-10-17T20:19:31Z",+      "source": "Component Ocean /api/assign-pns",+      "digikey": {+        "pn": null,+        "status": "quota"+      },+      "mouser": {+        "pn": null,+        "status": "quota"+      }+    },+    "pins": [+      {+        "number": "A1",+        "name": "INT",+        "type": "output",+        "description": "Interrupt output of the BMM350."+      },+      {+        "number": "A2",+        "name": "SDA",+        "type": "bidirectional",+        "description": "I2C / I3C data line."+      },+      {+        "number": "A3",+        "name": "SCK",+        "type": "input",+        "description": "I2C / I3C clock line."+      },+      {+        "number": "B1",+        "name": "GND",+        "type": "power_in",+        "description": "Analog, digital and IO ground."+      },+      {+        "number": "B2",+        "name": "ADSEL",+        "type": "input",+        "description": "Logic status of ADSEL defines the LSB of the I2C legacy address; connect to GND or VDDIO."+      },+      {+        "number": "B3",+        "name": "VDDIO",+        "type": "power_in",+        "description": "IO supply; use a decoupling capacitor (100 nF per the connection diagram), with a VDDIO range of 1.72 V to 3.6 V."+      },+      {+        "number": "C1",+        "name": "VDD",+        "type": "power_in",+        "description": "Digital and analog supply; use a decoupling capacitor (100 nF per the connection diagram), with a VDD range of 1.72 V to 1.98 V."+      },+      {+        "number": "C2",+        "name": "CRST",+        "type": "passive",+        "description": "Connect to an external 2.2 µF low-inductance capacitor (non-magnetic, low-resistance type), which must support 200 mA peak current."+      },+      {+        "number": "C3",+        "name": "BYPASS",+        "type": "passive",+        "description": "Connect to ground."+      }+    ],+    "provenance": {+      "extractor": "extract_pins 0.3",+      "factory_chain": {+        "factory": "2.0.0",+        "extractor": "extract_pins 0.3",+        "primary_model": "claude-haiku-5-5",+        "primary_mode": "text",+        "consensus_model": "claude-sonnet-5-5",+        "consensus": "agreed",+        "guards": "pin_guards 0.1: passed",+        "guard_notes": [+          "extractor flagged: Datasheet says only 'Connect to ground' for BYPASS; no electrical class is given, so passive was cho; I2C/I3C electrical types for SCK and SDA are not stated explicitly in the text; SCK was typed as inp; INT is described only as 'Interrupt output'; its drive type (push-pull vs open-drain) and voltage li"+        ],+        "pages_sent": 14,+        "cost_usd": 0.0526,+        "at": "2026-10-17T20:17:31"+      },+      "datasheet": {+        "url": "https://jlcpcb.com/api/file/downloadByFileSystemAccessId/8602823677185060864",+        "pages": 63,+        "sha256": "db26bd71f271fcea",+        "source_tier": "lcsc"+      },+      "cad": "KiCad official (CC-BY-SA 4.0)",+      "pins": {+        "total": 9,+        "described": 9,+        "cites_pages": true,+        "refuses_to_fabricate": true+      }+    },+    "viewers": {+      "symbol": "viewers/symbol.html",+      "footprint": "viewers/footprint.html"+    },+    "models_3d": [+      {+        "file": "bmm350.step",+        "role": "plain",+        "up": "Z",+        "units": "mm",+        "origin": "footprint origin = pad-pattern centre",+        "seat": "z = 0",+        "extents_mm": [+          1.21,+          1.22,+          0.609+        ],+        "zmin_mm": -0.007,+        "centre_offset_mm": 0,+        "footprint_binding": "identity",+        "sha256": "2761b77e9764240fbf79c91412b2bd127e1a30cb1a2103ceae4ce4c1a86308df",+        "checked": "2026-10-17",+        "checked_by": "factory/step_pose.py (Z-up, origin, seat, binding)"+      },+      {+        "file": "bmm350-etched.step",+        "role": "eda",+        "up": "Z",+        "units": "mm",+        "origin": "footprint origin = pad-pattern centre",+        "seat": "z = 0",+        "extents_mm": [+          1.21,+          1.22,+          0.609+        ],+        "zmin_mm": -0.007,+        "centre_offset_mm": 0,+        "footprint_binding": "identity",+        "sha256": "99673ca84f0bc25052861c92f17162e7afb93a7549f1874cffb1425f8033fca1",+        "checked": "2026-10-17",+        "checked_by": "factory/step_pose.py (Z-up, origin, seat, binding)"+      }+    ]   },   "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+  "visibility": "public",+  "hero": {+    "type": "image",+    "path": "docs/hero.png"   },-  "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"+  "updated_at": "2026-05-28T05:37:00.649Z",+  "description": "Bosch Sensortec Specialized Sensors, WLCSP-9(1.3x1.3). Pinout cross-checked by two models against the datasheet, KiCad symbol/footprint/3D.",+  "dependencies": {},+  "files": [+    "page.json",+    "README.md",+    "bmm350.kicad_sym",+    "bmm350.kicad_mod",+    "bmm350.glb",+    "bmm350.step",+    "bmm350.lbr",+    "docs/hero.png",+    "docs/bmm350-datasheet.pdf",+    "viewers/symbol.html",+    "viewers/footprint.html",+    "bmm350-hero.glb",+    "bmm350-hero.overlay.json",+    "bmm350-etched.glb"+  ],+  "org": "adom" }\ No newline at end of file
viewers/footprint.htmladded+1
@@ -0,0 +1 @@+<!doctype html><title>bmm350</title>\ No newline at end of file
viewers/symbol.htmladded+1
@@ -0,0 +1 @@+<!doctype html><title>bmm350</title>\ No newline at end of file