BMP581 Driver 1.0.0
API reference
Loading...
Searching...
No Matches
Namespaces | Enumerations | Functions | Variables
bmp581_registers.hpp File Reference

BMP581 register map, bit fields, enumerations and timing constants. More...

#include <cstdint>
Include dependency graph for bmp581_registers.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Namespaces

namespace  bmp581
 
namespace  bmp581::addr
 7-bit I2C addresses (SDO low → 0x46, SDO high → 0x47).
 
namespace  bmp581::chip_id
 Chip identifiers accepted by Driver::Init().
 
namespace  bmp581::reg
 Register addresses.
 
namespace  bmp581::cmd
 Command register values.
 
namespace  bmp581::timing
 Timing (data sheet / Bosch API).
 
namespace  bmp581::nvm
 NVM user space (3 × 16-bit words).
 
namespace  bmp581::status
 STATUS (0x28) bits.
 
namespace  bmp581::int_status
 INT_STATUS (0x27) bits.
 
namespace  bmp581::int_source
 INT_SOURCE (0x15) enable bits.
 
namespace  bmp581::int_config
 INT_CONFIG (0x14) fields.
 
namespace  bmp581::osr_config
 OSR_CONFIG (0x36) fields.
 
namespace  bmp581::odr_config
 ODR_CONFIG (0x37) fields.
 
namespace  bmp581::osr_eff
 OSR_EFF (0x38) fields.
 
namespace  bmp581::dsp_config
 DSP_CONFIG (0x30) fields.
 
namespace  bmp581::dsp_iir
 DSP_IIR (0x31) fields.
 

Enumerations

enum class  bmp581::PowerMode : uint8_t {
  bmp581::Standby = 0 , bmp581::Normal = 1 , bmp581::Forced = 2 , bmp581::Continuous = 3 ,
  bmp581::DeepStandby = 4
}
 Power modes (ODR_CONFIG bits 1:0; deep standby = standby with deep_dis = 0). More...
 
enum class  bmp581::Oversampling : uint8_t {
  bmp581::X1 = 0 , bmp581::X2 = 1 , bmp581::X4 = 2 , bmp581::X8 = 3 ,
  bmp581::X16 = 4 , bmp581::X32 = 5 , bmp581::X64 = 6 , bmp581::X128 = 7
}
 Oversampling (OSR_CONFIG). More...
 
enum class  bmp581::Odr : uint8_t {
  bmp581::Hz240 = 0x00 , bmp581::Hz218_5 = 0x01 , bmp581::Hz199_1 = 0x02 , bmp581::Hz179_2 = 0x03 ,
  bmp581::Hz160 = 0x04 , bmp581::Hz149_3 = 0x05 , bmp581::Hz140 = 0x06 , bmp581::Hz129_8 = 0x07 ,
  bmp581::Hz120 = 0x08 , bmp581::Hz110_1 = 0x09 , bmp581::Hz100_2 = 0x0A , bmp581::Hz89_6 = 0x0B ,
  bmp581::Hz80 = 0x0C , bmp581::Hz70 = 0x0D , bmp581::Hz60 = 0x0E , bmp581::Hz50 = 0x0F ,
  bmp581::Hz45 = 0x10 , bmp581::Hz40 = 0x11 , bmp581::Hz35 = 0x12 , bmp581::Hz30 = 0x13 ,
  bmp581::Hz25 = 0x14 , bmp581::Hz20 = 0x15 , bmp581::Hz15 = 0x16 , bmp581::Hz10 = 0x17 ,
  bmp581::Hz5 = 0x18 , bmp581::Hz4 = 0x19 , bmp581::Hz3 = 0x1A , bmp581::Hz2 = 0x1B ,
  bmp581::Hz1 = 0x1C , bmp581::Hz0_5 = 0x1D , bmp581::Hz0_25 = 0x1E , bmp581::Hz0_125 = 0x1F
}
 Output data rate (ODR_CONFIG bits 6:2). Codes ascend as rate descends. More...
 
enum class  bmp581::IirFilter : uint8_t {
  bmp581::Bypass = 0 , bmp581::Coeff1 = 1 , bmp581::Coeff3 = 2 , bmp581::Coeff7 = 3 ,
  bmp581::Coeff15 = 4 , bmp581::Coeff31 = 5 , bmp581::Coeff63 = 6 , bmp581::Coeff127 = 7
}
 IIR filter coefficient (DSP_IIR). More...
 
