During my work with the BNO055 chip I came across an interesting behavior for which I can’t find any explanation in the data-sheet (BST-BNO055-DS000-14 Revision 1.4 June 2016).
The problem is related to the settings of Power Mode, register 0x3e. According to my findings the value of the Operation Mode is not brought back when Power Mode goes through the transition NORMAL → SUSPEND → NORMAL.
In my test case it can be seen an Operation Mode, register 0x3d, having the value 0x0c before the transition, but 0x00 after. I would have anticipated having the 0x0c back, but not. I can’t find any documented reason for this behavior, so please give some clarification.
The data-sheet says:
3.2.3 Suspend Mode
In suspend mode the system is paused and all the sensors and the microcontroller are put
into sleep mode. No values in the register map will be updated in this mode. To exit from
suspend mode the mode should be changed by writing to the PWR_MODE register (see
And also in Table 4-8 suspend mode is mentioned;
Idle time between write accesses, suspend mode, low-power mode
tIDLE_wacc_sum 450 µs
My set-up is attached together with a communication trace.
The actual test is to be found after the heading: ######################### Test case begin #################.
The initial part is output from the : ‘bno055_data_readout_template’.
Furthermore, there is an inconsistency between the recommended delay times when changing the Operation Mode in the data-sheet and your code.
The former says:
Table 3-6: Operating mode switching time
From CONFIGMODE 7ms
Any operation mode 19ms
The latter gives 20ms and 600ms, respectively.
I assume the code is correct...
Looking forward hearing from you!
Solved! Go to Solution.
The register 0x3D contains the working mode of sensor and we expect all setting changes can only happen in "Config mode". The register write happened under non "config mode" will have different values when you read back.
When sensor power on, the default value is "config mode" and "normal mode".
450 us is the mandatory delay after each bus write function in lower power mode and suspend mode.
7 ms is the sensor start up time.
They are different meaning.
I saw the attachment but i need to add comment as following:
1. any power mode change or other change are expected to do only under "config mode". if you operate sensor in "NDoF" mode, and try to change sensor settings, it will not take effect. you write some value but will read out previous value. Even in your log, you change the power mode value in register with correct read out value, the sensor behavior is also always correct. So it is highly recommend to do any change only under "config mode".
2. in API, we give more delay because of the sensor power mode change need extra delay inside. the MCU mode change only needs 7 ms and 19 ms as indicate in datasheet. but the physical sensor unit inside needs more time if it is related to any power mode change. to keep API safe, we use enough delay inside.
I floated the topic since I have a follow-up question regadring this disparity in the delay values. You write that the 600ms delay is to ensure that the API is safe to use. Could you then specify what is the minimal delay value at which the sensor is able to operate safely?
I ask this question since I am planning to utilize Any-Motion interrupt functionality for Accelerometer and Gyroscope. multiple calls to enable the interrupt for each axis of the accelerometer as well as the gyroscope bno055_set_accel_any_motion_no_motion_axis_enable cause a significant delay for my system which is undesirable. Therefore the question of what is the minimal delay value for changing operational modes to config mode.
In advance thank you for the reply.