STM32的SDIO功能框图及SDIO结构体

news2024/11/16 23:35:50

目录

STM32的SDIO功能框图及SDIO结构体

STM32的SDIO功能框图

SDIO适配器

命令路径

CPSM状态机

数据路径

DPSM状态机

数据FIFO

适配器寄存器

SDIO相关结构体

SDIO初始化结构体

SDIO命令初始化结构体

SDIO数据初始化结构体


STM32的SDIO功能框图及SDIO结构体

STM32的SDIO功能框图

        STM32控制器有一个SDIO,由两部分组成:SDIO适配器和APB2接口,SDIO适配器提供SDIO主机功能,可以提供SD时钟、发送命令和进行数据传输。APB2接口用于控制器访问SDIO适配器寄存器并且可以产生中断和DMA请求信号。

        SDIO使用两个时钟信号,一个是SDIO适配器时钟(SDIOCLK=HCLK(注意此情况适用于F1,对于F4来说SDIOCLK=48M)),另外一个是AHB总线时钟的二分频(HCLK/2,一般为36MHz)。SDIO_CK会对SDIOCLK分频,比如72M就三分频为24M。

        STM32控制器的SDIO是针对MMC卡和SD卡的主设备,所以预留有8根数据线,对于SD卡最多用四根数据线。

        大容量STM32F103xx共有8根SDIO的数据线,其中D4、D5、D6和D7作为预留,SD卡只用到了D0-D3,其它脚在MMC卡或者SDXC卡会用到。

SDIO适配器

        SDIO适配器是SD卡系统主机部分,是STM32控制器与SD卡数据通信中间设备。SDIO适配器由五个单元组成,分别是控制单元、命令路径单元、数据路径单元、寄存器单元以及FIFO。

        FIFO作为数据缓冲区,一共有32个字,可以用于当我们接收完32个字之后,再使用DMA进行传输。

命令路径

命令路径控制命令发送,并接收卡的响应,当SD卡处于某一状态时,SDIO适配器必然处于特定状态与之对应。STM32控制器以命令路径状态机(CPSM)来描述SDIO适配器状态变化,并加入了等待超时检测功能,以便退出永久等待的情况。

CPSM状态机

数据路径

        数据路径部件负责与SD卡相互数据传输,SDIO适配器以数据路径状态机(DPSM)来描述SDIO适配器状态变化情况。并加入了等待超时检测功能,以便退出永久等待情况。发送数据时,DPSM处于等待发送(Wait_S)状态,如果数据FIFO不为空,DPSM变成发送状态并且数据路径部件启动向卡发送数据。接收数据时,DPSM处于等待接收状态,当DPSM收到起始位时变成接收状态,并且数据路径部件开始从卡接收数据。

DPSM状态机

数据FIFO

        数据FIFO(先进先出)部件是一个数据缓冲器,带发送和接收单元。控制器的FIFO包含宽度为32bit、深度为32字的数据缓冲器和发送/接收逻辑。

        SDIO状态寄存器(SDIO_STA)的TXACT位用于指示当前正在发送数据,RXACT位指示当前正在接收数据,这两个位不可能同时为1。

  • 当TXACT为1时,可以通过AHB接口将数据写入到传输FIFO。
  • 当RXACT为1时,接收FIFO存放从数据路径部件接收到的数据。

根据FIFO空或满状态会把SDIO_STA寄存器位值1,并可以产生中断和DMA请求。

适配器寄存器

        适配器寄存器包含了控制SDIO外设的各种控制寄存器及状态寄存器,内容较多,可以通过SDIO提供的各种结构体来了解,这些寄存器的功能都被整合到了结构体或ST标准库之中。

SDIO相关结构体

        标准库函数对SDIO外设建立了三个初始化结构体,分别为SDIO初始化结构体SDIO_InitTypeDef、SDIO命令初始化结构体SDIO_CmdInitTypeDef和SDIO数据初始化结构体SDIO_DataInitTypeDef。

  • 初始化结构体成员用于设置SDIO工作环境参数,并由SDIO相应初始化配置函数或功能函数调用,这些参数将会被写入到SDIO相应的寄存器,达到配置SDIO工作环境的目的。
  • SDIO命令初始化结构体用于设置命令相关内容,比如命令号、命令参数、响应类型等等。
  • SDIO数据初始化结构体用于配置数据发送和接收参数,比如传输超时、数据长度、传输模式等等。

