SD卡简介

本文详细介绍了SPI模式下SD卡的基本概念、特点及其寄存器,并深入解析了SPI模式如何访问SD卡的过程,包括命令格式、命令介绍及初始化流程等关键环节。此外,还特别关注了不同类型的SD卡(如SDSC与SDHC)之间的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、SD卡简介

1、什么是SD卡

28.SD卡简介(SPI方式)——mini版专用

 

28.SD卡简介(SPI方式)——mini版专用 

2、SD卡的特点 

28.SD卡简介(SPI方式)——mini版专用

3、SD卡的寄存器 

28.SD卡简介(SPI方式)——mini版专用

 CSD寄存器包括卡的容量,数据块的大小,非常重要的寄存器

 

二、SPI 模式如何访问SD卡

1. SPI模式下,SD卡的命令格式

 

2. SD卡命令介绍

28.SD卡简介(SPI方式)——mini版专用

CMD0用来复位SD卡。

CMD8用来区分2.0卡还是1.0卡。

CMD9读取卡的特定的数据寄存器SCR。

CMD10读取卡的标志寄存器CID。

CMD16设置块大小,对于SDHC无效,SDHC固定是512字节。

CMD17读取一个块的数据。

CMD18读取多个块的数据。

CMD24是写入一个块的数据。

CMD25是写入多个块的数据。

每个指令都有一个响应。SD卡和单片机的通信过程

28.SD卡简介(SPI方式)——mini版专用

 R2到R7响应,请参照《SD卡2.0协议.pdf》7.3.2节

3、SD卡初始化

初始化步骤:

28.SD卡简介(SPI方式)——mini版专用

28.SD卡简介(SPI方式)——mini版专用

                                                                 此流程图为SPI模式

流程解读:

        先Power-on上电,然后延时大于74个CLK,然后使CS=0,发送CMD0,这样就进入SPI模式,然后发送CMD8(通常带个参数0x1AA)1为代表主机的供电范围为2.7V到3.6V和AA为检查通信,这个指令最重要的作用是用来区分是2.0的卡还是1.x的卡或是MMC卡,如果这个指令有响应,就是说明卡是2.0的卡或者是以后版本的卡,如果没有响应就说明是1.x的卡或是MMC卡,如果是2.0的卡就会有响应,然后检查卡的电压,CMD58是可选的指令,这里用不到,就不发送CMD58,发送ACMD41指令(注意在发送这个指令之前要先发送CMD55),如果主机支持高容量的卡就设置HCS位等于1,如果不支持,设置HCS=0,发送完ACMD41指令后,卡有个R1响应,如果R1响应中idle_state = 1,就是空闲状态=1,如果空闲状态=1,就不停发送ACMD41指令,知道空闲状态标志位idle_state=0,再进行下面的步骤,发送一个CMD58指令,通过CMD58指令,返回一个OCR寄存器的值(CMD58指令是读取OCR寄存器的值),OCR寄存器中有个CCS位,如果CCS=1,说明是一个2.0的SDHC高容量的卡,如果CCS=0,说明是 一个2.0的标准容量的卡,也就是0到2GB的卡。

     另外一个如果不响应CMD8,是一个1.x的卡或是MMC卡,然后同样CMD58指令不用,发送ACMD41指令,这里注意对于1.x的卡,HCS位是无效的,所以参数为0,对于ACMD41没有响应的话,就是一个MMC卡,如果对于ACMD41有响应,就判断idle_state位空闲状态是不是等于0,等于0以后这个就是1.x的标准容量的卡。

28.SD卡简介(SPI方式)——mini版专用

VHS位一般设置为0001b,CMD8使用的参数一般是0x1AA。

28.SD卡简介(SPI方式)——mini版专用

 一般设置HCS位=1

28.SD卡简介(SPI方式)——mini版专用

ACMD41指令只有第30位有效。

28.SD卡简介(SPI方式)——mini版专用 

这里重点关心CCS位,如果是会SDHC卡,CCS=1,如果是SDSC卡,CCS= 0。通过CCS位可以区分是SDHC还是SDSC卡。 

 

4. 单块数据读取512字节

28.SD卡简介(SPI方式)——mini版专用

                                                                接收512个字节的数据。

 

5. SD卡多块读取流程

28.SD卡简介(SPI方式)——mini版专用

 

28.SD卡简介(SPI方式)——mini版专用 

28.SD卡简介(SPI方式)——mini版专用 

注意:地址的单位跟卡的类型有关,数据地址如果是SDSC卡,地址单位是字节,如果是SDHC卡,是以512字节为单位,表示读取第几个512字节,2^32=4GB,对于SDSC卡足够寻址,SDSC卡最大为2GB,对于SDHC卡,寻址范围是2^32*512=2TB,所以SDHC卡最大为2T容量。

 28.SD卡简介(SPI方式)——mini版专用28.SD卡简介(SPI方式)——mini版专用

 

6. SD卡单块数据块写入流程

28.SD卡简介(SPI方式)——mini版专用 

MCU可以读取MISO上的电平,如果读到是0,表示SD卡还在编程,就不能发新的数据,知道0xff,才能发送下一批数据。

 

7. SD卡多块数据块写入流程

28.SD卡简介(SPI方式)——mini版专用 

注意:在发送结束令牌0xfd后,还要多写入一个512个字节的数据,然后才能完成写入。

28.SD卡简介(SPI方式)——mini版专用 

 

28.SD卡简介(SPI方式)——mini版专用 

 

28.SD卡简介(SPI方式)——mini版专用 

 

28.SD卡简介(SPI方式)——mini版专用 

发送完0xfd令牌以后,还要发送一个512字节的数据,然后才结束写入。

 

http://news.eeworld.com.cn/mcu/article_2017111035779.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值