SPI读写字节
u8 SPI1_ReadWriteByte(u8 TxData)//读写
{
u8 retry=0;
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET) //发送是否完成
{
retry++;
if(retry>200)return 0;
}
SPI_I2S_SendData(SPI1, TxData); //当发送完成之后才继续发送
retry=0;
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET)//当可以接收的时候
{
retry++;
if(retry>200)return 0;
}
return SPI_I2S_ReceiveData(SPI1); //返回通过SPIx最近接收的数据
}
SD读写字节
u8 SD_SPI_ReadWriteByte(u8 data)//SD的读写数据直接就是SPI的读写数据
{
return SPI1_ReadWriteByte(data);
}
SD卡指令格式
sd命令由6个字节组成,从高到低分别是
- command 【1字节,最高2位为01】
- arg-msb【1字节】
- arg【1字节】
- arg【1字节】
- arg-lsb【1字节】
- crc【1字节】
发送指令函数
- 分字节发送arg,由上面描述可知,arg是32位的无符号整数,以发送0x89F18814为例
SD_SPI_ReadWriteByte(arg >> 24);//发送0x89【0x11000000】
SD_SPI_ReadWriteByte(arg >> 16);//发送0xF1【0x00110000】
SD_SPI_ReadWriteByte(arg >> 8);//发送0x88【0x00001100】
SD_SPI_ReadWriteByte