SMT32学习笔记--SD卡的使用

SD卡一般有5个寄存器,如下表:

SMT32学习笔记--SD卡的使用_第1张图片

SD卡初始化流程图:

要实现SDIO驱动SD卡,最重要的步骤就是SD卡的初始化,只要SD卡初始化完成了,那么剩下的(读写操作)就简单了,所以我们这里重点介绍SD卡的初始化。
右图参见《SD卡2.0协议.pdf》这个文档。
SMT32学习笔记--SD卡的使用_第2张图片
从SD卡初始化流程可知,不管什么卡,首先我们要执行的是卡上电(设置SDIO_POWER[1:0]=11),上电后发送CMD0,对卡进行软复位,之后发送CMD8命令,用于区分SD卡2.0,只有2.0及以后的卡才支持CMD8命令,MMC卡和V1.x的卡,是不支持该命令的。 CMD8命令格式如下表:
SMT32学习笔记--SD卡的使用_第3张图片
在发送CMD8的时候,通过其带的参数我们可以设置VHS位,以告诉SD卡,主机的供电情况,让SD卡知道主机的供电范围。
VHS位定义如下表所示:
SMT32学习笔记--SD卡的使用_第4张图片
这里我们使用参数0X1AA,即告诉SD卡,主机供电为2.7~3.6V之间,如果SD卡支持CMD8,且支持该电压范围,则会通过CMD8的响应(R7,关于SD卡响应,请参考《SD卡2.0协议.pdf》第4.9节)将参数部分原本返回给主机,如果不支持CMD8,或者不支持这个电压范围,则不响应。
在发送CMD8后,发送ACMD41(注意:发送ACMD41之前,要先发送CMD55),来进一步确认卡的操作电压范围,并通过HCS位来告诉SD卡,主机是不是支持高容量卡(SDHC)。

SD卡读写流程

SMT32学习笔记--SD卡的使用_第5张图片
SMT32学习笔记--SD卡的使用_第6张图片
SMT32学习笔记--SD卡的使用_第7张图片
SMT32学习笔记--SD卡的使用_第8张图片

SD卡具体命令

SD卡命令在SD总线下和SPI模式下有所不同。

SD总线如下:

SMT32学习笔记--SD卡的使用_第9张图片
SMT32学习笔记--SD卡的使用_第10张图片
SMT32学习笔记--SD卡的使用_第11张图片
SMT32学习笔记--SD卡的使用_第12张图片
SMT32学习笔记--SD卡的使用_第13张图片

SPI模式如下:

SMT32学习笔记--SD卡的使用_第14张图片
SMT32学习笔记--SD卡的使用_第15张图片
SMT32学习笔记--SD卡的使用_第16张图片

SD卡的响应

所有响应都通过CMD线发送。响应传输总是从MSB开始。响应长度取决于响应类型。响应总是从起始位(总是0)开始,然后是指示传输方向的位(card = 0)。下表中x表示的值表示一个变量项。除R3类型(见下文)之外的所有响应都受CRC保护。每个响应都以结束位(总是1)结束。
SMT32学习笔记--SD卡的使用_第17张图片
SMT32学习笔记--SD卡的使用_第18张图片
SPI模式下的响应好像也有所不同,我没看懂,以后再说。

SD的使用

1、配置并初始化SDIO,时钟设置低于400KHZ
2、使用SDIO初始化SD卡、查询SD卡类型、获取SD卡信息、设置SDIO带宽等
SMT32学习笔记--SD卡的使用_第19张图片
3、调用读写函数操作SD卡

SMT32学习笔记--SD卡的使用_第20张图片
SMT32学习笔记--SD卡的使用_第21张图片

你可能感兴趣的:(软件代码,STM32笔记)