SDIO初始化结构体

SDIO初始化结构体用于配置SDIO基本工作环境,比如时钟分频、时钟沿、数据宽度等等。

  • SDIO_ClockEdge:主时钟SDIOCLK产生CLK引脚时钟有效沿选择,可选上升沿或下降沿,它设定SDIO时钟控制寄存器(SDIO_CLKCR)的NEGEDGE位的值,一般选择设置为高电平(上升沿)。
  • SDIO_ClockBypass:时钟分频旁路使用,可选使能或禁用,它设定SDIO_CLKCR寄存器的BYPASS位。如果使能旁路,SDIOCLK直接驱动CLK线输出时钟;如果禁用,使用SDIO_CLKCR寄存器的CLKDIV位值分频SDIOCLK,然后输出到CLK线。一般选择禁用时钟分频旁路。
  • SDIO_ClockPowerSave:节能模式选择,可选使能或禁用,它设定SDIO_CLKCR寄存器的PWRSAV位的值。如果使能节能模式,CLK线只有在总线激活时才有时钟输出;如果禁用节能模式,始终使能CLK线输出时钟。
  • SDIO_BusWide:数据线宽度选择,可选1位数据总线、4位数据总线或8为数据总线,系统默认使用1位数据总线,操作SD卡时在数据传输模式下一般选择4位数据总线。它设定SDIO_CLKCR寄存器的WIDBUS位的值。
  • SDIO_HardwareFlowControl:硬件流控制选择,可选使能或禁用,它设定SDIO_CLKCR寄存器的HWFC_EN位的值。硬件流控制功能可以避免FIFO发送上溢和下溢错误。
  • SDIO_ClockDiv:时钟分频系数,它设定SDIO_CLKCR寄存器的CLKDIV位的值,设置SDIOCLK与CLK线输出时钟分频系数:

        CLK线时钟频率=SDIOCLK/([CLKDIV+2])。

还要注意当SD/SDIO卡处于识别模式,SDIO_CK的频率必须设置低于400kHz

SDIO命令初始化结构体

        SDIO命令初始化结构体用于设置命令相关内容,比如命令号、命令参数、响应类型等等。

  • SDIO_Argument:作为命令的一部分发送到卡的命令参数,它设定SDIO参数寄存器(SDIO_ARG)的值。
  • SDIO_CmdIndex:命令号选择,它设定SDIO命令寄存器(SDIO_CMD)的CMDINDEX位的值。
  • SDIO_Response:响应类型,SDIO定义两个响应类型:长响应和短响应。根据命令号选择对应的响应类型。SDIO定义了四个32位的SDIO响应寄存器(SDIO_RESPx,x=1..4),短响应只用到SDIO_RESP1。
  • SDIO_Wait:等待类型选择,有三种状态可选,一种是无等待状态,超时检测功能启动;一种是等待中断,另外一种是等待传输完成。它设定SDIO_CMD寄存器的WAITPEND位和WAITINT位的值。
  • SDIO_CPSM:命令路径状态机控制,可选使能或禁用CPSM。它设定SDIO_CMD寄存器的CPSMEN位的值。

