I'm working on SPI communication between two Nucleo-H743ZI boards. I'm using ST's HAL, and the SPI polling API HAL_SPI_TransmitReceive.
It's working fine until a bandwith of 12Mbits/s (SPI kernel clock at 200Mhz and prescaler 16, the CPU is always at 400Mhz) but fails above (smaller prescaler).
I want to understand since 24 or 48 Mbits/s doesn't seem much even in polling with a poor quality software.
With prescaler set to 8, I don't have SPI error like overrun or other (I checked directly in registers), however the data are not correct. looking closer to the data, I've noticed that there is only a shift of one bit.
More precisely I should receive (in hexa ): 0x30 0x31 0x32 ... And I receive 0x18 0x18 0x99...
In binary:
expected 0011 0000 0011 0001 0011 0010...
received 0001 1000 0001 1000 1001 1001...
If I shift the received bitstream to the left I get exactly the right result.
Does it ring something to you ? Could it be due to a bad configuration ?
Obviously master and slave have the same configuration regarding phase and polarity (and everything else since the source code is mostly identical).