Hello David,
I used the FXL8471Q accelerometer on a FRDM-KL25 board+ MULTIB shield.
If you want to take a look at the schematic, I attached a sample of the hardware below:

If the FXLS8471Q doesn't boot in SPI mode, you can reset the sensor by toggling the RST pin. That's totally normal the INT1 goes to low for 500ns, it indicates that the sensor has successfully complete its reset sequence.
I think your schematic is good, it's probably a software issue.
I suggest you to check your spi communication, can you share your code with us?
The SPI communication with the FXLS8471Q is very specific, did you check the SPI specifications in the datasheet?
A SPI command is 2bytes + DATA. Note that you must specify the Read/Write operation
1st Byte
| bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
|---|
| W/R (Write=1/Read=0 ) | DATA[6] | DATA[5] | DATA[4] | DATA[3] | DATA[2] | DATA[1] | DATA[0] |
2nd Byte
| bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
|---|
| DATA[7] | X (don't care) | X (don't care) | X (don't care) | X (don't care) | X (don't care) | X (don't care) | X (don't care) |
For example if you want to:
- read the WHO_AM_I register you must send through the SPI: 0x0D00 + clocking for response
- write in the CTRL_REG1 : 0xAA00 + value to write into
Here a code snippet of an mbed project I did :
#define FXLS8471Q_CTRL_REG1 0x2A
#define FXLS8471Q_CTRL_REG2 0x2B
#define FXLS8471Q_XYZ_DATA_CFG 0x0E
#define FXLS8471Q_WHO_AM_I 0x0D
#define FXLS8471Q_WHO_AM_I_VAL 0x6A
bool FXLS8471Q::vInit()
{
bool __b_result=false;
uint8_t __u8_temp=0xFF;
_t_spi.frequency(1000000);
/* 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
/* Configure the sensor */
if(bWrite(FXLS8471Q_CTRL_REG1 ,0x0)) //Standby mode
if(bWrite(FXLS8471Q_XYZ_DATA_CFG,0x2)) //0.976mg/LSB
if(bWrite(FXLS8471Q_CTRL_REG2 ,0x01)) //Low noise
if(bWrite(FXLS8471Q_CTRL_REG1 ,0x01)) //Set ODR to 800Hz & active mode
{
__b_result= true;
}
return __b_result;
}
bool FXLS8471Q::bWrite(uint8_t __u8_register, uint8_t __u8_InValue)
{
uint8_t __au8_txBuffer[3];
bool __b_result = false;
__au8_txBuffer[0] = (__u8_register&0x7F) | (0x1<<7);
__au8_txBuffer[1] = __u8_register&0x80;
__au8_txBuffer[2] = __u8_InValue;
_t_cs = 0;
_t_spi.write( (__u8_register&0x7F) | (0x1<<7) ) ;
_t_spi.write(__u8_register&0x80);
_t_spi.write(__u8_InValue) ;
_t_cs = 1;
__b_result = true;
return __b_result;
}
bool FXLS8471Q::bRead(uint8_t __u8_register, uint8_t* __au8_OutValue,uint8_t __u8_length)
{
uint8_t __au8_txBuffer[2];
bool __b_result = false;
uint8_t __u8_i;
__au8_txBuffer[0] = (__u8_register&0x7F) | (0x0<<7);
__au8_txBuffer[1] = __u8_register&0x80;
_t_cs = 0;
_t_spi.write( (__u8_register&0x7F) | (0x0<<7) ) ;
_t_spi.write(__u8_register&0x80);
for(__u8_i=0;__u8_i<__u8_length;__u8_i++)
{
__au8_OutValue[__u8_i] = _t_spi.write(0x00) ;
}
_t_cs = 1;
__b_result = true;
return __b_result;
}
I hope it helps you.
I will come back to you about the SPI/I²C mode auto-detection.
Anthony