×
单片机 > 单片机程序设计 > 详情

【stm32f407】SD协议(二)-SD卡

发布时间:2020-08-25 发布时间:
|

一.SD卡简介

1)  简介:

SD卡是基于flash的存储卡。


SD卡和MMC卡的区别在于初始化过程不同。


SD卡的通信协议包括SD和SPI两类。


3.0: >32GB


二.SD卡引脚介绍

SD卡结构


六.SD卡使用过程

SD卡初始化过程


从图中,我们看到,不管什么卡(这里我们将卡分为4类:SD2.0高容量卡(SDHC,最大32G),SD2.0标准容量卡(SDSC,最大2G),SD1.x卡和MMC卡),首先我们要执行的是卡上电(需要设置SDIO_POWER[1:0]=11),上电后发送CMD0,对卡进行软复位,之后发送CMD8命令,用于区分SD卡2.0,只有2.0及以后的卡才支持CMD8命令,MMC卡和V1.x的卡,是不支持该命令的。CMD8的格式如表所示:

这里,我们需要在发送CMD8的时候,通过其带的参数我们可以设置VHS位,以告诉SD卡,主机的供电情况,VHS位定义如表所示

这里我们使用参数0X1AA,即告诉SD卡,主机供电为2.7~3.6V之间,如果SD卡支持CMD8,且支持


该电压范围,则会通过CMD8的响应(R7)将参数部分原本返回给主机,如果不支持CMD8,或者不支持这个电压范围,则不响应。在发送CMD8后,发送ACMD41(注意发送ACMD41之前要先发送CMD55),来进一步确认卡的操作电压范围,并通过HCS位来告诉SD卡,主机是不是支持高容量卡(SDHC)。


ACMD41的命令格式如表所示

ACMD41得到的响应(R3)包含SD卡OCR寄存器内容,OCR寄存器内容定义如表所示:


对于支持CMD8指令的卡,主机通过ACMD41的参数设置HCS位为1,来告诉SD卡主机支SDHC卡,如果设置为0,则表示主机不支持SDHC卡,SDHC卡如果接收到HCS为0,则永远不会反回卡就绪状态。对于不支持CMD8的卡,HCS位设置为0即可。


SD卡在接收到ACMD41后,返回OCR寄存器内容,如果是2.0的卡,主机可以通过判断OCR的CCS位来判断是SDHC还是SDSC;如果是1.x的卡,则忽略该位。OCR寄存器的最


后一个位用于告诉主机SD卡是否上电完成,如果上电完成,该位将会被置1。


对于MMC卡,则不支持ACMD41,不响应CMD55,对MMC卡,我们只需要在发送CMD0后,在发送CMD1(作用同ACMD41),检查MMC卡的OCR寄存器,实现MMC卡的初始化。


至此,我们便实现了对SD卡的类型区分,图中,最后发送了CMD2和CMD3命令,用于获得卡CID寄存器数据和卡相对地址(RCA)。


CMD2,用于获得CID寄存器的数据,CID寄存器数据各位定义如表所示:

SD卡在收到CMD2后,将返回R2长响应(136位),其中包含128位有效数据(CID寄


存器内容),存放在SDIO_RESP1~4等4个寄存器里面。通过读取这四个寄存器,就可以获得


SD卡的CID信息。


CMD3,用于设置卡相对地址(RCA,必须为非0),对于SD卡(非MMC卡),在收到


CMD3后,将返回一个新的RCA给主机,方便主机寻址。RCA的存在允许一个SDIO接口挂


多个SD卡,通过RCA来区分主机要操作的是哪个卡。而对于MMC卡,则不是由SD卡自动


返回RCA,而是主机主动设置MMC卡的RCA,即通过CMD3带参数(高16位用于RCA设


置),实现RCA设置。同样MMC卡也支持一个SDIO接口挂多个MMC卡,不同于SD卡的


是所有的RCA都是由主机主动设置的,而SD卡的RCA则是SD卡发给主机的。


在获得卡RCA之后,我们便可以发送CMD9(带RCA参数),获得SD卡的CSD寄存器


内容,从CSD寄存器,我们可以得到SD卡的容量和扇区大小等十分重要的信息




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
stm32 总线矩阵介绍