I am using BOSCH BMI160 Gyro/Accelerator sensor.
After applying everything according to BOSCH instruction how to use and operate this sensor I have strange behavior regarding Sensor time register.
According to BMI160 specification (attached) there is sensor time register that increase its value every 39usec, this register is 24bit, and according to spec i will have unique timer value during 10Hr.
I try to read this register every 1sec, and my expectation is that delta between the reading should be around 1sec/39usec ~= 25600 .
from the attached file LiveWatch_20200619.log (which is text file possible to open with notepad or excel) you can see this reading that are going up and down and not only up.
I also attached the bmi160.c and bmi160_api.c files that I download them from Bosch github link.
In addition I attached the main.c file where you can see from line 321 to 339 the reading process.
Please support me with this issue.
Solved! Go to Solution.
We tried to use our BMI160 shuttle board + APP2.0 base board to just read 3 bytes timestamp registers to analyze the sensor time. We read the registers every 1sec, and here is the result,
1. Delta between the reading around is about 25600
2.Time is always going up until timer register(0x18 0x19 0x1A) value are reached 0xFFFFFF
3. Timer registers value reach 0xFFFFFF, then value will be cleaned and start counting at 0x00000 again
Your code is complex and maybe there is some setting or logic not right caused this abnormal behavior,
Please try to just read our times resister value with your new simple code.
this is my code: I am using STM32F769NI with BMI160 sensor
struct bmi160_sensor_data accel;
struct bmi160_sensor_data gyro;
static new_data_t sd_data0[SAMPLE_COUNT][BMI160_COUNT];
for(int k = 0; k < SAMPLE_COUNT; k++)
for(uint32_t i = 0; i < BMI160_COUNT; i++)
if ( BMI160_Read(0, &sd_data0[k][i].accel, &sd_data0[k][i].gyro) != BMI160_OK)
if (k == 0)
if ( BMI160_ReadReg(i, 0x20, temp, 2) != BMI160_OK)
sd_data0[k][i].temperature = (temp << 😎 | temp;
sd_data0[k][i].temperature = 0xFFFF;
I can read the data from the sensors but when I check it it look wrong, the sensor time counter should always go up, but what I recieve is that the timer going up and down.
In addition I buy the APP2.0 board and tested the BMI160 shuttle board, in the BOSCH gui everything look ok and the value looks correct.
also attached zip files with the BMI160 folder code that i downloaded in github.
Can you maybe point to me what wrong with my code ?
Thanks for your code. Which interface are you using STM32 MCU to talk to BMI160 I2C or SPI? I think the issue may happen during I2C or SPI communication when you read three bytes time stamp registers. The data you get from BMI160 may get coruupted so that the time stamp values go up and down sometimes instead of going up always. If you use a USB logic analyzer to capture the I2C or SPI communication, then you should be able to find out the root cause of the issue.