AnsweredAssumed Answered

SPI input value being interpreted incorrectly

Question asked by p.ben on Jan 5, 2015
My project involves using a STM32L152 device as a SPI master that receives data from a slave (digital accelerometer). When I look at the SPI signals through a scope, I notice that the incoming SPI data is being interpreted incorrectly by the L1 device.

I use the STM32CubeMX GUI to generate the code for the project. I am wondering if whether my usage of the tool is somehow causing this issue or if there are known issues relating to the tool causing these issues. 

I have attached images showing the oscilloscope outputs for an example case where I am finding the error. The blue signal represents SPI clock and yellow is SPI Data In.

The case involves two bytes being read from the SPI port (corresponding to 2 sets of 8 clock cycles in the SPI clock). The second byte clearly has "data in" line being zero throughout. Yet the data is being read as a 1.

I am consistently seeing these sort of errors where the LSB is being wrongly interpreted as a '1' sometimes when it should be a 0 and vice versa.

Here are the SPI initialization settings generated by Cube.
  hspi1.Instance = SPI1;
  hspi1.Init.Mode = SPI_MODE_MASTER;
  hspi1.Init.Direction = SPI_DIRECTION_2LINES;
  hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
  hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH;
  hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
  hspi1.Init.NSS = SPI_NSS_SOFT;
  hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_64;
  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi1.Init.TIMode = SPI_TIMODE_DISABLED;

Here is the call I make to read the SPI port:
HAL_SPI_TransmitReceive(&hspi1, (uint8_t *)&data, (uint8_t *)&temp, 1, 5000);

I'd appreciate any inputs on helping me track the issue. Note that I am driving the CS logic using my own software logic using GPIO and not the hardware based NSS signal.

I'd appreciate any inputs on helping me track the issue.