We are configuring the BNO055 to run on NDOF mode. The BNO is setup to run on its internal crystal. FW version 03.14
We are polling using the UART interface, 24 bytes every 50ms.
Occationaly we are getting an 0x07 BUS_OVER_RUN_ERROR which on datasheet is explained as "The BNO055 was not able to clear the receive buffer in time for the next senddata, this can happen, since UART is an asynchronous protocol"
However we are not transmitting a data read command if no response is received from previus read command. So the question is how is the BUS_OVER_RUN posible? We are waiting for the BNO to reply every single time and we get to a point the tha reply is 0xEE 0x07. After this the BNO055 seams to restore operation after 100 to 400 ms. (Does this mean the BNO has for some reason reset?)
Is this over run happened only for reading data from BNO055?
the potential reason is internal MCU is busy with fusion data calculation with high pirority so it is not response to UART bus interrupt on time.
Then the MCU will report bus over load.
After internal computation done, this error status will be clear automatically.
The NDOF mode needs magnetic sensor, and runs under 100Hz. Accel + gyro data rate is set also to 100Hz but magnetic data is 20Hz means every 50ms, BNO need more time to calculate the fusion data with magnetic data input.
It also matched your output data rate as 50Hz.
That is my assumption here.
No, it doesn't have performance difference to run with internal or external crystal on this point.
But we are also trying to find out a workaround for this issue now.
Will keep you updated.
We checked, there is no wor around to avoid the 0x07 output while using UART since it is Async transmition mode.
The only work around is resend the read command when you receive 0x07 response. it should successful in second try.
Also you can try to upgrade our BNO055 FW to 03.14 or higher version. Then you will have INT_STA which is the data ready interrupt. With this interrupt, you will know the fusion calculaiton is done. then you submit read command, it should not meet overrun error.