cancel
Showing results for 
Search instead for 
Did you mean: 

Algoritm reading FIFO LIS3DH

MegaVolt
Associate

In my project, I used the LIS3DH chip. Most of the time the processor sleeps.

The processor wakes up on time and on exceeding the shock threshold.

In case of awakening on shock threshold, I need to read the data from the FIFO buffer (32 measurements) that were before the wake-up signal

and a series of measurements (600-32) after waking up.

How could I do this?

Now I am reading the measurements while waiting for the ZYXDA register ready bit STATUS_REG(27h) set. FIFO always enabled in Stream mode.

But this metod may not work when reading the FIFO part of the measurements. Should I change the read algorithm when reading data from FIFO?

I think this is the algorithm:

1. Read FIFO 32 measurements on wakeup by observing the EMPTY bit of the FIFO_SRC_REG(2Fh) register

2. Disable FIFO by resetting FIFO_EN register CTRL_REG5(24h)

3. Read 600 - 32 measurements waiting for ZYXDA bit STATUS_REG(27h)

Or is it possible somehow easier?

In the DocID17530 Rev 2 and AN3308 documentation, I did not find an answer to the question of how the ZYXDA bit of the STATUS_REG (27h) register behaves when reading FIFO

1 ACCEPTED SOLUTION

Accepted Solutions
MegaVolt
Associate

Thanks for the answer. Yes, the example reads the FIFO level and then reading the same number of measurements. In my opinion, I did it easier - I read FIFO before setting the FIFO EMPTY bit to really bit (�? does not participate in the exchange with FIFO. And in fact, bit ZYXDA does not participate in the exchange with FIFO.

View solution in original post

2 REPLIES 2
Eleon BORLINI
ST Employee

Hi @MegaVolt​ ,

I believe the described algorithm could be correct. The STATUS_REG(27h) is described in the datasheet p.39, the ZYXDA is basically the data ready flag.

0693W00000QOKICQA5.pngI also suggest you to check the C code on Github --> lis3dh_multi_read_fifo.c

-Eleon

MegaVolt
Associate

Thanks for the answer. Yes, the example reads the FIFO level and then reading the same number of measurements. In my opinion, I did it easier - I read FIFO before setting the FIFO EMPTY bit to really bit (�? does not participate in the exchange with FIFO. And in fact, bit ZYXDA does not participate in the exchange with FIFO.