STM32——SDIO简介

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

一、什么是SDIO接口?

SDIO,全称:Secure Digital Input and Output,即安全数字输入输出接口。它是在SD卡接口的基础上发展而来,它可以兼容之前的SD卡,并且可以连接SDIO接口设备,比如:蓝牙、WIFI、照相机等。SDIO和SD卡规范间的一个重要区别就是增加了低速标准。低速卡的目标应用是以最小的硬件开支支持低速I/O能力。低速卡支持类似调制解调器、条码扫描仪和GPS接收器等应用。STM32的SDIO控制器支持多媒体卡(MMC卡)、SD存储卡、SD I/O卡和CE-ATA设备。、

二、STM32 SDIO接口特点:

1、与多媒体卡系统规格书版本4.2全兼容。支持三种不同的数据总线模式:1位(默认)、4位和8位。

2、与较早的多媒体卡系统规格版本全兼容(向前兼容)

3、与SD存储卡规格版本2.0全兼容

4、与SD I/O卡规格版本2.0全兼容:支持两种不同的数据总线模式:1位(默认)和4位。

5、完全支持CE-ATA功能(与CE-ATA数字协议版本1.1全兼容)。8位总线模式下数据传输速率可达48MHz

6、数据和命令输出使能信号,用于控制外部双向驱动器。

SDIO框图:

复位后SDIO_D0用于数据传输。初始化后主机可以改变数据总线的宽度(通过ACMD6命令设置)。如果一个多媒体卡接到了总线上,则SDIO_D0、SDIO_D[3:0]或SDIO_D[7:0]可以用于数据传输。MMC版本3.31和之前版本的协议只支持1位数据线,所以能用SDIO_D0(为了通用性考虑,在程序里面只要检测到是MMC卡就设置为1位总线数据)

三、SDIO时钟

1、卡时钟(SDIO_CK):每个时钟周期在命令和数据线上传输1位命令或数据。对于SD或SD I/O卡,时钟频率可以在0MHz至25MHz之间变化。

2、SDIO适配器时钟(SDIOCLK):该时钟用于驱动SDIO适配器,可用于产生SDIO_CK时钟。对F1来说,SDIOCLK来自HCLK(72MHz);对F4来说,SDIOCLK来自PLL48CK(48MHz)。

3、F1:AHB总线接口时钟(HCLK/2):该时钟用于驱动SDIO的AHB总线接口,其频率为HCLK/2=36MHz。F4:APB2总线接口时钟(PCLK2):该时钟用于驱动SDIO的APB2总线接口,其频率为PCLK2=84MHz。

SDIO_CK计算公式:SDIO_CK=SDIOCLK/(2+CLKDIV)

注意:在SD卡初始化时,SDIO_CK不可以超过400Khz,初始化完成后,可以设置为最大频率(但不可以超过SD卡最大操作频率)

四、SDIO命令与响应

SDIO命令分为:应用相关命令(ACMD)和通用命令(CMD两部分)。发送ACMD时需要先发送CMD55。

SDIO所有的命令和响应都是在SDIO_CMD引脚上面传输的,命令长度固定为48位,SDIO命令格式如下表所示:

 

其中除了命令索引和参数需要我们设置,其他都是由SDIO硬件自动控制。命令索引(如CMD0,CMD1之类)由SDIO_CMD寄存器设置,命令参数则由SDIO_ARG寄存器设置。

一般SD卡在接收到命令行,都会有一个应答(CMD0除外),这个应答也称之为响应。STM32的SDIO接口,支持2种响应类型:短响应(48位)和长响应(136位)

STM32 SDIO短响应(48位)格式如下表所示:

 

STM32 SDIO长响应(136位)格式如下表所示:

 

不论是短响应还是长响应,硬件都会自动滤除了起始位、传输位、CRC7以及结束位等信息,对于短响应,命令索引存放在SDIO_RESPCMD寄存器,参数则存放在SDIO_RESP1寄存器里面。对于长响应,则仅留CID/CSD位域,存放在SDIO_RESP1~SDIO_REAP4等4个寄存器。

SD卡总共有6类响应(R1、R1b、R2、R3、R6、R7)如下图所示:

  

这里以R1为例介绍一下。R1(普通响应命令)响应属于短响应,其长度为48位,如下图:

 

在收到R1响应后,我们可以从SDIO_RESPCMD寄存器和SDIO_RESP1寄存器分别读出命令索引和卡状态信息。

四、SDIO块数据传输

SDIO与SD卡通信一般以数据块的形式进行传输,SDIO(多)数据块读操作,如下图:

 

从机在收到主机相关命令后,开始发送数据块给主机,所有数据块都带CRC校验(由硬件自动处理),单个数据块读的时候,在收到1个数据块以后即可停止了,不需要发送停止命令(CMD12)。但是多块数据读的时候,SD卡将一直发送数据给主机,直到接到主机发送的STOP命令(CMD12)。