enum class  bmp581::IntMode : uint8_t { bmp581::Pulsed = 0 , bmp581::Latched = 1 }
 Interrupt pin behaviour. More...
 
enum class  bmp581::IntPolarity : uint8_t { bmp581::ActiveLow = 0 , bmp581::ActiveHigh = 1 }
 
enum class  bmp581::IntDrive : uint8_t { bmp581::PushPull = 0 , bmp581::OpenDrain = 1 }
 

Functions

constexpr float bmp581::OdrHz (Odr odr) noexcept
 ODR code → nominal rate in Hz (for logging / loop-rate planning).
 

Variables

constexpr uint8_t bmp581::addr::kPrimary = 0x46
 
constexpr uint8_t bmp581::addr::kSecondary = 0x47
 
constexpr uint8_t bmp581::chip_id::kPrimary = 0x50
 
constexpr uint8_t bmp581::chip_id::kSecondary = 0x51
 
constexpr uint8_t bmp581::reg::kChipId = 0x01
 
constexpr uint8_t bmp581::reg::kRevId = 0x02
 
constexpr uint8_t bmp581::reg::kChipStatus = 0x11
 
constexpr uint8_t bmp581::reg::kDriveConfig = 0x13
 
constexpr uint8_t bmp581::reg::kIntConfig = 0x14
 
constexpr uint8_t bmp581::reg::kIntSource = 0x15
 
constexpr uint8_t bmp581::reg::kFifoConfig = 0x16
 
constexpr uint8_t bmp581::reg::kFifoCount = 0x17
 
constexpr uint8_t bmp581::reg::kFifoSel = 0x18
 
constexpr uint8_t bmp581::reg::kTempDataXlsb = 0x1D
 0x1D..0x1F temperature, 0x20..0x22 pressure
 
constexpr uint8_t bmp581::reg::kTempDataLsb = 0x1E
 
constexpr uint8_t bmp581::reg::kTempDataMsb = 0x1F
 
constexpr uint8_t bmp581::reg::kPressDataXlsb = 0x20
 
constexpr uint8_t bmp581::reg::kPressDataLsb = 0x21
 
constexpr uint8_t bmp581::reg::kPressDataMsb = 0x22
 
constexpr uint8_t bmp581::reg::kIntStatus = 0x27
 
constexpr uint8_t bmp581::reg::kStatus = 0x28
 
constexpr uint8_t bmp581::reg::kFifoData = 0x29
 
constexpr uint8_t bmp581::reg::kNvmAddr = 0x2B
 
constexpr uint8_t bmp581::reg::kNvmDataLsb = 0x2C
 
constexpr uint8_t bmp581::reg::kNvmDataMsb = 0x2D
 
constexpr uint8_t bmp581::reg::kDspConfig = 0x30
 
constexpr uint8_t bmp581::reg::kDspIir = 0x31
 
constexpr uint8_t bmp581::reg::kOorThrPLsb = 0x32
 
constexpr uint8_t bmp581::reg::kOorThrPMsb = 0x33
 
constexpr uint8_t bmp581::reg::kOorRange = 0x34
 
constexpr uint8_t bmp581::reg::kOorConfig = 0x35
 
constexpr uint8_t bmp581::reg::kOsrConfig = 0x36
 
constexpr uint8_t bmp581::reg::kOdrConfig = 0x37
 
constexpr uint8_t bmp581::reg::kOsrEff = 0x38
 
constexpr uint8_t bmp581::reg::kCmd = 0x7E
 
constexpr uint8_t bmp581::cmd::kSoftReset = 0xB6
 
constexpr uint8_t bmp581::cmd::kNvmFirst = 0x5D
 
constexpr uint8_t bmp581::cmd::kNvmReadEnable = 0xA5
 
constexpr uint8_t bmp581::cmd::kNvmWriteEnable = 0xA0
 
constexpr uint32_t bmp581::timing::kSoftResetUs = 2000
 
constexpr uint32_t bmp581::timing::kStandbyUs = 2500
 
constexpr uint32_t bmp581::timing::kNvmReadyReadUs = 800
 
constexpr uint32_t bmp581::timing::kNvmReadyWriteUs = 10000
 
constexpr uint32_t bmp581::timing::kStartupUs = 3000
 t_startup: standby to start of measurement
 
