A little more detail... the device is on an Adafruit breakout board, and I'm using their library. This is the initialization routine they use that works for me. If I use the simple method referenced in the manual, the device won't lock up and I had to go through the manual cal process which isn't practical in my application. I also tried adding delays between and after the three line process you suggested to no avail. This is what works. /* Switch to config mode (just in case since this is the default) */ setMode(OPERATION_MODE_CONFIG); /* Reset */ write8(BNO055_SYS_TRIGGER_ADDR, 0x20); /* Delay incrased to 30ms due to power issues https://tinyurl.com/y375z699 */ delay(30); while (read8(BNO055_CHIP_ID_ADDR) != BNO055_ID) { delay(10); } delay(50); /* Set to normal power mode */ write8(BNO055_PWR_MODE_ADDR, POWER_MODE_NORMAL); delay(10); write8(BNO055_PAGE_ID_ADDR, 0); /* Set the output units */ /* uint8_t unitsel = (0 << 7) | // Orientation = Android (0 << 4) | // Temperature = Celsius (0 << 2) | // Euler = Degrees (1 << 1) | // Gyro = Rads (0 << 0); // Accelerometer = m/s^2 write8(BNO055_UNIT_SEL_ADDR, unitsel); */ /* Configure axis mapping (see section 3.4) */ /* write8(BNO055_AXIS_MAP_CONFIG_ADDR, REMAP_CONFIG_P2); // P0-P7, Default is P1 delay(10); write8(BNO055_AXIS_MAP_SIGN_ADDR, REMAP_SIGN_P2); // P0-P7, Default is P1 delay(10); */ write8(BNO055_SYS_TRIGGER_ADDR, 0x0); delay(10); /* Set the requested operating mode (see section 3.3) */ setMode(mode); delay(20); // write the cal registers SetSensorCal(); delay(1000); setExtCrystalUse(true);
... View more