Bosch Sensortec Community

    Showing results for 
    Search instead for 
    Did you mean: 

    Reducing BMI160 Power Consumption Below 100μA with Interrupts Enabled

    Reducing BMI160 Power Consumption Below 100μA with Interrupts Enabled

    New Poster


    I am using the BMI160 and attempting to enable low power mode along with an interrupt on the INT1 pin. Currently, I have set the gyroscope to suspend mode and activated the interrupt. However, the power consumption remains between 250-270 μA, whereas I am aiming to reduce it below 100 μA.

    Here are the steps I followed for initialization:

    1. Write 0xB6 to register 0x7E (soft reset).
    2. Perform a dummy read on 0x7F.
    3. Set the gyroscope to suspend mode by writing 0x14 to register 0x7E.
    4. Enable accelerometer low-power mode by writing 0x12 to register 0x7E.
    5. Set the accelerometer's Output Data Rate (ODR) to 50Hz by writing 0x23 to register 0x40.
    6. Configure interrupts to the INT1 pin using the following registers:
      • Write 0xFF to register 0x55.
      • Write 0xF0 to register 0x56.
      • Write 0x00 to register 0x57.

    Despite these settings, the power consumption has not decreased as expected. Has anyone successfully configured the BMI160 to enable the any-motion interrupt with a power consumption of less than 100 μA? Any advice or guidance would be greatly appreciated.

    3 REPLIES 3

    Community Moderator
    Community Moderator


    Thanks for your inquiry.

    At point #5 in your initialization you may write value of 0x87 to register 0x40 for 50Hz ODR low power mode with no averaging. You also need to add some delay after you write a value to command register.

    Please see the attached "How to generate single-tap interrupt using BMI160 accelerometer.pdf" as an example.



    Thank you for your response. The single and double tap interrupt example has been very helpful and is functioning perfectly. However, my application specifically requires the any-motion interrupt. Could you provide any guidance or instructions on how to configure this type of interrupt on the BMI160?

    Thank you again for your assistance.

    Community Moderator
    Community Moderator


    Here is sample pseudo code for BMI160 accel any-motion interrupt.

    void init_BMI160_ACC(void)


    // basic configurations

    Write value of 0xB6 to register 0x7E;             // soft reset BMI160 to default settings. Both accelerometer and gyroscope are in suspend mode

    Delay 55ms;                                                             // for BMI160 to stabilize

    Write value of 0x12 to register 0x7E;           // set the accelerometer to LPM mode

    Delay 5ms;                                                              // for BMI160 accelerometer to stabilize

    Write value of 0x86 to register 0x40;             // set ODR to 25Hz with no average (14uA), it can be fine tuned.

    // interrupt configuration

    Write value of 0x0A to register 0x53;            // set INT1 as output, active-high, push-pull

    Write value of 0x09 to register 0x54;            // temporarily latch the interrupt for 80ms

    Write value of 0x04 to register 0x55;              // route any-motion interrupt to INT1 pin

    // any-motion configuration

    Write 0x14 to register 0x60;                          // default value for 78.2mg threshold at +/-2g full scale range, it can be fine tuned

    Write 0x00 to register 0x5F;                          // default value for duration of 1 meaning  that as long as there is 1 single slope data which is [a(t+1) - a(t)] is beyond the threshold, any-motion interrupt will be triggered. It can be fine tuned.

    // enable any-motion interrupt

    Write 0x07 to register 0x50;                            // enable any-motion interrupt for all 3 axes