Hi,
Thanks for your inquiry and sorry for the confusion about BMI270 data conversion.
In BMI270 datasheet at https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bmi270-ds000.pdf, page 12 defines the accel sensitivity of 16384LSB/g (or 0.061mg/LSB) at +/-2g full scale range and page 14 defines gyro sensitivity of 16.384LSB/dps (or 0.061dps/LSB) at +/-2000dps full scale range. Once you get signed integers from accel data registers from 0x0C to 0x11 and signed integers from gyro data registers from 0x12 to 0x17, you can simply multiply the signed integers by the sensitivity to get the meaningful values for accel and gyro.
For example, BMI270 eval. board is being rotated randomly in 3D space. The data registers' values are captured at random time point as shown below.
Below is an example how to convert BMI270 accel and gyro raw data to meaningful values in the unit of g and dps.
Ax = [(0x0D << 😎 | 0x0C] = 0x1655 = 5717LSB = 5717 * 0.061mg/LSB = 348.7mg = 0.3487g
Ay = [(0x0F << 😎 | 0x0E] = 0xFF48 = -0x00B8 = -184LSB = -184 * 0.061mg/LSB = -11.2mg = -0.0112g
Az = [(0x011 << 😎 | 0x10] = 0x429F = 17055LSB = 170557 * 0.061mg/LSB = 1040.4mg = 1.0404g
Gx = [(0x13 << 😎 | 0x12] = 0x0148 = 328LSB = 328 * 0.061dps/LSB = 20.008dps
Gy = [(0x15 << 😎 | 0x14] = 0xFD08 = -0x02F8 = -760LSB = -760 * 0.061dps/LSB = -46.36dps
Gx = [(0x17 << 😎 | 0x16] = 0x05E7 = 1511LSB = 1511 * 0.061dps/LSB = 92.171dps
On page 93 of BMI273 datasheet, you see the following,
Since no-motion interrupt threshold is represented by 11 bits which is from bit 0 to bit 10, this gives total 2048LSBs to cross the range from 0g to 1g. Then the sensitivity of no-motion threshold = 1000mg / 2048LSB = 0.488mg/LSB. So the default value of 0x90 = 144LSB * 0.488mg/LSB = 70.3mg. That is the reason why "Default value is 0x90 = 70mg." as shown above.
Thanks.
... View more