IMU sensor LSM6DSV FIFO Timestamp drift
We are observing that LSM6DSV FIFO Timestamp is drifting at a constant rate when Gyro sensor is enabled.
Our Implementation
We are using 6-axis IMU sensor LSM6DSV with st_lsm6dsvx driver from ST GitHub and integrated with OSD32MP157 SiP.
We've modified the original driver to configure the sensor as follows:
- Configure the ODR-triggered mode as per sec 3.3 of Application note AN5922.
- Configure the Timestamp resolution by using the INTERNAL_FREQ_FINE register value and formula as per sec 6.4 of Application note AN5922.
- Configure the accel and gyro to operate in one of the following power modes:
High-accuracy ODR mode at 25Hz as per Table 11 and Table 14 of Application note AN5922.
ODR-triggered mode at 25Hz as per Table 15 of Application note AN5922.
We've NOT configured the actual ODR using the INTERNAL_FREQ_FINE register value as we are using ODR-triggered mode. The selected ODR for both accel and gyro is set to 25 Hz.
For ODR-triggered mode, we generate an External reference signal as per Figure 2 of Application note AN5922.
For High-accuracy ODR mode, no External reference signal is generated.
Our Experiment and Observations
First we tested with ODR-triggered mode and saw drift on both Hardware and Software timestamp.
Next we tested with High-accuracy ODR mode and see following observations
- We don't see any timestamp drift when Accel alone is enabled.
- We see a constant drift when gyro alone or both accel and gyro are enabled.
Following plots are from the experiment we ran with High-accuracy ODR mode with only accel at the beginning, and as you can see there is no drift during this period.
We activated the gyro and you can see a visible constant drift comes right after the activation of gyro.
These plots are FIFO timestamp vs system clock.
The first plot is for the IIO_CHAN_SOFT_TIMESTAMP (hw->tsample).
The second plot for the same experiment is for the IIO_CHAN_HW_TIMESTAMP (hw->hw_timestamp_global).


Currently, we are getting the following drifts with the activated sensors:
- Accel-only: zero drift
- Gyro-only: a constant negative drift
- Both Accel and Gyro activated: a negative drift bigger than the last case in absolute terms.
It’s possible that a mutex or lock alone may not be the cause of this. One variable that could compensate for the drift (and it does so for accel-only case) is the Timestamp resolution calculated based on INTERNAL_FREQ_FINE register value.
We would like to get the confirmation from the ST that INTERNAL_FREQ_FINE register value is calibrated for the device and not the sensor-based (Accel)
Any help resolving this timestamp drift is much appreciated.
/Farid.
