SPI 프로토콜을 처음 사용하려고합니다. 내 개발 키트 (STM32F207VCT6 마이크로 컨트롤러가있는)와 함께 제공되는 예제 코드를 이해하려고합니다. 이 코드는 AT45DB041D 플래시 메모리와의 통신 (읽기 및 쓰기)을 구현합니다.플래시 메모리 쓰기 및 SPI를 통한 읽기
이 예제 코드는 메모리를 읽을 때마다 읽어야 할 내용에 대한 정보를 보낼뿐만 아니라 데이터를 수신하도록 요청합니다. 이 데이터는 어떤 목적으로도 사용되지 않습니다 (외관상으로는). 읽어 올 실제 데이터는 나중에 0x00 바이트를 먼저 보내서 receive 명령에 의해 다시 묻습니다.
void AT45DBXX_Read_ID(u8 *IData){
u8 i;
AT45DBXX_BUSY();
AT45DBXX_Enable; //Chip Select drive to low
SPIx_Send_byte(Read_ID);
for(i=0;i<4;i++)
{
IData[i] = SPIx_Receive_byte();
}
AT45DBXX_Disable; //Chip Select drive to high
}
정의가 :
void SPIx_Send_byte(u16 data){
while(SPI_I2S_GetFlagStatus(Open207V_SPIx, SPI_I2S_FLAG_TXE)==RESET);
SPI_I2S_SendData(Open207V_SPIx,data);
while(SPI_I2S_GetFlagStatus(Open207V_SPIx, SPI_I2S_FLAG_RXNE)==RESET);
SPI_I2S_ReceiveData(Open207V_SPIx);
}
u16 SPIx_Receive_byte(void){
while(SPI_I2S_GetFlagStatus(Open207V_SPIx, SPI_I2S_FLAG_TXE)==RESET);
SPI_I2S_SendData(Open207V_SPIx,0x00);
while(SPI_I2S_GetFlagStatus(Open207V_SPIx, SPI_I2S_FLAG_RXNE)==RESET);
return SPI_I2S_ReceiveData(Open207V_SPIx);
}
당신이 SPIx_Send_byte 코드를 읽기 전용으로 무엇을 전송뿐만 아니라 '원 정보를 수신하지 않고 볼 수있는 다음 코드는 것을 보여준다 사용할 수 없습니다.
왜 누군가가 그 필요성을 이해하고 실제로 데이터를 받기 위해 0x00 바이트를 보내야하는 이유를 이해할 수 있습니까?
감사합니다.