Hello Carlos,
Can you share your FXLS8471 configuration?
I also would like to take a look at your drain function which empty the FIFO.
Here my configuration if you want to compare:
// CONFIG
#define FXLS8471Q_CTRL_REG1 0x2A
#define FXLS8471Q_CTRL_REG2 0x2B
#define FXLS8471Q_CTRL_REG3 0x2C
#define FXLS8471Q_CTRL_REG4 0x2D
#define FXLS8471Q_CTRL_REG5 0x2E
#define FXLS8471Q_XYZ_DATA_CFG 0x0E
// ID
#define FXLS8471Q_WHO_AM_I 0x0D
#define FXLS8471Q_WHO_AM_I_VAL 0x6A
// FIFO
#define FXLS8471Q_F_SETUP 0x09
#define FXLS8471Q_F_STATUS 0x00
bool FXLS8471Q::vInit()
{
bool __b_result=false;
uint8_t __u8_temp=0xFF;
/* Check presence of the sensor to prevent SPI issues*/
if(bRead(FXLS8471Q_WHO_AM_I,&__u8_temp,1))
if(__u8_temp == FXLS8471Q_WHO_AM_I_VAL) //Check Sensor ID answer
/* Confugre the sensor */
if(bWrite(FXLS8471Q_CTRL_REG1 ,0x0)) //Standby mode
if(bWrite(FXLS8471Q_XYZ_DATA_CFG,0x2)) //0.976mg/LSB
/* Configure the FIFO */
if(bWrite(FXLS8471Q_F_SETUP ,0x80)) // FIFO mode2 : stops accepting new samples when overflowed
/* Configure the FIFO interrupt */
if(bWrite(FXLS8471Q_CTRL_REG3 ,0x82)) // FIFO, interrupt active high (rising event)
if(bWrite(FXLS8471Q_CTRL_REG4 ,0x40)) // FIFO interrupt enabled
if(bWrite(FXLS8471Q_CTRL_REG5 ,0x40)) // FIFO interrupt pin routed to INT1
if(bWrite(FXLS8471Q_CTRL_REG1 ,0x11)) //Set ODR to 400Hz & active mode
{
__b_result= true;
}
return __b_result;
}
#define FXLS8471Q_OUT_X_MSB 0x01
bool FXLS8471Q::bGetFIFOAccelData(int16_t __aai16_AccelData[32][3])
{
uint8_t __au8_Buffer[192];
int16_t __i16_SingleData;
uint8_t __u8_i,__u8_j;
bool __b_result;
if(__b_result = bRead(FXLS8471Q_OUT_X_MSB,(uint8_t*)__au8_Buffer,192))
{
for(__u8_i=0;__u8_i<32;__u8_i++)
{
for(__u8_j=0;__u8_j<3;__u8_j++)
{
__i16_SingleData = (int16_t)( (__au8_Buffer[__u8_j*2+__u8_i*6]<<8) + __au8_Buffer[__u8_j*2+__u8_i*6+1]);
__aai16_AccelData[__u8_i][__u8_j] = (int16_t)( ((float)__i16_SingleData)/4.0);
}
}
}
return __b_result;
}
Give me more information about your issues.
Thanks,
Anthony