2017-11-21 08:02 AM
I'm having an issue with the LL SPI driver on the STM32L4 configured as SPI slave. My Tx buffer contains {01, 02, 03, 04, 05, 06, 07... }. When I read 7 bytes repeatedly from the slave using the Aardvark SPI master I get the following responses:
01 02 03 04 05 06 07
08 09 0A 01 02 03 04
05 06 07 01 02 03 04
05 06 07 01 02 03 04
05 06 07 01 02 03 04
...
Resetting the master doesn't change anything. Resetting the STM32 slave will start the pattern over. It seems like the STM32 is trying to sent 10 bytes instead of the 7 the master is reading and the last 3 bytes are persisting in the TX buffer. Is this possible? How do I fix this?
#stm32l4-spi2017-11-21 08:45 AM
Okay, I've discovered that when I call the LL_SPI_Enable function it actually triggers the SPI2_IRQHandler 3 times with the LL_SPI_IsActiveFlag_TXE flag set. This is causing me to to send 3 bytes that weren't actually requested by the master.
Any ideas as to why or if this is expected?
2017-11-21 10:17 AM
Make sure that if you use bytes, you read/write the SPI DR as a 8 bit write bus access.
The SPI has I think a 32 bit TX fifo: you can write 4 bytes one shot if configured like this.
All this to avoid dead time between byte transfer when using interrupt (non DMA) based systems.
2017-11-21 11:40 AM
I am using it interrupt mode rather than DMA actually, but I think I'm doing the R/W with the correct functions:
LL_SPI_ReceiveData8()
LL_SPI_TransmitData8()