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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • oracle11g安装步骤详细图文教程

    oracle11g安装步骤详细图文教程一、下载oracle11g下载地址:https://www.oracle.com/database/technologies/oracle-database-software-downloads.h

    2022年7月3日
    27
  • data pipeline是做什么_pycharm创建爬虫项目

    data pipeline是做什么_pycharm创建爬虫项目一.保存至MongoDBimportpymongoclassMongoPipeline(object):#初始化参数def__init__(self,mongo_uri,mongo_db):self.mongo_uri=mongo_uriself.mongo_db=mongo_db#以依赖注入的…

    2025年11月17日
    5
  • 华三交换机配置access命令_H3C交换机配置基本命令详解

    华三交换机配置access命令_H3C交换机配置基本命令详解H3C交换机配置基本命令详解随着移动互联网趋势加快以及智能终端的快速普及,WLAN应用需求在全球保持高速增长态势。下面是小编整理的关于H3C交换机配置基本命令详解,希望大家认真阅读!1、配置主机名[H3C]systemnameH3C2、配置console口密码#进入系统视图。system-view#进入AUX用户界面视图。[H3C]user-interfaceaux0#设置通过Con…

    2022年6月20日
    199
  • Matlab绘图-很详细,很全面

    Matlab绘图-很详细,很全面

    Matlab绘图
    强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数。此外,Matlab还提供了直接对图形句柄进行操作的低层绘图操作。这类操作将图形的每个图形元素(如坐标轴、曲线、文字等)看做一个独立的对象,系统给每个对象分配一个句柄,可以通过句柄对该图形元素进行操作,而不影响其他部分。
    本章介绍绘制二维和三维图形的高层绘图函数以及其他图形控制

    2022年5月31日
    38
  • CentOS网络接口配置文件ifcfg-eth详解

    CentOS网络接口配置文件ifcfg-eth详解

    2021年10月18日
    52
  • OHEM介绍

    OHEM介绍在two-stage检测算法中,RPN阶段会生成大量的检测框,由于很多时候一张图片可能只会有少量几个目标,也就是说绝大部分框是没有目标的,为了减少计算就需要进行sample,一般来说fasterrcnn的sample机制是算框和label的IOU,大于0.7认为是正样本,小于0.3是负样本。但是单纯的random_sample选出来的框不一定是最容易错的框。那么ohem就是较好的一种正负样本策略

    2022年5月30日
    104

发表回复

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

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