Bosch Sensortec Community

    Showing results for 
    Search instead for 
    Did you mean: 

    BNO 055, do these values have a special meaning? Crashes of I2C bus after resetting

    BNO 055, do these values have a special meaning? Crashes of I2C bus after resetting


    Firstly, do the following values, coming from the magnetometry readings and accelerometer readings have some special meaning, I've seen them occur during the crashes I'll later describe, they clearly aren't related to actual readings (>240 uT vertical is absurd as is a 19m/s^2 sideways acceleration in my application) so are they the BNO 055 reporting an error status:

    Mag x=0, y=320, z=240.19, Acc x=19.62, y=5.68, z=0


    Mag x=-16, y=335.94,z=240.19, Acc x=19.62, y=5.68, z=0

    These values are being shown after processing the raw I2C readings in the following way, where the buufer starts at 0x08 and 0x0E for Acc and Mag respectively.

    x = ((int16_t)buffer[0]) | (((int16_t)buffer[1]) << 8);
    y = ((int16_t)buffer[2]) | (((int16_t)buffer[3]) << 8);
    z = ((int16_t)buffer[4]) | (((int16_t)buffer[5]) << 8);

    and then the magnetometry readings divided by 16 and the accelerometry ones by 100


    Also, what does the BNO 055 do to the I2C bus and other devices on it during a reset? I'm getting some very severe problems.

    I also find that when other devices on the I2C bus give a NACK of any kind to an I2C reading the BNO 055 seems to hang? And any time that other devices on the bus, when the BNO 055 is not being communicated with have to have their I2C systems reset via 9 toggles of the SCL clock line this too seems to affect the BNO 055.

    When in AccMag mode how long does the BNO take to recover from a reset? I know that given this use of it I probably should have used a simpler magnetometer accelerometer chip than a BNO 055, but I too far in to a design to go back due to things such as pinout arrangements.


    1 REPLY 1

    Community Moderator
    Community Moderator


    Thanks for your inquiry.

    The values in registers 0x08 ~ 0x0D are accel raw data which are signed integers. The sensitivity is 1LSB/mg at all full scale ranges. after you get

    x = ((int16_t)buffer[0]) | (((int16_t)buffer[1]) << 8);
    y = ((int16_t)buffer[2]) | (((int16_t)buffer[3]) << 8);
    z = ((int16_t)buffer[4]) | (((int16_t)buffer[5]) << 8);

    Acc_x = x/1mg/LSB; // for example if you get x=900; then Acc_x = 900mg = 0.9g = 0.9*9.81m/s^2

    Acc_y = y/1LSB/mg; // for example if you get y=-25, then Acc_y = -25mg = -0.025g = -0.25*9.81m/s^2

    Acc_z = z/1LSB/mg; // for example if you get z=125, then Acc_z = 125mg = 0.125g = 0.125*9.81m/s^2

    The values in registers 0x0E ~ 0x13 are magnetometer raw data which are signed integers. There is no sensitivity to convert signed integers to uT like the accel. So after you get x/y/z values from registers 0x0E ~ 0x13 you need to call function to get magnetometer values in uT from BNO055 API source code online at

    It takes BNO055 about 650ms from reset to config mode. This means that after reset BNO055 you need to wait at least 650ms or 1s to be safe before you talk to BNO055 through I2C bus.