BMX055 9-Axis Sensor Data Sheet
BMX055 9-Axis Sensor Data Sheet
BMX055
Small, versatile 9-axis sensor module
Bosch Sensortec
BMX055
Basic Description
Key features
3 sensors in one device an advanced triaxial 16bit gyroscope, a
versatile, leading edge triaxial 12bit accelerometer
and a full performance geomagnetic sensor
Small package LGA package 20 pins
footprint 3.0 x 4.5 mm², height 0.95mm
Common voltage supplies VDD voltage range: 2.4V to 3.6V
Digital interface SPI (4-wire, 3-wire), I²C, 4 interrupt pins
VDDIO voltage range: 1.2V to 3.6V
Smart operation and integration All sensors can be operated individually
9-axis FusionLib software compatible
Consumer electronics suite MSL1, RoHS and RoHS2 compliant, halogen-free
Operating temperature: -40°C ... +85°C
Accelerometer features
Programmable functionality Acceleration ranges ±2g/±4g/±8g/±16g
Low-pass filter bandwidths 1kHz - <8Hz
On-chip FIFO Integrated FIFO with a depth of 32 frames
On-chip interrupt controller Motion-triggered interrupt-signal generation for
- new data
- any-motion (slope) detection
- tap sensing (single tap / double tap)
- orientation- & motion inactivity recognition
- flat/low-g/high-g detection
On-chip temperature sensor factory trimmed, 8-bit, typical slope 0.5K/LSB.
Ultra-low power IC 130µA current consumption, 1.3ms wake-up time,
advanced features for system power management
Gyroscope features
Programmable functionality Ranges switchable from ±125°/s to ±2000°/s
Low-pass filter bandwidths 230Hz - 12Hz
Fast and slow offset controller (FOC and SOC)
On-chip FIFO Integrated FIFO with a depth of 100 frames
On-chip interrupt controller Motion-triggered interrupt-signal generation for
- new data
- any-motion (slope) detection
- high rate
Low power IC < 5mA current consumption, 30ms start-up time
wake-up time in fast power-up mode only 10ms
Magnetometer features
Flexible functionality Magnetic field range typical 1300µT (x-, y-axis);
±2500µT (z-axis)
Magnetic field resolution of ~0.3µT
On-chip interrupt controller Interrupt-signal generation for
- new data
- magnetic low-/high-threshold detection
Ultra-low power Low current consumption (170µA @ 10Hz in low
power preset), short wake-up time, advanced
features for system power management
Typical applications
Advanced gaming, HMI and augmented reality
Advanced gesture recognition
Indoor navigation
Tilt measurement and compensation
Free-fall detection and drop detection for warranty logging
Display profile switching
Advanced system power management for mobile applications
Menu scrolling, tap / double tap sensing
General description
The BMX055 is an integrated 9-axis sensor for the detection of movements and rotations and
magnetic heading. It comprises the full functionality of a triaxial, low-g acceleration sensor, a
triaxial angular rate sensor and a triaxial geomagnetic sensor.
The BMX055 senses orientation, tilt, motion, acceleration, rotation, shock, vibration and heading
in cell phones, handhelds, computer peripherals, man-machine interfaces, virtual reality
features and game controllers.
Advanced evaluation circuitry (ASIC) converts the outputs of the micro-electromechanical and
geomagnetic sensing structures (MEMS), developed, produced and tested in BOSCH facilities.
The programmable on-chip interrupt engine enables motion-based applications without use of a
microcontroller by providing contextual status of accelerometer, gyroscope and geomagnetic
sensor. The integrated FIFO memories allow buffering the inertial sensor data.
The corresponding chip-sets are integrated into one single 20-pin LGA 3.0mm x 4.5mm x
0.95 mm housing. For optimum system integration the BMX055 is equipped with digital bi-
directional SPI and I2C interfaces. To provide maximum performance and reliability each device
is tested and ready-to-use calibrated.
Package and interfaces of the BMX055 have been defined to match a multitude of hardware
requirements. Since the sensor features a small footprint, a flat package and very low power
consumption it is ideally suited for mobile-phone and tablet PC applications.
The BMX055 offers a variable VDDIO voltage range from 1.2V to 3.6V and can be programmed
to optimize functionality, performance and power consumption in customer specific applications.
Index of Contents
BASIC DESCRIPTION ................................................................................................................... 2
1 SPECIFICATION ................................................................................................................... 10
1.1 ELECTRICAL SPECIFICATION .......................................................................................... 10
1.2 ELECTRICAL AND PHYSICAL CHARACTERISTICS, MEASUREMENT PERFORMANCE ............... 11
1 Specification
If not stated otherwise, the given values are over lifetime and full performance temperature and
voltage ranges, minimum/maximum values are ±3.
1.1 Electrical specification
OPERATING CONDITIONS
Parameter Symbol Condition Min Typ Max Unit
Supply Voltage
VDD 2.4 3.0 3.6 V
Internal Domains
Supply Voltage
VDDIO 1.2 2.4 3.6 V
I/O Domain
Voltage Input
VIL,a SPI & I²C 0.3VDDIO -
Low Level
Voltage Input
VIH,a SPI & I²C 0.7VDDIO -
High Level
Voltage Output
VOL,a IOL = 3mA, SPI & I²C 0.23VDDIO -
Low Level
Voltage Output
VOH IOH = 3mA, SPI 0.8VDDIO -
High Level
Operating
TA -40 +85 °C
Temperature
1
Conditions of current consumption if not specified otherwise: TA=25°C, BW_Accel=1kHz, VDD =
VDDIO = 2.4V, digital protocol on, no streaming data
Temperature Sensor
dTS 0.5 K/LSB
Slope
Temperature Sensor
OTS ±2 K
Offset
Non-volatile
memory (NVM) nNVM 15 cycles
write-cycles
2
Conditions of current consumption if not specified otherwise: TA=25°C, BW_Gyro=1kHz,
VDD=2.4V, VDDIO=1.8V, digital protocol on, no streaming data
Sensitivity to
acceleration stimuli in
g- Sensitivity 0.1 °/s/g
all three axis
(frequency <20kHz)
Nominal VDD supplies
Off x T =25°C,
Zero-rate Offset A ±1 °/s
y and z slow and fast offset
cancellation off
rms, BW=47Hz
Output Noise n 0.1 °/s
rms
(@ 0.014°/s/√Hz)
unfiltered
230
116
f 64
Bandwidth BW Hz
-3dB 47
32
23
12
2000
1000
Data rate
400 Hz
(set of x,y,z rate)
200
100
Data rate tolerance
±0.3 %
(set of x,y,z rate)
Cross Axis Sensitivity to stimuli in
±1 %
Sensitivity non-sense-direction
3
Full linear measurement range considering sensor offsets.
4
The heading accuracy depends on hardware and software. For detailed information of the
software performance please contact Bosch Sensortec.
5
Heading accuracy of the tilt-compensated 9-axis system, assuming calibration with Bosch
Sensortec FusionLib software. Average value over various device orientations (typical device
usage).
6
For details on magnetometer current consumption calculation refer to chapter 9.2.4
7
Definition: gain error = ( (measured field after API compensation) / (applied field) ) – 1
8
Magnetic zero-B offset assuming calibration with Bosch Sensortec eCompass software. Typical
value after applying calibration movements containing various device orientations (typical device
usage).
Note: Stress above these limits may cause damage to the device. Exceeding the specified
electrical limits may affect the device reliability or cause malfunction.
3 Block diagram
Figure 1 shows the basic building blocks of the BMX055:
There are no limitations on the voltage levels of both pins relative to each other, as long as
each of them lies within its operating range. Furthermore, the device can be completely
switched off (VDD = 0V) while keeping the VDDIO supply on (VDDIO > 0V) or vice versa.
When the VDDIO supply is switched off, all interface pins (CSB, SDI, SCK, PS) must be kept
close to GNDIO potential.
The device contains a power-on reset (POR) generator. It resets the logic part and the register
values after powering-on VDD and VDDIO. Please note, that all application specific settings which
are not equal to the default settings (refer to 6.2 register map accelerometer, to 8.2 register
map gyroscope and to 10.2 register map magnetometer), must be re-set to its designated
values after POR.
In case the I²C interface shall be used, a direct electrical connection between VDDIO supply and
the PS pin is needed in order to ensure reliable protocol selection. For SPI interface mode the
PS pin must be directly connected to GNDIO.
The possible transitions between the power modes are illustrated in Figure 2:
DEEP-
SUSPEND
Mode
After power-up accelerometer is in normal mode so that all parts of the device are held
powered-up and data acquisition is performed continuously.
In deep-suspend mode the device reaches the lowest possible power consumption. Only the
interface section is kept alive. No data acquisition is performed and the content of the
configuration registers is lost. Deep suspend mode is entered (left) by writing ‘1’ (‘0’) to the
2
(ACC 0x11) deep_suspend bit while (ACC 0x11) suspend bit is set to ‘0’. The I C watchdog
timer remains functional. The (ACC 0x11) deep_ suspend bit, the (ACC 0x34) spi3 bit, (ACC
0x34) i2c_wdt_en bit and the (ACC 0x34) i2c_wdt_sel bit are functional in deep-suspend mode.
Equally the interrupt level and driver configuration registers (ACC 0x20) int1_lvl, (ACC 0x20)
int1_od, (ACC 0x20) int2_lvl, and (ACC 0x20) int2_od are accessible. Still it is possible to enter
normal mode by performing a softreset as described in chapter 5.7. Please note, that all
application specific settings which are not equal to the default settings (refer to 6.2 register map
accelerometer), must be re-set to its designated values after leaving deep-suspend mode.
In suspend mode the whole analog part is powered down. No data acquisition is performed.
While in suspend mode the latest acceleration data and the content of all configuration registers
are kept. Writing to and reading from registers is supported except from the (0x3E)
fifo_config_1, (0x30) fifo_config_0 and (0x3F) fifo_data register. It is possible to enter normal
mode by performing a softreset as described in chapter 5.7.
Suspend mode is entered (left) by writing ´1´ (´0´) to the (ACC 0x11) suspend bit after bit (ACC
0x12) lowpower_mode has been set to ‘0’. Although write access to registers is supported at
the full interface clock speed (SCL or SCK), a waiting period must be inserted between two
consecutive write cycles (please refer also to section 9.2.1).
In standby mode the analog part is powered down, while the digital part remains largely
operational. No data acquisition is performed. Reading and writing registers is supported
without any restrictions. The latest acceleration data and the content of all configuration
registers are kept. Standby mode is entered (left) by writing ´1´ (´0´) to the (ACC 0x11) suspend
bit after bit (ACC 0x12) lowpower_mode has been set to ‘1’. It is also possible to enter normal
mode by performing a softreset as described in chapter 5.7.
In low-power mode 1, the device is periodically switching between a sleep phase and a wake-
up phase. The wake-up phase essentially corresponds to operation in normal mode with
complete power-up of the circuitry. The sleep phase essentially corresponds to operation in
suspend mode. Low-power mode is entered (left) by writing ´1´ (´0´) to the (ACC 0x11)
lowpower_en bit with bit (ACC 0x12) lowpower_mode set to ‘0’. Read access to registers is
possible except from the (0x3F) fifo_data register. However, unless the register access is
synchronised with the wake-up phase, the restrictions of the suspend mode apply.
Low-power mode 2 is very similar to low-power mode 1, but register access is possible at any
time without restrictions. It consumes more power than low-power mode 1. In low-power mode
2 the device is periodically switching between a sleep phase and a wake-up phase. The wake-
up phase essentially corresponds to operation in normal mode with complete power-up of the
circuitry. The sleep phase essentially corresponds to operation in standby mode. Low-power
mode is entered (left) by writing ´1´ (´0´) to the (ACC 0x11) lowpower_en bit with bit (ACC 0x12)
lowpower_mode set to ‘1’.
The timing behaviour of the low-power modes 1 and 2 depends on the setting of the (ACC
0x12) sleeptimer_en bit. When (ACC 0x12) sleeptimer_en is set to ‘0’, the event-driven time-
base mode (EDT) is selected. In EDT the duration of the wake-up phase depends on the
number of samples required by the enabled interrupt engines. If an interrupt is detected, the
device stays in the wake-up phase as long as the interrupt condition endures (non-latched
interrupt), or until the latch time expires (temporary interrupt), or until the interrupt is reset
(latched interrupt). If no interrupt is detected, the device enters the sleep phase immediately
after the required number of acceleration samples have been taken and an active interface
access cycle has ended. The EDT mode is recommended for power-critical applications which
do not use the FIFO. Also, EDT mode is compatible with legacy BST sensors. Figure 3 shows
the timing diagram for low-power modes 1 and 2 when EDT is selected.
tACTIVE
State
Active phase
Sample
Sample
Sample
Sample
Sample
Sample
Sample
Settle
Settle
Sleep phase Settle
tSLEEP tSLEEP
t
When (ACC 0x12) sleeptimer_en is set to ‘1’, the equidistant-sampling mode (EST) is selected.
The use of the EST mode is recommended when the FIFO is used since it ensures that
equidistant samples are sampled into the FIFO regardless of whether the active phase is
extended by active interrupt engines or interface activity. In EST mode the sleep time tSLEEP is
defined as shown in Figure 4. The FIFO sampling time tSAMPLE is the sum of the sleep time tSLEEP
and the sensor data sampling time tSSMP. Since interrupt engines can extend the active phase to
exceed the sleep time tSLEEP, equidistant sampling is only guaranteed if the bandwidth has been
chosen such that 1/(2 * bw) = n * tSLEEP where n is an integer. If this condition is infringed,
equidistant sampling is not possible. Once the sleep time has elapsed the device will store the
next available sample in the FIFO. This set-up condition is not recommended as it may result in
timing jitter.
State
Active phase
Sample
Sample
Sample
Sample
Sample
Sample
Sample
Sample
Settle
Settle
Settle
Settle
Sleep phase
tSLEEP tSLEEP tSLEEP
tSSMP
tSAMPLE tSAMPLE tSAMPLE
t
The sleep time for lower-power mode 1 and 2 is set by the (ACC 0x11) sleep_dur bits as shown
in the following table:
Sleep Phase
(ACC 0x11)
Duration
sleep_dur
tsleep
0000b 0.5ms
0001b 0.5ms
0010b 0.5ms
0011b 0.5ms
0100b 0.5ms
0101b 0.5ms
0110b 1ms
0111b 2ms
1000b 4ms
1001b 6ms
1010b 10ms
1011b 25ms
1100b 50ms
1101b 100ms
1110b 500ms
1111b 1s
The current consumption of the accelerometer in low-power mode 1 (IDDlp1) and low-power
mode 2 (IDDlp2) can be estimated according to the following formulae:
When estimating the length of the wake-up phase tactive, the corresponding typical wake-up time,
tw,up1 or tw,up2 and tut (given in Table 7) have to be considered:
During the wake-up phase all analog modules are held powered-up, while during the sleep
phase most analog modules are powered down. Consequently, a wake-up time of more than
tw,up1 (tw,up2) ms is needed to settle the analog modules so that reliable acceleration data are
generated.
Two different streams of acceleration data are available, unfiltered and filtered. The unfiltered
data is sampled with 2kHz. The sampling rate of the filtered data depends on the selected filter
bandwidth and is always twice the selected bandwidth (BW = ODR/2). Which kind of data is
stored in the acceleration data registers depends on bit (ACC 0x13) data_high_bw. If (ACC
0x13) data_high_bw is ´0´ (´1´), then filtered (unfiltered) data is stored in the registers. Both
data streams are offset-compensated.
The bandwidth of filtered acceleration data is determined by setting the (ACC 0x10) bw bit as
followed:
Table 7: Bandwidth configuration
Update Time
bw Bandwidth
tut
00xxx *) -
01000 7.81Hz 64ms
01001 15.63Hz 32ms
01010 31.25Hz 16ms
01011 62.5Hz 8ms
01100 125Hz 4ms
01101 250Hz 2ms
01110 500Hz 1ms
01111 1000Hz 0.5ms
1xxxx *) -
*) Note: Settings 00xxx result in a bandwidth of 7.81 Hz; settings 1xxxx result in a bandwidth of
1000 Hz. It is recommended to actively set an application specific and an appropriate bandwidth
and to use the range from ´01000b´ to ´01111b´ only in order to be compatible with future
products.
Acceleration
Range measurement Resolution
range
0011 ±2g 0.98mg/LSB
0101 ±4g 1.95mg/LSB
1000 ±8g 3.91mg/LSB
1100 ±16g 7.81mg/LSB
others reserved -
The slope of the temperature sensor is 0.5K/LSB, its center temperature is 23°C [(ACC 0x08)
temp = 0x00].
Before the self-test is enabled the g-range should be set to 8 g. The self-test is activated
individually for each axis by writing the proper value to the (ACC 0x32) self_test_axis bits (´01b´
for x-axis, ´10b´ for y-axis, ´11b´ for z-axis, ´00b´ to deactivate self-test). It is possible to control
the direction of the deflection through bit (ACC 0x32) self_test_sign. The excitation occurs in
negative (positive) direction if (ACC 0x32) self_test_sign = ´0b´ (´1b´). The amplitude of the
deflection has to be set high by writing (ACC 0x32) self_test_amp=´1b´. After the self-test is
enabled, the user should wait 50ms before interpreting the acceleration data.
In order to ensure a proper interpretation of the self-test signal it is recommended to perform the
self-test for both (positive and negative) directions and then to calculate the difference of the
resulting acceleration values. Table 9 shows the minimum differences for each axis. The
actually measured signal differences can be significantly larger.
It is recommended to perform a reset of the device after a self-test has been performed. If the
reset cannot be performed, the following sequence must be kept to prevent unwanted interrupt
generation: disable interrupts, change parameters of interrupts, wait for at least 50ms, enable
desired interrupts.
The compensation is performed with filtered data, and is then applied to both, unfiltered and
filtered data. If necessary the result of this computation is saturated to prevent any overflow
errors (the smallest or biggest possible value is set, depending on the sign). However, the
registers used to read and write compensation values have a width of 8 bits.
+-16g
MSB Sign 2g 2g 2g
MSB Sign 1g 1g 1g 1g
LSB 0.97mg
The public offset compensation registers (ACC 0x38) offset_x, (ACC 0x39) offset_y, (ACC
0x3A) offset_z are images of the corresponding registers in the NVM. With each image update
(see section 5.5 Non-volatile memory accelerometer for details) the contents of the NVM
registers are written to the public registers. The public registers can be over-written by the user
at any time. After changing the contents of the public registers by either an image update or
manually, all 8bit values are extended to 12bit values for internal computation. In the opposite
direction, if an internally computed value changes it is converted to an 8bit value and stored in
the public register.
Depending on the selected g-range the conversion from 12bit to 8bit values can result in a loss
of accuracy of one to several LSB. This is shown in Figure 5.
In case an internally computed compensation value is too small or too large to fit into the
corresponding register, it is saturated in order to prevent an overflow error.
By writing ´1´ to the (ACC 0x36) offset_reset bit, all offset compensation registers are reset to
zero.
5.4.1 Fast compensation
st
Slow compensation is based on a 1 order high-pass filter, which continuously drives the
average value of the output data stream of each axis to zero. The bandwidth of the high-pass
filter is configured with bit (ACC 0x37) cut_off according to Table 10.
The slow compensation can be enabled (disabled) for each axis independently by setting the
bits (ACC 0x36) hp_x_en, hp_y_en, hp_z_en to ´1´ (´0´), respectively.
Slow compensation should not be used in combination with low-power mode. In low-power
mode the conditions (availability of necessary data) for proper function of slow compensation
are not fulfilled.
5.4.2 Fast compensation
Fast compensation is a one-shot process by which the compensation value is set in such a way
that when added to the raw acceleration, the resulting acceleration value of each axis
approaches the target value. This is best suited for “end-of-line trimming” with the customer’s
device positioned in a well-defined orientation. For fast compensation the g-range has to be
switched to 2g.
The algorithm in detail: An average of 16 consecutive acceleration values is computed and the
difference between target value and computed value is written to (ACC 0x38, 0x39, 0x3A)
offset_filt_x/y/z. The public registers (ACC 0x38, 0x39, 0x3A) offset_filt_x/y/z are updated with
the contents of the internal registers (using saturation if necessary) and can be read by the
user.
Fast compensation is triggered for each axis individually by setting the (ACC 0x36) cal_trigger
bits as shown in Table 11:
(ACC 0x36)
Selected Axis
cal_trigger
00b none
01b x
10b y
11b z
Register (ACC 0x36) cal_trigger is a write-only register. Once triggered, the status of the fast
correction process is reflected in the status bit (ACC 0x36) cal_rdy. Bit (ACC 0x36) cal_rdy is ‘0’
while the correction is in progress. Otherwise it is ‘1’. Bit (ACC 0x36) cal_rdy is ´0´ when (ACC
0x36) cal_trigger is not ´00´.
For the fast offset compensation, the compensation target can be chosen by setting the bits
(ACC 0x37) offset_target_x, (ACC 0x37) offset_target_y, and (ACC 0x37) offset_target_z
according to Table 12:
(ACC 0x37)
Target value
offset_target_x/y/z
00b 0g
01b +1g
10b -1g
11b 0g
Fast compensation should not be used in combination with any of the low-power modes. In low-
power mode the conditions (availability of necessary data) for proper function of fast
compensation are not fulfilled.
5.4.3 Manual compensation
The contents of the public compensation registers (ACC 0x38, 0x39, 0x3A) offset_filt_x/y/z can
be set manually via the digital interface. It is recommended to write into these registers directly
after a new data interrupt has occurred in order not to disturb running offset computations.
Writing to the offset compensation registers is not allowed while the fast compensation
procedure is running.
5.4.4 Inline calibration
For certain applications, it is often desirable to calibrate the offset once and to store the
compensation values permanently. This can be achieved by using one of the aforementioned
offset compensation methods to determine the proper compensation values and then storing
these values permanently in the NVM. See section 5.5 Non-volatile memory accelerometer for
details of the storing procedure.
Each time the device is reset, the compensation values are loaded from the non-volatile
memory into the image registers and used for offset compensation. until they are possibly
overwritten using one of the other compensation methods.
Altogether, there are eight registers (octets) with NVM backup which are accessible by the user.
The addresses of the image registers range from (ACC 0x38) to (ACC 0x3C). While the
addresses up to (ACC 0x3A) are used for offset compensation (see 5.4 Offset Compensation),
addresses (ACC 0x3B) and (ACC 0x3C) are general purpose registers not linked to any
sensor-specific functionality.
The content of the NVM is loaded to the image registers after a reset (either POR or softreset)
or after a user request which is performed by writing ´1´ to the write-only bit (ACC 0x33)
nvm_load. As long as the image update is in progress, bit (ACC 0x33) nvm_rdy is ´0´,
otherwise it is ´1´.
The image registers can be read and written like any other register.
Writing to the NVM always renews the entire NVM contents. It is possible to check the write
status by reading bit (ACC 0x33) nvm_rdy. While (ACC 0x33) nvm_rdy = ´0´, the write process
is still in progress; if (ACC 0x33) nvm_rdy = ´1´, then writing is completed. As long as the write
process is ongoing, no change of power mode and image registers is allowed. Also, the NVM
write cycle must not be initiated while image registers are updated, in low-power mode, and in
suspend mode.
Please note that the number of permitted NVM write-cycles is limited as specified in table 2.
The number of remaining write-cycles can be obtained by reading bits (ACC 0x33)
nvm_remain.
5.6 Interrupt controller accelerometer
The accelerometer is equipped with eight programmable interrupt engines. Each interrupt can
be independently enabled and configured. If the trigger condition of an enabled interrupt is
fulfilled, the corresponding status bit is set to ´1´ and the selected interrupt pin is activated. The
accelerometer provides two interrupt pins, INT1 and INT2; interrupts can be freely mapped to
any of these pins. The state of a specific interrupt pin is derived from a logic ´or´ combination of
all interrupts mapped to it.
The interrupt status registers are updated when a new data word is written into the acceleration
data registers. If an interrupt is disabled, all active status bits associated with it are immediately
reset.
An interrupt is generated if its activation condition is met. It cannot be cleared as long as the
activation condition is fulfilled. In the non-latched mode the interrupt status bit and the selected
pin (the contribution to the ´or´ condition for INT1 and/or INT2) are cleared as soon as the
activation condition is no more valid. Exceptions to this behavior are the new data, orientation,
and flat interrupts, which are automatically reset after a fixed time.
In latched mode an asserted interrupt status and the selected pin are cleared by writing ´1´ to
bit (ACC 0x21) reset_int. If the activation condition still holds when it is cleared, the interrupt
status is asserted again with the next change of the acceleration registers.
In the temporary mode an asserted interrupt and selected pin are cleared after a defined period
of time. The behavior of the different interrupt modes is shown graphically in Figure 6. The
timings in this mode are subject to the same tolerances as the bandwidths (see table 2).
interrupt output
non-latched
latch period
temporary
latched
Several interrupt engines can use either unfiltered or filtered acceleration data as their input. For
these interrupts, the source can be selected with the bits in register (ACC 0x1E). These are
(ACC 0x1E) int_src_data, (ACC 0x1E) int_src_tap, (ACC 0x1E) int_src_slo_no_mot, (ACC
0x1E) int_src_slope, (ACC 0x1E) int_src_high, and (ACC 0x1E) int_src_low. Setting the
respective bits to ´0´ (´1´) selects filtered (unfiltered) data as input. The orientation recognition
and flat detection interrupt always use filtered input data.
It is strongly recommended to set interrupt parameters prior to enabling the interrupt. Changing
parameters of an already enabled interrupt may cause unwanted interrupt generation and
generation of a false interrupt history. A safe way to change parameters of an enabled interrupt
is to keep the following sequence: disable the desired interrupt, change parameters, wait for at
least 10ms, and then re-enable the desired interrupt.
5.6.2 Mapping to physical interrupt pins (inttype to INT Pin#)
Registers (ACC 0x19) to (ACC 0x1B) are dedicated to mapping of interrupts to the interrupt pins
“INT1” or “INT2”. Setting (ACC 0x19) int1_”inttype” to ´1´ (´0´) maps (unmaps) “inttype” to pin
“INT1”. Correspondingly setting (ACC 0x1B) int2_”inttype” to ´1´ (´0´) maps (unmaps) “inttype”
to pin “INT2”.
Note: “inttype” to be replaced with the precise notation, given in the memory map in chapter 6.
Example: For flat interrupt (int1_flat): Setting (ACC 0x19) int1_flat to ´1´ maps int1_flat to pin
“INT1”.
5.6.3 Electrical behavior (INT pin# to open-drive or push-pull)
Both interrupt pins can be configured to show the desired electrical behavior. The ´active´ level
of each interrupt pin is determined by the (ACC 0x20) int1_lvl and (ACC 0x20) int2_lvl bits.
If (ACC 0x20) int1_lvl = ´1´ (´0´) / (ACC 0x20) int2_lvl = ´1´ (´0´), then pin “INT1” / pin “INT2” is
active ´1´ (´0´). The characteristic of the output driver of the interrupt pins may be configured
with bits (ACC 0x20) int1_od and (ACC 0x20) int2_od. By setting bits (ACC 0x20) int1_od /
(ACC 0x20) int2_od to ´1´, the output driver shows open-drive characteristic, by setting the
configuration bits to ´0´, the output driver shows push-pull characteristic. When open-drive
characteristic is selected in the design, external pull-up or pull-down resistor should be applied
according the int_lvl configuration. When open-drive characteristic is selected in the design,
external pull-up or pull-down resistor should be applied according the int_lvl configuration.
It is enabled (disabled) by writing ´1´ (´0´) to bit (ACC 0x17) data_en. The interrupt status is
stored in bit (ACC 0x0A) data_int.
Due to the settling time of the filter, the first interrupt after wake-up from suspend or standby
mode will take longer than the update time.
5.6.5 Slope / any-motion detection
Slope / any-motion detection uses the slope between successive acceleration signals to detect
changes in motion. An interrupt is generated when the slope (absolute value of acceleration
difference) exceeds a preset threshold. It is cleared as soon as the slope falls below the
threshold. The principle is made clear in Figure 7.
acceleration
acc(t0)
acc(t0−1/(2*bw))
time
slope(t0)=acc(t0)−acc(t0−1/(2*bw))
slope
slope_th
time
slope_dur slope_dur
INT
time
The threshold is defined through register (ACC 0x28) slope_th. In terms of scaling 1 LSB of
(ACC 0x28) slope_th corresponds to 3.91 mg in 2g-range (7.81 mg in 4g-range, 15.6 mg in 8g-
range and 31.3 mg in 16g-range). Therefore the maximum value is 996 mg in 2g-range (1.99g
in 4g-range, 3.98g in 8g-range and 7.97g in 16g-range).
The time difference between the successive acceleration signals depends on the selected
bandwidth and equates to 1/(2*bandwidth) (t=1/(2*bw)). In order to suppress false triggers, the
interrupt is only generated (cleared) if a certain number N of consecutive slope data points is
larger (smaller) than the slope threshold given by (ACC 0x28) slope_th. This number is set by
the (ACC 0x27) slope_dur bits. It is N = (ACC 0x27) slope_dur + 1 for (ACC 0x27).
Single tap interrupt is enabled (disabled) by writing ´1´ (´0´) to bit (ACC 0x16) s_tap_en. Double
tap interrupt is enabled (disabled) by writing ´1´ (´0´) to bit (ACC 0x16) d_tap_en.
The status of the single tap interrupt is stored in bit (ACC 0x09) s_tap_int, the status of the
double tap interrupt is stored in bit (ACC 0x09) d_tap_int.
The slope threshold for detecting a tap event is set by bits (ACC 0x2B) tap_th. The meaning of
(ACC 0x2B) tap_th depends on the range setting. 1 LSB of (ACC 0x2B) tap_th corresponds to
a slope of 62.5mg in 2g-range, 125mg in 4g-range, 250mg in 8g-range, and 500mg in 16g-
range.
slope
tap_th
time
tap_shock tap_quiet
time
double tap detection
12.5 ms
time
The parameters (ACC 0x2A) tap_shock and (ACC 0x2A) tap_quiet apply to both single tap and
double tap detection, while (ACC 0x2A) tap_dur applies to double tap detection only. Within the
duration of (ACC 0x2A) tap_shock any slope exceeding (ACC 0x2B) tap_th after the first event
is ignored. Contrary to this, within the duration of (ACC 0x2A) tap_quiet no slope exceeding
(ACC 0x2B) tap_th must occur, otherwise the first event will be cancelled.
[Link] Single tap detection
A single tap is detected and the single tap interrupt is generated after the combined durations of
(ACC 0x2A) tap_shock and (ACC 0x2A) tap_quiet, if the corresponding slope conditions are
fulfilled. The interrupt is cleared after a delay of 12.5 ms.
Do not map single-tap to any INT pin if you do not want to use it.
The length of (ACC 0x2A) tap_dur can be selected by setting the (ACC 0x2A) tap_dur bits
according to Table 14:
Table 14: Selection of tap_dur
The axis which triggered the interrupt is indicated by bits (ACC 0x0B) tap_first_x, (ACC 0x0B)
tap_first_y, and (ACC 0x0B) tap_first_z.
The bit corresponding to the triggering axis contains a ´1´ while the other bits hold a ´0´. These
bits are cleared together with clearing the interrupt status.
[Link] Tap sensing in low power mode
In low-power mode, a limited number of samples is processed after wake-up to decide whether
an interrupt condition is fulfilled. The number of samples is selected by bits (ACC 0x2B)
tap_samp according to Table 15.
Depending on the magnitudes of the acceleration vectors the orientation of the device in the
space is determined and stored in the three (ACC 0x0C) orient bits. These bits may not be reset
in the sleep phase of low-power mode. There are three orientation calculation modes with
different thresholds for switching between different orientations: symmetrical, high-
asymmetrical, and low-asymmetrical. The mode is selected by setting the (ACC 0x2C)
orient_mode bits as given in Table 16.
For each orientation mode the (ACC 0x0C) orient bits have a different meaning as shown in
Table 17 to Table 19:
Table 17: Meaning of the (ACC 0x0C) orient bits in symmetrical mode
Table 18: Meaning of the (ACC 0x0C) orient bits in high-asymmetrical mode
Table 19: Meaning of the (ACC 0x0C) orient bits in low-asymmetrical mode
In the preceding tables, the parameter ‘hyst’ stands for a hysteresis, which can be selected by
setting the (ACC 0x2C) orient_hyst bits. 1 LSB of (ACC 0x2C) orient_hyst always corresponds
to 62.5 mg, in any g-range (i.e. increment is independent from g-range setting). It is important to
note that by using a hysteresis ≠ 0 the actual switching angles become different from the angles
given in the tables since there is an overlap between the different orientations.
The most significant bit of the (ACC 0x0C) orient bits (which is displayed as an ´x´ in the above
given tables) contains information about the direction of the z-axis. It is set to ´0´ (´1´) if acc_z ≥
0 (acc_z < 0).
Figure 10 shows the typical switching conditions between the four different orientations for the
symmetrical mode i.e. without hysteresis:
portrait
portraitupright
upright landscape left portrait
portraitupside
upside landscape
landscaperight
right portrait upright
down
2
1.5
0.5
0
0 45 90 135 180 225 270 315 360
-0.5
-1 acc_y/acc_x
acc_x/sin(theta)
-1.5 acc_y/sin(theta)
-2
phi
The orientation interrupt is enabled (disabled) by writing ´1´ (´0´) to bit (ACC 0x16) orient_en.
The interrupt is generated if the value of (ACC 0x0C) orient has changed. It is automatically
cleared after one stable period of the (ACC 0x0C) orient value. The interrupt status is stored in
the (ACC 0x09) orient_int bit. The register (ACC 0x0C) orient always reflects the current
orientation of the device, irrespective of which interrupt mode has been selected. Bit (ACC
0x0C) orient<2> reflects the device orientation with respect to the z-axis. The bits (ACC 0x0C)
orient<1:0> reflect the device orientation in the x-y-plane. The conventions associated with
register (ACC 0x0C) orient are detailed in chapter 6.
[Link] Orientation blocking
The change of the (ACC 0x0C) orient value and – as a consequence – the generation of the
interrupt can be blocked according to conditions selected by setting the value of the (ACC
0x2C) orient_blocking bits as described by Table 20.
blocking _ theta
tan .
8
The parameter blocking_theta of the above given equation stands for the contents of the (ACC
0x2D) orient_theta bits. It is possible to define a blocking angle between 0° and 44.8°. The
internal blocking algorithm saturates the acceleration values before further processing. As a
consequence, the blocking angles are strictly valid only for a device at rest; they can be
different if the device is moved.
Example:
To get a maximum blocking angle of 19° the parameter blocking_theta is determined in the
following way: (8 * tan(19°) )² = 7.588, therefore, blocking_value = 8dec = 001000b has to be
chosen.
In order to avoid unwanted generation of the orientation interrupt in a nearly flat position (z ~ 0,
sign change due to small movements or noise), a hysteresis of 0.2 g is implemented for the z-
axis, i. e. a after a sign change the interrupt is only generated after |z| > 0.2 g.
[Link] Up-Down Interrupt Suppression Flag
Per default an orientation interrupt is triggered when any of the bits in register (ACC 0x0C)
orient changes state. The accelerometer can be configured to trigger orientation interrupts only
when the device position changes in the x-y-plane while orientation changes with respect to the
z-axis are ignored. A change of the orientation of the z-axis, and hence a state change of bit
(ACC 0x0C) orient<2> is ignored (considered) when bit (ACC 0x2D) orient_ud_en is set to ‘0’
(‘1’).
The flat angle is adjustable by (0x2E) flat_theta from 0° to 44.8°. The flat angle can be set
according to following formula:
1
atan flat_theta
8
A hysteresis of the flat detection can be enabled by (0x2F) flat_hy bits. In this case the flat
position is set if the angle drops below following threshold:
1 flat _ hy flat _ hy
hyst,ll atan flat_theta 1
8 1024 16
The flat position is reset if the angle exceeds the following threshold:
1 flat _ hy flat _ hy
hyst,ul atan flat_theta 1
8 1024 16
The flat interrupt is enabled (disabled) by writing ´1´ (´0´) to bit (ACC 0x16) flat_en. The flat
value is stored in the (ACC 0x0C) flat bit if the interrupt is enabled. This value is ´1´ if the device
is in the flat position, it is ´0´ otherwise. The flat interrupt is generated if the flat value has
changed and the new value is stable for at least the time given by the (ACC 0x2F)
flat_hold_time bits. A flat interrupt may be also generated if the flat interrupt is enabled. The
actual status of the interrupt is stored in the (ACC 0x09) flat_int bit. The flat orientation of the
sensor can always be determined from reading the (ACC 0x0C) flat bit after interrupt
generation. If unlatched interrupt mode is used, the (ACC 0x09) flat_int value and hence the
interrupt is automatically cleared after one sample period. If temporary or latched interrupt mode
is used, the (ACC 0x09) flat_int value is kept fixed until the latch time expires or the interrupt is
reset.
The meaning of the (ACC 0x2F) flat_hold_time bits can be seen from Table 21.
The interrupt is enabled (disabled) by writing ´1´ (´0´) to the (ACC 0x17) low_en bit. There are
two modes available, ‘single’ mode and ‘sum’ mode. In ‘single’ mode, the acceleration of each
axis is compared with the threshold; in ‘sum’ mode, the sum of absolute values of all
accelerations |acc_x| + |acc_y| + |acc_z| is compared with the threshold. The mode is selected
by the contents of the (ACC 0x24) low_mode bit: ´0´ means ‘single’ mode, ´1´ means ‘sum’
mode.
The low-g threshold is set through the (ACC 0x23) low_th register. 1 LSB of (ACC 0x23) low_th
always corresponds to an acceleration of 7.81 mg (i.e. increment is independent from g-range
setting).
A hysteresis can be selected by setting the (ACC 0x24) low_hy bits. 1 LSB of (ACC 0x24)
low_hy always corresponds to an acceleration difference of 125 mg in any g-range (as well,
increment is independent from g-range setting).
The low-g interrupt is generated if the absolute values of the acceleration of all axes (´and´
relation, in case of single mode) or their sum (in case of sum mode) are lower than the
threshold for at least the time defined by the (ACC 0x22) low_dur register. The interrupt is reset
if the absolute value of the acceleration of at least one axis (´or´ relation, in case of single
mode) or the sum of absolute values (in case of sum mode) is higher than the threshold plus
the hysteresis for at least one data acquisition. In bit (ACC 0x09) low_int the interrupt status is
stored.
The relation between the content of (ACC 0x22) low_dur and the actual delay of the interrupt
generation is: delay [ms] = [(ACC 0x22) low_dur + 1] • 2 ms. Therefore, possible delay times
range from 2 ms to 512 ms.
5.6.10 High-g interrupt
This interrupt is based on the comparison of acceleration data against a high-g threshold for the
detection of shock or other high-acceleration events.
The high-g interrupt is enabled (disabled) per axis by writing ´1´ (´0´) to bits (ACC 0x17)
high_en_x, (ACC 0x17) high_en_y, and (ACC 0x17) high_en_z, respectively. The high-g
threshold is set through the (ACC 0x26) high_th register. The meaning of an LSB of (ACC
0x26) high_th depends on the selected g-range: it corresponds to 7.81 mg in 2g-range, 15.63
mg in 4g-range, 31.25 mg in 8g-range, and 62.5 mg in 16g-range (i.e. increment depends from
g-range setting).
A hysteresis can be selected by setting the (ACC 0x24) high_hy bits. Analogously to (ACC
0x26) high_th, the meaning of an LSB of (ACC 0x24) high_hy is g-range dependent: It
corresponds to an acceleration difference of 125 mg in 2g-range, 250 mg in 4g-range, 500 mg
in 8g-range, and 1000mg in 16g-range (as well, increment depends from g-range setting).
The high-g interrupt is generated if the absolute value of the acceleration of at least one of the
enabled axes (´or´ relation) is higher than the threshold for at least the time defined by the (ACC
0x25) high_dur register. The interrupt is reset if the absolute value of the acceleration of all
enabled axes (´and´ relation) is lower than the threshold minus the hysteresis for at least the
time defined by the (ACC 0x25) high_dur register. In bit (ACC 0x09) high_int the interrupt status
is stored. The relation between the content of (ACC 0x25) high_dur and the actual delay of the
interrupt generation is delay [ms] = [(ACC 0x22) low_dur + 1] • 2 ms. Therefore, possible delay
times range from 2 ms to 512 ms. The interrupt will be cleared immediately once acceleration is
lower than threshold.
[Link] Axis and sign information of high-g interrupt
The axis which triggered the interrupt is indicated by bits (ACC 0x0C) high_first_x, (ACC 0x0C)
high_first_y, and (ACC 0x0C) high_first_z. The bit corresponding to the triggering axis contains
a ´1´ while the other bits hold a ´0´. These bits are cleared together with clearing the interrupt
status. The sign of the triggering acceleration is stored in bit (ACC 0x0C) high_sign. If (ACC
0x0C) high_sign = ´0´ (´1´), the sign is positive (negative).
In slow-motion mode an interrupt is triggered when the measured slope of at least one enabled
axis exceeds the programmable slope threshold for a programmable number of samples.
Hence the engine behaves similar to the any-motion interrupt, but with a different set of
parameters. In order to suppress false triggers, the interrupt is only generated (cleared) if a
certain number N of consecutive slope data points is larger (smaller) than the slope threshold
given by (ACC 0x27) slo_no_mot_dur<1:0>. The number is N = (ACC 0x27)
slo_no_mot_dur<1:0> + 1.
In no-motion mode an interrupt is generated if the slope on all selected axes remains smaller
than a programmable threshold for a programmable delay time. Figure 11 shows the timing
diagram for the no-motion interrupt. The scaling of the threshold value is identical to that of the
slow-motion interrupt. However, in no-motion mode register (ACC 0x27) slo_no_mot_dur
defines the delay time before the no-motion interrupt is triggered. Table 22 lists the delay times
adjustable with register (ACC 0x27) slo_no_mot_dur. The timer tick period is 1 second. Hence
using short delay times can result in considerable timing uncertainty.
If bit (ACC 0x18) slo_no_mot_sel is set to ‘1’ (‘0’) the no-motion/slow-motion interrupt engine is
configured in the no-motion (slow-motion) mode. Common to both modes, the engine monitors
the slopes of the axes that have been enabled with bits (ACC 0x18) slo_no_mot_en_x, (ACC
0x18) slo_no_mot_en_y, and (ACC 0x18) slo_no_mot_en_z for the x-axis, y-axis and z-axis,
respectively. The measured slope values are continuously compared against the threshold
value defined in register (ACC 0x29) slo_no_mot_th. The scaling is such that 1 LSB of (ACC
0x29) slo_no_mot_th corresponds to 3.91 mg in 2g-range (7.81 mg in 4g-range, 15.6 mg in 8g-
range and 31.3 mg in 16g-range). Therefore the maximum value is 996 mg in 2g-range (1.99g
in 4g-range, 3.98g in 8g-range and 7.97g in 16g-range). The time difference between the
successive acceleration samples depends on the selected bandwidth and equates to 1/(2 * bw).
acceleration acc(t0+Δt)
acc(t0)
axis x, y, or z
-slo_no_mot_th
slo_no_mot_dur
timer
INT
time
Registers with addresses from (ACC 0x00) up to (ACC 0x0E) are read-only. Any attempt to
write to these registers is ignored. There are bits within some registers that trigger internal
sequences. These bits are configured for write-only access, e. g. (ACC 0x21) reset_int or the
entire (ACC 0x14) softreset register, and read as value ´0´.
Register Address bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 Access Default
common w/r registers: Application specific settings which are not equal to the default settings,
must be re-set to its designated values after POR, soft-reset and wake up from deep suspend.
user w/r registers: Initial default content = 0x00. Freely programmable by the user.
Remains unchanged after POR, soft-reset and wake up from deep suspend.
Bit 3 2 1 0
Read/Write R R R R
Reset
n/a n/a n/a n/a
Value
Content undefined undefined undefined new_data_z
Bit 3 2 1 0
Read/Write R R R R
Reset n/a n/a n/a n/a
Value
Content temp<3:0>
Reset
n/a n/a n/a n/a
Value
Content data_int fifo_wm_int fifo_full_int reserved
Bit 3 2 1 0
Read/Write R R R R
Reset
n/a n/a n/a n/a
Value
Content reserved
tap_sign: sign of single/double tap triggering signal was ‘0’positive, or ‘1’ negative
tap_first_z: single/double tap interrupt: ‘1’ triggered by, or ‘0’not triggered by z-axis
tap_first_y: single/double tap interrupt: ‘1’ triggered by, or ‘0’not triggered by y-axis
tap_first_x: single/double tap interrupt: ‘1’ triggered by, or ‘0’not triggered by x-axis
slope_sign: slope sign of slope tap triggering signal was ‘0’positive, or ‘1’ negative
slope_first_z: slope interrupt: ‘1’ triggered by, or ‘0’not triggered by z-axis
slope_first_y: slope interrupt: ‘1’ triggered by, or ‘0’not triggered by y-axis
slope_first_x: slope interrupt: ‘1’ triggered by, or ‘0’not triggered by x-axis
Bit 3 2 1 0
Read/Write R R R R
Reset
n/a n/a n/a n/a
Value
Content high_sign high_first_z high_first_y high_first_x
Value
Content fifo_overrun fifo_frame_counter<6:4>
Bit 3 2 1 0
Read/Write R R R R
Reset
n/a n/a n/a n/a
Value
Content fifo_frame_counter<3:0>
fifo_overrun: FIFO overrun condition has ‘1’ occurred, or ‘0’not occurred; flag can be
cleared by writing to the FIFO configuration register FIFO_CONFIG_1 only
fifo_frame_counter<6:4>: Current fill level of FIFO buffer. An empty FIFO corresponds to
0x00. The frame counter can be cleared by reading out all frames from the
FIFO buffer or writing to the FIFO configuration register FIFO_CONFIG_1.
Value
Content bw<3:0>
bw<4:0>: Selection of data filter bandwidth:
´00xxxb´ 7.81 Hz, ´01000b´ 7.81 Hz, ´01001b´ 15.63 Hz,
´01010b´ 31.25 Hz, ´01011b´ 62.5 Hz, ´01100b´ 125 Hz,
´01101b´ 250 Hz, ´01110b´ 500 Hz, ´01111b´ 1000 Hz,
´1xxxxb´ 1000 Hz
reserved: write ‘0’
Please note, that all application specific settings which are not equal to the default settings
(refer to 6.2 register map), must be re-set to its designated values after DEEP_SUSPEND.
Bit 3 2 1 0
Read/Write R/W R/W R/W R/W
Reset
0 0 0 0
Value
Content reserved
lowpower_mode: select ‘0’ LPM1, or ‘1´ LPM2 configuration for SUSPEND and
LOW_POWER mode. In the LPM1 configuration the power consumption in
LOW_POWER mode and SUSPEND mode is significantly reduced when
compared to LPM2 configuration, but the FIFO is not accessible and writing
to registers must be slowed down. In the LPM2 configuration the power
consumption in LOW_POWER mode is reduced compared to NORMAL
mode, but the FIFO is fully accessible and registers can be written to at full
speed.
sleeptimer_mode: when in LOW_POWER mode ‘0’ use event-driven time-base mode
(compatible with BMA250), or ‘1´ use equidistant sampling time-base
mode. Equidistant sampling of data into the FIFO is maintained in
equidistant time-base mode only.
reserved: write ‘0’
data_high_bw: select whether ‘1´ unfiltered, or ‘0’ filtered data may be read from the
acceleration data registers.
shadow_dis: ‘1´ disable, or ‘0’ the shadowing mechanism for the acceleration data
output registers. When shadowing is enabled, the content of the acceleration
data component in the MSB register is locked, when the component in the
LSB is read, thereby ensuring the integrity of the acceleration data during
read-out. The lock is removed when the MSB is read.
reserved: write ‘0’
Bit 3 2 1 0
Read/Write R/W R/W R/W R/W
Reset
0 0 0 0
Value
int_src_slo_no_m
Content int_src_slope int_src_high int_src_low
ot
reset_int: write ‘1’ clear any latched interrupts, or ‘0’ keep latched interrupts
active
reserved: write ‘0’
latch_int<3:0>: ´0000b´ non-latched, ´0001b´ temporary, 250 ms,
´0010b´ temporary, 500 ms, ´0011b´ temporary, 1 s,
´0100b´ temporary, 2 s, ´0101b´ temporary, 4 s,
´0110b´ temporary, 8 s, ´0111b´ latched,
´1000b´ non-latched, ´1001b´ temporary, 250 s,
´1010b´ temporary, 500 s, ´1011b´ temporary, 1 ms,
´1100b´ temporary, 12.5 ms, ´1101b´ temporary, 25 ms,
´1110b´ temporary, 50 ms, ´1111b´ latched
Bit 3 2 1 0
Read/Write R/W R/W R/W R/W
Reset
0 0 0 0
Value
Content slo_no_mot_dur<1:0> slope_dur<1:0>
slo_no_mot_dur<5:4>=’b00’ [slo_no_mot_dur<3:0> + 1]
slo_no_mot_dur<5:4>=’b01’ [slo_no_mot_dur<3:0> · 4 + 20]
slo_no_mot_dur<5>=’1’ [slo_no_mot_dur<4:0> · 8 + 88]
slope_dur<1:0>: slope interrupt triggers if [slope_dur<1:0>+1] consecutive slope data points
are above the slope interrupt threshold slope_th<7:0>
tap_samp<1:0>: selects the number of samples that are processed after wake-up in the low-
power mode according to ´00b´ 2 samples, ´01b´ 4 samples, ´10b´ 8
samples, and ´11b´ 16 samples
reserved: write ‘0’
tap_th<4:0>: threshold of the single/double-tap interrupt corresponding to an acceleration
difference of tap_th<3:0> · 62.5mg (2g-range), tap_th<3:0> · 125mg (4g-
range), tap_th<3:0> · 250mg (8g-range), and tap_th<3:0> · 500mg (16g-
range).
´00b´ no blocking,
´01b´ theta blocking or acceleration in any axis > 1.5g,
´10b´ ,theta blocking or acceleration slope in any axis > 0.2 g or
acceleration in any axis > 1.5g
´11b´ theta blocking or acceleration slope in any axis > 0.4 g or
acceleration in any axis > 1.5g and value of orient is not stable for
at least 100ms
orient_mode<1:0>: sets the thresholds for switching between the different orientations. The
settings: ´00b´ symmetrical, ´01b´ high-asymmetrical, ´10b´ low-
asymmetrical, ´11b´ symmetrical.
Bit 3 2 1 0
Read/Write R/W R W R/W
Reset
0 n/a 0 0
Value
Content nvm_load nvm_rdy nvm_prog_trig nvm_prog_mode
nvm_remain<3:0>: number of remaining write cycles permitted for NVM; the number is
decremented each time a write to the NVM is triggered
nvm_load: ´1´ trigger, or ‘0’ do not trigger an update of all configuration registers
from NVM; the nvm_rdy flag must be ‘1’ prior to triggering the update
nvm_rdy: status of NVM controller: ´0´ NVM write / NVM update operation is in
progress, ´1´ NVM is ready to accept a new write or update trigger
nvm_prog_trig: ‘1’ trigger, or ‘0’ do not trigger an NVM write operation; the trigger is
only accepted if the NVM was unlocked before and nvm_remain<3:0> is
greater than ‘0’; flag nvm_rdy must be ‘1’ prior to triggering the write cycle
nvm_prog_mode: ‘1’ unlock, or ‘0’ lock NVM write operation
offset_reset: ´1´ set all offset compensation registers (0x38 to 0x3A) to zero, or ‘0’
keep their values
offset_trigger<1:0>: trigger fast compensation for ´01b´ x-axis, ´10b´ y-axis, or ´11b´
z-axis; ´00b´ do not trigger offset compensation; offset compensation
must not be triggered when cal_rdy is ‘0’
cal_rdy: indicates the state of the fast compensation: ´0´ offset compensation is in
progress, or ´1´ offset compensation is ready to be retriggered
reserved: write ‘0’
hp_z_en: ‘1´ enable, or ‘0’ disable slow offset compensation for the z-axis
hp_y_en: ‘1´ enable, or ‘0’ disable slow offset compensation for the y-axis
hp_x_en: ‘1´ enable, or ‘0’ disable slow offset compensation for the x-axis
offset_ x<7:0>: offset value, which is added to the internal filtered and unfiltered x-axis
acceleration data; the offset value is represented with two’s complement
notation, with a mapping of +127 +0.992g, 0 0 g, and -128 -1 g; the
scaling is independent of the selected g-range; the content of the
offset_x<7:0> may be written to the NVM; it is automatically restored from
the NVM after each power-on or softreset; offset_x<7:0> may be written
directly by the user; it is generated automatically after triggering the fast
offset compensation procedure for the x-axis
Example:
Content offset_y<7:4>
Bit 3 2 1 0
Read/Write R/W R/W R/W R/W
Reset
0 0 0 0
Value
Content offset_y<3:0>
offset_y<7:0>: offset value, which is added to the internal filtered and unfiltered y-axis
acceleration data; the offset value is represented with two’s complement
notation, with a mapping of +127 +0.992g, 0 0 g, and -128 -1 g; the
scaling is independent of the selected g-range; the content of the
offset_y<7:0> may be written to the NVM; it is automatically restored from
the NVM after each power-on or softreset; offset_y<7:0> may be written
directly by the user; it is generated automatically after triggering the fast
offset compensation procedure for the y-axis
For reference see example at ACC Register 0x38 (OFC_OFFSET_X)
offset_z<7:0>: offset value, which is added to the internal filtered and unfiltered z-axis
acceleration data; the offset value is represented with two’s complement
notation, with a mapping of +127 +0.992g, 0 0 g, and -128 -1 g; the
scaling is independent of the selected g-range; the content of the
offset_z<7:0> may be written to the NVM; it is automatically restored from
the NVM after each power-on or softreset; offset_z<7:0> may be written
directly by the user; it is generated automatically after triggering the fast
offset compensation procedure for the z-axis
For reference see example at ACC Register 0x38 (OFC_OFFSET_X)
GP0<7:0>: general purpose NVM image register not linked to any sensor-specific
functionality; register may be written to NVM and is restored after each
power-up or softreset
GP1<7:0>: general purpose NVM image register not linked to any sensor-specific
functionality; register may be written to NVM and is restored after each
power-up or softreset
Bit 3 2 1 0
Read/Write R/W R/W R/W R/W
Reset
0 0 0 0
Value
Content Reserved fifo_data_select<1:0>
if X+Y+Z data are selected, the data of frame n is reading out in the order of
X-lsb(n), X-msb(n), Y-lsb(n), Y-msb(n), Z-lsb(n), Z-msb(n);
if X-only is selected, the data of frame n and n+1 are reading out in the order
of X-lsb(n), X-msb(n), X-lsb(n+1), X-msb(n+1); the Y-only and Z-only modes
behave analogously
After power-up gyro is in normal mode so that all parts of the device are held powered-up and
data acquisition is performed continuously.
In deep-suspend mode the device reaches the lowest possible power consumption. Only the
interface section is kept alive. No data acquisition is performed and the content of the
configuration registers is lost. Deep suspend mode is entered (left) by writing ‘1’ (‘0’) to the
2
(GYR 0x11) deep_suspend bit. The I C watchdog timer remains functional. The (GYR 0x11)
deep_ suspend bit, the (GYR 0x34) spi3 bit, (GYR 0x34) i2c_wdt_en bit and the (GYR 0x34)
i2c_wdt_sel bit are functional in deep-suspend mode. Equally the interrupt level and driver
configuration registers (GYR 0x20) int1_lvl, (GYR 0x20) int1_od, (GYR 0x20) int2_lvl, and (GYR
0x20) int2_od are accessible. Still it is possible to enter normal mode by writing to the (GYR
0x14) softreset register. Please note, that all application specific settings which are not equal to
the default settings (refer to 8.2 register map gyroscope), must be re-set to its designated
values after leaving deep-suspend mode.
In suspend mode the whole analog part is powered down. No data acquisition is performed.
While in suspend mode the latest rate data and the content of all configuration registers are
kept. The only supported operations are reading and writing registers as well as writing to the
(GYR 0x14) softreset register.
Suspend mode is entered (left) by writing ´1´ (´0´) to the (GYR 0x11) suspend bit. Bit (GYR
0x12) fast_power_up must be set to ‘0’.
Although write access to registers is supported at the full interface clock speed (SCL or SCK), a
waiting period must be inserted between two consecutive write cycles (please refer also to
section 9.2.1).
In external wake-up mode, when the device is in deep suspend mode or suspend mode, it
can be woken-up by external trigger to pin INT3/4. Register settings:
In fast power-up mode the sensing analog part is powered down, while the drive and the
digital part remains largely operational. No data acquisition is performed. Reading and writing
registers as well as writing to the (GYR 0x14) softreset register are supported without any
restrictions. The latest rate data and the content of all configuration registers are kept. Fast
power-up mode is entered (left) by writing ´1´ (´0´) to the (GYR 0x11) suspend bit with bit (GYR
0x12) fast_power_up set to ‘1’.
7.1.1 Advanced power-saving modes
In addition to the power modes described in Figure 13, there are other advanced power modes
that can be used to optimize the power consumption of the BMX055.
The power_save_mode is set by setting power_save_mode=´1´ (GYR 0x12). This power mode
implements a duty cycle and change between normal mode and fast-power-up mode. By
setting the sleep_dur (time in ms in fast-power-up mode) (GYR 0x11 bits <1:3>) and
auto_sleep_dur (time in ms in normal mode) (GYR 0x12 bits <0:2>) different timings can be
used. Some of these settings allow the sensor to consume less than 3mA. See also diagram
below:
NORMAL
Fast Power
Up
sleep sleep sleep sleep sleep
dur dur dur dur dur
OFF t
The possible configuration for the autosleep_dur and sleep_dur are indicated in the table below:
The only restriction for the use of the power save mode comes from the configuration of the
digital filter bandwidth (GYR 0x10). For each Bandwidth configuration, a minimum
autosleep_dur must be ensured. For example, for Bandwidth=47Hz, the minimum
autosleep_dur is 5ms. This is specified in the table below. For sleep_dur there is no restriction.
Per default, the bandwidth of the data being read-out is limited by the internal low-pass filters
according to the filter configuration. Unfiltered (high-bandwidth) data can be read out through
the serial interface when the data_high_bw (GYR 0x13 bit 7) is set to ‘1’.
Bandwidth configuration: The gyro processes the 2kHz data out of the analog front end with a
CIC/Decimation filter, followed by an IIR filter before sending this data to the interrupt handler.
The possible decimation factors are 2, 5, 10 and 20. It is also possible to bypass these filters,
and use the unfiltered 2kHz data. The decimation factor / bandwidth of the filter can be set by
setting the address space GYR 0x10 bits<3:0> (bw<3:0>) as shown in the memory map
section.
The BIST uses three parameters for evaluation of proper device operation:
- Drive voltage regulator
- Sense frontend offset regulator of x-,y- and z-channel
- Quad regulator for x-,y- and z-channel
If any of the three parameters is not within the limits the BIST result will be “Fail”.
To trigger the BIST ´bit0´ bite_trig in address GYR 0x3C must be set `1´. When the test is
performed, bit1 bist_rdy will be ´1´. If the result is failed the bit bist_failed will be set to ´1´,
otherwise stay a ´0´.
bite_trig
0x3C = `1`
bist_rdy = ´1´
Another possibility to get information about the sensor status is to read out rate_ok GYR 0x3C
bit4. ´1´ indicates proper sensor function, no trigger is needed for this.
7.5 Offset compensation gyroscope
Offsets in measured signals can have several causes but they are always unwanted and
disturbing in many cases. Therefore, the gyro offers an advanced set of four digital offset
compensation methods which are closely matched to each other. These are slow, fast, and
manual compensation as well as inline calibration.
The compensation is performed with filtered data, and is then applied to both, unfiltered and
filtered data. If necessary the result of this computation is saturated to prevent any overflow
errors (the smallest or biggest possible value is set, depending on the sign). However, the
registers used to read and write compensation values have a width of 8 bits.
The public offset compensation registers (GYR 0x36) to (GYR 0x39) are image of the
corresponding registers in the NVM. With each image update (see section 7.6 Non-volatile
memory gyroscope for details) the contents of the NVM registers are written to the public
registers. The public register can be over-written by the user at any time.
In case an internally computed compensation value is too small or too large to fit into the
corresponding register, it is saturated in order to prevent an overflow error.
For every axes an offset up to 125°/s with 12 bits full resolution can be calibrated (resolution
0.06°/s).
By writing ´1´ to the (GYR 0x21) offset_reset bit, all dynamic (fast & slow) offset compensation
registers are reset to zero.
7.5.1 Slow compensation
In slow regulation mode, the rate data is monitored permanently. If the rate data is above 0°/s
for a certain period of time, an adjustable rate is subtracted by the offset controller. This
procedure of monitoring the rate data and subtracting of the adjustable rate at a time is
repeated continuously. Thus, the output of the offset converges to 0°/s.
The slow regulation can be enabled through the slow_offset_en_x/y/z (GYR 0x31 <0:2>) bits for
each axis. The slow offset cancellation will work for filtered and unfiltered data
(slow_offset_unfilt (GYR 0x1A <5>); slow_offset_unfilt=1 unfiltered data are selected)
Slow Offset cancellation settings are the adjustable rate (slow offset_th 0x31 <7:6>) and the
time period (slow_offset_dur 0x31 <5:3>)
7.5.2 Fast compensation
A fast offset cancellation controller is implemented in gyro. The fast offset cancellation process
is triggerable via SPI/I2C.
The fast offset cancellation can be enabled through the fast_offset_en_x/y/z (GYR 0x32 <0:2>)
bits for each axis. The enable bits will not start the fast offset cancellation! The fast offset
cancellation has to be started by setting the fast_offset_en (GYR 0x32 <3>) bit. Afterwards the
algorithm will start and if the algorithm is finished the fast_offset_en (GYR 0x32 <3>) will be
reset to 0.
The fast offset cancellation will work for filtered and unfiltered data (fast_offset_unfilt (GYR 0x1B
<7>); fast_offset_unfilt=1 unfiltered data are selected)
The fast offset cancellation parameters are fast_offset_wordlength (GYR 0x32 <5:4>)
The sample rate for the fast offset cancellation corresponds to the sample rate of the selected
bandwidth. For unfiltered data and bandwidth settings 0-2 the sample rate for the fast offset
cancellation will be 400Hz.
The resolution of the calculated offset values for the fast offset compensation depends on the,
range setting being less accurate for higher range (e.g. range=2000°/s).Therefore we
recommend a range setting of range=125°/s for fast offset compensation.
Writing to the offset compensation registers is not allowed while the fast compensation
procedure is running.
7.5.4 Inline calibration
For certain applications, it is often desirable to calibrate the offset once and to store the
compensation values permanently. This can be achieved by using one of the aforementioned
offset compensation methods to determine the proper compensation values and then storing
these values permanently in the NVM. See section 7.6 Non-volatile memory gyroscope for
details of the storing procedure.
Each time the device is reset, the compensation values are loaded from the non-volatile
memory into the image registers and used for offset compensation until they are possibly
overwritten using one of the other compensation methods.
7.6 Non-volatile memory gyroscope
The entire memory of the gyro consists of three different kinds of registers: hard-wired, volatile,
and non-volatile. Part of it can be both read and written by the user. Access to non-volatile
memory is only possible through (volatile) image registers.
Altogether, there are eight registers (octets) with NVM backup which are accessible by the user.
The addresses of the image registers range from (GYR 0x36) to (GYR 0x3B). While the
addresses up to (GYR 0x39) are used for offset compensation (see 7.5 Offset compensation
gyroscope), addresses (GYR 0x3A) and (GYR 0x3B) are general purpose registers not linked to
any sensor-specific functionality.
The content of the NVM is loaded to the image registers after a reset (either POR or softreset)
or after a user request which is performed by writing ´1´ to the write-only bit (GYR 0x33)
nvm_load. As long as the image update is in progress, bit (GYR 0x33) nvm_rdy is ´0´,
otherwise it is ´1´. In order to read out the correct values (after NVM loading) waiting time is
min. 1ms.
The image registers can be read and written like any other register.
Writing to the NVM always renews the entire NVM contents. It is possible to check the write
status by reading bit (GYR 0x33) nvm_rdy. While (GYR 0x33) nvm_rdy = ´0´, the write process
is still in progress; if (GYR 0x33) nvm_rdy = ´1´, then writing is completed. As long as the write
process is ongoing, no change of power mode and image registers is allowed. Also, the NVM
write cycle must not be initiated while image registers are updated, in suspend mode.
Please note that the number of permitted NVM write-cycles is limited as specified in Table 3.
The number of remaining write-cycles can be obtained by reading bits (GYR 0x33)
nvm_remain.
7.7 Interrupt controller Gyroscope
The gyro is equipped with 3 programmable interrupt engines. Each interrupt can be
independently enabled and configured. If the trigger condition of an enabled interrupt is fulfilled,
the corresponding status bit is set to ´1´ and the selected interrupt pin is activated. The gyro
provides two interrupt pins, INT3 and INT4; interrupts can be freely mapped to any of these
pins. The state of a specific interrupt pin is derived from a logic ´or´ combination of all interrupts
mapped to it.
The interrupt status registers are updated when a new data word is written into the rate data
registers. If an interrupt is disabled, all active status bits associated with it are immediately
reset.
Gyro Interrupts are fully functional in normal mode, only. Interrupts are limited in their
functionality in other operation modes. Please contact our technical support for further
assistance.
An interrupt is generated if its activation condition is met. It cannot be cleared as long as the
activation condition is fulfilled. In the non-latched mode the interrupt status bit and the selected
pin (the contribution to the ´or´ condition for INT3 and/or INT4) are cleared as soon as the
activation condition is no more valid. Exception to this behavior is the new data interrupt which
is automatically reset after a fixed time.
In latched mode an asserted interrupt status and the selected pin are cleared by writing ´1´ to
bit (GYR 0x21) reset_int. If the activation condition still holds when it is cleared, the interrupt
status is asserted again with the next change of the rate registers.
In the temporary mode an asserted interrupt and selected pin are cleared after a defined period
of time. The behavior of the different interrupt modes is shown graphically in Figure 16. The
timings in this mode are subject to the same tolerances as the bandwidths (see Table 3).
interrupt output
non-latched
latch period
temporary
latched
Note: “inttype” has to be replaced with the precise notation, given in the memory map in chapter
8.
7.7.3 Electrical behaviour (INT pin# to open-drive or push-pull)
Both interrupt pins can be configured to show the desired electrical behavior. The ´active´ level
of each interrupt pin is determined by the (GYR 0x16) int1_lvl and (GYR 0x16) int2_lvl bits.
If (GYR 0x16) int1_lvl = ´1´ (´0´) / (GYR 0x16) int2_lvl = ´1´ (´0´), then pin “INT3” / pin “INT4” is
active ´1´ (´0´). The characteristic of the output driver of the interrupt pins may be configured
with bits (GYR 0x16) int1_od and (GYR 0x16) int2_od. By setting bits (GYR 0x16) int1_od /
(GYR 0x16) int2_od to ´1´, the output driver shows open-drive characteristic, by setting the
configuration bits to ´0´, the output driver shows push-pull characteristic. When open-drive
characteristic is selected in the design, external pull-up or pull-down resistor should be applied
according the int_lvl configuration. When open-drive characteristic is selected in the design,
external pull-up or pull-down resistor should be applied according the int_lvl configuration.
7.7.4 New data interrupt
This interrupt serves for synchronous reading of angular rate data. It is generated after storing a
new value of z-axis angular rate data in the data register. The interrupt is cleared automatically
after 280-400 µs (depending on Interrupt settings).
It is enabled (disabled) by writing ´1´ (´0´) to bit (GYR 0x15) data_en. The interrupt status is
stored in bit (GYR 0x0A) data_int.
7.7.5 Any-motion detection / Interrupt
Any-motion (slope) detection uses the slope between successive angular rate signals to detect
changes in motion. An interrupt is generated when the slope (absolute value of angular rate
difference) exceeds a preset threshold. It is cleared as soon as the slope falls below the
threshold. The principle is made clear in Figure 17.
angular rate
rate(t0)
rate(t0−1/(4*fs))
time
slope(t0)=gyro(t0)−gyro(t0−1/(2*bw))
slope
slope_th
time
slope_dur slope_dur
INT
time
The threshold is defined through register (GYR 0x1B) any_th. In terms of scaling 1 LSB of
(GYR 0x1B) any_th corresponds to 1 °/s in 2000°/s-range (0.5°/s in 1000°/s-range, 0.25°/s in
500°/s -range …). Therefore the maximum value is 125°/s in 2000°/s-range (62.5°/s 1000°/s-
range, 31.25°/s in 500°/s -range …).
The time difference between the successive angular rate signals depends on the selected
update rate(fs) which is coupled to the bandwidth and equates to 1/(4*fs) (t=1/(4*fs)). For
bandwidhth settings with an update rate higher than 400Hz (bandwidth =0, 1, 2) fs is set to
400Hz.
In order to suppress false triggers, the interrupt is only generated (cleared) if a certain number
N of consecutive slope data points is larger (smaller) than the slope threshold given by (GYR
0x1B) any_th. This number is set by the (GYR 0x1C) any_dursample bits. It is N = [(GYR 0x1C)
any_dursample+ 1]*4 for (GYR 0x1C). N is set in samples. Thus the time is scaling with the
update rate (fs). Example: (GYR 0x1C) slope_dur = 00b, …, 11b = 4 samples, …, 16 samples.
[Link] Enabling (disabling) for each axis
Any-motion detection can be enabled (disabled) for each axis separately by writing ´1´ (´0´) to
bits (GYR 0x1C) any_en_x, (GYR 0x1C) any_en_y, (GYR 0x1C) any_en_z. The criteria for
any-motion detection are fulfilled and the Any-Motion interrupt is generated if the slope of any of
the enabled axes exceeds the threshold (GYR 0x1B) any_th for [(GYR 0x1C) slope_dur +1]*4
consecutive times. As soon as the slopes of all enabled axes fall or stay below this threshold for
[(GYR 0x1C) slope_dur +1]*4 consecutive times the interrupt is cleared unless interrupt signal is
latched.
[Link] Axis and sign information of slope / any motion interrupt
The interrupt status is stored in bit (GYR 0x09) any_int. The Any-motion interrupt supplies
additional information about the detected slope. The axis which triggered the interrupt is given
by that one of bits (GYR 0x0B) any_first_x, (GYR 0x0B) any_first_y, (GYR 0x0B) any_first_z
that contains a value of ´1´. The sign of the triggering slope is held in bit (GYR 0x0B) any_sign
until the interrupt is retriggered. If (GYR 0x0B) slope_sign = ´1´ (´0´), the sign is positive
(negative).
7.7.6 High-Rate interrupt
This interrupt is based on the comparison of angular rate data against a high-rate threshold for
the detection of shock or other high-angular rate events. The principle is made clear in Figure
18 below:
The high-rate interrupt is enabled (disabled) per axis by writing ´1´ (´0´) to bits (GYR 0x22)
high_en_x, (GYR 0x24) high_en_y, and (GYR 0x26) high_en_z, respectively. The high-rate
threshold is set through the (GYR 0x22) high_th_x register, (GYR 0x24) high_th_y register and
(GYR 0x26) high_th_z for the corresponding axes. The meaning of an LSB of (GYR
0x22/24/26) high_th_x/y/z depends on the selected °/s-range: it corresponds to 62.5°/s in
2000°/s-range, 31.25°/s in 1000°/s-range, 15.625°/s in 500°/s -range …). The high_th_x/y/z
A hysteresis can be selected by setting the (GYR 0x22/24/26) high_hy_x/y/z bits. Analogously
to (GYR 0x22/24/26) high_th_x/y/z, the meaning of an LSB of (GYR 0x22/24/26) high_hy_x/y/z
bits is °/s-range dependent: The high_hy_x/y/z register setting 0 corresponds to an angular rate
difference of 62.26°/s in 2000°/s-range, 31.13°/s in 1000°/s-range, 15.56°/s in 500°/s-range ….
The meaning of an LSB of (GYR 0x22/24/26) high_hy_x/y/z depends on the selected °/s-range
too: it corresponds to 62.5°/s in 2000°/s-range, 31.25°/s in 1000°/s-range, 15.625°/s in 500°/s -
range …).
The high-rate interrupt is generated if the absolute value of the angular rate of at least one of
the enabled axes (´or´ relation) is higher than the threshold for at least the time defined by the
(GYR 0x23/25/27) high_dur_x/y/z register. The interrupt is reset if the absolute value of the
angular rate of all enabled axes (´and´ relation) is lower than the threshold minus the
hysteresis. In bit (GYR 0x09) high_int the interrupt status is stored. The relation between the
content of (GYR 0x23/25/27) high_dur_x/y/z and the actual delay of the interrupt generation is
delay [ms] = [(GYR 0x23/25727) high_dur_x/y/z + 1] * 2.5 ms. Therefore, possible delay times
range from 2.5 ms to 640 ms.
[Link] Axis and sign information of high-rate interrupt
The axis which triggered the interrupt is indicated by bits (GYR 0x0C) high_first_x, (GYR 0x0C)
high_first_y, and (GYR 0x0C) high_first_z. The bit corresponding to the triggering axis contains
a ´1´ while the other bits hold a ´0´. These bits are cleared together with clearing the interrupt
status. The sign of the triggering angular rate is stored in bit (GYR 0x0C) high_sign. If (GYR
0x0C) high_sign = ´1´ (´0´), the sign is positive (negative).
Registers with addresses from (GYR 0x00) up to (GYR 0x0E) are read-only. Any attempt to
write to these registers is ignored. There are bits within some registers that trigger internal
sequences. These bits are configured for write-only access, e. g. (GYR 0x21) reset_int or the
entire (GYR 0x14) softreset register, and read as value ´0´.
Register
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 Access Reset Value
Address
0x3F fifo_data[7] fifo_data[6] fifo_data[5] fifo_data[4] fifo_data[3] fifo_data[2] fifo_data[1] fifo_data[0] ro 0x00
0x3E mode[1] mode[0] data_select[1] data_select[0] w/r 0x00
0x3D tag h2o_mrk_lvl_trig_ret[6] h2o_mrk_lvl_trig_ret[5] h2o_mrk_lvl_trig_ret[4] h2o_mrk_lvl_trig_ret[3] h2o_mrk_lvl_trig_ret[2] h2o_mrk_lvl_trig_ret[1] h2o_mrk_lvl_trig_ret[0] w/r 0x00
0x3C rate_ok bist_fail bist_rdy trig_bist ro N/A
0x3B gp0[11] gp0[10] gp0[9] gp0[8] gp0[7] gp0[6] gp0[5] gp0[4] w/r N/A
0x3A gp0[3] gp0[2] gp0[1] gp0[0] offset_x[1] offset_x[0] offset_y[0] offset_z[0] w/r N/A
0x39 offset_z[11] offset_z[10] offset_z[9] offset_z[8] offset_z[7] offset_z[6] offset_z[5] offset_z[4] w/r N/A
0x38 offset_y[11] offset_y[10] offset_y[9] offset_y[8] offset_y[7] offset_y[6] offset_y[5] offset_y[4] w/r N/A
0x37 offset_x[11] offset_x[10] offset_x[9] offset_x[8] offset_x[7] offset_x[6] offset_x[5] offset_x[4] w/r N/A
0x36 offset_x[3] offset_x[2] offset_y[3] offset_y[2] offset_y[1] offset_z[3] offset_z[2] offset_z[1] w/r N/A
0x35 w/r 0x00
0x34 ext_fifo_sc_en ext_fifo_s_sel burst_same_en i2c_wdt_en i2c_wdt_sel spi3 w/r 0x00
0x33 nvm_remain[3] nvm_remain[2] nvm_remain[1] nvm_remain[0] nvm_load nvm_rdy nvm_prog_trig nvm_prog_mode w/r 0x00
0x32 auto_offset_wordlength[1] auto_offset_wordlength[0] fast_offset_wordlength[1] fast_offset_wordlength[0] fast_offset_en fast_offset_en_z fast_offset_en_y fast_offset_en_x w/r 0xC0
0x31 slow_offset_th[1] slow_offset_th[0] slow_offset_dur[2] slow_offset_dur[1] slow_offset_dur[0] slow_offset_en_z slow_offset_en_y slow_offset_en_x w/r 0x60
0x30 w/r 0xE8
0x2F w/r 0xE0
0x2E w/r 0x81
0x2D w/r 0x40
0x2C w/r 0x42
0x2B w/r 0x22
0x2A w/r 0xE8
0x29 w/r 0x19
0x28 w/r 0x24
0x27 high_dur_z[7] high_dur_z[6] high_dur_z[5] high_dur_z[4] high_dur_z[3] high_dur_z[2] high_dur_z[1] high_dur_z[0] w/r 0x19
0x26 high_hy_z[1] high_hy_z[0] high_th_z[4] high_th_z[3] high_th_z[2] high_th_z[1] high_th_z[0] high_en_z w/r 0x02
0x25 high_dur_y[7] high_dur_y[6] high_dur_y[5] high_dur_y[4] high_dur_y[3] high_dur_y[2] high_dur_y[1] high_dur_y[0] w/r 0x19
0x24 high_hy_y[1] high_hy_y[0] high_th_y[4] high_th_y[3] high_th_y[2] high_th_y[1] high_th_y[0] high_en_y w/r 0x02
0x23 high_dur_x[7] high_dur_x[6] high_dur_x[5] high_dur_x[4] high_dur_x[3] high_dur_x[2] high_dur_x[1] high_dur_x[0] w/r 0x19
0x22 high_hy_x[1] high_hy_x[0] high_th_x[4] high_th_x[3] high_th_x[2] high_th_x[1] high_th_x[0] high_en_x w/r 0x02
0x21 reset_int offset_reset latch_status_bits latch_int[3] latch_int[2] latch_int[1] latch_int[0] w/r 0x00
0x20 w/r 0x00
0x1F w/r 0x28
0x1E fifo_wm_en w/r 0x08
0x1D w/r 0xC9
0x1C awake_dur[1] awake_dur[0] any_dursample[1] any_dursample[0] any_en_z any_en_y any_en_x w/r 0xA0
0x1B fast_offset_unfilt any_th[6] any_th[5] any_th[4] any_th[3] any_th[2] any_th[1] any_th[0] w/r 0x04
0x1A slow_offset_unfilt high_unfilt_data any_unfilt_data w/r 0x00
0x19 int2_high int2_any wo 0x00
0x18 int2_data int2_fast_offset int2_fifo int2_auto_offset int1_auto_offset int1_fifo int1_fast_offset int1_data w/r 0x00
0x17 int1_high int1_any w/r 0x00
0x16 int2_od int2_lvl int1_od int1_lvl w/r 0x0F
0x15 data_en fifo_en auto_offset_en w/r 0x00
0x14 softreset[7] softreset[6] softreset[5] softreset[4] softreset[3] softreset[2] softreset[1] softreset[0] wo 0x00
0x13 data_high_bw shadow_dis wo 0x00
0x12 fast_powerup power_save_mode ext_trig_sel[1] ext_trig_sel[0] autosleep_dur[2] autosleep_dur[1] autosleep_dur[0] w/r 0x00
0x11 suspend deep_suspend sleep_dur[2] sleep_dur[1] sleep_dur[0] w/r 0x00
0x10 bw[3] bw[2] bw[1] bw[0] w/r 0x80
0x0F range[2] range[1] range[0] w/r 0x00
0x0E Overrun frame_counter[6] frame_counter[5] frame_counter[4] frame_counter[3] frame_counter[2] frame_counter[1] frame_counter[0] ro 0x00
0x0D ro 0x00
0x0C high_sign high_first_z high_first_y high_first_x ro 0x00
0x0B any_sign any_first_z any_first_y any_first_x ro 0x00
0x0A data_int auto_offset_int fast_ofsset_int fifo_int ro 0x00
0x09 any_int high_int ro 0x00
0x08 ro 0x00
0x07 rate_z[15] rate_z[14] rate_z[13] rate_z[12] rate_z[11] rate_z[10] rate_z[9] rate_z[8] ro 0x00
0x06 rate_z[7] rate_z[6] rate_z[5] rate_z[4] rate_z[3] rate_z[2] rate_z[1] rate_z[0] ro 0x00
0x05 rate_y[15] rate_y[14] rate_y[13] rate_y[12] rate_y[11] rate_y[10] rate_y[9] rate_y[8] ro 0x00
0x04 rate_y[7] rate_y[6] rate_y[5] rate_y[4] rate_y[3] rate_y[2] rate_y[1] rate_y[0] ro 0x00
0x03 rate_x[15] rate_x[14] rate_x[13] rate_x[12] rate_x[11] rate_x[10] rate_x[9] rate_x[8] ro 0x00
0x02 rate_x[7] rate_x[6] rate_x[5] rate_x[4] rate_x[3] rate_x[2] rate_x[1] rate_x[0] ro 0x00
0x01 ro 0x00
0x00 chip_id[7] chip_id[6] chip_id[5] chip_id[4] chip_id[3] chip_id[2] chip_id[1] chip_id[0] ro 0x0F
w/r
write only
read only
res. future use
common w/r registers: Application specific settings which are not equal to the default settings,
must be re-set to its designated values after POR, soft-reset and wake up from deep suspend.
user w/r registers: Initial default content = 0x00. Freely programmable by the user.
Remains unchanged after POR, soft-reset and wake up from deep suspend.
fifo_overrun: FIFO overrun condition has ‘1’ occurred, or ‘0’not occurred; flag can be
cleared by writing to the FIFO configuration register FIFO_CONFIG_1 only
Name 0x10 BW
Bit 7 6 5 4
Read/Write R R/W R/W R/W
Reset
1 0 0 0
Value
Content reserved
0
Bit 3 2 1 0
Read/Write R/W R/W R/W R/W
Reset
0 0 0 0
Value
Content bw<3:0>
bw<3:0>:
Table 30: Gyroscope Output data rate and filter bandwidth
‘0111’ 20 100 Hz 32 Hz
‘0110’ 10 200 Hz 64 Hz
‘0101’ 20 100 Hz 12 Hz
‘0100’ 10 200 Hz 23 Hz
‘0011’ 5 400 Hz 47 Hz
reserved: write ‘0
suspend, deep_suspend:
Main power mode configuration setting {suspend; deep_suspend}:
{0; 0} NORMAL mode;
{0; 1} DEEP_SUSPEND mode;
{1; 0} SUSPEND mode;
{all other} illegal
Please note that only certain power mode transitions are permitted.
Please note, that all application specific settings which are not equal to the default settings
(refer to 8.2 register map gyroscope), must be re-set to its designated values after
DEEP_SUSPEND.
fast powerup: 1 Drive stays active for suspend mode in order to have a short wake-up
time…..
0 Drive is switched off for suspend mode
ext_trig_sel<1:0>:
Table 32: external trigger gyroscope
data_high_bw: select whether ‘1´ unfiltered, or ‘0’ filtered data may be read from the
rate data registers.
shadow_dis: ‘1´ disable, or ‘0’ the shadowing mechanism for the rate data output
registers. When shadowing is enabled, the content of the rate data
component in the MSB register is locked, when the component in the LSB is
read, thereby ensuring the integrity of the rate data during read-out. The lock
is removed when the MSB is read.
reserved: write ‘0’
int2_od: ‘0’ (‘1’) selects push-pull, ‘1’ selects open drive for INT4
int2_lvl: ‘0’ (‘1’) selects active level ‘0’ (‘1’) for INT4
int1_od: ‘0’ (‘1’) selects push-pull, ‘1’ selects open drive for INT3
int1_lvl: ‘0’ (‘1’) selects active level ‘0’ (‘1’) for INT3
reserved: write ‘0’
int1_high: map high rate interrupt to INT3 pin: ‘0’ disabled, or ‘1’ enabled
int1_any: map Any-Motion to INT3 pin: ‘0’ disabled, or ‘1’ enabled
reserved: write ‘0’
int2_data: map new data interrupt to INT4 pin: ‘0’ disabled, or ‘1’ enabled
int2_fast_offset: map FastOffset interrupt to INT4 pin: ‘0’ disabled, or ‘1’ enabled
int2_fifo: map Fifo interrupt to INT4 pin: ‘0’ disabled, or ‘1’ enabled
int2_auto_offset: map AutoOffset tap interrupt to INT4 pin: ‘0’ disabled, or ‘1’ enabled
int1_auto_offset: map AutoOffset tap interrupt to INT3 pin: ‘0’ disabled, or ‘1’ enabled
int1_fifo: map Fifo interrupt to INT3 pin: ‘0’ disabled, or ‘1’ enabled
int1_fast_offset: map FastOffset interrupt to INT3 pin: ‘0’ disabled, or ‘1’ enabled
int1_data: map new data interrupt to INT3 pin: ‘0’ disabled, or ‘1’ enabled
Int2_high: map high rate interrupt to INT4 pin: ‘0’ disabled, or ‘1’ enabled
Int2_any: map Any-Motion to INT4 pin: ‘0’ disabled, or ‘1’ enabled
reserved: write ‘0’
Name 0x1A
Bit 7 6 5 4
Read/Write R/W R/W R/W R/W
Reset
0 0 0 0
Value
Content reserved slow_offset_unfilt reserved
Bit 3 2 1 0
Read/Write R/W R/W R/W R/W
Reset
0 0 0 0
Value
Content high_unfilt_data reserved any_unfilt_data reserved
slow_offset_unfilt: ‘1’ (‘0’) seletects unfiltered (filtered) data for slow offset compensation
high_unfilt_data: ‘1’ (‘0’) seletects unfiltered (filtered) data for high rate interrupt
any_unfilt_data: ‘1’ (‘0’) seletects unfiltered (filtered) data for any motion interrupt
reserved: write ‘0’
Name 0x1B
Bit 7 6 5 4
Read/Write R/W R/W R/W R/W
Reset
0 0 0 0
Value
Content fast_offset_unfilt any_th <6:4>
Bit 3 2 1 0
Read/Write R/W R/W R/W R/W
Reset
0 1 0 0
Value
Content any_th <3:0>
fast_offset_unfilt: ‘1’ (‘0’) selects unfiltered (filtered) data for fast offset compensation
any_th: any_th = (1 + any_th(register value)) * 16 LSB
The any_th scales with the range setting
Name 0x1C
Bit 7 6 5 4
Read/Write R/W R/W R/W R/W
Reset
1 0 1 0
Value
Content awake_dur <1:0> any_dursample <1:0>
Bit 3 2 1 0
Read/Write R/W R/W R/W R/W
Reset
0 0 0 0
Value
Content reserved any_en_z any_en_y any_en_x
Name 0x1E
Bit 7 6 5 4
Read/Write R/W R/W R/W R/W
Reset
1 0 0 0
Value
Content fifo_wm_en reserved
Bit 3 2 1 0
Read/Write R/W R/W R/W R/W
Reset
1 0 0 0
Value
Content reserved
fifo_wm_en: ‘1’ (‘0’) enables (disables) fifo water mark level interrupt
reserved: write ‘0’
reset_int: write ‘1’ clear any latched interrupts, or ‘0’ keep latched interrupts
active
write ‘1’ resets internal interrupt status of each interrupt
offset_reset: write ‘1’ resets the Offset value calculated with FastOffset, SlowOffset &
AutoOffset
Bit 3 2 1 0
Read/Write R/W R/W R/W R/W
Reset
0 0 1 0
Value
Content high_th_x <2:0> high_en_x
Bit 3 2 1 0
Read/Write R/W R/W R/W R/W
Reset
0 0 1 0
Value
Content high_th_y <2:0> high_en_y
6 and 7=unused
slow_offset_en_z: ‘1’ (‘0’) enables (disables) slow offset compensation for z-axis
slow_offset_en_y: ‘1’ (‘0’) enables (disables) slow offset compensation for y-axis
slow_offset_en_x: ‘1’ (‘0’) enables (disables) slow offset compensation for x-axis
nvm_remain<3:0>: number of remaining write cycles permitted for NVM; the number is
decremented each time a write to the NVM is triggered
nvm_load: ´1´ trigger, or ‘0’ do not trigger an update of all configuration registers
from NVM; the nvm_rdy flag must be ‘1’ prior to triggering the update
nvm_rdy: status of NVM controller: ´0´ NVM write / NVM update operation is in
progress, ´1´ NVM is ready to accept a new write or update trigger
nvm_prog_trig: ‘1’ trigger, or ‘0’ do not trigger an NVM write operation; the trigger is
only accepted if the NVM was unlocked before and nvm_remain<3:0> is
greater than ‘0’; flag nvm_rdy must be ‘1’ prior to triggering the write cycle
nvm_prog_mode: ‘1’ unlock, or ‘0’ lock NVM write operation
ext_fifo_s_en: enables external FIFO synchronization mode, ‘1’ enable, ‘0’ disable
ext_fifo_s_sel: selects source for external FIFO synchronization
‘1’ source = INT4
‘0’ source = INT3
reserved: write ‘0’
i2c_wdt_en: if I²C interface mode is selected then ‘1´ enable, or ‘0’ disables the
watchdog at the SDI pin (= SDA for I²C)
i2c_wdt_sel: select an I²C watchdog timer period of ‘0’ 1 ms, or ‘1’ 50 ms
spi3: select ´0´ 4-wire SPI, or ´1´ 3-wire SPI mode
offset_x <11:4>: offset value, which is subtracted from the internal filtered and unfiltered x-
axis data; please refer to the following table for the scaling of the offset
register; the content of the offset_x<11:4> may be written to the NVM; it is
automatically restored from the NVM after each power-on or softreset;
offset_x<11:4> may be written directly by the user.
offset_y <11:4>: offset value, which is subtracted from the internal filtered and unfiltered y-
axis data; please refer Table 34 for the scaling of the offset register; the
content of the offset_y<11:4> may be written to the NVM; it is automatically
restored from the NVM after each power-on or softreset; offset_y<11:4> may
be written directly by the user.
For reference see example at GYR Register 0x38 (OFC2)
offset_z <11:4>: offset value, which is subtracted from the internal filtered and unfiltered z-
axis data; please Table 34 for the scaling of the offset register; the content of
GP0<3:0>: general purpose NVM image register not linked to any sensor-specific
functionality; register may be written to NVM and is restored after each
power-up or software reset
offset_x<1:0>: setting of offset calibration values X-channel
offset_y<0>: setting of offset calibration values Y-channel
offset_z<0> setting of offset calibration values Z-channel
GP1<7:0>: general purpose NVM image register not linked to any sensor-specific
functionality; register may be written to NVM and is restored after each
power-up or software reset
Rate ok: ´1´ indicates proper sensor function, no trigger is needed for this
fifo_water_mark_level_trigger_retain<6:0>:
fifo_water_mark_level_trigger_retain<6:0> defines the FIFO watermark level.
An interrupt will be generated, when the number of entries in the FIFO
exceeds fifo_water_mark_level_trigger_retain<6:0>;
fifo_data_select<1:0>:
Table 36: Gyroscope FIFO data selection
fifo_data_output_register<7:0>:
FIFO data readout; data format depends on the setting of register fifo_data_select<1:0>:
if X+Y+Z data are selected, the data of frame n is reading out in the order of
X-lsb(n), X-msb(n), Y-lsb(n), Y-msb(n), Z-lsb(n), Z-msb(n);
if X-only is selected, the data of frame n and n+1 are reading out in the order
of X-lsb(n), X-msb(n), X-lsb(n+1), X-msb(n+1); the Y-only and Z-only modes
behave analogously
In Active Mode and normal operation, in principle any desired balance between output noise
and active time (hence power consumption) can be adjusted by the repetition settings for x/y-
axis and z-axis and the output data rate ODR. The average power consumption depends on the
ratio of high current phase time (during data acquisition) and low current phase time (between
data acquisitions). Hence, the more repetitions are acquired to generate one magnetic field
data point, the longer the active time ratio in one sample phase, and the higher the average
current. Thanks to longer internal averaging, the noise level of the output data reduces with
increasing number of repetitions.
By using forced mode, it is possible to trigger new measurements at any rate. The user can
therefore trigger measurements in a shorter interval than it takes for a measurement cycle to
complete. If a measurement cycle is not allowed to complete, the resulting data will not be
written into the data registers. To prevent this, the manually triggered measurement intervals
must not be shorter than the active measurement time which is a function of the selected
number of repetitions. The maximum selectable read-out frequency in forced mode can be
calculated as follows:
1
f max,ODR
145µs nXY 500µs nZ 980µs
Hereby nXY is the number of repetitions on X/Y-axis (not the register value) and nZ the number
of repetitions on Z-axis (not the register value) (see description of REPXY and REPZ registers
in chapter 10.8).
Although the repetition numbers for X/Y and Z axis and the ODR can be adjusted independently
and in a wide range, there are four recommended presets (High accuracy preset, Enhanced
regular preset, Regular preset, Low power preset) which reflect the most common usage
scenarios, i.e. required output accuracy at a given current consumption, of the magnetometer.
The four presets consist of the below register configurations, which are automatically set by the
magnetometer API or driver provided by Bosch Sensortec when a preset is selected. Table 37
shows the recommended presets and the resulting magnetic field output noise and current
consumption:
Table 37: Recommended presets for repetitions and output data rates
Average current
Max ODR
consumption
Rep. recommended in forced RMS Noise
Rep. Z at
X/Y ODR mode x/y/z
Preset fmax,ODR
recommended
nZ ODR
nXY [Hz] [µT]
[Hz]
[mA]
Low power
3 3 10 >300 1.0/1.0/1.4 0.17
preset
Regular preset 9 15 10 100 0.6/0.6/0.6 0.5
Enhanced
15 27 10 60 0.5/0.5/0.5 0.8
regular preset
High accuracy
47 83 20 20 0.3/0.3/0.3 4.9
preset
The width of the Z-axis magnetic field data is 15 bit word stored in two’s complement.
DATAZ_LSB (0x46) contains 7-bit LSB part [6:0] of the 15 bit output data of the Z-channel.
DATAZ_MSB (0x47) contains 8-bit MSB part [14:7] of the 15 bit output data of the Z-channel.
For all axes, temperature compensation on the host is used to get ideally matching sensitivity
over the full temperature range. The temperature compensation is based on a resistance
measurement of the hall sensor plate. The resistance value is represented by a 14 bit unsigned
output word.
RHALL_LSB (0x48) contains 6-bit LSB part [5:0] of the 14 bit output data of the RHALL-
channel.
RHALL_MSB (0x49) contains 8-bit MSB part [13:6] of the 14 bit output data of the RHALL-
channel.
All signed register values are in two´s complement representation. Bits which are marked
“reserved” can have different values or can in some cases not be read at all (read will return
0x00 in I²C mode and high-Z in SPI mode).
The “Data ready status” bit (register 0x48 bit0) is set “1” when the data registers have been
updated but the data was not yet read out over digital interface. Data ready is cleared (set “0”)
directly after completed read out of any of the data registers and subsequent stop condition
(I²C) or lifting of CSB (SPI).
In addition, when enabled the “Data overrun” bit (register 0x4A bit7) turns “1” whenever data
registers are updated internally, but the old data was not yet read out over digital interface (i.e.
data ready bit was still high). The “Data overrun” bit is cleared when the interrupt status register
0x4A is read out. This function needs to be enabled separately by setting the “Data overrun En”
bit (register 0x4D bit7)).
Note:
Please also see chapter 10.4 for detailed register descriptions.
9.3.2 Magnetic field data temperature compensation
The raw register values DATAX, DATAY, DATAZ and RHALL are read out from the host
processor using the MAGNETOMETER API/driver which is provided by Bosch Sensortec. The
API/driver performs an off-chip temperature compensation and outputs x/y/z magnetic field data
in 16 LSB/µT to the upper application layer:
Software
Application
application level
BMM150
Hardware level
sensor
Figure 21: Calculation flow of magnetic field data from raw magnetometer register data
The API/driver performs all calculations using highly optimized fixed-point C-code arithmetic.
For platforms that do not support C code, a floating-point formula is available as well.
To perform a self test, the sensor must first be put into sleep mode (OpMode = “11”). Self-test
mode is then entered by setting the bit “Self test” (register 0x4C bit0) to “1”. After performing
self test, this bit is set back to “0”. When self-test is successful, the corresponding self-test result
bits are set to “1” (“X-Self-Test” register 0x42 bit0, “Y-Self-Test” register 0x44 bit0, “Z-Self-Test”
register 0x46 bit0). If self-test fails for an axis, the corresponding result bit returns “0”.
9.4.2 Advanced self test
Advanced self test performs a verification of the Z channel signal path functionality and
sensitivity. An on-chip coil wound around the hall sensor can be driven in both directions with a
calibrated current to generate a positive or negative field of around 100 µT.
Advanced self test is an option that is active in parallel to the other operation modes. The only
difference is that during the active measurement phase, the coil current is enabled. The
recommended usage of advanced self test is the following:
1. Set sleep mode
2. Disable X, Y axis
3. Set Z repetitions to desired level
4. Enable positive advanced self test current
5. Set forced mode, readout Z and R channel after measurement is finished
6. Enable negative advanced self test current
7. Set forced mode, readout Z and R channel after measurement is finished
8. Disable advanced self test current (this must be done manually)
9. Calculate difference between the two compensated field values. This difference should
be around 200 µT with some margins.
10. Perform a soft reset of manually restore desired settings
Please refer to the corresponding application note for the exact thresholds to evaluate
advanced self-test.
(0x4C)
Configuration
[Link] <1:0>
00b Normal operation (no self-test), default
01b Reserved, do not use
10b Negative on-chip magnetic field generation
11b Positive on-chip magnetic field generation
When enabled, an interrupt sets the corresponding status bit in the interrupt status register
(0x4A) when its condition is satisfied.
When the “Interrupt Pin Enable” bit (register 0x4E bit6) is set, any occurring activated interrupts
are flagged on the magnetometer’s INT output pin. By default, the interrupt pin is disabled (high-
Z status).
Low-Threshold, High-Threshold and Overflow interrupts are mapped to the INT pin when
enabled, Data Ready (DRDY) interrupt is mapped to the DRDY pin of magnetometer when
enabled. For High- and Low-Threshold interrupts each axis X/Y/Z can be enabled separately for
interrupt detection in the registers “High Int Z en”, “High Int Y en”, “High Int X en”, “Low Int Z
en”, “Low Int Y En” and “Low Int X En” in register 0x4D bit5-bit0. Overflow interrupt is shared for
X, Y and Z axis.
When the “Data Ready Pin En” bit (register 0x4E bit7) is set, the Data Ready (DRDY) interrupt
event is flagged on the magnetometer’s DRDY output pin (by default the “Data Ready Pin En”
bit is not set and DRDY pin is in high-Z state).
The interrupt status registers are updated together with writing new data into the magnetic field
data registers. The status bits for Low-/High-Threshold interrupts are located in register 0x4A,
the Data Ready (DRDY) status flag is located at register 0x48 bit0.
If an interrupt is disabled, all active status bits and pins are reset after the next measurement
was performed.
9.6.1 General features
An interrupt is cleared depending on the selected interrupt mode, which is common to all
interrupts. There are two different interrupt modes: non-latched and latched. All interrupts
(except Data Ready) can be latched or non-latched. Data Ready (DRDY) is always cleared
after readout of data registers ends.
A non-latched interrupt will be cleared on a new measurement when the interrupt condition is
not valid anymore, whereas a latched interrupt will stay high until the interrupts status register
(0x4A) is read out. After reading the interrupt status, both the interrupt status bits and the
interrupt pin are reset. The mode is selected by the “Interrupt latch” bit (register 0x4A bit1),
where the default setting of “1” means latched. Figure 22shows the difference between the
modes for the example Low-Threshold interrupt.
INT and DRDY pin polarity can be changed by the “Interrupt polarity” bit (register 0x4E bit0) and
“DR polarity” (register 0x4E bit2) from the default high active (“1”) to low active (“0”).
Low threshold
a a
measurements
DRDY =’1 ’
Figure 23: Data acquisition and DRDY operation (DRDY in “high active” polarity)
The interrupt mode of the Data Ready (DRDY) interrupt is fixed to non-latched.
It is enabled (disabled) by writing “1” (“0”) to “Data Ready pin En” in register 0x4E bit7.
DRDY pin polarity can be changed by the “DR polarity” bit (register 0x4E bit2), from the default
high active (“1”) to low active (“0”).
9.6.4 Low-threshold interrupt
When the data registers’ (DATAX, DATAY and DATAZ) values drop below the threshold level
defined by the “Low Threshold register (0x4F), the corresponding interrupt status bits for those
axes are set (“Low Int X”, “Low Int Y” and “Low Int Z” in register 0x4A). This is done for each
axis independently. Please note that the X and Y axis value for overflow is -4096. However, no
interrupt is generated on these values. See chapter 10.7 for more information on overflow.
Hereby, one bit in “Low Threshold” corresponds to roughly 6µT (not exactly, as the raw
magnetic field values DATAX, DATAY and DATAZ are not temperature compensated).
The Low-threshold interrupt is issued on INT pin when one or more values of the data registers
DATAX, DATAY and DATAZ drop below the threshold level defined by the “Low Threshold”
register (0x4F), and when the axis where the threshold was exceeded is enabled for interrupt
generation:
Result = (DATAX < “Low Threshold” x 16) AND “Low Int X en” is “0” OR
(DATAY < “Low Threshold” x 16) AND “Low Int Y en” is “0” OR
(DATAZ < “Low Threshold” x 16) AND “Low Int Z en” is “0”
Note: Threshold interrupt enable bits (“Low INT [XYZ] en”) are active low and “1” (disabled) by
default.
Low threshold
a a
measurements
The High-threshold interrupt is issued on INT pin when one or more values of the data registers
DATAX, DATAY and DATAZ exceed the threshold level defined by the “High Threshold”
register (0x50), and when the axis where the threshold was exceeded is enabled for interrupt
generation:
Result = (DATAX > “High Threshold” x 16) AND “High Int X en” is “0” OR
(DATAY > “High Threshold” x 16) AND “High Int Y en” is “0” OR
(DATAZ > “High Threshold” x 16) AND “High Int Z en” is “0”
Note:
Threshold interrupt enable bits (“High INT [XYZ] en”) are active low and “1” (disabled) by
default.
High threshold
a a
measurements
9.6.6 Overflow
When a measurement axis had an overflow, the corresponding data register is saturated to the
most negative value. For X and Y axis, the data register is set to the value -4096. For the Z
axis, the data register is set to the value -16384.
The “Overflow” flag (register 0x4A bit6) indicates that the measured magnetic field raw data of
one or more axes exceeded maximum range of the device. The overflow condition can be
flagged on the INT pin by setting the bit “overflow int enable” (register 0x4D bit6, active high,
default value “0”). The channel on which overflow occurred can by determined by assessing the
DATAX/Y/Z registers.
Registers with addresses from (0x40) up to (0x4A) are read-only. Any attempt to write to these
registers is ignored.
10.2 Register map magnetometer
Register Address Default Value bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
0x71 N/A
0x70 N/A
0x6F N/A
0x6E N/A
0x6D N/A
0x6C N/A
0x6B N/A
0x6A N/A
0x69 N/A
0x68 N/A
0x67 N/A
0x66 N/A
0x65 N/A
0x64 N/A
0x63 N/A
0x62 N/A reserved
0x61 N/A
0x60 N/A
0x5F N/A
0x5E N/A
0x5D N/A
0x5C N/A
0x5B N/A
0x5A N/A
0x59 N/A
0x58 N/A
0x57 N/A
0x56 N/A
0x55 N/A
0x54 N/A
0x53 N/A
0x52 0x00 REPZ Number Of Repetitions (valid for Z) [7:0]
0x51 0x00 REPXY Number Of Repetitions (valid for XY) [7:0]
0x50 0x00 High Threshold [7:0]
0x4F 0x00 Low Threshold [7:0]
0x4E 0x07 Data Ready Pin En Interrupt Pin En Channel Z Channel Y Channel X DR Polarity Interrupt Latch Interrupt Polarity
0X4D 0x3F Data Overrun En Overflow Int En High Int Z en High Int Y en High Int X en Low Int Z en Low Int Y en Low Int X en
0x4C 0x06 Adv. ST [1:0] Data Rate [2:0] Opmode [1:0] Self Test
0x4B 0x01 Soft Reset '1' fixed '0' fixed '0' fixed '0' fixed '0' SPI3en Soft Reset '1' Power Control Bit
0x4A 0x00 Data Overrun Overflow High Int Z High Int Y High Int X Low Int Z Low Int Y Low Int X
0x49 N/A RHALL [13:6] MSB
0x48 N/A RHALL [5:0] LSB fixed '0' Data Ready Status
0x47 N/A DATA Z [14:7] MSB
0x46 N/A DATA Z [6:0] LSB Z-Self-Test
0x45 N/A DATA Y [12:5] MSB
0x44 N/A DATA Y [4:0] LSB fixed '0' fixed '0' Y-Self-Test
0x43 N/A DATA X [12:5] MSB
0x42 N/A DATA X [4:0] LSB fixed '0' fixed '0' X-Self-Test
0x41 N/A reserved
0x40 0x32 Chip ID = 0x32 (can only be read if power control bit ="1")
w/r
w/r accessible
in suspend mode
read only
reserved
10.6 Power and operation modes, self-test, data output rate control registers
Soft reset is executed when both bits (register 0x4B bit7 and bit1) are set “1”. Soft reset does
not execute a full POR sequence, but all registers are reset except for the “trim” registers above
register 0x54 and the power control register (0x4B). Soft reset always brings the device into
sleep mode. When device is in the suspend mode, soft reset is ignored and the device remains
in suspend mode. The two “Soft Reset” bits are reset to “0” automatically after soft reset was
completed. To perform a full POR reset, bring the device into suspend and then back into sleep
mode.
When SPI mode is selected, the “SPI3En” bit enables SPI 3-wire mode when set “1”. When
“SPI3En” is set “0” (default), 4-wire SPI mode is selected.
Setting the “Power Control bit” to “1” brings the device up from Suspend mode to Sleep mode,
when “Power Control bit” is set “0” the device returns to Suspend mode (see chapter 9.2 for
details of magnetometer power modes).
Table 49: Power control, soft reset and SPI mode control register (0x4B)
The two “Adv. ST” bits control the on-chip advanced self-test (see chapter 9.4 for details of the
magnetometer advanced self-test).
The three “Data rate” bits control the magnetometer output data rate according to below Table
51.
The two “Opmode” bits control the operation mode according to below Table 52 (see chapter
9.2 for a detailed description of magnetometer power modes).
Table 50: Operation mode, output data rate and self-test control register (0x4C)
Three “Data rate” bits control the output data rate (ODR) of the magnetometer part:
Two “Opmode” bits control the operation mode of the magnetometer part:
9
See chapter 9.2 for a detailed description of magnetometer power modes.
Table 54: Interrupt settings and axes enable bits control register (0x4E)
Table 58: Numbers of repetition for x/y-axis depending on value of register (0x51)
(0x51) register (0x51) register value Number of repetitions for x- and y-axis each
value (binary) (hex)
00000000b 0x00h 1
00000001b 0x01h 3
00000010b 0x02h 5
00000011b 0x03h 7
… …
11111111b 0xFFh 511
Table 60: Numbers of repetition for z-axis depending on value of register (0x52)
Both digital interfaces share partly the same pins. Additionally each inertial sensor
(accelerometer and gyroscope) provides specific interface pins which allow the user to operate
the inertial sensors independently of each other. The mapping for each interface and each
inertial sensor is given in the following table:
The following table shows the electrical specifications of the interface pins:
tCSB_setup tCSB_hold
CSB
SCK
tSCKL tSCKH
SDI
tSDI_setup tSDI_hold
SDO
tSDO_OD
The SPI interface of the BMX055 is compatible with two modes, ´00´ and ´11´. The automatic
selection between [CPOL = ´0´ and CPHA = ´0´] and [CPOL = ´1´ and CPHA = ´1´] is controlled
based on the value of SCK after a falling edge of CSB (A,G or M).
Two configurations of the SPI interface are supported by the BMX055: 4-wire and 3-wire. The
same protocol is used by both configurations. The device operates in 4-wire configuration by
default. It can be switched to 3-wire configuration by writing ´1´ to (ACC 0x34) spi3 and to (GYR
0x34) spi3. Pin SDI is used as the common data pin in 3-wire configuration.
For single byte read as well as write operations, 16-bit protocols are used. The BMX055 also
supports multiple-byte read operations.
In SPI 4-wire configuration CSB (A,G or M - chip select low active), SCK (serial clock), SDI
(serial data input), and SDO (AM or G - serial data output) pins are used. The communication
starts when the CSB (1 or 2) is pulled low by the SPI master and stops when CSB (A,G or M) is
pulled high. SCK is also controlled by SPI master. SDI and SDO (AM or G) are driven at the
falling edge of SCK and should be captured at the rising edge of SCK.
The basic write operation waveform for 4-wire configuration is depicted in Figure 27. During the
entire write cycle SDO remains in high-impedance state.
CSB
SCK
SDI
R/W AD6 AD5 AD4 AD3 AD2 AD1 AD0 DI7 DI6 DI5 DI4 DI3 DI2 DI1 DI0
SDO Z
tri-state
The basic read operation waveform for 4-wire configuration is depicted in Figure 28:
CSB
SCK
SDI
SDO
Bit0: Read/Write bit. When 0, the data SDI is written into the chip. When 1, the data SDO from
the chip is read.
Bit8-15: when in write mode, these are the data SDI, which will be written into the address.
When in read mode, these are the data SDO, which are read from the address.
Multiple read operations are possible by keeping CSB low and continuing the data transfer.
Only the first register address has to be written. Addresses are automatically incremented after
each read access as long as CSB stays active low.
Start RW Register adress (02h) Data register - adress 02h Data register - adress 03h Data register - adress 04h Stop
CSB CSB
= 1 0 0 0 0 0 1 0 X X X X X X X X X X X X X X X X X X X X X X X X =
0 1
In SPI 3-wire configuration CSB (A,G or M - chip select low active), SCK (serial clock), and
SDI (serial data input and output) pins are used. The communication starts when the CSB is
pulled low by the SPI master and stops when CSB is pulled high. SCK is also controlled by SPI
master. SDI is driven (when used as input of the device) at the falling edge of SCK and should
be captured (when used as the output of the device) at the rising edge of SCK.
The protocol as such is the same in 3-wire configuration as it is in 4-wire configuration. The
basic operation wave-form (read or write access) for 3-wire configuration is depicted in Figure
30.
CSB
SCK
SDI
RW AD6 AD5 AD4 AD3 AD2 AD1 AD0 DI7 DI6 DI5 DI4 DI3 DI2 DI1 DI0
Figure 30: 3-wire basic SPI read or write sequence (mode ´11´)
The I²C interface of the BMX055 is compatible with the I²C Specification UM10204 Rev. 03 (19
June 2007), available at [Link] The BMX055 supports I²C standard mode and
fast mode, only 7-bit address mode is supported. For VDDIO = 1.2V to 1.8V the guaranteed
voltage output levels are slightly relaxed as described in the Parameter Specification (Table 1).
When in I²C mode, the BMX055 will work effectively as three I²C-Slave devices. The BMX055 is
not addressed by a single I²C-Address. Instead, the I²C Master (Application processor) should
use a different I²C-Address for each component (Accel, Gyro and Magnet) depending on the
needed data.
In addition to that, the I²C-Address of each component (Accel, Gyro and Magnet) can be
configured by changing the levels in SDO1, SDO2 and CSB3.
The default I²C address of the accelerometer device is 0011000b (0x18) and of the gyro device
is 1101000b (0x68). It is used if the SDO1 (AM and G) pin is pulled to ´GND´. The alternative
accel address 0011001b (0x19) and/or the alternative gyro address 1101001b (0x69) is
selected by pulling the SDO2 (AM and/or G) pin to ´VDDIO´.
The default I2C address of the magnetic device is 0010000b (0x10). The five MSB are
hardwired to “00100”. Alternative addresses of the magnetic device can be selected fixing the
value of SDO or CSB lines. bit0 can be set to “1” by pulling the SDO1 pin to ´VDDIO´. bit1 can be
set to “1” by pulling the CSB3 line pin to ´VDDIO´.
For all I2C address combination of the BMX055, please refer to the following table.
The timing specification for I²C of the BMX055 is given in Table 64:
SDA
tBUF
tf
tLOW
SCL
tHIGH
tHDSTA tr tHDDAT
tSUDAT
SDA
tSUSTA
tSUSTO
START: Data transmission on the bus begins with a high to low transition on the SDA line while
SCL is held high (start condition (S) indicated by I²C bus master). Once the START signal is
transferred by the master, the bus is considered busy.
STOP: Each data transfer should be terminated by a Stop signal (P) generated by master. The
STOP condition is a low to HIGH transition on SDA line while SCL is held high.
S Start
P Stop
ACKS Acknowledge by slave
ACKM Acknowledge by master
NACKM Not acknowledge by master
RW Read / Write
A START immediately followed by a STOP (without SCL toggling from ´VDDIO´ to ´GND´) is not
supported. If such a combination occurs, the STOP is not recognized by the device.
The sequence begins with start condition generated by the master, followed by 7 bits slave
address and a write bit (RW = 0). The slave sends an acknowledge bit (ACK = 0) and releases
the bus. Then the master sends the one byte register address. The slave again acknowledges
the transmission and waits for the 8 bits of data which shall be written to the specified register
address. After the slave acknowledges the data byte, the master generates a stop signal and
terminates the writing protocol.
Start Slave Adress RW ACKS Register adress (0x10) ACKS Data (0x09) ACKS Stop
S 0 0 1 1 0 0 0 0 0 0 0 1 0 0 0 0 X X X X X X X X P
A read sequence consists of a one-byte I²C write phase followed by the I²C read phase. The
two parts of the transmission must be separated by a repeated start condition (Sr). The I²C write
phase addresses the slave and sends the register address to be read. After slave
acknowledges the transmission, the master generates again a start condition and sends the
slave address together with a read bit (RW = 1). Then the master releases the bus and waits for
the data bytes to be read out from slave. After each data byte the master has to generate an
acknowledge bit (ACK = 0) to enable further data transfer. A NACKM (ACK = 1) from the
master stops the data being transferred from the slave. The slave releases the bus so that the
master can generate a STOP condition and terminate the transmission.
The register address is automatically incremented and, therefore, more than one byte can be
sequentially read out. Once a new data read transmission starts, the start address will be set to
the register address specified in the latest I²C write command. By default the start address is
set at 0x00. In this way repetitive multi-bytes reads from the same starting address are possible.
In order to prevent the I²C slave of the device to lock-up the I²C bus, a watchdog timer (WDT) is
implemented. The WDT observes internal I²C signals and resets the I²C interface if the bus is
locked-up by the BMX055. The activity and the timer period of the WDT can be configured
through the bits (ACC 0x34) plus (GYR 0x34) i2c_wdt_en and (ACC 0x34) plus (GYR 0x34)
i2c_wdt_sel.
Writing ´1´ (´0´) to (ACC 0x34) i2c_wdt_en plus (GYR 0x34) i2c_wdt_en activates (de-activates)
the WDT. Writing ´0´ (´1´) to (ACC 0x34) i2c_wdt_en plus (GYR 0x34) i2c_wdt_se selects a
timer period of 1 ms (50 ms).
Control byte
dummy
Start Slave Adress RW ACKS Register adress (0x02) ACKS
S 0 0 1 1 0 0 0 0 X 0 0 0 0 0 1 0
Start Slave Adress RW ACKS Read Data (0x02) ACKM Read Data (0x03) ACKM
Sr 0 0 1 1 0 0 0 1 X X X X X X X X X X X X X X X X …
… X X X X X X X X X X X X X X X X …
… X X X X X X X X X X X X X X X X P
As illustrated in Figure 34, an interface idle time of at least 2 µs is required following a write
operation when the device operates in normal mode. In suspend mode an interface idle time of
least 450 µs is required.
X-after-Write
Write-Operation X-Operation
12 FIFO Operation
FIFO Mode: In FIFO mode the X, Y and Z acceleration- and rate data of the selected
axes and sensors are stored in the buffer memory. If enabled, a watermark interrupt is
triggered when the buffer has filled up to a configurable level. The buffer will be
continuously filled until the fill level reaches 32 frames for the accelerometer and 100
frames for the gyroscope. When it is full the data collection is stopped, and all additional
samples are ignored. Once the buffer is full, a FIFO-full interrupt is generated if it has
been enabled.
STREAM Mode: In STREAM mode the X, Y and Z acceleration- and rate data of the
selected axes are stored in the buffer until it is full. The buffer has a depth of 31 frames
of accelerometer data and 99 frames of gyro data. When the buffer is full the data
collection continues and oldest entry is discarded. If enabled, a watermark interrupt is
triggered when the buffer is filled to a configurable level. Once the buffer is full, a FIFO-
full interrupt is generated if it has been enabled.
BYPASS Mode: In bypass mode, only the current sensor data can be read out from the
FIFO address. Essentially, the FIFO behaves like the STREAM mode with a depth of 1.
Compared to reading the data from the normal data registers, the advantage to the user
is that the packages X, Y, Z are from the same timestamp, while the data registers are
updated sequentially and hence mixing of data from different axes can occur.
The primary FIFO operating mode is selected with register (ACC 0x3E) <7:6> and (GYR 0x0E)
<7:6> according to Table 65. When reading register (ACC 0x3E) <7:6> and (GYR 0x0E) <7:6>
the current operating mode is given. Writing to (ACC 0x3E) <7:6> and (GYR 0x0E) <7:6> clears
and resets the buffer and resets the FIFO-full and watermark interrupt.
Address: 0x3E
FIFO
bits<7:6> Function
Mode
mode<1:0>
‘00’ (Default) BYPASS buffer depth of 1 frame; old data are discarded
‘01’ FIFO data collection stops when buffer is full
when buffer full: sampling continues, old data
‘10’ STREAM
discarded
‘11’ Reserved
If all axes are enabled, the format of the data read-out from (ACC 0x3F) is as follows:
Frame 1
If only one axis is enabled, the format of the data read-out from (ACC 0x3F) is as follows
(example shown: y-axis only, other axes are equivalent).
Frame 1 Frame 2
If a frame is not completely read due to an incomplete read operation, the remaining part of the
frame is discarded. In this case the FIFO aligns to the next frame during the next read
operation. In order for the discarding mechanism to operate correctly, there must be a delay of
at least 1.5 µs between the last data bit of the partially read frame and the first address bit of
the next FIFO read access. Otherwise frames must not be read out partially.
If the FIFO is read beyond the FIFO fill level zeroes (0) will be read. If the FIFO is read beyond
the FIFO fill level the read or burst read access time must not exceed the sampling time tSAMPLE.
Otherwise frames may be lost.
12.2.2 Data readout Gyroscope
If all axes and tag are enabled, the format of the data read-out from (GYR 0x3F) fifo_data<7:0>
is as follows:
Int. status Bits
Frame 1 ( 8 Bytes)
If only one axis is enabled (and tag is disabled), the format of the data read-out from register
fifo_data<7:0> is as follows (example shown: Y-axis only, other axis are equivalent). The buffer
depth of the FIFO is independent of the fact whether all or a single axis have been selected.
Frame 1 Frame 2
In order to use the EFS capability, any of the gyroscope interrupt pins (INT3 or INT4) can be
reconfigured to act as EFS-pin, but not both. In addition, the EFS-Mode has to be enabled. The
so configured interrupt pin will then behave as an input pin and not as an interrupt pin. The
working principle is shown in below figure:
EFS-pin
0
FIFO Z(0) 0 0 1 1 1 0
The EFS-pin depicted in Figure 35 is the Interrupt pin configured as EFS-Mode. FIFO z(0) is the
least significant bit of the z-axis gyro data stored in the FIFO.
In order to enable the EFS-Mode the register (GYR 0x34) bit<5> must be set to “1”. To select
the INT4 pin as EFS-pin, set the register (GYR 0x34) bit<4> to “1”. To select the INT3 pin as
EFS-pin, set the register (GYR 0x34) bit<4> to “0”.
In this Mode, the least significant bit of the z-axis is used as tag-bit, therefore losing its meaning
as gyroscope data bit. The remaining 15 bits of the z-axis gyroscope data keep the same
meaning as in standard mode.
Once the EFS-pin is set to high level, the next FIFO word will be marked with an EFS-tag (z-
axis LSB = 1). While the EFS-pin is kept at a High level, the corresponding FIFO words would
be always marked with an EFS-tag. After the EFS-pin is reset to low level, the immediate next
FIFO word could still be marked with the EFS-tag and only after this word, the next EFS-tag will
be reset (z-axis LSB=0). This is shown in the above diagram.
The EFS-tag synchronizes external events with the same time precision as the FIFO update
rate. Therefore update rate of the EFS-tag is determined by the output data rate and can be set
from 100Hz up to 2,000Hz. For more information consult the register (GYR 0x10) (BW) in the
register description.
[Link] Interface speed requirements for Gyroscope FIFO use
In order to use the FIFO effectively, larger blocks of data need to be read out quickly.
Depending on the output data rate of the sensor, this can impose requirements on the interface.
The output data rate of the gyroscope is determined by the filter configuration (see chapter 8.2).
What interface speed is required depends on the selected rate.
For an I2C speed of 400 kHz, every filter mode can be used.
2
For an I C speed of 200 kHz, only modes with an output data rate of 1 KHz and below
are recommended.
2
For an I C speed of 100 kHz, only modes with an output data rate of 400 Hz and below
are recommended.
12.3 FIFO Frame Counter and Overrun Flag
The address ACC and GYR 0x0E bits<6:0> (frame_counter<6:0>) indicate the current fill level
of the buffer. If additional frames are written to the buffer although the FIFO is full, the address
ACC and GYR 0x0E bit 7 (overrun flag) is set. If the FIFO is reset, the FIFO fill level indicated in
the frame_counter<6:0> is set to ‘0’ and the overrun flag is reset each time a write operation
happens to the FIFO configuration registers. The overrun bit is not reset when the FIFO fill level
frame_counter<6:0> has decremented to ‘0’ due to reading from the fifo_data<7:0> register.
The FIFO controller has the capability to issue two different interrupt events, the FIFO-full and
the watermark event. Generally the FIFO-full and watermark interrupts are functional in all non-
composite modes, including BYPASS.
In order to enable (disable) the watermark and the FIFO-full- interrupt for the accelerometer the
(ACC 0x17) int_fwm_en bit, the int_ffull_en bit, as well as one or both of the int1_fwm or
Int2_fwm and int1_ffull or Int2_ffull and bits must be set to ‘1’ (‘0’). For the gyroscope, the
fifo_wm_en bit, the fifo_en bit, as well as one or both of the int1_fifo or int2_fifo bits must be set.
Details are given in Table 67 and Table 68.
The watermark interrupt is asserted when the fill level in the buffer has reached the frame
number defined by the water mark level trigger (ACC 0x30) and/or (GYR 0x3D). The status of
the watermark interrupt for the accelerometer may be read back through the address (ACC
0x0A) bit 6 (fifo_wm_int) status bit. For the gyroscope it may be read back through the address
(GYR 0x0A) bit 4 (fifo_int) status bit. Writing to water mark level trigger (ACC 0x30) and/or
(GYR 0x3D) register clears the FIFO buffer.
The FIFO-full interrupt is the second interrupt capability associated with the FIFO. The FIFO-
full interrupt is asserted when the buffer has been fully filled with samples. In FIFO mode this
occurs:
for the accelerometer 32 samples, in STREAM mode 31 samples, and in BYPASS mode
1 sample after the buffer has been cleared.
for the gyroscope 100 samples, in STREAM mode 99 samples, and in BYPASS mode 1
sample after the buffer has been cleared.
The status of the FIFO-full interrupt for the accelerometer may be read back through the
address (ACC 0x0A) bit (fifo_full_int) status bit. For the gyroscope it may be read back through
the address (GYR 0x0A) bit 4 (fifo_int) status bit.
Table 67: Interrupt configuration bits relevant for the accelerometer FIFO controller
Table 68: Interrupt configuration bits relevant for the gyroscope FIFO controller
13.1 Pin-out
The pin-out of the LGA package is shown in Figure 36.
Figure 36: Pin-out top view (left) and Pin-out bottom view (right)
16 CSB1 Digital in SPI chip select accel CSB1 CSB1 DNC (float) **
17 SDO1 Digital out SPI serial data out accel / SDO1 DNC (float) GND
magnet. sensor for default addr.
I²C-Address[0] of accel /
magnet. sensor in I²C mode
see chapter 11.2
18 NC - Not connected Do not connect
19* INT1 Digital out Interrupt pin 1 (accel int #1) Accelerometer INT1 input (do not connect if unused)
20 CSB3 Digital in SPI chip select magnet. CSB3 CSB3 GND
sensor for default addr.
I²C-Address[1] of magnet.
sensor in I²C mode
see chapter 11.2
Accel INT 1
VDDIO VDD
(Do not connect if unused)
Do not connect __
Magnet CS
NC INT1 CSB3
18 19 20
Magnet INT
(Do not connect if unused) 10 9 8
INT5 SCx NC
Do not connect
SCK
GND GND
Accel INT 1
VDDIO VDD
(Do not connect if unused)
__
Do not connect Magnet CS
NC INT1 CSB3
18 19 20
Magnet INT
(Do not connect if unused) 10 9 8
INT5 SCx NC
Do not connect
SCK
GND GND
2
13.4 Connection diagram I C
Accel INT 1
VDDIO VDD VDDIO
(Do not connect if unused)
18 19 20
Magnet INT
(Do not connect if unused) 10 9 8 C1
R1
INT5 SCx NC
Do not connect
SCL
GND GND
14 Package
Example: If the sensor is at rest or at uniform motion in a gravity field and a static magnetic field
according to the figure given below, the output signals are:
az, Bz
ωz N
ax, -By
B
ωy ωx
ay, Bx
force
S
of gravity
The following Table 71 lists all corresponding register output signals on aX, aY, aZ and ΩX, ΩY, ΩZ
and BX, BY, BZ while the sensor is at rest or at uniform motion in a gravity field and subjected to
a constant vertical magnetic field under assumption of a ±2g range setting and a top down
gravity vector as shown above.
Sensor Orientation
o
(gravity vector = o o upright upright
static acceleration vector ,
magnetic vector )
o
0g +1g 0g -1g 0g 0g
Output Signal aX 0LSB +1024LSB 0LSB -1024LSB 0LSB 0LSB
-1g 0g +1g 0g 0g 0g
Output Signal aY -1024LSB 0LSB +1024LSB 0LSB 0LSB 0LSB
0g 0g 0g 0g +1g -1g
Output Signal aZ 0LSB 0LSB 0LSB 0LSB +1024LSB -1024LSB
0.55
18 19 20
0.25
17 1
0.5
16 2
15 3
4.5
14 4
13 5
12 6 1.775
11 7
10 9 8
0.925
3.0
Same tolerances as given for the outline dimensions (chapter 14.1, Figure 40) should be
assumed.
14.5 Marking
Pin 1 identifier • --
Pin 1 identifier • --
The sensor fulfils the lead-free soldering requirements of the above-mentioned IPC/JEDEC
standard, i.e. reflow soldering with a peak temperature up to 260°C.
We recommend to avoid g-forces beyond the specified limits during transport, handling and
mounting of the sensors in a defined and qualified installation process.
This device has built-in protections against high electrostatic discharges or electric fields (e.g.
2kV HBM); however, anti-static precautions should be taken as for any other CMOS
component. Unless otherwise specified, proper operation can only occur when all terminal
voltages are kept within the supply voltage range. Unused inputs must always be tied to a
defined logic voltage level.
For more details on recommended handling, soldering and mounting please contact your local
Bosch Sensortec sales representative and ask for the “Handling, soldering and mounting
instructions” document.
A0 = 4.85
B0 = 3.35
K0 = 1.20
Figure 46: Tape and reel dimensions in mm
Processing direction
Directive 2002/95/EC of the European Parliament and of the Council of 27 January 2003
on the restriction of the use of certain hazardous substances in electrical and electronic
equipment.
While Bosch Sensortec took care that all of the technical packages parameters are described
above are 100% identical for all sources, there can be differences in the chemical content and
the internal structural between the different package sources.
However, as secured by the extensive product qualification process of Bosch Sensortec, this
has no impact to the usage or to the quality of the BMX055 product.
15 Legal disclaimer
The resale and/or use of products are at the purchaser’s own risk and his own responsibility.
The examination of fitness for the intended use is the sole responsibility of the Purchaser.
The purchaser shall indemnify Bosch Sensortec from all third party claims arising from any
product use not covered by the parameters of this product data sheet or not approved by Bosch
Sensortec and reimburse Bosch Sensortec for all costs in connection with such claims.
The purchaser must monitor the market for the purchased products, particularly with regard to
product safety, and inform Bosch Sensortec without delay of all security relevant incidents.
contact@[Link]
[Link]
Authorized Distributor
Bosch:
BMX055