Bosch Sensortec Community

    Showing results for 
    Search instead for 
    Did you mean: 

    Problem initializing BMI085 Data Synchronization

    Problem initializing BMI085 Data Synchronization


    I have a problem with the BMI085, using your github drivers I put together a simple test program that prints out synchronized data using interrupts.  This worked fine.

    Then I transferred the driver and setup code over to a larger application (without changes) and now the setup doesn't work.  It appears to be doing everything correctly but I get no interrupts from the BMI085 (verrified with a logic analyzer).  I used the logic analyzer to capture the entire setup transaction from both programs and they are identical except for one exchange early on which seems to reference registers I can't find documentation for.  I think this is happening when it is uploading the synchronization config file.

    In the application that works right, I see this on the SPI

    Packet ID MOSI MISO

    11 0x5E 0x5E
    11 0xC8 0x40
    11 0x2E 0x00
    12 0x5B 0x00
    12 0x01 0x00

    In the one that fails I see this

    Packet ID MOSI MISO

    11 0x5E 0x5E
    11 0xC8 0xC8
    11 0x2E 0x2E
    12 0x5B 0x08
    12 0x01 0x00

    These appear to be writing registers at 5E and 5B and getting back different results.  Everything else sent to/from the chip is identical for both programs.

    Any ideas on what this is?  I'm still digging into it.  The code on both setups are the same but the timing of the SPI transactions is probably slightly different between the two programs.  The larger program (that fails) has some background tasks going like WiFi and such.

    I can send more details if that would help.



    5 REPLIES 5

    Community Moderator
    Community Moderator

    0x5E and 0x5B is internal DMA register used for downloading the configure string for enabling the synchronization feature.

    If there is error happened during download configure string, then you are not able to get interrupt for synchronized sensor data.

    Please check if you have same block size capability on each platform. 

    Occasional Contributor

    Hi ,

    1. It seems burst write configure data to Sensor has problem
    2. Please make sure burst write initialization data(load configuration file) to Register 0x5E , no interrupt
    3. Optional : burst read configuration file from register 0x5E and check correctness.
    4. Wait till register 0x2A=0x01 means initialized ok. or check the error code
    5. offer the logic analyzer waveform file from power on to issue happens1.png


    Hi Vincent,

    Both my tests (the one that worked and the one that didn't) were on exactly the same piece of hardware, an ESP32 microcontroller with a BMI085 connected to the SPI port.  The the driver test code (which worked) was moved into a larger data acquisition program without changes, and that fails.  The hardware is using an ESP32 microcontroller.  The only difference I can think of is that the larger program has wifi enabled, so their might be some slight timing differences or differences in the activity on the ESP32's two cores.

    There does not appear to be any problems with the logic analyzer traces other than the small difference I mentioned in my original post.

    The SPI interface was set at 4mhz, I tried taking it down to 1mhz but there was no change.

    If there is some way of detecting a download error it would be really handy.  In my case what ever is happening is happening every single time when I try to start the BMI085 using my larger program.

    As I said, the BMI085 driver code and initialization is the same in both the test program and the data acquisition one and, except for the small difference I mentioned earlier, the two logic analyzer traces look identical.

    Hi shellywang,

    I will try to do some more tests with your information.

    Where did you get information on registers 0x5e, 0x5b and 0x2a?  All these registers are listed as reserved in the datasheet I have, there is no documentation.  Is there some other documentation on this that I have missed?