SD卡相关应用

1. SD卡简介

1.1 SD卡概述

SD卡(Secure Digital Card,安全数字卡,又叫做安全数码卡)。
特点:体积小、传输速度快、支持热插拨
SD卡在MMC(MultiMedia Card,多媒体卡)的基础上发展而来,增加了更高的安全性和更快的读写速度。
SD卡从存储量上分为三个级别:
SD卡(Secure Digital Card)
SDHC卡(Secure Digital High Capacity)
SDXH卡(SD eXtended Capacity)
在这里插入图片描述
不同协议规范的SD卡有着不同的速度等级:
在这里插入图片描述
SD卡引脚定义:
在这里插入图片描述
MicroSD(TF)卡引脚定义:
在这里插入图片描述

1.2 SD卡常用命令

SD卡写入命令格式:
SD卡的命令由6个字节组成,发送数据时高位在前,SD卡的写入命令格式如下:
在这里插入图片描述
Byte1:命令的第一个字节为命令号(如CMD0、CMD1等),格式为“01xxxxxx”。
Byte2~Byte5:命令参数,有些命令参数是保留位,没有定义参数的内容,保留位应设置为0。
Byte6:用于校验的数据位,前7位为CRC(循环冗余校验)校验位,最后一位为停止位0。
SD卡命令
在这里插入图片描述
在这里插入图片描述
SD卡返回R1命令
在这里插入图片描述
SD卡返回R3命令
在这里插入图片描述
SD卡返回R7命令
在这里插入图片描述
Bit[11:8]:操作电压反馈
0:未定义
1:2.7V~3.6V
2:低电压
4:保留位
8:保留位
其他:未定义

2. SD卡操作时序

2.1 SPI接口与时序

SPI接口简介
SPI:Serial Peripheral Interface,串行外围设备接口,是一种高速、全双工、同步的通信总线。
SPI在芯片管脚上只占用四根线,节约了芯片的管脚,主要应用在EEPROM、FLASH,还有数字信号处理和数字信号解码器之间。
SPI的通信原理比较简单,它以主从方式工作,通常有一个主设备(此处指FPGA)和一个或多个从设备(此处指SD卡)
在这里插入图片描述
SPI通信模式
SPI的通信模式是由CPOL(时钟极性)和CPHA(时钟相位)来决定的,四种通信模式如下:
模式0:CPOL=0,CPHA=0;
模式1:CPOL=0,CPHA=1;
模式2:CPOL=1,CPHA=0;
模式3:CPOL=1,CPHA=1;
如果时钟极性CPOL=0,串行同步时钟的空闲状态为低电平;如果时钟极性CPOL=1,串行同步时钟的空闲状态为高电平。
如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。
CPOL(时钟极性)
在这里插入图片描述
CPOL=1:空闲状态下,时钟为高电平;
CPOL=0:空闲状态下,时钟为低电平;
CPOH(时钟相位)
在这里插入图片描述

2.2 SD卡初始化

确定SD卡类型
只有SD2.0版本协议的SD卡支持CMD8命令,所以响应此命令的SD卡可以判断为SD2.0版本协议的卡,否则为SD1.0版本协议的SD卡或者MMC卡。
对于CMD8无响应的情况,可以发送CMD55+ACMD41命令,如果返回0,则表示SD1.0协议版本初始化成功,如果返回错误,则确定为MMC卡;在确定MMC卡后,继续向卡发送CMD1命令,如果返回0,则MMC卡初始化成功,否则判断为错误卡。
SD卡初始化步骤
1、SD卡完成上电后,主机FPGA先对从机SD卡发送至少74个以上的同步时钟,在上电同步期间,片选CS引脚和MOSI引脚必须为高电平(MOSI引脚除发送命令或数据外,其余时刻都为高电平);
2、拉低片选CS引脚,发送命令CMD0(0x40)复位SD卡,命令发送完成后等待SD卡返回响应数据;
3、SD卡返回响应数据后,先等待8个时钟周期再拉高片选CS信号,此时判断返回的响应数据。如果返回的数据为复位完成信号0x01,在接收返回信息期间片选CS为低电平,此时SD卡进入SPI模式,并开始进行下一步,如果返回的值为其他值,则重新执行第2步;
4、拉低片选CS引脚,发送命令CMD8(0x48)查询SD卡的版本号,只有SD2.0版本的卡才支持此命令,命令发送完成后等待SD卡返回响应数据;
5、SD卡返回响应数据后,先等待8个时钟周期再拉高片选CS信号,此时判断返回的响应数据。如果返回的电压范围为4’0001即2.7~3.6V,说明此SD卡为2.0版本,进行下一步,否则重新执行第4步;
6、拉低片选CS引脚,发送命令CMD55(0x77)告诉SD卡下一次发送的命令是应用相关命令,命令发送完成后等待SD卡返回响应数据;
7、SD卡返回响应数据后,先等待8个时钟周期再拉高片选CS信号,此时判断返回的响应数据,如果返回的数据为空闲信号0x01,开始进行下一步,否则重新执行第6步;
8、拉低片选CS引脚,发送命令ACMD41(0x69)查询SD卡是否初始化完成,命令发送完成后等待SD卡返回响应数据;
9、SD卡返回响应数据后,先等待8个时钟周期再拉高片选CS信号,此时判断返回的响应数据。如果返回的数据为0x00,此时初始化完成,否则重新执行第6步。
SD卡复位命令
在这里插入图片描述
注意:在SD卡初始化的时候,SPI_CLK的时钟最大不能超过400KHz!在初始化完成之后再切换到SD卡的最大操作时钟。

2.3 SD卡读写操作

SD卡写命令
在这里插入图片描述

SD卡读命令
在这里插入图片描述

3. SD卡读写测试

使用FPGA开发板向SD卡指定的扇区地址中写入512个字节数据,写完后再将数据读出,并验证读出数据是否正确。

3.1 系统框图

在这里插入图片描述

3.2 程序设计

初始化状态机
在这里插入图片描述
源码
SD卡读写测试在SD卡读写测试 rtl免费下载

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值