Unable to perform multi-byte SPI; Single OK
Hello -
Board - STM32 NUCLEO-L476G
Peripheral board ADXL313 (16 byte data registers)
Interface - SPI
I can perform single byte read, combine the 2, 8 bit values and the data is correct. Yet, when I try to perform a 2 byte SPI read, it's garbage.
This works:
uint8_t ADXL313_ReadRegister(uint8_t reg)
{
uint8_t rxData[1];
uint8_t txVal[1];
txVal[0] = (reg | 0x80);
ACC_CS_ASSERT(); // low
HAL_SPI_Transmit(&hspi3, txVal, 1, HAL_MAX_DELAY);
HAL_SPI_Receive(&hspi3, rxData, 1, HAL_MAX_DELAY);
ACC_CS_DEASSERT(); //high
return rxData[0];
}
int16_t ADXL313_ReadDataRegister( uint8_t reg)
{
uint8_t data0 = ADXL313_ReadRegister(reg);
reg += 1;
uint8_t data1 = ADXL313_ReadRegister(reg);
return (int16_t)((data1 << 8 | data0 );
}
Using above data values are correct when doing to separate 1 byte reads and combining
But this...does NOT work:
void ADXL313_ReadDataRegister(int16_t *data)
{
uint8_t txData[1];
uint8_t rxData[2];
txData[0] = ADXL313_REG_DATAX0 | 0x80; // 0x80 to indicate read operation
ACC_CS_ASSERT(); //low
HAL_SPI_Transmit(&hspi3, txData, 1, HAL_MAX_DELAY);
HAL_SPI_Receive(&hspi3, rxData, 2, HAL_MAX_DELAY); //set for 2 byte read
ACC_CS_DEASSERT(); //high
// Combine 2 registers for data
*data = (int16_t)((rxData[1] << 8 | rxData[0]); //DATA IS NOT GOOD
}
Can someone provide feedback on what the issue might be?
Thanks!
