STM32(X) SD卡协议详解

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个字节组成,从高到低分别是

  1. command 【1字节,最高2位为01】
  2. arg-msb【1字节】
  3. arg【1字节】
  4. arg【1字节】
  5. arg-lsb【1字节】
  6. crc【1字节】

发送指令函数

  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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值