SDIO(多)数据块写操作,如下:

 

数据块写操作同数据块读操作基本类似,只是数据块写的时候,多了一个繁忙判断,新的数据块必须在SD卡非繁忙的时候发送。这里的繁忙信号由SD卡拉低SDIO_D0,以表示繁忙,SDIO硬件自动控制,不需要软件处理。

五、SDIO寄存器

1、SDIO电源控制寄存器(SDIO_POWER)

 

该寄存器只有最低2位(PWRCTR[1:0])有效,其他都是保留位,STM32复位以后,PWRCTRL=00,处于掉电状态。所以,首先要给SDIO充上电,设置这两个位为:11

2、SDIO时钟控制寄存器(SDIO_CLKCR)

 

(注意:当SDIO_CK频率过快时,可能导致SD卡通信失败,此时建议降低SDIO_CK试试)

3、SDIO参数寄存器(SDIO_ARG)

 

该寄存器用于存储命令参数。注意:参数必须先于命令写入。

4、SDIO命令寄存器(SDIO_CMD)

 

低6位为命令索引,即要发送的命令索引号(如发送CMD1,其值为1,索引设置为1)。位[7:6]用于设置等待响应,用于指示CPSM是否需要等待,以及等待类型等。CPSM:即命令通道状态机,命令通道状态机一般都是开启的,所以位[1:0]要设置为1。

5、SDIO命令响应寄存器(SDIO_RESPCMD)

 

该寄存器只有低6位有效,用于存储最后收到的命令响应中的命令索引。如果传输的命令响应不包含命令索引,则该寄存器的内容不可预知。

6、SDIO命令响应1~4寄存器(SDIO_REAPx,x=1~4)

 

命令响应寄存器组,总共包含4个32位寄存器组成,用于存放接收到的卡响应部分的信息。如果收到短响应,则数据存放在SDIO_REAP1寄存器里面,其他三个寄存器没有用到。而如果收到长响应,则依次存放在SDIO_REAP1~4里面。

7、SDIO数据定时寄存器(SDIO_DITMER)

 

该寄存器用于存储以卡总线时钟(SDIO_CK)为周期的数据超时时间,一个计数器将从SDIO_DTIMER寄存器加载数值,并在数据通道状态机(DPSM)进入Wait_R或繁忙状态时进行递减计数,当DPSM处在这些状态时,如果计数器减为零,则设置超时标志。DPSM:即数据通道状态机,类似CPSM。

注意:在写数据控制寄存器(SDIO_DCTRL),进行数据传输之前,须先写入该寄存器(SDIO_DTIMER)和数据长度寄存器(SDIO_DLEN)

8、数据长度寄存器(SDIO_DLEN)

 

该寄存器低25位有效,用于设置需要传输的数据字节长度。对于块数据传输,该寄存器的数值必须是数据块长度(通过SDIO_DCTRL设置)的倍数。即:假定数据块大小为512字节,那么SDIO_DLEN的设置,必须是512的整数倍,最大可以设置读取65535个数据块。

9、SDIO数据控制寄存器(SDIO_DCTRL)

 

该寄存器用于控制数据通道状态机(DPSM),包括数据传输使能、传输方向、传输模式、DMA使能、数据块长度等信息的设置。

10、SDIO状态寄存器(SDIO_STA)

 

状态寄存器可以用来查询SDIO控制器的当前状态,以便处理各种事务。比如SDIO_STA的位2表示命令响应超时,说明SDIO的命令响应出了问题,可以通过设置SDIO_ICR的位2则可以清除这个超时标志。

另外,SDIO的清除中断寄存器(SDIO_ICR)和中断屏蔽寄存器(SDIO_MASK),这两个寄存器和状态寄存器(SDIO_STA)每个位的定义都相同,只是功能不同。

11、SDIO数据FIFO寄存器(SDIO_FIFO)

 

数据FIFO寄存器包括接收和发送FIFO,它们又一组连续的32个地址上的32个寄存器组成,CPU可以使用FIFO读写多个操作数。


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

相关文章

一,sdio总线简介

sdio总线简介 一,简要二,SDIO总线物理电气特性 1,card电压的供电范围 2,信号pin脚定义 3,Bus Speed模式 三,SDIO Card类型分类四,SDIO Card 传输模式 一,简要 SDIO协议是由SD协议…

SDIO接口(3)——SDIO总线接口

SDIO总线接口 SDIO是在SD标准上定义了一种外设接口,故名思义,就是SD的I/O接口的意思。SD本来是记忆卡的标准,但是现在把SD连接一些外围I/O使用,这样边形成了SDIO接口。SDIO本身只是一种接口技术,类似于SPI接口&#x…

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

一、SD卡简介 1、什么是SD卡? SD卡(Secure Digital Memory Card)即:安全数码卡。它是在MMC的基础上发展而来,是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛的用于便携装置上使用,例如…

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…