STM32 SDIO详解

article/2025/10/24 2:43:56

目录

01、SDIO简介

02、SDIO特点

03、SDIO时钟

04、SDIO的命令与响应

05、SDIO块数据传输

06、代码


1、SDIO简介

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

SDIO和SD卡规范间的一个重要区别是增加了低速标准。低速卡的目标应用是以最小的硬件开支支持低速I/O能力。低速卡支持类似调制解调器、条码扫描仪和GPS接收器等应用。

STM32的SDIO控制器支持多媒体卡(MMC卡)、SD存储卡、SDI/O卡和CE-ATA设备。

SDIO框图

复位后SDIO_D0用于数据传输。初始化后主机可以改变数据总线的宽度(通过ACMD6命令设置)

如果一个多媒体卡接到了总线上,则SDIO_D0、SDIO_D[3:0]或SDIO_D[7:0]可以用于数据传输。      

MMC版本V3.31和之前版本的协议只支持1位数据线,所以只能用SDIO_D0(为了通用性考虑,在程序里面我们只要检测到是MMC卡就设置为1位总线数据)

02、SDIO特点

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

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

③与SD存储卡规格版本2.0全兼容。

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

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

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

03、SDIO时钟

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

  2. SDIO适配器时钟(SDIOCLK):该时钟用于驱动SDIO适配器,可用于产生SDIO_CK时钟。SDIOCLK来自PLL48CK(48Mhz)。

APB2总线接口时钟(PCLK2):该时钟用于驱动SDIO的APB2总线接口,其频率为PCLK2=84Mhz。

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

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

04、SDIO的命令与响应

命令

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

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

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

响应

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

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

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

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

SD卡的响应

SD卡总共有6类响应(R1、R1b、R2、R3、R6、R7),我们这里以R1为例简单介绍一下。R1(普通响应命令)响应属于短响应,其长度为48位,如下表所示:

在收到R1响应后,我们可以从SDIO_RESPCMD寄存器和SDIO_RESP1寄存器分别读出命令索引和卡状态信息。关于其他响应的介绍,请大家参考光盘:《SD卡2.0协议.pdf》

05、SDIO块数据传输

多数据块读操作

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

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

多数据块写操作

SDIO(多)数据块写操作,如下图所示

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

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

06、代码

STM32的SDIO控制器驱动还是很复杂的,ST提供了stm32f2x_sdio_sd.c驱动文件,我们组要修改对应的GPIO驱动即可。

/*** @brief  Initializes the SD Card and put it into StandBy State (Ready for *         data transfer).* @param  None* @retval None*/
void SD_LowLevel_Init(void)
{GPIO_InitTypeDef  GPIO_InitStructure;/* GPIOC and GPIOD Periph clock enable */RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | SD_DETECT_GPIO_CLK, ENABLE);GPIO_PinAFConfig(GPIOC, GPIO_PinSource8, GPIO_AF_SDIO);GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_SDIO);GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_SDIO);GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_SDIO);GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_SDIO);GPIO_PinAFConfig(GPIOD, GPIO_PinSource2, GPIO_AF_SDIO);/* Configure PC.08, PC.09, PC.10, PC.11 pins: D0, D1, D2, D3 pins */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;GPIO_Init(GPIOC, &GPIO_InitStructure);/* Configure PD.02 CMD line */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;GPIO_Init(GPIOD, &GPIO_InitStructure);/* Configure PC.12 pin: CLK pin */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_Init(GPIOC, &GPIO_InitStructure);/*!< Configure SD_SPI_DETECT_PIN pin: SD Card detect pin *//*GPIO_InitStructure.GPIO_Pin = SD_DETECT_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;GPIO_Init(SD_DETECT_GPIO_PORT, &GPIO_InitStructure);*//* Enable the SDIO APB2 Clock */RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDIO, ENABLE);/* Enable the DMA2 Clock */RCC_AHB1PeriphClockCmd(SD_SDIO_DMA_CLK, ENABLE);
}

DMA等配置使用默认的即可。

我们需要使用的函数接口有

SD_Error SD_Init(void);
SD_Error SD_Erase(uint32_t startaddr, uint32_t endaddr);
SD_Error SD_WriteBlock(uint8_t *writebuff, uint32_t WriteAddr, uint16_t BlockSize);
SD_Error SD_ReadBlock(uint8_t *readbuff, uint32_t ReadAddr, uint16_t BlockSize);

下载验证

SDIO驱动和硬件PCB开源地址:

https://github.com/strongercjd/STM32F207VCT6

点击查看本文所在的专辑,STM32F207教程

关注公众号,第一时间收到文章更新。评论区不能及时看到,需要交流可以到公众号沟通


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

相关文章

SDIO简介

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

SDIO接口

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

SDIO接口(1)——SDIO简介

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

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

目录 一、SD卡简介 1.1历史 1.2 tf卡和SD卡的区别 1.3 mmc&#xff0c;emmc&#xff0c;nand&#xff0c;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&#xff1a;安全数字输入输出 目录 定义 功能 二、SDIO协议 介绍 信号 协议 一般协议 写协议 读协议 命令 命令格式 命令应答 数据 三、一文搞懂SDIO 四、SDIO简介 五、SD卡引脚定义和图连接 六、SDIO协议简介 七、MMC、SD、TF、SDIO、SDMMC简…

SDIO协议

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

硬件接口之SDIO

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

一文搞懂SDIO

SDIO总线简介 SDIO(Secure Digital Input and Output)&#xff0c;即安全数字输入输出接口。它是在SD卡接口的基础上发展而来&#xff0c;它可以兼容之前的SD卡&#xff0c;并可以连接SDIO接口设备&#xff0c;比如&#xff1a;蓝牙、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 服务器端 下载地址&#xff1a;https://www.visualsvn.com/server/download/ 1.在官网中下载visualSVN server服务器端 2.安装下载的visualSVN server&#xff0c;选择默认选项即可 二、安装号visualSVN server后&#xff0c;创建一个代码创库&am…

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

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

安装VisualSVN server

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

VS2019安装 VisualSVN Server 插件

选择VisualSVN for Visual Studio 2019 进行安装&#xff0c;网址&#xff1a;https://www.visualsvn.com/visualsvn/download/

VisualSVN的下载与安装

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

vs2010插件之VisualSVN

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

Vs插件 VisualSvn破解

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

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

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

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

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

VisualSVN Server的配置和使用方法

VisualSVN Server搭建SVN服务器 使用原始的SVN和Apache相配合来实现源代码的SVN管理&#xff0c;虽然专业且功能强大&#xff0c;但对于一般个人用户来说未免太过复杂。而使用VisualSVN Server来实现主要的SVN功能则简单得多。 简单的直接看前面&#xff0c;详细的看后面部分。…

用VisualSVN做项目版本控制

一、SVN服务端 1、VisualSVN Server下载&#xff1a; http://download.csdn.net/detail/jiminull/4448874 或 http://www.visualsvn.com/server/download/ VisualSVN Server是免费的 2、VisualSVN Server安装&#xff1a; 下载完VisualSVN Server后&#xff0c;只要双击V…