BMI270_Bosch_v1
Unreviewed16×16 mm breakout for the Bosch BMI270 6-axis IMU. Exposes main + auxiliary I²C, CSB / SDO straps. CRITICAL: default strap is 0x69 — bridge MC1↔MC10 for 0x68.
3D Model
BMI270 Molecule — Hardware Reference
~16×16 mm breakout for the Bosch BMI270 low-power 6-axis IMU (accelerometer + gyroscope). Brings out the full interface including the BMI270's auxiliary I²C master bus for slaving an external magnetometer.
- Source: adom-inc/bosch-molecules/Moecule_BMI270_Bosch_V1 — imported 2026-04-17 (folder name misspelled
Moeculeupstream; we preserve that on disk) - KiCad project:
Moecule_BMI270_Bosch_V1.kicad_pro - Wiki page: molecules/bmi270-bosch-v1-666000
- Board: 17 contacts arranged as two rows at X=82 mm (west edge) and X=90 mm (east edge), single-sided, silk revision
V1: 2025-09-04 - IC: BMI270 (Bosch LGA-14, U1)
Component summary
| Ref | Part | Function |
|---|---|---|
| U1 | BMI270 | 6-axis IMU (accel + gyro), LGA-14 |
| C1 | 100 nF 0402 | VDDIO decoupling |
| C2 | 100 nF 0402 | VDD decoupling |
| R1 | 10 kΩ 0402 | Default pull-up on the I2C / 0x69 strap net → +VDDIO |
| Logo1 | Adom logo | silkscreen only |
External contact map
Positions in mm on the front copper. Two columns: west edge (X=82, silk labels on the left side) and east edge (X=90, silk labels on the right side).
West edge (primary interface column)
| Ref | Silk | Net | Role |
|---|---|---|---|
| MP2 | VDD |
+VDD |
Main rail — 1.71–3.6 V |
| MC13 | VDD |
+VDD |
(duplicate — a second VDD tap) |
| MC11 | VIO |
+VDDIO |
Logic rail — 1.2–3.6 V (typically tied to VDD) |
| MC3 | CSB |
CSB |
Interface select: tie high for I²C (default via R1), tie low for SPI |
| MC12 | I2C |
/0x69/I2C |
I²C/SPI mode strap (see below) |
| MC1 | SDO |
SDO/0x68/0x69 |
I²C address strap (see below) |
| MC2 | 0x69 |
/0x69/I2C |
Strap option: bridge to MC1 for 0x69 |
| MC10 | 0x68 |
GND |
Strap option: bridge to MC1 for 0x68 |
| MP1 | GND |
GND |
Ground |
East edge (aux bus + interrupts + SPI lines)
| Ref | Silk | Net | Role |
|---|---|---|---|
| MP3 | SDX |
SDX |
BMI270 primary serial data (I²C = SDA, SPI = MOSI) |
| MC6 | INT1 |
INT1 |
Interrupt / data-ready output 1 |
| MC5 | (no silk) | ASCX |
Aux I²C SCL (BMI270 as I²C master to external mag) |
| MC4 | ASDX |
ASDX |
Aux I²C SDA (BMI270 as I²C master to external mag) |
| MC7 | ASDX (silk overlap) |
OSCB |
OSCB — SPI aux-bus clock for 4-wire internal slave-SPI debug |
| MC9 | OSCB (silk overlap) |
OSDO |
OSDO — SPI aux-bus data out |
| MC8 | INT2 |
INT2 |
Interrupt / data-ready output 2 |
| MP4 | SCX |
SCX |
BMI270 primary serial clock (I²C = SCL, SPI = SCK) |
Reading the silk
The silk is cramped on the east edge and labels overlap. Use the netlist (above) as ground truth; the .kicad_pcb coordinates give the true ordering top-to-bottom (Y=60 → Y=76) on that side:
Y=60 MP3 SDX (primary MOSI / SDA)
Y=62 MC6 INT1
Y=64 MC5 ASCX (aux I²C SCL)
Y=66 MC4 ASDX (aux I²C SDA)
Y=70 MC7 OSCB
Y=72 MC9 OSDO
Y=74 MC8 INT2
Y=76 MP4 SCX (primary SCK / SCL)
Interface strap (CSB — I²C vs SPI)
| CSB net state | Mode |
|---|---|
| Pulled high (default) | I²C |
| Pulled low (bridge MC3 to GND) | 4-wire SPI |
Schematic text annotation: "CSB shares SDO pullup when high." In practice: leave MC3 floating and the default R1 pull-up holds the chip in I²C mode.
I²C address strap
BMI270 I²C slave address is set by the SDO pin at power-up. On this molecule, SDO is brought out as a 3-way strap:
| Strap | SDO tied to | I²C address |
|---|---|---|
Bridge MC1 ↔ MC10 (silk 0x68) |
GND | 0x68 (demo firmware target ✓, Bosch default) |
Bridge MC1 ↔ MC2 (silk 0x69) |
I2C/0x69 net (pulled up via R1) |
0x69 |
Schematic text: "Jumper to GND (LOW): 0x68 (Default). Jumper to VDDIO (HIGH): 0x69."
CRITICAL for bring-up: the default with MC1 floating is undefined — SDO is weakly coupled through R1 (10 kΩ pull-up) to the I2C/0x69 net, which would resolve to 0x69 if the user hasn't bridged anything. The firmware expects 0x68, so MC1 must be solder-bridged to MC10 (the GND strap silk'd 0x68). Verify this physically on the board before flashing.
Aux I²C bus (for standalone BMM350 fusion)
The BMI270 can act as an I²C master to a single external sensor via its aux bus (ASCX / ASDX). On this molecule the aux pads are brought out to external contacts (MC4 / MC5) — they are NOT auto-wired to anything on the PCB. If you want the BMI270 to fuse with an external BMM350, you have to wire MC4/MC5 off-board to the BMM350 breakout's SDA/SCK pins.
For our demo firmware, the arm-side magnetometer fusion is handled by the BHI360/BHI385 combo molecules (which have the BMM350 on their own internal aux bus). The standalone BMI270 therefore runs in 6-DOF mode only; MC4/MC5 can be left unconnected.
Power
| Rail | Voltage | Source |
|---|---|---|
| VDD | 1.71–3.6 V | Host via MP2 (or MC13 as alternate tap) |
| VDDIO | 1.2–3.6 V | Host via MC11 |
Datasheet annotation: "VDD/IO: 1.8 to 3.3. Typ: 685 µA." Typical active current is 685 µA with accelerometer + gyroscope in normal mode. For the demo: tie both VDD and VDDIO to +3.3 V.
Interrupts
INT1 (MC6) and INT2 (MC8) are push-pull active-low by default. Programmable for FIFO watermark, data-ready, any-motion, orientation, and the 8 kB feature engine (wrist-tilt, pickup, step counter). If unused → "If INT1,2 unused: DNC" (schematic note). Leave floating.
Wiring to the Arm RM2 I²C bus
BMI270 MP2 (VDD) ──── RM2 +3V3
BMI270 MC11 (VIO) ──── RM2 +3V3 (tie VDDIO = VDD)
BMI270 MP1 (GND) ──── RM2 GND
BMI270 MP3 (SDX) ──── RM2 GPIO4 (I²C0 SDA, shared bus)
BMI270 MP4 (SCX) ──── RM2 GPIO5 (I²C0 SCL, shared bus)
BMI270 MC6 (INT1) ──── (optional)
BMI270 MC8 (INT2) ──── (optional)
BMI270 MC4/MC5 ──── (unused — aux bus)
BMI270 MC7/MC9 ──── (unused — slave-SPI debug)
Bridge MC1 ↔ MC10 (solder blob or 0 Ω) to force SDO → GND → address 0x68.
Gotchas for firmware bring-up
- SDO strap is not GND by default — on the bare v1 board, the default (unbridged) state is 0x69 via R1. Bridge MC1↔MC10 before powering up or the firmware will miss the 0x68 probe.
- CSB must be high for I²C mode. The R1 pull-up handles this; just don't accidentally ground MC3.
- BMI270 needs a config blob upload at boot (~8 KB) before accel/gyro work — already handled in
firmware/sensors/bmi270.c, but it means a cold-boot read of raw registers before config upload returns garbage. - VDDIO must come up before or with VDD, otherwise the chip can latch up. Sequencing is fine if both rails are tied together on the carrier.
- Silk is cramped on the east edge — when in doubt, trust the netlist above or probe with a multimeter.
- Aux bus (ASCX/ASDX) is NOT connected on-board to any slave sensor on this molecule. If you expect magnetometer data, you need the BHI combo molecule instead (or wire an external BMM350 manually to MC4/MC5).