STM32——SD卡实验(SDIO方式)

article/2025/10/24 2:45:24

一、SD卡简介

1、什么是SD卡?

SD卡(Secure Digital Memory Card)即:安全数码卡。它是在MMC的基础上发展而来,是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛的用于便携装置上使用,例如数码相机、个人数码助理(PDA)和多媒体播放器等。SD卡由日本松下、东芝以及美国SanDiak公司于1999年8月共同开发研制。SD卡容量分类,分为三类:SD卡、SDHC卡、SDXC卡。如下表所示:

 

SD卡外形和接口图如下图所示:

SD卡由9个引脚与外部通信,支持SPI和SDIO两种模式,不同模式下,SD卡引脚功能描述如下表所示:

 

SD模式:第一个脚DAT3(也就是第四根数据线),第二个脚CDM(用于传输命令与响应),第三个脚VSS(接地GND),第四个脚VCC(电源),第五个脚CLK(提供SD卡时钟),第六个引脚VSS(GND),第七位~第九位以及第一位组成四位宽的数据线访问SD卡。

SPI模式:第一个脚CS(片选),第二脚MOSI,第三个脚VSS(GND),第四个脚VCC(电源),第五个脚CLK(时钟脚),第六个脚VSS(GND),第七个脚MISO,第八个和第九个脚NC(没有用到)。

2、SD卡特点

1、高容量,最大可达2TB(目前已有512GB的SD卡)

2、高安全性

3、高速(目前已有读取速度近100MB/S的SD卡)

4、体积小巧,标准SD卡大小只有一张邮票大小,重量仅2g

5、接口简单,支持SPI和SDIO两种访问模式。

注意:TF卡+卡套,组合起来可以当SD卡用,不过很大一部分TF卡不支持SPI访问模式。所以SPI驱动SD卡的时候,尽量选择大卡(SD卡),而不要选择TF卡。

3、SD卡寄存器

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

 

4、SD卡初始化流程

(要实现SDIO驱动SD卡,最重要的步骤就是SD卡的初始化,只要SD卡初始化完成了,那么剩下的操作就简单了。)

 

首先Power-on,然后发送CMD0进行软复位,然后发送CMD8(CMD8带一个参数:主机的供电电压范围)。如果2.0以后的卡并且电压参数支持主机的供电范围,那么这个卡(2.0以后的卡)就会产生一个响应;如果是2.0以后的卡但是电压参数不支持主机的供电范围,那么就不会响应(1.X的卡、MMC卡也不会响应)。所以CMD8主要用来区分1.0和2.0的卡。如果是2.0的卡,则会产生一个响应,响应以后就可以知道这个SD卡的供电范围,然后就发送ACMD41指令(附带一个参数:HCS位:告诉主机是否支持SDHC(高容量)卡,如果主机支持SDHC那么就设置HCS位=1,不支持HCS=0),若发送ACMD41指令之后且支持SDHC同时这个卡刚好是SDHC,那么就会产生一个响应(卡已准备好),准备好之后会返回OCR寄存器数据。如果OCR中的CCS=1,那么这个卡就是2.0SDHC卡;CCS=0,这个卡就是2.0SD卡。如果发送CMD8之后不响应,就可能是1.0、MMC卡或者是2.0的卡但是不支持电压范围;然后也发送ACMD41指令且HCS=0,如果对指令有响应那么就是1.0的卡,如果不响应指令那么就可能是电压不支持等其他原因;如果连ACMD41指令都没发,那么可能就是MMC卡(通过发送CMD1来确定是不是MMC卡)。MMC卡的初始化比较简单,发送CMD0和CMD1就可以了。

从SD卡初始化流程给可知,不管什么卡(将卡分为四类:SD2.0高容量卡、SD2.0标准容量卡、SD1.X卡和MMC卡),首先要执行的就是卡上电(设置SDIO_POWER[1:0]=11),上电之后发送CMD0,对卡进行软复位,之后发送CMD8命令,用于区分SD卡2.0,只有2.0及以后的卡才支持CMD8命令,MMC卡和SD1.X的卡不支持该命令。

CMD8命令格式如下表:

在发送CMD8的时候,通过其带的参数我们可以设置VHS位以告诉SD卡,主机的供电情况,让SD卡知道主机的供电范围。

VHS位定义如下表所示:

 

这里我们使用参数0X1A,即告诉SD卡,主机供电为2.7V~3.6V之间,如果SD卡支持CMD8,且支持电压范围,则会通过CMD8的响应将参数部分原本返还给主机,如果不支持CMD8,或不支持这个电压范围,则不响应。在发送CMD8后,发送ACMD41(注意:发送ACMD41之前要先发送CMD55),来进一步确认卡的操作电压范围,并通过HCS位来告诉SD卡,主机是不是支持高容量卡(SDHC)。

