← Commit history

Initial commit: component/bmp390

Kyle Bergstedt ·43017ffed6 ·5mo ago
2 files changed +268
README.mdadded+231
@@ -0,0 +1,231 @@+**Source:** [Bosch Sensortec Datasheet (BST-BMP390-DS002-07)](https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bmp390-ds002.pdf)+**Manufacturer:** Bosch Sensortec+**Part Number:** BMP390+**Document:** BST-BMP390-DS002-07 — Rev 1.7, March 2021++## Description++The BMP390 is a high-performance digital barometric pressure sensor from Bosch Sensortec with both pressure and temperature measurement based on proven piezo-resistive sensing principles. The sensor module is housed in an extremely compact 10-pin metal-lid LGA package with a footprint of only 2.0 x 2.0 mm and a maximum height of 0.75 mm. Its small dimensions and low power consumption of 3.2 uA at 1 Hz make it ideal for battery-driven devices such as mobile phones, GPS modules, drones, and wearables.++The BMP390 consists of a piezo-resistive pressure sensing element and a mixed-signal ASIC that performs A/D conversions and provides compensation data through a digital interface (I2C or SPI). It offers best-in-class temperature coefficient of offset (TCO) between -20 to 65 degrees C for accurate altitude measurement over a wide temperature range. The sensor is more accurate than its predecessor BMP380, covering a measurement range from 300 hPa to 1250 hPa.++The BMP390 includes a 512-byte FIFO buffer, configurable IIR filter for suppressing short-term pressure disturbances, flexible oversampling settings from ultra-low power to highest resolution, and interrupt functionality including data-ready, FIFO watermark, and FIFO full interrupts. It supports hardware synchronization with external sensors such as Bosch IMUs (e.g., BMI260) for sensor data fusion applications.++## Key Specifications++| Parameter | Value |+| --- | --- |+| Supply Voltage (VDD) | 1.65V to 3.6V |+| Interface Voltage (VDDIO) | 1.2V to 3.6V |+| Operating Temperature | -40 to +85 deg C |+| Operating Pressure Range | 300 to 1250 hPa |+| Relative Accuracy | +/-3 Pa (+/-25 cm) |+| Absolute Accuracy | +/-50 Pa (typ.) |+| Pressure Resolution | 0.016 Pa (highest mode) |+| RMS Noise (lowest) | 0.02 Pa |+| Temperature Accuracy | +/-0.5 deg C at 25 deg C |+| Current (1 Hz, P+T) | 3.2 uA |+| Sleep Current | 1.4 uA (typ.) |+| Max Sampling Rate | 200 Hz |+| Digital Interface | I2C (up to 3.4 MHz), SPI (up to 10 MHz) |+| FIFO Size | 512 bytes |+| Package | 2.0 x 2.0 x 0.75 mm LGA-10 |+| Pin Count | 10 |++## Features++- Pressure range 300 to 1250 hPa with relative accuracy of +/-3 Pa (+/-25 cm)+- Best-in-class TCO of +/-0.6 Pa/K for accurate altitude tracking over -20 to 65 deg C+- Ultra-low power consumption: 3.2 uA at 1 Hz, 1.4 uA sleep mode+- Configurable oversampling from 1x (ultra-low power) to 32x (highest resolution, 21-bit)+- Built-in IIR filter with coefficients 0 (off) to 127 for suppressing short-term disturbances+- 512-byte FIFO buffer with watermark, full, and data-ready interrupts+- Dual digital interface: I2C up to 3.4 MHz and SPI (3-wire/4-wire) up to 10 MHz+- Three power modes: sleep, forced (single-shot), and normal (continuous cycling)+- Hardware data synchronization with external sensors (e.g., BMI260 IMU)+- 24-bit pressure and temperature output data+- Separate VDD and VDDIO power domains for flexible level shifting+- RoHS compliant, halogen-free, MSL1+- Compact 2.0 x 2.0 x 0.75 mm metal-lid LGA package+- Chip ID register at 0x60 for device identification++## Pin Configuration++| Pin | Name | Type | Description |+| --- | --- | --- | --- |+| 1 | VDDIO | Supply | Digital interface supply voltage (1.2V to 3.6V) |+| 2 | SCK | Input | Serial clock input (I2C SCL / SPI SCK) |+| 3 | VSS | Supply | Ground |+| 4 | SDI | In/Out | Serial data input (I2C SDA / SPI MOSI) |+| 5 | SDO | In/Out | Serial data output (SPI MISO / I2C address bit SA0) |+| 6 | CSB | Input | Chip select (SPI active-low / I2C not used, tie high) |+| 7 | INT | Output | Interrupt output (data ready, FIFO watermark, FIFO full) |+| 8 | VSS | Supply | Ground |+| 9 | VSS | Supply | Ground |+| 10 | VDD | Supply | Analog supply voltage (1.65V to 3.6V) |++## Absolute Maximum Ratings++| Parameter | Min | Max | Unit |+| --- | --- | --- | --- |+| Voltage at VDD / VDDIO pin | -0.3 | 3.6 | V |+| Voltage at any interface pin | VSS - 0.3 | VDDIO + 0.3 | V |+| Storage temperature (<=65% RH) | -45 | +85 | deg C |+| Overpressure survivability | -- | 2,000,000 | Pa |+| Mechanical shock (MIL-STD-883H) | -- | 20,000 | g |+| Max dust particle inside package | -- | 300 | um |+| ESD CDM | -- | 500-750V | Class C2a |+| ESD HBM | -- | 2 kV | Class 2 |++## Electrical Characteristics++| Parameter | Conditions | Min | Typ | Max | Unit |+| --- | --- | --- | --- | --- | --- |+| Supply voltage VDD | -- | 1.65 | 1.8 | 3.6 | V |+| Interface voltage VDDIO | -- | 1.2 | 1.8 | 3.6 | V |+| Operating temperature | Full accuracy | 0 | -- | +65 | deg C |+| Operating pressure | Full accuracy | 300 | -- | 1250 | hPa |+| Relative accuracy (700-1100 hPa, 25-40 deg C) | 10 kPa steps | -- | +/-0.03 | -- | hPa |+| Absolute accuracy (300-1100 hPa, 0-65 deg C) | @ 900 hPa, 25 deg C | -- | -- | +/-0.50 | hPa |+| Absolute accuracy (900-1100 hPa, 25-40 deg C) | -- | -- | -- | +/-0.40 | hPa |+| Offset temperature coefficient | 900 hPa, 25-40 deg C | -- | +/-0.62 | -- | Pa/K |+| Pressure resolution (highest mode) | -- | -- | 0.016 | -- | Pa |+| RMS noise (lowest BW, highest res) | -- | -- | 0.02 | -- | Pa |+| Temperature accuracy | @ 25 deg C | -- | -- | +/-0.5 | deg C |+| Temperature accuracy | 0 to +65 deg C | -- | -- | +/-1.5 | deg C |+| Long-term stability (12 months) | -- | -- | -- | +/-0.16 | hPa |+| Solder drift | Min 50 um solder height | -- | -- | +/-0.8 | hPa |+| Start-up time | VDD/VDDIO > 1.8V | -- | -- | 2 | ms |+| Max sampling rate | osrs_t = osrs_p = 1 | -- | -- | 200 | Hz |+| ODR accuracy | -- | -12 | -- | +12 | % |++## Power Consumption++| Parameter | Conditions | Typ | Max | Unit |+| --- | --- | --- | --- | --- |+| Sleep current | VDD = VDDIO = 1.8V | 1.4 | -- | uA |+| Sleep current | VDD = VDDIO = 3.6V | 1.5 | -- | uA |+| Peak current (pressure) | During P measurement | 660 | 730 | uA |+| Peak current (temperature) | During T measurement | 240 | 320 | uA |+| Handheld low-power (x8 P, x1 T, IIR=2) | Normal mode, 12.5 Hz | 145 | -- | uA |+| Handheld dynamic (x4 P, x1 T, IIR=4) | Normal mode, 50 Hz | 310 | -- | uA |+| Weather monitoring (x1 P, x1 T, no IIR) | Forced mode, 1/60 Hz | 4 | -- | uA |+| Drop detection (x2 P, x1 T, no IIR) | Normal mode, 100 Hz | 358 | -- | uA |+| Indoor navigation (x16 P, x2 T, IIR=4) | Normal mode, 25 Hz | 560 | -- | uA |+| Drone (x8 P, x1 T, IIR=2) | Normal mode, 50 Hz | 570 | -- | uA |++## Communication Interface++The BMP390 supports two digital interfaces selected via the CSB pin state at power-on:++**I2C Interface** supports standard mode (up to 400 kHz), fast mode, and high-speed mode (up to 3.4 MHz). The 7-bit slave address is `0x76` when SDO is connected to GND, or `0x77` when SDO is connected to VDDIO. Multi-byte burst reads with auto-incrementing address are supported.++**SPI Interface** supports 3-wire and 4-wire modes at up to 10 MHz clock frequency. SPI mode is selected when CSB is toggled during power-on. The MSB of the register address byte is the R/W bit (0 = write, 1 = read). A dummy byte follows the address byte on reads before data is returned.++| Parameter | I2C | SPI |+| --- | --- | --- |+| Max clock frequency | 3.4 MHz | 10 MHz |+| Address / mode selection | SDO pin (0x76 / 0x77) | CSB toggle at boot |+| Wire count | 2 (SCL, SDA) | 3 or 4 (SCK, SDI, SDO, CSB) |+| Burst read | Yes (auto-increment) | Yes (auto-increment) |+| Internal CSB pull-up | 75-125 kOhm | 75-125 kOhm |++## Packages++| Package | Pins | Body Size | Height |+| --- | --- | --- | --- |+| Metal-lid LGA | 10 | 2.0 x 2.0 mm | 0.75 mm (max 0.80 mm) |++Pad dimensions: 0.275 x 0.250 mm (6 pads), 0.250 x 0.275 mm (4 pads). Pin 1 indicator on top-right corner (top view). Vent hole diameter 0.250 mm on top surface. Tape and reel packaging: 10,000 pcs per reel, 2.0 mm pitch.++## Software API++The BMP390 register map starts at address `0x00` (CHIP_ID = `0x60`) and extends to `0x7E` (CMD). Key registers:++| Register | Address | Function |+| --- | --- | --- |+| CHIP_ID | 0x00 | Chip identification (0x60) |+| ERR_REG | 0x02 | Error flags (fatal, cmd, conf) |+| STATUS | 0x03 | Data ready flags |+| DATA_0..2 | 0x04-0x06 | 24-bit pressure data |+| DATA_3..5 | 0x07-0x09 | 24-bit temperature data |+| SENSORTIME | 0x0C-0x0E | 24-bit sensor time counter |+| INT_STATUS | 0x11 | Interrupt status (drdy, fwm, ffull) |+| FIFO_LENGTH | 0x12-0x13 | FIFO byte counter (9-bit) |+| FIFO_DATA | 0x14 | FIFO data output |+| FIFO_WTM | 0x15-0x16 | FIFO watermark threshold |+| FIFO_CONFIG_1 | 0x17 | FIFO mode, stop-on-full, channel enable |+| FIFO_CONFIG_2 | 0x18 | FIFO subsampling, data select |+| INT_CTRL | 0x19 | Interrupt config (level, OD, latch, enable) |+| IF_CONF | 0x1A | Interface config (SPI3, I2C WDT) |+| PWR_CTRL | 0x1B | Power mode, press/temp enable |+| OSR | 0x1C | Oversampling for pressure and temperature |+| ODR | 0x1D | Output data rate prescaler |+| CONFIG | 0x1F | IIR filter coefficient |+| Calibration | 0x31-0x45 | NVM trimming coefficients (T1-T3, P1-P11) |+| CMD | 0x7E | Command register (soft reset = 0xB6) |++**Power modes** are controlled via `PWR_CTRL[1:0]`: `00` = sleep, `01`/`10` = forced (single-shot), `11` = normal (continuous). Oversampling is set via `OSR` register: `osr_p[2:0]` for pressure (1x to 32x) and `osr_t[5:3]` for temperature (1x to 32x).++**Bosch Sensortec** provides an official open-source API driver: [BMP3-Sensor-API on GitHub](https://github.com/BoschSensortec/BMP3-Sensor-API).++## Applications++- Indoor navigation and localization (floor detection, elevator detection)+- Enhancement of GPS navigation (time-to-first-fix, dead-reckoning, slope detection)+- Vertical velocity indication (rise/sink speed for drones and flying toys)+- Drone altitude hold and precision barometric sensing+- Weather monitoring and forecasting (home weather stations)+- Health care applications (spirometry)+- Fitness applications (calorie detection enhancement via altitude changes)+- AR and VR applications+- Context awareness and activity recognition+- Drop detection+- Target devices: smartphones, tablets, GPS modules, wearables, watches, navigation systems, white goods++## Key Formulas++### IIR Filter++```+data_filtered = (data_filtered_old * filter_coefficient + data_ADC) / (filter_coefficient + 1)+```++### Normal Mode Sampling Period++```+tau_sampling = prescaler / f_sampling+f_sampling = 200 Hz (base)+```++### Temperature Compensation (floating point)++```+partial1 = uncomp_temp - PAR_T1+partial2 = partial1 * PAR_T2+t_lin = partial2 + (partial1 * partial1) * PAR_T3+compensated_temp = t_lin  (in degrees C)+```++### Pressure Compensation (floating point)++```+out1 = PAR_P5 + PAR_P6*t_lin + PAR_P7*t_lin^2 + PAR_P8*t_lin^3+out2 = uncomp_press * (PAR_P1 + PAR_P2*t_lin + PAR_P3*t_lin^2 + PAR_P4*t_lin^3)+out3 = uncomp_press^2 * (PAR_P9 + PAR_P10*t_lin)+out4 = uncomp_press^3 * PAR_P11+compensated_press = out1 + out2 + out3 + out4  (in Pa)+```++### Calibration Coefficient Conversion (NVM to float)++```+PAR_T1 = NVM_PAR_T1 / 2^(-8)+PAR_T2 = NVM_PAR_T2 / 2^30+PAR_T3 = NVM_PAR_T3 / 2^48+PAR_P1 = (NVM_PAR_P1 - 2^14) / 2^20+PAR_P2 = (NVM_PAR_P2 - 2^14) / 2^29+PAR_P3 = NVM_PAR_P3 / 2^32+PAR_P5 = NVM_PAR_P5 / 2^(-3)+PAR_P6 = NVM_PAR_P6 / 2^6+```
page.jsonadded+37
@@ -0,0 +1,37 @@+{+  "schema_version": 1,+  "type": "component",+  "slug": "bmp390",+  "title": "BMP390 — Digital Barometric Pressure Sensor",+  "brief": "Bosch Sensortec BMP390. High-performance barometric pressure sensor, 300-1250 hPa, +/-3 Pa relative accuracy, 3.2 uA at 1 Hz, I2C/SPI, 2x2mm LGA-10. Standardized datasheet with 15 extracted diagrams.",+  "version": "1.0.0",+  "tags": [],+  "license": "MIT",+  "component": {+    "mpn": "BMP390 — Digital Barometric Pressure Sensor",+    "manufacturer": "",+    "package": "",+    "pin_count": null,+    "category": "datasheet",+    "subcategory": "",+    "body_size": null,+    "parts": {},+    "distributor_links": {}+  },+  "readme": "**Source:** [Bosch Sensortec Datasheet (BST-BMP390-DS002-07)](https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bmp390-ds002.pdf)\n**Manufacturer:** Bosch Sensortec\n**Part Number:** BMP390\n**Document:** BST-BMP390-DS002-07 — Rev 1.7, March 2021\n\n## Description\n\nThe BMP390 is a high-performance digital barometric pressure sensor from Bosch Sensortec with both pressure and temperature measurement based on proven piezo-resistive sensing principles. The sensor module is housed in an extremely compact 10-pin metal-lid LGA package with a footprint of only 2.0 x 2.0 mm and a maximum height of 0.75 mm. Its small dimensions and low power consumption of 3.2 uA at 1 Hz make it ideal for battery-driven devices such as mobile phones, GPS modules, drones, and wearables.\n\nThe BMP390 consists of a piezo-resistive pressure sensing element and a mixed-signal ASIC that performs A/D conversions and provides compensation data through a digital interface (I2C or SPI). It offers best-in-class temperature coefficient of offset (TCO) between -20 to 65 degrees C for accurate altitude measurement over a wide temperature range. The sensor is more accurate than its predecessor BMP380, covering a measurement range from 300 hPa to 1250 hPa.\n\nThe BMP390 includes a 512-byte FIFO buffer, configurable IIR filter for suppressing short-term pressure disturbances, flexible oversampling settings from ultra-low power to highest resolution, and interrupt functionality including data-ready, FIFO watermark, and FIFO full interrupts. It supports hardware synchronization with external sensors such as Bosch IMUs (e.g., BMI260) for sensor data fusion applications.\n\n## Key Specifications\n\n| Parameter | Value |\n| --- | --- |\n| Supply Voltage (VDD) | 1.65V to 3.6V |\n| Interface Voltage (VDDIO) | 1.2V to 3.6V |\n| Operating Temperature | -40 to +85 deg C |\n| Operating Pressure Range | 300 to 1250 hPa |\n| Relative Accuracy | +/-3 Pa (+/-25 cm) |\n| Absolute Accuracy | +/-50 Pa (typ.) |\n| Pressure Resolution | 0.016 Pa (highest mode) |\n| RMS Noise (lowest) | 0.02 Pa |\n| Temperature Accuracy | +/-0.5 deg C at 25 deg C |\n| Current (1 Hz, P+T) | 3.2 uA |\n| Sleep Current | 1.4 uA (typ.) |\n| Max Sampling Rate | 200 Hz |\n| Digital Interface | I2C (up to 3.4 MHz), SPI (up to 10 MHz) |\n| FIFO Size | 512 bytes |\n| Package | 2.0 x 2.0 x 0.75 mm LGA-10 |\n| Pin Count | 10 |\n\n## Features\n\n- Pressure range 300 to 1250 hPa with relative accuracy of +/-3 Pa (+/-25 cm)\n- Best-in-class TCO of +/-0.6 Pa/K for accurate altitude tracking over -20 to 65 deg C\n- Ultra-low power consumption: 3.2 uA at 1 Hz, 1.4 uA sleep mode\n- Configurable oversampling from 1x (ultra-low power) to 32x (highest resolution, 21-bit)\n- Built-in IIR filter with coefficients 0 (off) to 127 for suppressing short-term disturbances\n- 512-byte FIFO buffer with watermark, full, and data-ready interrupts\n- Dual digital interface: I2C up to 3.4 MHz and SPI (3-wire/4-wire) up to 10 MHz\n- Three power modes: sleep, forced (single-shot), and normal (continuous cycling)\n- Hardware data synchronization with external sensors (e.g., BMI260 IMU)\n- 24-bit pressure and temperature output data\n- Separate VDD and VDDIO power domains for flexible level shifting\n- RoHS compliant, halogen-free, MSL1\n- Compact 2.0 x 2.0 x 0.75 mm metal-lid LGA package\n- Chip ID register at 0x60 for device identification\n\n## Pin Configuration\n\n| Pin | Name | Type | Description |\n| --- | --- | --- | --- |\n| 1 | VDDIO | Supply | Digital interface supply voltage (1.2V to 3.6V) |\n| 2 | SCK | Input | Serial clock input (I2C SCL / SPI SCK) |\n| 3 | VSS | Supply | Ground |\n| 4 | SDI | In/Out | Serial data input (I2C SDA / SPI MOSI) |\n| 5 | SDO | In/Out | Serial data output (SPI MISO / I2C address bit SA0) |\n| 6 | CSB | Input | Chip select (SPI active-low / I2C not used, tie high) |\n| 7 | INT | Output | Interrupt output (data ready, FIFO watermark, FIFO full) |\n| 8 | VSS | Supply | Ground |\n| 9 | VSS | Supply | Ground |\n| 10 | VDD | Supply | Analog supply voltage (1.65V to 3.6V) |\n\n## Absolute Maximum Ratings\n\n| Parameter | Min | Max | Unit |\n| --- | --- | --- | --- |\n| Voltage at VDD / VDDIO pin | -0.3 | 3.6 | V |\n| Voltage at any interface pin | VSS - 0.3 | VDDIO + 0.3 | V |\n| Storage temperature (<=65% RH) | -45 | +85 | deg C |\n| Overpressure survivability | -- | 2,000,000 | Pa |\n| Mechanical shock (MIL-STD-883H) | -- | 20,000 | g |\n| Max dust particle inside package | -- | 300 | um |\n| ESD CDM | -- | 500-750V | Class C2a |\n| ESD HBM | -- | 2 kV | Class 2 |\n\n## Electrical Characteristics\n\n| Parameter | Conditions | Min | Typ | Max | Unit |\n| --- | --- | --- | --- | --- | --- |\n| Supply voltage VDD | -- | 1.65 | 1.8 | 3.6 | V |\n| Interface voltage VDDIO | -- | 1.2 | 1.8 | 3.6 | V |\n| Operating temperature | Full accuracy | 0 | -- | +65 | deg C |\n| Operating pressure | Full accuracy | 300 | -- | 1250 | hPa |\n| Relative accuracy (700-1100 hPa, 25-40 deg C) | 10 kPa steps | -- | +/-0.03 | -- | hPa |\n| Absolute accuracy (300-1100 hPa, 0-65 deg C) | @ 900 hPa, 25 deg C | -- | -- | +/-0.50 | hPa |\n| Absolute accuracy (900-1100 hPa, 25-40 deg C) | -- | -- | -- | +/-0.40 | hPa |\n| Offset temperature coefficient | 900 hPa, 25-40 deg C | -- | +/-0.62 | -- | Pa/K |\n| Pressure resolution (highest mode) | -- | -- | 0.016 | -- | Pa |\n| RMS noise (lowest BW, highest res) | -- | -- | 0.02 | -- | Pa |\n| Temperature accuracy | @ 25 deg C | -- | -- | +/-0.5 | deg C |\n| Temperature accuracy | 0 to +65 deg C | -- | -- | +/-1.5 | deg C |\n| Long-term stability (12 months) | -- | -- | -- | +/-0.16 | hPa |\n| Solder drift | Min 50 um solder height | -- | -- | +/-0.8 | hPa |\n| Start-up time | VDD/VDDIO > 1.8V | -- | -- | 2 | ms |\n| Max sampling rate | osrs_t = osrs_p = 1 | -- | -- | 200 | Hz |\n| ODR accuracy | -- | -12 | -- | +12 | % |\n\n## Power Consumption\n\n| Parameter | Conditions | Typ | Max | Unit |\n| --- | --- | --- | --- | --- |\n| Sleep current | VDD = VDDIO = 1.8V | 1.4 | -- | uA |\n| Sleep current | VDD = VDDIO = 3.6V | 1.5 | -- | uA |\n| Peak current (pressure) | During P measurement | 660 | 730 | uA |\n| Peak current (temperature) | During T measurement | 240 | 320 | uA |\n| Handheld low-power (x8 P, x1 T, IIR=2) | Normal mode, 12.5 Hz | 145 | -- | uA |\n| Handheld dynamic (x4 P, x1 T, IIR=4) | Normal mode, 50 Hz | 310 | -- | uA |\n| Weather monitoring (x1 P, x1 T, no IIR) | Forced mode, 1/60 Hz | 4 | -- | uA |\n| Drop detection (x2 P, x1 T, no IIR) | Normal mode, 100 Hz | 358 | -- | uA |\n| Indoor navigation (x16 P, x2 T, IIR=4) | Normal mode, 25 Hz | 560 | -- | uA |\n| Drone (x8 P, x1 T, IIR=2) | Normal mode, 50 Hz | 570 | -- | uA |\n\n## Communication Interface\n\nThe BMP390 supports two digital interfaces selected via the CSB pin state at power-on:\n\n**I2C Interface** supports standard mode (up to 400 kHz), fast mode, and high-speed mode (up to 3.4 MHz). The 7-bit slave address is `0x76` when SDO is connected to GND, or `0x77` when SDO is connected to VDDIO. Multi-byte burst reads with auto-incrementing address are supported.\n\n**SPI Interface** supports 3-wire and 4-wire modes at up to 10 MHz clock frequency. SPI mode is selected when CSB is toggled during power-on. The MSB of the register address byte is the R/W bit (0 = write, 1 = read). A dummy byte follows the address byte on reads before data is returned.\n\n| Parameter | I2C | SPI |\n| --- | --- | --- |\n| Max clock frequency | 3.4 MHz | 10 MHz |\n| Address / mode selection | SDO pin (0x76 / 0x77) | CSB toggle at boot |\n| Wire count | 2 (SCL, SDA) | 3 or 4 (SCK, SDI, SDO, CSB) |\n| Burst read | Yes (auto-increment) | Yes (auto-increment) |\n| Internal CSB pull-up | 75-125 kOhm | 75-125 kOhm |\n\n## Packages\n\n| Package | Pins | Body Size | Height |\n| --- | --- | --- | --- |\n| Metal-lid LGA | 10 | 2.0 x 2.0 mm | 0.75 mm (max 0.80 mm) |\n\nPad dimensions: 0.275 x 0.250 mm (6 pads), 0.250 x 0.275 mm (4 pads). Pin 1 indicator on top-right corner (top view). Vent hole diameter 0.250 mm on top surface. Tape and reel packaging: 10,000 pcs per reel, 2.0 mm pitch.\n\n## Software API\n\nThe BMP390 register map starts at address `0x00` (CHIP_ID = `0x60`) and extends to `0x7E` (CMD). Key registers:\n\n| Register | Address | Function |\n| --- | --- | --- |\n| CHIP_ID | 0x00 | Chip identification (0x60) |\n| ERR_REG | 0x02 | Error flags (fatal, cmd, conf) |\n| STATUS | 0x03 | Data ready flags |\n| DATA_0..2 | 0x04-0x06 | 24-bit pressure data |\n| DATA_3..5 | 0x07-0x09 | 24-bit temperature data |\n| SENSORTIME | 0x0C-0x0E | 24-bit sensor time counter |\n| INT_STATUS | 0x11 | Interrupt status (drdy, fwm, ffull) |\n| FIFO_LENGTH | 0x12-0x13 | FIFO byte counter (9-bit) |\n| FIFO_DATA | 0x14 | FIFO data output |\n| FIFO_WTM | 0x15-0x16 | FIFO watermark threshold |\n| FIFO_CONFIG_1 | 0x17 | FIFO mode, stop-on-full, channel enable |\n| FIFO_CONFIG_2 | 0x18 | FIFO subsampling, data select |\n| INT_CTRL | 0x19 | Interrupt config (level, OD, latch, enable) |\n| IF_CONF | 0x1A | Interface config (SPI3, I2C WDT) |\n| PWR_CTRL | 0x1B | Power mode, press/temp enable |\n| OSR | 0x1C | Oversampling for pressure and temperature |\n| ODR | 0x1D | Output data rate prescaler |\n| CONFIG | 0x1F | IIR filter coefficient |\n| Calibration | 0x31-0x45 | NVM trimming coefficients (T1-T3, P1-P11) |\n| CMD | 0x7E | Command register (soft reset = 0xB6) |\n\n**Power modes** are controlled via `PWR_CTRL[1:0]`: `00` = sleep, `01`/`10` = forced (single-shot), `11` = normal (continuous). Oversampling is set via `OSR` register: `osr_p[2:0]` for pressure (1x to 32x) and `osr_t[5:3]` for temperature (1x to 32x).\n\n**Bosch Sensortec** provides an official open-source API driver: [BMP3-Sensor-API on GitHub](https://github.com/BoschSensortec/BMP3-Sensor-API).\n\n## Applications\n\n- Indoor navigation and localization (floor detection, elevator detection)\n- Enhancement of GPS navigation (time-to-first-fix, dead-reckoning, slope detection)\n- Vertical velocity indication (rise/sink speed for drones and flying toys)\n- Drone altitude hold and precision barometric sensing\n- Weather monitoring and forecasting (home weather stations)\n- Health care applications (spirometry)\n- Fitness applications (calorie detection enhancement via altitude changes)\n- AR and VR applications\n- Context awareness and activity recognition\n- Drop detection\n- Target devices: smartphones, tablets, GPS modules, wearables, watches, navigation systems, white goods\n\n## Key Formulas\n\n### IIR Filter\n\n```\ndata_filtered = (data_filtered_old * filter_coefficient + data_ADC) / (filter_coefficient + 1)\n```\n\n### Normal Mode Sampling Period\n\n```\ntau_sampling = prescaler / f_sampling\nf_sampling = 200 Hz (base)\n```\n\n### Temperature Compensation (floating point)\n\n```\npartial1 = uncomp_temp - PAR_T1\npartial2 = partial1 * PAR_T2\nt_lin = partial2 + (partial1 * partial1) * PAR_T3\ncompensated_temp = t_lin  (in degrees C)\n```\n\n### Pressure Compensation (floating point)\n\n```\nout1 = PAR_P5 + PAR_P6*t_lin + PAR_P7*t_lin^2 + PAR_P8*t_lin^3\nout2 = uncomp_press * (PAR_P1 + PAR_P2*t_lin + PAR_P3*t_lin^2 + PAR_P4*t_lin^3)\nout3 = uncomp_press^2 * (PAR_P9 + PAR_P10*t_lin)\nout4 = uncomp_press^3 * PAR_P11\ncompensated_press = out1 + out2 + out3 + out4  (in Pa)\n```\n\n### Calibration Coefficient Conversion (NVM to float)\n\n```\nPAR_T1 = NVM_PAR_T1 / 2^(-8)\nPAR_T2 = NVM_PAR_T2 / 2^30\nPAR_T3 = NVM_PAR_T3 / 2^48\nPAR_P1 = (NVM_PAR_P1 - 2^14) / 2^20\nPAR_P2 = (NVM_PAR_P2 - 2^14) / 2^29\nPAR_P3 = NVM_PAR_P3 / 2^32\nPAR_P5 = NVM_PAR_P5 / 2^(-3)\nPAR_P6 = NVM_PAR_P6 / 2^6\n```\n",+  "author": {+    "id": "695820315b5f1e4db2fcf602",+    "name": "Kyle Bergstedt",+    "email": "[email protected]"+  },+  "visibility": {+    "public": true+  },+  "hero": null,+  "sample_prompts": [],+  "discovery_triggers": [],+  "discovery_pitch": null,+  "metadata": {},+  "created_at": "2026-05-28T05:36:59.286Z",+  "updated_at": "2026-05-28T05:36:59.286Z"+}\ No newline at end of file