SDIO数据初始化结构体

        SDIO数据初始化结构体用于配置数据发送和接收参数,比如传输超时、数据长度、传输模式等等。它被SDIO_DataConfig函数使用。

  • SDIO_DataTimeOut:设置数据传输以卡总线时钟周期表示的超时周期,它设定SDIO数据定时器寄存器(SDIO_DTIMER)的值。在DPSM进入Wait_R或繁忙状态后开始递减,直到0还处于以上两种状态则将超时状态标志置1.
  • SDIO_DataLength:设置传输数据长度,它设定SDIO数据长度寄存器(SDIO_DLEN)的值。
  • SDIO_DataBlockSize:设置数据块大小,有多种尺寸可选,不同命令要求的数据块可能不同。它设定SDIO数据控制寄存器(SDIO_DCTRL)寄存器的DBLOCKSIZE位的值。
  • SDIO_TransferDir:数据传输方向,可选从主机到卡的写操作,或从卡到主机的读操作。它设定SDIO_DCTRL寄存器的DTDIR位的值。
  • SDIO_TransferMode:数据传输模式,可选数据块或数据流模式(仅适用于多媒体卡)。对于SD卡操作使用数据块类型。它设定SDIO_DCTRL寄存器的DTMODE位的值。
  • SDIO_DPSM:数据路径状态机控制,可选使能或禁用DPSM。它设定SDIO_DCTRL寄存器的DTEN位的值。要实现数据传输都必须使能SDIO_DPSM。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/800537.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3d软件动物生活习性仿真互动教学有哪些优势

软体动物是一类广泛存在于海洋和淡水环境中的生物,其独特的形态和生活习性给学生带来了新奇和有趣的学习主题,为了方便相关专业学科日常授课教学,web3d开发公司深圳华锐视点基于真实的软体动物,制作软体动物3D虚拟展示系统&#x…

