1. SD简介
SD卡,Secure Digital Card,称为安全数字卡(安全数码卡)。
SD卡系列主要有三种:SD卡(full size)、MiniSD卡和MicroSD卡(原名 TF卡)。
特点:容量大、高安全性、体积小、传输速度快、接口简单
2. SD分类
- 存储等级
- 速度等级
SD卡速度等级分为:Speed Class、UHS Speed Class和Video Speed Class
Video Speed Class 分为V6、V10、V30、V60、V90对应不同视频格式
3. SD卡的驱动方式
微处理器对SD卡进行操作,可通过SPI接口、SDIO接口。不同接口,SD卡引脚功能不一样。
- SDIO接口通信线:CLK/CMD/DAT0~3
CLK:时钟线,由SDIO主机产生,由STM32微控制器SDIO外设输出
CMD:命令线,SDIO主机通过该线发送命令控制SD卡,若命令要求SD卡响应,SD卡也是通过该线传输响应信息。
DAT0~3:数据线,用于接收或发送数据;SD卡可将DAT0拉低表示处于忙状态
TF卡只比SD卡少了一个电源引脚VSS2,其他引脚功能类似。
SD卡和TF卡只有引脚和形状大小不同,内部结构类似,操作时序完全相同,可用完全相同的代码驱动
4. SD卡寄存器
SD卡有8个寄存器,但不能直接进行读写操作,需要通过命令来控制。SD卡协议定义了一些命令用于实现某一特定功能,SD卡根据收到的命令要求对内部寄存器进行修改。
SD总线上的通信基于命令和数据位流传输。
命令:应用相关命令(ACMD)和通用命令(CMD),通过命令线CMD传输,固定长度48位
响应:SD卡接收到命令,会有一个响应,用来反应SD卡状态。有2种响应类型:短响应(48位,格式与命令一样)和长响应(136位)。
数据:主机发送的数据 / SD发送的数据。SD数据是以块(Block)形式传输,SDHC卡数据块长度一般为512字节。数据块需要CRC保证数据传输成功。
5. SDIO模式
5.1SD卡命令格式
SD卡的命令格式由6个字节组成,发送数据时高位在前,SD卡的写入命令格式如下:
- Byte1:命令字的第一个字节为命令号(如CMD0、CMD1等),格式为“0 1 x x x x x x”
-
Byte2~Byte5:命令参数,有些命令参数是保留位,没有定义参数的内容,保留位应设置为0
-
Byte6:用于校验命令传输内容正确性,前7位为CRC(循环冗余校验)校验位,最后一位为停止位0
注意:使用SDIO接口驱动,CRC7校验值必须正确;而SPI接口驱动,CRC7校验默认关闭,即伪CRC
- SD卡常用命令
- SD卡响应
SD卡和单片机的通信采用发送应答机制。
每发送一个命令,SD卡都会给出一个应答,以告知主机该命令的执行情况,或者返回主机需要获取的数据。使用SDIO接口时,响应通过CMD线传输。
SD卡响应因使用接口不同,格式也不同。响应具体有R1、R1b、R2、R3、R7。
响应内容大小可以分为短响应48bit和长响应136bit。
5.2 SD卡操作步骤
-
在SD卡系统(主机和SD卡)定义了两种操作模式:卡识别模式和数据传输模式。
系统复位后,主机和SD卡都处于卡识别模式,主机在总线上找设备;当SD卡被主机识别后,SD卡进入到数据传输模式,而主机在总线上所有卡都被识别后也进入数据传输模式。
5.2.1SD卡初始化
需要区分4类卡(SDHC卡、SDSC卡、SD1.x卡、MMC卡)
5.2.2 SD卡数据块读取流程
- 单块
- 多块
5.2.3 SD卡写入流程
- 单块
- 多块