Bosch Sensortec Community

    Showing results for 
    Search instead for 
    Did you mean: 

    BMA456 functionality

    BMA456 functionality

    New Poster

    My questions relate to use of the BMA456 accelerometer. In our application the microcontroller will initiate accelerometer readings via the I2C bus then the micro will be required to enter a low-power mode due to restrictions resulting from battery capacity. I note the BMA456 device includes a FIFO buffer of 1024 bytes, so I was wondering if the device can be programmed such that this memory be configured to store the measured readings ? Then it would cause an interrupt to the microcontroller which would wake and read these stored values via I2C. Ideally we would take 1000 readings, but I don't believe this many can be stored simultaneously ? If one "reading" actually corresponds to obtaining 6 bytes of data (2 bytes each for the x, y and z axes) then 160 readings equates to a total of 960 bytes which can be stored in the FIFO - is this understanding correct assuming only data is stored without any associated headers ?  We program the device to interrupt the micro when the FIFO reaches a level of 960 bytes and of course the acquisition data rate is also programmed so, for example, these readings may be acquired at 12.5Hz (or whatever).  Repeating this process 6 times would result in 960 readings which is near enough to our target of 1000.  I have read the datasheet but don't fully understand the operation hence require confirmation on some points, please, before confirming our hardware design.  I think the alternate to this approach is to take 960, or 1000, individual readings with the microcontroller never entering a sleep mode, but I think that would take much longer and the micro would be consuming more power ?  Thanks


    5 REPLIES 5

    Community Moderator
    Community Moderator

    Hello TMunb,

    BMA456 support total FIFO length 1024 bytes. If you set sensor with 600 bytes watermark level and FIFO headless mode. When ODR is 100 Hz, FIFO frame data(6 bytes per frame) will be filled to FIFO, FIFO watermark interrupt occured until FIFO length reached 600 bytes. This interrupt could triggle host MCU to read FIFO data. Whether host MCU reads or does not read data, FIFO data will be filled into FIFO every 10ms. If host MCU reads data when FIFO watermark interrupt occured, the FIFO length changes from 600 bytes to 0 bytes. If host MCU don't read data when FIFO watermark interrupt occured, the FIFO length will increase from 600 until 1024 bytes are full.

    INT1 or INT2 could be remapped to FIFO watermark interrupt as a hardware interrupt.

    Example code in github didn't demonstrate FIFO watermark interrupt to read FIFO data by hardware interrrupt.
    You could refer attachment example code by reading FIFO data with hardware interrupt.