ACMD41命令格式如下表:

 

ACMD41指令响应(R3),包含了SD卡OCR寄存器内容,其定义如下图:

对于支持CMD8的卡,主机设置ACMD41的参数HCS=1,告诉SD卡,主机支持SDHC卡。

对于2.0的卡,OCR的CCS位用于表示SDHC还是SDSC;对于1.X的卡,则忽略该位;对MMC卡,则不支持ACMD41,MMC卡只需发送:CMD0和CMD1即可完成初始化。

CMD2用于获取CID寄存器数据,CID寄存器各位定义如下表:

 

SD卡在收到CMD2后,将返回R2长响应(136位),其中包含128位有效数据(CIR寄存器内容),存放在SDIO_RESP1~4等4个寄存器里面。通过读取这四个寄存器,就可以获取SD卡的CID信息。

CMD3用于设置卡相对地址(RCA,必须为0),对于SD卡(非MMC卡),在收到CMD3之后将返回一个新的RCA给主机,方便主机寻址。RCA的存在允许一个SDIO接口挂多个SD卡,通过RCA来区分主机要操作的是哪个卡。对于MMC卡,则不是由SD卡自动返回RCA,而是主机主动设置MMC卡的RCA,即通过CMD带参数(高16位用于RCA设置),实现RCA设置。同样MMC卡也支持一个SDIO接口挂多个MMC卡,不同于SD卡的是所有的RCA都是由主机主动设置的,而SD卡的RCA则是SD卡发给主机的。

在获得卡RCA之后,我们便可以发送CMD9(带RCA参数),获得SD卡的CSD寄存器内容,从CSD寄存器,我们可以得到SD卡的容量和扇区大小等十分重要的信息。

二、SD卡读数据

1、SD卡单块数据块读取流程:

注意:CMD16设置的数据块大小,一般为512节,此设置直接决定SD卡的块大小,SD卡默认的块大小自动失效。

2、SD卡多块数据块读取流程:

3、CMD16指令说明:

 

4、CMD17指令说明:

 

5、CMD18指令说明:

 

6、CMD12指令说明:

 

7、SD卡单块数据块写入流程:

发送CMD16指令,设置数据块大小—>等待指令响应—>发送CMD13指令,查询卡状态—>

等待READY_FOR_DATA位=1—>发送CMD24指令,开始写入数据—>写一个数据块的数据,完成单块写入。

8、SD卡多块数据块写入流程

 

(发送ACMD23指令,预擦除数据块)该指令仅对SD卡有效。另外,在ACMD指令发送之前需先发送CMD55

9、CMD13指令说明

 

10、R1响应:

 

11、CMD24指令说明:

 

12、ACMD23指令说明:

 

注意:发送ACMD之前,必须先发送CMD55,通知SD卡,接下来要发送的是应用命令(APP CMD),而非标准命令。

13、CMD55指令说明

 

14、CMD25指令说明

 


http://chatgpt.dhexx.cn/article/e0h5fYqO.shtml

相关文章

SDIO接口(4)——SDIO通信

SDIO通信 SD总线上的通信基于命令和数据位流,这些命令和数据位流由起始位启动,并由停止位终止。 SDIO总线上的设置和控制都是通过命令来实现,SDIO总线上都是HOST端发起请求,然后DEVICE端回应请求,其中请求和应答中会包…

STM32 SDIO详解

目录 01、SDIO简介 02、SDIO特点 03、SDIO时钟 04、SDIO的命令与响应 05、SDIO块数据传输 06、代码 1、SDIO简介 SDIO,全称:Secure Digital Input and Output,即安全数字输入输出接口。它是在SD卡接口的基础上发展而来,它可…

SDIO简介

SDIO,全称: Secure Digital Input and Output ,即安全数字输入输出接口。它是在SD卡接口的基础上发展而来,它可以兼容之前的SD卡,并可以连接SDIO接口设备,比如:蓝牙、WIFI、照相机等。 S…

SDIO接口

一、SDIO简介 SDIO接口是在SD内存卡接口的基础上发展起来的接口,SDIO接口兼容以前的SD内存卡,并且可以连接SDIO接口的设备。 SDIO1.0标准定义了两种类型的SDIO卡: 1.全速的SDIO卡,传输率可以超过100Mbps; 2.低速的…

SDIO接口(1)——SDIO简介

博客系列 SDIO接口(1)——SDIO简介 SDIO接口(2)——SD卡寄存器 SDIO接口(3)——SDIO总线接口 SDIO接口(4)——SDIO通信 1.SDIO简介 SDIO(Secure Digital Input and Output)&#…

