BMP581 Driver 1.0.0
API reference
Loading...
Searching...
No Matches
bmp581_registers.hpp
Go to the documentation of this file.
1
11#pragma once
12
13#include <cstdint>
14
15namespace bmp581 {
16
18namespace addr {
19constexpr uint8_t kPrimary = 0x46;
20constexpr uint8_t kSecondary = 0x47;
21} // namespace addr
22
24namespace chip_id {
25constexpr uint8_t kPrimary = 0x50;
26constexpr uint8_t kSecondary = 0x51;
27} // namespace chip_id
28
30namespace reg {
31constexpr uint8_t kChipId = 0x01;
32constexpr uint8_t kRevId = 0x02;
33constexpr uint8_t kChipStatus = 0x11;
34constexpr uint8_t kDriveConfig = 0x13;
35constexpr uint8_t kIntConfig = 0x14;
36constexpr uint8_t kIntSource = 0x15;
37constexpr uint8_t kFifoConfig = 0x16;
38constexpr uint8_t kFifoCount = 0x17;
39constexpr uint8_t kFifoSel = 0x18;
40constexpr uint8_t kTempDataXlsb = 0x1D;
41constexpr uint8_t kTempDataLsb = 0x1E;
42constexpr uint8_t kTempDataMsb = 0x1F;
43constexpr uint8_t kPressDataXlsb = 0x20;
44constexpr uint8_t kPressDataLsb = 0x21;
45constexpr uint8_t kPressDataMsb = 0x22;
46constexpr uint8_t kIntStatus = 0x27;
47constexpr uint8_t kStatus = 0x28;
48constexpr uint8_t kFifoData = 0x29;
49constexpr uint8_t kNvmAddr = 0x2B;
50constexpr uint8_t kNvmDataLsb = 0x2C;
51constexpr uint8_t kNvmDataMsb = 0x2D;
52constexpr uint8_t kDspConfig = 0x30;
53constexpr uint8_t kDspIir = 0x31;
54constexpr uint8_t kOorThrPLsb = 0x32;
55constexpr uint8_t kOorThrPMsb = 0x33;
56constexpr uint8_t kOorRange = 0x34;
57constexpr uint8_t kOorConfig = 0x35;
58constexpr uint8_t kOsrConfig = 0x36;
59constexpr uint8_t kOdrConfig = 0x37;
60constexpr uint8_t kOsrEff = 0x38;
61constexpr uint8_t kCmd = 0x7E;
62} // namespace reg
63
65namespace cmd {
66constexpr uint8_t kSoftReset = 0xB6;
67constexpr uint8_t kNvmFirst = 0x5D;
68constexpr uint8_t kNvmReadEnable = 0xA5;
69constexpr uint8_t kNvmWriteEnable = 0xA0;
70} // namespace cmd
71
73namespace timing {
74constexpr uint32_t kSoftResetUs = 2000;
75constexpr uint32_t kStandbyUs = 2500;
76constexpr uint32_t kNvmReadyReadUs = 800;
77constexpr uint32_t kNvmReadyWriteUs = 10000;
78constexpr uint32_t kStartupUs = 3000;
79} // namespace timing
80
82namespace nvm {
83constexpr uint8_t kStartAddr = 0x20;
84constexpr uint8_t kEndAddr = 0x22;
85} // namespace nvm
86
88namespace status {
89constexpr uint8_t kCoreRdy = 0x01;
90constexpr uint8_t kNvmRdy = 0x02;
91constexpr uint8_t kNvmErr = 0x04;
92constexpr uint8_t kNvmCmdErr = 0x08;
93} // namespace status
94
96namespace int_status {
97constexpr uint8_t kDataReady = 0x01;
98constexpr uint8_t kFifoFull = 0x02;
99constexpr uint8_t kFifoThreshold = 0x04;
100constexpr uint8_t kPressureOor = 0x08;
102} // namespace int_status
103
105namespace int_source {
106constexpr uint8_t kDataReady = 0x01;
107constexpr uint8_t kFifoFull = 0x02;
108constexpr uint8_t kFifoThreshold = 0x04;
109constexpr uint8_t kPressureOor = 0x08;
110} // namespace int_source
111
113namespace int_config {
114constexpr uint8_t kModeMask = 0x01;
115constexpr uint8_t kPolMask = 0x02;
116constexpr uint8_t kOdMask = 0x04;
117constexpr uint8_t kEnableMask = 0x08;
118constexpr uint8_t kPadDriveMask = 0xF0;
120} // namespace int_config
121
123namespace osr_config {
124constexpr uint8_t kTempOsMask = 0x07;
125constexpr uint8_t kPressOsMask = 0x38;
126constexpr uint8_t kPressOsShift = 3;
127constexpr uint8_t kPressEnMask = 0x40;
128} // namespace osr_config
129
131namespace odr_config {
132constexpr uint8_t kPowerModeMask = 0x03;
133constexpr uint8_t kOdrMask = 0x7C;
134constexpr uint8_t kOdrShift = 2;
135constexpr uint8_t kDeepDisableMask = 0x80;
136} // namespace odr_config
137
139namespace osr_eff {
140constexpr uint8_t kTempOsMask = 0x07;
141constexpr uint8_t kPressOsMask = 0x38;
142constexpr uint8_t kPressOsShift = 3;
143constexpr uint8_t kOdrValidMask = 0x80;
144} // namespace osr_eff
145
147namespace dsp_config {
150constexpr uint8_t kFifoIirTempMask = 0x10;
152constexpr uint8_t kFifoIirPressMask = 0x40;
154} // namespace dsp_config
155
157namespace dsp_iir {
158constexpr uint8_t kTempMask = 0x07;
159constexpr uint8_t kPressMask = 0x38;
160constexpr uint8_t kPressShift = 3;
161} // namespace dsp_iir
162
164enum class PowerMode : uint8_t {
165 Standby = 0,
166 Normal = 1,
167 Forced = 2,
168 Continuous = 3,
169 DeepStandby = 4,
170};
171
173enum class Oversampling : uint8_t {
174 X1 = 0, X2 = 1, X4 = 2, X8 = 3, X16 = 4, X32 = 5, X64 = 6, X128 = 7,
175};
176
178enum class Odr : uint8_t {
179 Hz240 = 0x00, Hz218_5 = 0x01, Hz199_1 = 0x02, Hz179_2 = 0x03, Hz160 = 0x04,
180 Hz149_3 = 0x05, Hz140 = 0x06, Hz129_8 = 0x07, Hz120 = 0x08, Hz110_1 = 0x09,
181 Hz100_2 = 0x0A, Hz89_6 = 0x0B, Hz80 = 0x0C, Hz70 = 0x0D, Hz60 = 0x0E,
182 Hz50 = 0x0F, Hz45 = 0x10, Hz40 = 0x11, Hz35 = 0x12, Hz30 = 0x13, Hz25 = 0x14,
183 Hz20 = 0x15, Hz15 = 0x16, Hz10 = 0x17, Hz5 = 0x18, Hz4 = 0x19, Hz3 = 0x1A,
184 Hz2 = 0x1B, Hz1 = 0x1C, Hz0_5 = 0x1D, Hz0_25 = 0x1E, Hz0_125 = 0x1F,
185};
186
188constexpr float OdrHz(Odr odr) noexcept {
189 switch (odr) {
190 case Odr::Hz240: return 240.0f; case Odr::Hz218_5: return 218.5f;
191 case Odr::Hz199_1: return 199.1f; case Odr::Hz179_2: return 179.2f;
192 case Odr::Hz160: return 160.0f; case Odr::Hz149_3: return 149.3f;
193 case Odr::Hz140: return 140.0f; case Odr::Hz129_8: return 129.8f;
194 case Odr::Hz120: return 120.0f; case Odr::Hz110_1: return 110.1f;
195 case Odr::Hz100_2: return 100.2f; case Odr::Hz89_6: return 89.6f;
196 case Odr::Hz80: return 80.0f; case Odr::Hz70: return 70.0f;
197 case Odr::Hz60: return 60.0f; case Odr::Hz50: return 50.0f;
198 case Odr::Hz45: return 45.0f; case Odr::Hz40: return 40.0f;
199 case Odr::Hz35: return 35.0f; case Odr::Hz30: return 30.0f;
200 case Odr::Hz25: return 25.0f; case Odr::Hz20: return 20.0f;
201 case Odr::Hz15: return 15.0f; case Odr::Hz10: return 10.0f;
202 case Odr::Hz5: return 5.0f; case Odr::Hz4: return 4.0f;
203 case Odr::Hz3: return 3.0f; case Odr::Hz2: return 2.0f;
204 case Odr::Hz1: return 1.0f; case Odr::Hz0_5: return 0.5f;
205 case Odr::Hz0_25: return 0.25f; case Odr::Hz0_125: return 0.125f;
206 }
207 return 0.0f;
208}
209
211enum class IirFilter : uint8_t {
212 Bypass = 0, Coeff1 = 1, Coeff3 = 2, Coeff7 = 3, Coeff15 = 4, Coeff31 = 5,
213 Coeff63 = 6, Coeff127 = 7,
214};
215
217enum class IntMode : uint8_t { Pulsed = 0, Latched = 1 };
218enum class IntPolarity : uint8_t { ActiveLow = 0, ActiveHigh = 1 };
219enum class IntDrive : uint8_t { PushPull = 0, OpenDrain = 1 };
220
222constexpr float kPressureLsbPerPa = 64.0f;
223constexpr float kTemperatureLsbPerC = 65536.0f;
224
225} // namespace bmp581
constexpr uint8_t kSecondary
Definition bmp581_registers.hpp:20
constexpr uint8_t kPrimary
Definition bmp581_registers.hpp:19
constexpr uint8_t kSecondary
Definition bmp581_registers.hpp:26
constexpr uint8_t kPrimary
Definition bmp581_registers.hpp:25
constexpr uint8_t kNvmReadEnable
Definition bmp581_registers.hpp:68
constexpr uint8_t kSoftReset
Definition bmp581_registers.hpp:66
constexpr uint8_t kNvmWriteEnable
Definition bmp581_registers.hpp:69
constexpr uint8_t kNvmFirst
Definition bmp581_registers.hpp:67
constexpr uint8_t kShadowIirTempMask
Definition bmp581_registers.hpp:149
constexpr uint8_t kIirFlushForcedEnMask
Definition bmp581_registers.hpp:148
constexpr uint8_t kFifoIirPressMask
Definition bmp581_registers.hpp:152
constexpr uint8_t kFifoIirTempMask
Definition bmp581_registers.hpp:150
constexpr uint8_t kShadowIirPressMask
Definition bmp581_registers.hpp:151
constexpr uint8_t kOorSelIirPressMask
Definition bmp581_registers.hpp:153
constexpr uint8_t kTempMask
Definition bmp581_registers.hpp:158
constexpr uint8_t kPressMask
Definition bmp581_registers.hpp:159
constexpr uint8_t kPressShift
Definition bmp581_registers.hpp:160
constexpr uint8_t kPadDriveMask
pad_int_drv, bits 7:4 (datasheet section 7.5)
Definition bmp581_registers.hpp:118
constexpr uint8_t kEnableMask
Definition bmp581_registers.hpp:117
constexpr uint8_t kPolMask
0 active-low, 1 active-high
Definition bmp581_registers.hpp:115
constexpr uint8_t kOdMask
0 push-pull, 1 open-drain
Definition bmp581_registers.hpp:116
constexpr uint8_t kPadDriveShift
Definition bmp581_registers.hpp:119
constexpr uint8_t kModeMask
0 pulsed, 1 latched
Definition bmp581_registers.hpp:114
constexpr uint8_t kFifoThreshold
Definition bmp581_registers.hpp:108
constexpr uint8_t kPressureOor
Definition bmp581_registers.hpp:109
constexpr uint8_t kDataReady
Definition bmp581_registers.hpp:106
constexpr uint8_t kFifoFull
Definition bmp581_registers.hpp:107
constexpr uint8_t kPressureOor
Definition bmp581_registers.hpp:100
constexpr uint8_t kFifoFull
Definition bmp581_registers.hpp:98
constexpr uint8_t kDataReady
Definition bmp581_registers.hpp:97
constexpr uint8_t kPorSoftResetComplete
Definition bmp581_registers.hpp:101
constexpr uint8_t kFifoThreshold
Definition bmp581_registers.hpp:99
constexpr uint8_t kStartAddr
Definition bmp581_registers.hpp:83
constexpr uint8_t kEndAddr
Definition bmp581_registers.hpp:84
constexpr uint8_t kDeepDisableMask
1 = deep standby disabled
Definition bmp581_registers.hpp:135
constexpr uint8_t kPowerModeMask
Definition bmp581_registers.hpp:132
constexpr uint8_t kOdrShift
Definition bmp581_registers.hpp:134
constexpr uint8_t kOdrMask
Definition bmp581_registers.hpp:133
constexpr uint8_t kPressOsMask
Definition bmp581_registers.hpp:125
constexpr uint8_t kPressEnMask
Definition bmp581_registers.hpp:127
constexpr uint8_t kPressOsShift
Definition bmp581_registers.hpp:126
constexpr uint8_t kTempOsMask
Definition bmp581_registers.hpp:124
constexpr uint8_t kPressOsShift
Definition bmp581_registers.hpp:142
constexpr uint8_t kTempOsMask
Definition bmp581_registers.hpp:140
constexpr uint8_t kPressOsMask
Definition bmp581_registers.hpp:141
constexpr uint8_t kOdrValidMask
Definition bmp581_registers.hpp:143
constexpr uint8_t kFifoConfig
Definition bmp581_registers.hpp:37
constexpr uint8_t kOdrConfig
Definition bmp581_registers.hpp:59
constexpr uint8_t kOorConfig
Definition bmp581_registers.hpp:57
constexpr uint8_t kTempDataMsb
Definition bmp581_registers.hpp:42
constexpr uint8_t kPressDataXlsb
Definition bmp581_registers.hpp:43
constexpr uint8_t kFifoSel
Definition bmp581_registers.hpp:39
constexpr uint8_t kOsrConfig
Definition bmp581_registers.hpp:58
constexpr uint8_t kDriveConfig
Definition bmp581_registers.hpp:34
constexpr uint8_t kOorThrPMsb
Definition bmp581_registers.hpp:55
constexpr uint8_t kOsrEff
Definition bmp581_registers.hpp:60
constexpr uint8_t kNvmDataMsb
Definition bmp581_registers.hpp:51
constexpr uint8_t kRevId
Definition bmp581_registers.hpp:32
constexpr uint8_t kFifoCount
Definition bmp581_registers.hpp:38
constexpr uint8_t kOorThrPLsb
Definition bmp581_registers.hpp:54
constexpr uint8_t kIntConfig
Definition bmp581_registers.hpp:35
constexpr uint8_t kDspIir
Definition bmp581_registers.hpp:53
constexpr uint8_t kTempDataXlsb
0x1D..0x1F temperature, 0x20..0x22 pressure
Definition bmp581_registers.hpp:40
constexpr uint8_t kPressDataLsb
Definition bmp581_registers.hpp:44
constexpr uint8_t kNvmAddr
Definition bmp581_registers.hpp:49
constexpr uint8_t kOorRange
Definition bmp581_registers.hpp:56
constexpr uint8_t kNvmDataLsb
Definition bmp581_registers.hpp:50
constexpr uint8_t kTempDataLsb
Definition bmp581_registers.hpp:41
constexpr uint8_t kFifoData
Definition bmp581_registers.hpp:48
constexpr uint8_t kCmd
Definition bmp581_registers.hpp:61
constexpr uint8_t kPressDataMsb
Definition bmp581_registers.hpp:45
constexpr uint8_t kIntStatus
Definition bmp581_registers.hpp:46
constexpr uint8_t kDspConfig
Definition bmp581_registers.hpp:52
constexpr uint8_t kChipId
Definition bmp581_registers.hpp:31
constexpr uint8_t kChipStatus
Definition bmp581_registers.hpp:33
constexpr uint8_t kIntSource
Definition bmp581_registers.hpp:36
constexpr uint8_t kStatus
Definition bmp581_registers.hpp:47
constexpr uint8_t kNvmRdy
Definition bmp581_registers.hpp:90
constexpr uint8_t kNvmErr
Definition bmp581_registers.hpp:91
constexpr uint8_t kNvmCmdErr
Definition bmp581_registers.hpp:92
constexpr uint8_t kCoreRdy
Definition bmp581_registers.hpp:89
constexpr uint32_t kNvmReadyWriteUs
Definition bmp581_registers.hpp:77
constexpr uint32_t kSoftResetUs
Definition bmp581_registers.hpp:74
constexpr uint32_t kStartupUs
t_startup: standby to start of measurement
Definition bmp581_registers.hpp:78
constexpr uint32_t kStandbyUs
Definition bmp581_registers.hpp:75
constexpr uint32_t kNvmReadyReadUs
Definition bmp581_registers.hpp:76
Definition bmp581.hpp:19
constexpr float kTemperatureLsbPerC
temperature_c = raw / 65536
Definition bmp581_registers.hpp:223
constexpr Interface kBusInterface
The interface adapter Bus declares, or Interface::Unspecified.
Definition bmp581_bus_interface.hpp:69
IirFilter
IIR filter coefficient (DSP_IIR).
Definition bmp581_registers.hpp:211
Odr
Output data rate (ODR_CONFIG bits 6:2). Codes ascend as rate descends.
Definition bmp581_registers.hpp:178
constexpr float kPressureLsbPerPa
Raw → engineering scaling (data sheet §4.x, Bosch API).
Definition bmp581_registers.hpp:222
PowerMode
Power modes (ODR_CONFIG bits 1:0; deep standby = standby with deep_dis = 0).
Definition bmp581_registers.hpp:164
@ Continuous
back-to-back conversions
@ DeepStandby
pseudo-mode: standby + deep_dis cleared
@ Normal
periodic at ODR
@ Forced
one conversion then standby
IntMode
Interrupt pin behaviour.
Definition bmp581_registers.hpp:217
constexpr float OdrHz(Odr odr) noexcept
ODR code → nominal rate in Hz (for logging / loop-rate planning).
Definition bmp581_registers.hpp:188
IntDrive
Definition bmp581_registers.hpp:219
Oversampling
Oversampling (OSR_CONFIG).
Definition bmp581_registers.hpp:173
IntPolarity
Definition bmp581_registers.hpp:218