I will suggest to check the proper delay inside the code for each steps since you are able to achive correct output with step by step running.
Hello again
the procedure to wake up the bno: Suspend Mode --> Config Mode --> NDOF Mode doesnt work in my case. I always have to do Suspend --> Config --> Normal Power Mode --> NDOF. Is this normal? It seems like the error comes from the wake up function but im struggling to find the reason.
this is my function:
void wakeup_bno(void){
/* _First set Config Mode! */
uint8_t reg[2] = {BNO055_OPR_MODE_ADDR, BNO055_OPERATION_MODE_CONFIG};
m_xfer_done = false;
twi_reg_write(BNO055_I2C_ADDR1, reg, 2);
nrf_delay_ms(650);
/* Enter Normal Mode to wake up*/
reg[0] = BNO055_PWR_MODE_ADDR; reg[1] = BNO055_POWER_MODE_NORMAL;
m_xfer_done = false;
twi_reg_write(BNO055_I2C_ADDR1, reg, 2);
nrf_delay_ms(650);
/* Operation Mode */
reg[0] = BNO055_OPR_MODE_ADDR; reg[1] = BNO055_OPERATION_MODE_NDOF;
m_xfer_done = false;
twi_reg_write(BNO055_I2C_ADDR1, reg, 2);
nrf_delay_ms(650);
}
I will suggest you to have only two write of register in the wake up function:
/* Enter Normal Mode to wake up*/
reg[0] = BNO055_PWR_MODE_ADDR; reg[1] = BNO055_POWER_MODE_NORMAL;
m_xfer_done = false;
twi_reg_write(BNO055_I2C_ADDR1, reg, 2);
nrf_delay_ms(650);
/* Operation Mode */
reg[0] = BNO055_OPR_MODE_ADDR; reg[1] = BNO055_OPERATION_MODE_NDOF;
m_xfer_done = false;
twi_reg_write(BNO055_I2C_ADDR1, reg, 2);
nrf_delay_ms(650);