STM32——SDIO的学习(驱动SD卡)(理论篇)

目录 一、SD卡简介 1.1历史 1.2 tf卡和SD卡的区别 1.3 mmc,emmc,nand,flash的关系 1.4 SD卡的规格等级 1.4.1按容量分 1.4.2 class等级 1.4.3 UHS总线模式 1.4.4 UHS速度等级 1.4.5 VSC视频速度等级 二、SD卡的内部结构 三、SDIO…

SDIO(安全数字输入输出)/协议

目录 一、SDIO:安全数字输入输出 目录 定义 功能 二、SDIO协议 介绍 信号 协议 一般协议 写协议 读协议 命令 命令格式 命令应答 数据 三、一文搞懂SDIO 四、SDIO简介 五、SD卡引脚定义和图连接 六、SDIO协议简介 七、MMC、SD、TF、SDIO、SDMMC简…

SDIO协议

SDIO协议 1 概述 SDIO,全称:Secure Digital Input and Output ,即安全数字输入输出接口。2 特点 ①与多媒体卡系统规格书版本4.2全兼容。支持三种不同的数据总线模式:1位(默认)、4位和8位。②与较早的多媒体卡系统规格版本全兼容…

硬件接口之SDIO

SDIO接口是在SD内存卡接口的基础上发展起来的接口,SDIO接口兼容以前的SD内存卡,并且可以连接SDIO接口的设备。 参考 SDIO1.0标准定义了两种类型的SDIO卡: 全速的SDIO卡,传输率可以超过100Mbps;   低速的SDIO卡&#…

一文搞懂SDIO

SDIO总线简介 SDIO(Secure Digital Input and Output),即安全数字输入输出接口。它是在SD卡接口的基础上发展而来,它可以兼容之前的SD卡,并可以连接SDIO接口设备,比如:蓝牙、WIFI、GPS等。 什么是SDIO卡 SDIO卡&…

visual svn for visual studio 2019

https://marketplace.visualstudio.com/items?itemNameVisualSVNLimited.VisualSVN-VS2019 参考 https://www.cnblogs.com/Music/p/visualsvn-for-visual-studio-2019.html

visualSVN server的安装和使用

一、安装visualSVN server 服务器端 下载地址:https://www.visualsvn.com/server/download/ 1.在官网中下载visualSVN server服务器端 2.安装下载的visualSVN server,选择默认选项即可 二、安装号visualSVN server后,创建一个代码创库&am…

《SVN系列教程-第三章-VisualSVN的使用》

教程说明 本系列教程目录大纲:《SVN系列教程-目录大纲》 《SVN系列教程-第三章-VisualSVN的使用》 1.1 VisualSVN简介 VisualSVN是Subversion的一款图形化界面工具,提供了图形化方式来辅助我们管理仓库、用户、组信息,另外VisualSVN还帮我…

安装VisualSVN server

链接: 官网链接: https://www.visualsvn.com/ 下载页链接: https://www.visualsvn.com/server/download/ 下载文件链接:https://www.visualsvn.com/files/VisualSVN-Server-3.2.3-x64.msi安装步骤: 这一步是让选择安装…

VS2019安装 VisualSVN Server 插件

选择VisualSVN for Visual Studio 2019 进行安装,网址:https://www.visualsvn.com/visualsvn/download/

VisualSVN的下载与安装

1.在浏览器地址栏中搜索:https://www.visualsvn.com/server/download/,选择对应版本的下载包进行下载 2.安装VisualSVN 点击运行 3.点击Next 4.点击接受,然后点击Next . 5.点击Next 6.点击Next Location是指VisualSVN Server的安装目录&am…

vs2010插件之VisualSVN

一、说说svn 说到svn,大体上说的有两种,服务端:Subversion和VisualSVN-Server,客户端:TortoiseSVN和VisualSVN,现在在开发项目的时候用的代码管理工具也无非那么几种,比如:tfs和svn…

Vs插件 VisualSvn破解

发现问题 之前的项目是使用git,最近有个别项目使用SVN来管理代码,于是使用Vs 的 svn插件,用了一个月,今天突然发现修改代码后居然识别不了,就连我昨天改动的几个页面也识别不出来,开始有点慌,后…

VisualSVN Server的配置和使用方法(项目部署到svn上)

1.为什么要用VisualSVN Server,而不用Subversion? 回答: 因为如果直接使用Subversion,那么在Windows 系统上,要想让它随系统启动,就要封装SVN Server为windws service,还要通过修改配置文件来…

VS中SVN的简介、安装和使用(安装+汉化+使用)

SVN是subversion的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。 一.安装SVN 1.下载:Downloads…