SPI プロトコルを使用するのは初めてです。開発キット (STM32F207VCT6 マイクロコントローラーを搭載) に付属のサンプル コードを理解しようとしています。このコードは、AT45DB041D フラッシュ メモリとの通信 (読み取りと書き込み) を実装します。
このコード例は、メモリの読み取りに成功するたびに、読み取る対象に関する情報を送信するだけでなく、すぐにデータを受信するように要求します。受信したこのデータは、いかなる目的にも使用されません (明らかに)。読み取られる実際のデータは、最初に 0x00 バイトを送信することによって、後で受信コマンドによって再度要求されます。次のコードは、次のことを示しています。
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バイトを送信する必要があるのか を理解するのを手伝ってもらえますか?
ありがとう!