简述SD卡的工作原理
功能
SD卡是存储卡,它的功能就是存储。
分类
SD卡按容量分类,可以分为3类:SD卡、SDHC卡、SDXC卡,如下:
容量 | 命名 | 简称 |
0~2G | Standard Capacity SD Memory Card | SDSC或SD |
2G~32G | High Capacity SD Memory Card | SDHC |
32G~2T | Extended Capacity SD Memory Card | SDXC |
硬件结构
SD卡外形和接口图如下图所示:
驱动SD卡工作的接口是SPI 或者 SDIO 口,引脚分布如下:
主机与SD卡的硬件连接图:
工作原理
要驱动SD卡工作,主要涉及两个步骤。
第一个步骤是SD卡的识别过程。
第二个步骤是对SD卡进行读写过程,即主机控制器和SD卡之间进行数据传输的过程。
要使SD卡能正常工作,一是要给SD卡供给稳定的电压,二是要SD卡按用户规定的方式工作。这两项工作的实现,都是主机控制器通过给SD卡发送控制命令来实现的。
主机(SDIO控制器)要驱动SD卡工作,要使用许多的命令,包括应用层命令ACMD 和 通用命令 CMD. 主机(SDIO控制器)把命令发送给SD卡,SD卡会作出回应,这里的回应叫做响应,响应命令分为6类,分别是R1、R1b、R2、R3、R6、R7。
主机(SDIO控制器)给SD卡发送命令之后,SD卡会作出响应,响应中包含主机(SDIO控制器)需要的数据,这些数据有SD的信息,容量,和存储数据等等。
上面已经提到了,SD卡工作,主要是识别和数据传输,它的识别过程有些复杂,写代码的时候,可以参考协议给的初始化流程图。数据传输包括读和写,单字节和多字节读写。下两节描述识别初始化流程图和数据读写时序图。
流程图
SD卡初始化流程图:
读写数据的时序图
SDIO与SD卡通信一般以数据块的形式进行传输,SDIO(多)数据块读操作,如下图所示:
SDIO(多)数据块写操作,如下图所示:
命令格式
SDIO所有的命令和响应都是在SDIO_CMD引脚上面传输的,命令长度固定为48位,SDIO命令格式如下表所示:
其中:除了命令索引和参数需要我们设置,其他都是由SDIO硬件自动控制。命令索引(如CMD0,CMD1之类)由SDIO_CMD寄存器设置,命令参数则由SDIO_ARG寄存器设置。
STM32 SDIO短响应(48位)格式如下表所示:
STM32 SDIO长响应(136位)格式如下表所示:
寄存器
SDIO控制器的寄存器,主要设置SDIO控制器和命令的索引与参数。
SD卡有5个寄存器CID,RCA,CSD,SCR.OCR。SD卡的信息从SD卡寄存器中获取。
总结
SD卡正常工作,就是根据SD卡初始化流程图,发送命令,收到回复,直到流程结束。传输数据,也是根据读写时序图,将要发送的数据放进命令中发送出去。
SDIO 控制器驱动SD 卡识别过程中,频率是400K , 传输数据的时候,SDIOCK 的 频率是6M.SD卡初始化的时候,频率不能超过400K。