stm32的sdio接口_STM32F411

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

一、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设备。
特点

  • ①与多媒体卡系统规格书版本4.2全兼容。支持三种不同的数据总线模式:1位(默认)、4位和8位。
  • ②与较早的多媒体卡系统规格版本全兼容(向前兼容)。
  • ③与SD存储卡规格版本2.0全兼容。
  • ④与SD I/O卡规格版本2.0全兼容:支持两种不同的数据总线模式:1位(默认)和4位。
  • ⑤完全支持CE-ATA功能(与CE-ATA数字协议版本1.1全兼容)。 8位总线模式下数据传输速率可达48MHz。
  • ⑥数据和命令输出使能信号,用于控制外部双向驱动器。

二、SDIO框图以及SDIO时钟

在这里插入图片描述复位后SDIO_D0用于数据传输。初始化后主机可以改变数据总线的宽度(通过ACMD6命令设置)。如果一个多媒体卡接到了总线上,则SDIO_D0、SDIO_D[3:0]或SDIO_D[7:0]可以用于数据传输。
MMC版本V3.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。
在这里插入图片描述
注意:在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位)。SD卡总共有6类响应(R1、R1b、R2、R3、R6、R7),我们这里以R1为例简单介绍一下。R1(普通响应命令)响应属于短响应
1、STM32 SDIO短响应(48位)格式如下表所示:在这里插入图片描述
2、STM32 SDIO长响应(136位)格式如下表所示:在这里插入图片描述
不论是短响应还是长响应,硬件都会自动滤除了起始位、传输位、CRC7以及结束位等信息,对于短响应,命令索引存放在SDIO_RESPCMD寄存器,参数则存放在SDIO_RESP1寄存器里面。对于长响应,则仅留CID/CSD位域,存放在SDIO_RESP1~SDIO_RESP4等4个寄存器。

四、SDIO块数据传输

1、读数据块操作
SDIO与SD卡通信一般以数据块的形式进行传输,SDIO(多)数据块读操作,如下图所示:
在这里插入图片描述

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

2、写数据块操作
SDIO(多)数据块写操作,如下图所示:在这里插入图片描述

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

五、SDIO寄存器介绍
1、SDIO电源控制寄存器(SDIO_POWER)在这里插入图片描述

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

2、SDIO时钟控制寄存器(SDIO_CLKCR)在这里插入图片描述
3、SDIO参数寄存器(SDIO_ARG)
在这里插入图片描述
4、SDIO命令寄存器(SDIO_CMD)在这里插入图片描述

  • 低6位为命令索引,即要发送的命令索引号(如发送CMD1,其值为1,索引就设置为1)。位[7:6],用于设置等待响应位,用于指示CPSM是否需要等待,以及等待类型等。

5、SDIO命令响应寄存器(SDIO_RESPCMD)
在这里插入图片描述

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

6、SDIO命令响应1~ 4寄存器(SDIO_RESPx,x=1~4)在这里插入图片描述

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

7、SDIO数据定时器寄存器(SDIO_DTIMER)
在这里插入图片描述

  • 该寄存器用于存储以卡总线时钟(SDIO_CK)为周期的数据超时时间,一个计数器将从SDIO_DTIMER寄存器加载数值,并在数据通道状态机(DPSM)进入Wait_R或繁忙状态时进行递减计数,当DPSM处在这些状态时,如果计数器减为0,则设置超时标志。
  • 注意:在写入数据控制寄存器(SDIO_DCTRL),进行数据传输之前,须先写入该寄存器(SDIO_DTIMER)和数据长度寄存器(SDIO_DLEN)!

8、SDIO数据长度寄存器(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的命令响应出了问题。

11、SDIO数据FIFO寄存器(SDIO_FIFO)在这里插入图片描述

  • 数据FIFO寄存器包括接收和发送FIFO,他们由一组连续的32个地址上的32个寄存器组成,CPU可以使用FIFO读写多个操作数。例如我们要从SD卡读数据,就必须读SDIO_FIFO寄存器,要写数据到SD卡,则要写SDIO_FIFO寄存器。SDIO将这32个地址分为16个一组,发送接收各占一半。而我们每次读写的时候,最多就是读取接收FIFO或写入发送FIFO的一半大小的数据,也就是8个字(32个字节)。
  • 注意:操作SDIO_FIFO必须是以4字节对齐的内存操作,否则可能出错!

SDIO接口就介绍到这里啦@@@@@

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/186254.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月3日 下午9:16
下一篇 2022年10月3日 下午9:16


相关推荐

  • Flex 布局教程:语法篇(阮一峰)

    Flex 布局教程:语法篇(阮一峰)Flex 布局教程 语法篇作者 nbsp 阮一峰日期 nbsp 2015 年 7 月 10 日网页布局 layout 是 CSS 的一个重点应用 布局的传统解决方案 基于盒状模型 依赖 nbsp display 属性 nbsp position 属性 nbsp float 属性 它对于那些特殊布局非常不方便 比如 垂直居中就不容易实现 2009 年 W3C 提

    2026年3月16日
    3
  • OpenClaw Skills 博客监控(Blogwatcher)技能使用参考手册

    OpenClaw Skills 博客监控(Blogwatcher)技能使用参考手册

    2026年3月13日
    11
  • java拦截器_Java拦截器[通俗易懂]

    java拦截器_Java拦截器[通俗易懂]拦截器,主要用于拦截前端请求,常用于登录检查。下面是演示使用拦截器拦截未登录的用户访问需要登录的模块情景,使用配置方式实现和注解方式实现代码:配置方式:1、web.xml中配置监听器,对于所有的/admin开头的请求,都走com.blog.interceptor.LoginInterceptor这个拦截器。2、再看com.blog.interceptor.LoginInterceptor的实现代码…

    2022年4月29日
    189
  • SVN汉化包安装后无效果(已解决)「建议收藏」

    SVN汉化包安装后无效果(已解决)「建议收藏」SVN汉化包安装后无效果(已解决)上图是我下载的SVN客户端的版本。下图是汉化包版本然后我就按部就班的一步一步安装,但始终不能设置语言为中文后来才知道是版本不对,汉化包和客户端版本要一致才行。最后我重新下了一个版本的汉化包再安装(我就把汉化包下载在桌面上,然后点击安装的),问题解决。如下图:相关链接SVN客户端下载地址:https://tortoisesvn.net/downloa…

    2025年7月24日
    6
  • 关于学术论文投稿中的 Cover Letter「建议收藏」

    关于学术论文投稿中的 Cover Letter「建议收藏」  学术期刊报道原始研究工作的论文,一般分为需要快速发表的通信、快报类(communication,letter等)和报道系统研究工作的全文类(fullpaper,article)两种形式。投这两种文章,coverletter和论文Introduction的写法是不同的。    对于需要以通讯或快报形式快速发表的工作,可以是初步的研究结果(preliminaryresult),强调的是工…

    2022年5月22日
    52
  • 常见的测试用例设计方法有哪些呢?「建议收藏」

    常见的测试用例设计方法有哪些呢?「建议收藏」知乎问题:常见的测试用例设计方法有哪些呢?有什么比较好的基础理论书籍推荐吗? [我的回答]2018年8月25日测试用例设计技术和方法,其目的是为了解决测试分析与设计过程中碰到的问题,纯粹的理论只是应用技术和方法的基础,但不是目的。测试用例分析与设计过程,需要我们不断的应用结构化思维、发散性思维和可视化思维,以构建系统化的测试分析与设计框架。 我将2011年写的《软件测试设计…

    2022年6月23日
    27

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号