发点实用的快捷键(mac

切换输入法:ctrlspace /ctrloptionspace(更快捷 切换网页: shifttab 切换应用界面:alttab 关闭页面:altw 搜索:altspace 展示mac隐藏文件: Commangshift . (点) 以下是一些浏览器快捷键&am…

【初阶C语言】认识和使用函数

1. 函数是什么 2. 库函数 3. 自定义函数 4. 函数参数 5. 函数调用 6. 函数的嵌套调用和链式访问 7. 函数的声明和定义 8. 函数递归 一、什么是函数 在数学中有函数,在C语言中也有函数,我们直接先给出一个定义: 在基维百科中函数被定义为子程…

MyBatisPlus入门到精通-1

MyBatisPlus(简称MP) 这篇博客主要讲解用MyBatisPlus进行三层架构中Dao层的开发 以这个为目的来进行我们的学习 我们会先通过一个概述和入门案例进行快速上手 之后我们再通过对我们原先的案列的问题进行分析 来进一步了解MP操作数据库的知识 快速入门 MP简介 MP是国人开发的…

HEVC并行处理技术介绍

h265 相比 h264 的复杂度 复杂度体现 ○ h265 帧内预测模式增多,h265 包含角度预测、DC 预测、平面模式等 35 种预测模式,远超 h264 的 17 种模式,帧内模式选择的复杂度大大增加; ○ h265 的区域划分方式更加多样化,提…

聊聊STM32串口通讯的话题

STM32 微控制器系列提供了多个串口模块,用于实现串口通讯。其中,STM32HAL 库中的 UART 驱动模块提供了一套方便易用的函数接口,可以用来配置和操作串口。 串口通讯是一种常见的数据传输方式,可以实现微控制器与外部设备或其他微控…

Jetbrains 2023.2教程

IDEA 2023.2 激活演示 Pycharm 2023.2 激活演示 WebStorm 2023.2 激活演示 Clion 2023.2 激活演示 DataGrip 2023.2 PhpStorm 2023.1.4 激活演示(2023.2尚未发布) RubyMine 2023.2 激活演示 获取方式 仔细看每一个工具演示的图片 本文由 mdnice …

深度探索 Elasticsearch 8.X:function_score 参数解读与实战案例分析

在 Elasticsearch 中,function_score 可以让我们在查询的同时对搜索结果进行自定义评分。 function_score 提供了一系列的参数和函数让我们可以根据需求灵活地进行设置。 近期有同学反馈,function_score 的相关参数不好理解,本文将深入探讨 f…

2023软件设计师中级备考经验分享(文中有资料链接分享)

先摊结论吧,软考中级设计师备考只是备考半个月(期间还摆烂了几天),然而成绩如下: 我自己都没想到会这么好的成绩。。。 上午题:推荐把软考通APP里的历年真题刷3-4遍,直接刷真题,然后…

TimescaleDB多节点功能概述

如果您有更大的pb级工作负载,则可能需要多个TimescaleDB实例。TimescaleDB多节点允许您运行和管理数据库集群,这可以为您提供更快的数据摄取,以及对大型工作负载响应更快、更高效的查询。 多节点架构 多节点TimescaleDB允许您将多个数据库连…

【学习笔记】视频检测方法调研

目录 1 引言2 方法2.1 视频目标跟踪2.1.1 生成式模型方法2.1.2 判别式模型方法2.1.2.1 基于相关滤波跟踪2.1.2.2 基于深度学习跟踪 2.2 视频异常检测2.2.1 基于重构方法2.2.2 基于预测方法2.2.3 基于分类方法2.2.4 基于回归方法 2.3 深度伪造人脸视频检测2.3.1 基于RNN时空融合…

UG NX二次开发(C++)-利用UFun函数获取曲面上等参数的点

文章目录 1、前言2、叶片的三维模型3、利用UFun函数获取曲面的三种方法3.1 利用UF_Modl来实现3.2 利用UF_Point来实现3.2 利用UF_So来实现4、结果展示1、前言 在多轴加工过程中(尤其是薄壁零件),由于需要根据工件表面的几何信息以获取切触点,然后生成刀位轨迹,本文以叶片…

UEditor 百度富文本编辑器使用 遇到问题

小小吐槽 碰到前后不分离项目,富文本使用的UEdtior UEditor 点击上传图片转base64 在ueditor.all.js文件中找到这个 callback()函数 这里使用根据图片的url转成base64 UEditore 粘贴图片转base64 UEditor回显图片(base64) 把ueditor.all…

【Docker】制作Docker私有仓库

文章目录 1. 安装私有镜像仓库2. 镜像仓库可视化3. 参考资料 1. 安装私有镜像仓库 由于之后我们需要推送到私有镜像仓库,我们预先安装好,使用的是Docker公司开发的私有镜像仓库Registry。 下载Registry的Docker镜像; docker pull registry:2使…

【Django+Vue】英文成绩管理平台--20230727

项目需求 能够满足大部分核心需求(标绿):报表部分应该比较难。 项目地址 前端编译 https://gitlab.com/m7840/toeic_vue_dist Vue源码 https://gitlab.com/m7840/toeic_vue Django源码 https://gitlab.com/m7840/toeic_python 项目…

docker部署nextcloud+onlyoffice详细教程【外置MySQL】

一、部署环境 系统版本:CentOS Linux release 7.9.2009 (Core) 配置:16C 16G MySQL:5.7.20 二、部署过程 1、安装docker和docker-compose 请百度 2、创建数据库和用户,并授权 因为我使用外置MySQL,所以需要先创…

从零开始学Docker(一):Docker的安装部署

前述:本次学习与整理来至B站【Python开发_老6哥】老师分享的课程,有兴趣的小伙伴可以去加油啦,附链接 Linux 环境:RockyLinux 9 版本管理 Docker引擎主要有两个版本:企业版(EE)和社区版&#…

C语言爱心代码

代码&#xff1a; #include <stdio.h> int main() { int i, j, k, l, m; char c3; //ASCII码里面 3 就是一个字符小爱心 for (i1; i<5; i) printf("\n"); //开头空出5行 for (i1; i<3; i) { //前3行中间有空隙分开来写 for (j1; j<32-2*i; j) p…

计算机图形学十三加速结构

加速光线追踪 摘要 在上一节中&#xff0c;我们介绍了whited-style 光线追踪的原理&#xff0c;以及实现细节。相比与光栅化中所使用的blinn-phong模型&#xff0c;光线追踪显著提升了图像质量&#xff0c;但是随之而来的问题是渲染速度过慢。因为在判断光线与场景交点的时候…

面试典中典之线程池的七大参数

文章目录 一、七大元素解释1.corePoolSize&#xff08;核心线程数&#xff09;&#xff1a;2.maximumPoolSize&#xff08;最大线程数&#xff09;&#xff1a;3.keepAliveTime&#xff08;线程空闲时间&#xff09;&#xff1a;4.unit&#xff08;时间单位&#xff09;&#x…