2019-06-18 06:22 AM
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:
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).
Solved! Go to Solution.
2023-09-04 09:38 PM - edited 2023-09-04 09:38 PM
Thanks for the reply ,
I changed SPI prescaler from 64 to 256 ,Now I can able to read correct values from few registers(ATM90E26 is energy meter IC).Now I can able to read frequency & meter status registers correctly. But If I read voltage and current registers I am always getting value zero values.
In ATM90E26 datasheet SPI Interface Bit Rate max is 160K Bps.
In my configuration 96Mhz(system clock)/256(prescaler)=375 kbps.
Is the issue with Bit rate? Can anyone clarify me ?
Because I can able to read few registers of ATM90E26 correctly & few registers I can't able to read.
Thanks