WIZ820io와 SPI 통신 문제입니다

WIZ820io와 STM32F407과 SPI 연결중입니다.

W5200 Firmware를 407에 맞게 변환시켜 포팅중입니다.

그런데 다음에서 계속 진행을 못하고 있습니다.

uint8_t SPI1_SendByte(uint8_t byte)
{
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);

  SPI_I2S_SendData(SPI1, byte);
      
  -->   이부분인데요,  while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
      
  return SPI_I2S_ReceiveData(SPI1);

}

RXNE Flag가 1이 되고 있지 않습니다. 그래서 While()에서 나오지 못하고 있습니다.

문의 : 왜 데이터를 쓰는데 쓰면(SPI_I2S_SendData) 되었지 다시 데이터를 받나요(SPI_I2S_ReceiveData)?
문의 : 왜 RXNE Flag는 1이 되지 않나요?

미리 감사합니다.

안녕하세요.

SPI 특성상 Master에서 Clock을 Slave에게 입력시켜주어야 Slave가 input/output을 하게됩니다.
보통 많은 MCU들이 Read를 하기 위해 dummy write를 하게됩니다.
write를 하게되면 SCLK이 발생하게 되도록 되어 있기 때문입니다.
이때 Slave는 data를 output하게 됩니다.
따라서 SPI의 단위 함수가 아래와 같이 구현된 경우가 많습니다.
보다 자세한 사항은 해당 MCU, stm32f407의 datasheet를 참고 하시기 바랍니다.

SPI설정을 다시한번 확인해보시기 바랍니다.
W5200의 Cortex-M3의 경우에 SPI설정입니다.
아래의 부분을 참고하여 사용하는 MCU의 환경에 맞게 설정을 확인해보시기 바랍니다.

void WIZ_SPI_Init(void)
{
    SPI_InitTypeDef SPI_InitStruct;  

    SPI_I2S_DeInit(Open_SPIx);
    SPI_InitStruct.SPI_Direction         = SPI_Direction_2Lines_FullDuplex;
    SPI_InitStruct.SPI_Mode              = SPI_Mode_Master;
    SPI_InitStruct.SPI_DataSize          = SPI_DataSize_8b; 
    SPI_InitStruct.SPI_CPOL              = SPI_CPOL_Low; //SPI_CPOL_High;
    SPI_InitStruct.SPI_CPHA              = SPI_CPHA_1Edge; //SPI_CPHA_2Edge;
    SPI_InitStruct.SPI_NSS               = SPI_NSS_Soft ;
    SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
    SPI_InitStruct.SPI_FirstBit          = SPI_FirstBit_MSB;
    SPI_InitStruct.SPI_CRCPolynomial     = 7;
    SPI_Init(Open_SPIx, &SPI_InitStruct);
    SPI_Cmd(Open_SPIx, ENABLE);
}