I have an STM32F429ZI Nucleo board (for SPI master and UART to check everything's working alright) and an EVB-LAN9252-SPI board(for SPI slave).
I have to check if the SPI is correctly working, but it seems that I can't debug or check on the slave's side.
Shown below is the test code
that I worked on the STM32F429ZI Nucleo board
to check if the SPI is working correctly. SPI1 and SPI4 is configured in one board.
while (k < 32)
{
HAL_UART_Transmit(&huart4, &SPI1_Buffer_Tx[k], 1, 100);
k++;
}
k = 0;
while (k < 32)
{
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_9, GPIO_PIN_RESET); // this GPIO is connected to hardware NSS
HAL_SPI_Transmit(&hspi1, &SPI1_Buffer_Tx[k], 1, 100);
HAL_SPI_Receive(&hspi4, &SPI4_Buffer_Rx[k], 1, 100);
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_9, GPIO_PIN_SET);
k++;
}
k = 0;
while (k < 32)
{
HAL_UART_Transmit(&huart4, &SPI1_Buffer_Tx[k], 1, 100);
k++;
}
k = 0;
while (k < 32)
{
HAL_UART_Transmit(&huart4, &SPI4_Buffer_Rx[k], 1, 100);
k++;
}
In this case the UART shows me such answer
abcdefghijklmnopqrstuvwxyzABCDEF //what was originally in the transmit buffer
bcdefghijklmnopqrstuvwxyzABCDEF //what was received in the receive buffer
Maybe this was possible because I could read on the slave's side, with such code
HAL_SPI_Receive(&hspi4, &SPI4_Buffer_Rx[k], 1, 100);
Now back to the original project.
At first I assumed that the data transmitted from the master should circulate in the slave somehow and transmit back to the master, so that if I read from the master I should get the original data, but in backwards.
so this was the code
.
while (k < 32)
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi1, &SPI1_Buffer_Tx[k], 1, 100);
HAL_SPI_Receive(&hspi1, &SPI1_Buffer_Rx[k], 1, 100);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_SET);
k++;
}
and what I received from the master is 32 0xFF
s.
I'm not sure where I'm wrong about.
2-1. If so, how do I know that the slave has received the data correctly?
2-2. How do I order the slave to transmit back to the master some meaningful data? I can only debug my code on the master's board.
Thanks for your kind comments!
It took a whole month for me to get this work done, and I'm sure there'll be newbies like me in the future, so..
As in the LAN9252 Datasheet page 302/329 and 303/329, you can send "0x0050" to receive "0x92520001", and "0x0064" to receive "0x87654321".
the way you send the data is kinda delicate, and that was the part I kept failing. I was (and am) not fully understanding the principles of SPI communication and you're gonna need an oscilloscope with multiple probes(It took me only 2 days after using the oscilloscope, because before then I couldn't check what I was doing).