Question
LIS2D12
I use LIS2DS12
This is my init function
void LIS2DS12_Init(void)
{
uint8_t ctrl_1 = 0x72; //0111 for 6.4kHz ODR [7:4], 00 for 2g [3:2], 1 for high frequency available[1], 0 for BDU not activated [0]
uint8_t ctrl_2; // [6] for soft_reset, [1] for disable I2C, [0] for 4 wires SPI
HAL_StatusTypeDef ret;
ret = spi_read_LIS2DS12(CTRL2_ADDR, &ctrl_2);
ctrl_2 |= 0x42; // [6] for soft_reset, [1] = 1 for disable I2C, [0] = 0 for 4 wires SPI
ret = spi_write_LIS2DS12(CTRL2_ADDR, &ctrl_2);
//reset the accelerometer
ret = spi_write_LIS2DS12(CTRL1_ADDR, &ctrl_1);
//set the accelerometer to measurement mode
spi_read_LIS2DS12(CTRL1_ADDR, &ctrl_1);
spi_read_LIS2DS12(CTRL2_ADDR, &ctrl_2);
}
with read and write :
HAL_StatusTypeDef spi_write_LIS2DS12(uint8_t regAddr, uint8_t *pData)
{
HAL_StatusTypeDef ret;
uint8_t address = regAddr & 0x7F;
uint8_t sendData[2] = {address, *pData};
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, 0);
ret = HAL_SPI_Transmit(&hspi2, sendData, 2, 20);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, 1);
return ret;
}HAL_StatusTypeDef spi_read_LIS2DS12(uint8_t regAddr, uint8_t *pData)
{
HAL_StatusTypeDef ret;
uint8_t address = regAddr | 0x80;
uint8_t sendData[2] = {address, 0};
uint8_t receiveData[2] = {0};
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, 0);
ret = HAL_SPI_TransmitReceive(&hspi2, sendData, receiveData, 2, 50);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, 1);
*pData = receiveData[1];
return ret;
}
The protocol for SPI transmission is


But my Register always equal to 0. ret = HAL_OK.
I don't understand why :)
Can you help me