constexpr uint8_t bmp581::nvm::kStartAddr = 0x20
 
constexpr uint8_t bmp581::nvm::kEndAddr = 0x22
 
constexpr uint8_t bmp581::status::kCoreRdy = 0x01
 
constexpr uint8_t bmp581::status::kNvmRdy = 0x02
 
constexpr uint8_t bmp581::status::kNvmErr = 0x04
 
constexpr uint8_t bmp581::status::kNvmCmdErr = 0x08
 
constexpr uint8_t bmp581::int_status::kDataReady = 0x01
 
constexpr uint8_t bmp581::int_status::kFifoFull = 0x02
 
constexpr uint8_t bmp581::int_status::kFifoThreshold = 0x04
 
constexpr uint8_t bmp581::int_status::kPressureOor = 0x08
 
constexpr uint8_t bmp581::int_status::kPorSoftResetComplete = 0x10
 
constexpr uint8_t bmp581::int_source::kDataReady = 0x01
 
constexpr uint8_t bmp581::int_source::kFifoFull = 0x02
 
constexpr uint8_t bmp581::int_source::kFifoThreshold = 0x04
 
constexpr uint8_t bmp581::int_source::kPressureOor = 0x08
 
constexpr uint8_t bmp581::int_config::kModeMask = 0x01
 0 pulsed, 1 latched
 
constexpr uint8_t bmp581::int_config::kPolMask = 0x02
 0 active-low, 1 active-high
 
constexpr uint8_t bmp581::int_config::kOdMask = 0x04
 0 push-pull, 1 open-drain
 
constexpr uint8_t bmp581::int_config::kEnableMask = 0x08
 
constexpr uint8_t bmp581::int_config::kPadDriveMask = 0xF0
 pad_int_drv, bits 7:4 (datasheet section 7.5)
 
constexpr uint8_t bmp581::int_config::kPadDriveShift = 4
 
constexpr uint8_t bmp581::osr_config::kTempOsMask = 0x07
 
constexpr uint8_t bmp581::osr_config::kPressOsMask = 0x38
 
constexpr uint8_t bmp581::osr_config::kPressOsShift = 3
 
constexpr uint8_t bmp581::osr_config::kPressEnMask = 0x40
 
constexpr uint8_t bmp581::odr_config::kPowerModeMask = 0x03
 
constexpr uint8_t bmp581::odr_config::kOdrMask = 0x7C
 
constexpr uint8_t bmp581::odr_config::kOdrShift = 2
 
constexpr uint8_t bmp581::odr_config::kDeepDisableMask = 0x80
 1 = deep standby disabled
 
constexpr uint8_t bmp581::osr_eff::kTempOsMask = 0x07
 
constexpr uint8_t bmp581::osr_eff::kPressOsMask = 0x38
 
constexpr uint8_t bmp581::osr_eff::kPressOsShift = 3
 
constexpr uint8_t bmp581::osr_eff::kOdrValidMask = 0x80
 
constexpr uint8_t bmp581::dsp_config::kIirFlushForcedEnMask = 0x04
 
constexpr uint8_t bmp581::dsp_config::kShadowIirTempMask = 0x08
 
constexpr uint8_t bmp581::dsp_config::kFifoIirTempMask = 0x10
 
constexpr uint8_t bmp581::dsp_config::kShadowIirPressMask = 0x20
 
constexpr uint8_t bmp581::dsp_config::kFifoIirPressMask = 0x40
 
constexpr uint8_t bmp581::dsp_config::kOorSelIirPressMask = 0x80
 
constexpr uint8_t bmp581::dsp_iir::kTempMask = 0x07
 
constexpr uint8_t bmp581::dsp_iir::kPressMask = 0x38
 
constexpr uint8_t bmp581::dsp_iir::kPressShift = 3
 
constexpr float bmp581::kPressureLsbPerPa = 64.0f
 Raw → engineering scaling (data sheet §4.x, Bosch API).
 
constexpr float bmp581::kTemperatureLsbPerC = 65536.0f
 temperature_c = raw / 65536
 

Detailed Description

BMP581 register map, bit fields, enumerations and timing constants.

Values follow the Bosch BMP581 data sheet (BST-BMP581-DS004) and the Bosch BMP5 Sensor API (bmp5_defs.h, v1.1.1). Register access is identical over I2C and SPI (SPI reads set bit 7 of the address).