STM32 的 SDIO 接口(基于STM32F429HAL库)

目录

一、引言

二、SDIO 控制器组成

1.时钟管理模块   

2.命令通道模块

3.数据通道模块

4.中断管理模块

三、STM32F429 的 SDIO 特性

1.高速数据传输

2.兼容性强

3.灵活的配置选项

4.可靠性和稳定性 

四、HAL 库中的 SDIO 相关结构和函数

1.SD_HandleTypeDef结构体

2.HAL_SD_Init函数

3.HAL_SD_ReadBlocks和HAL_SD_WriteBlocks函数 

五、SDIO 接口配置步骤 

1.开启 SDIO 时钟和相关 GPIO 时钟

2.配置 GPIO 引脚

3.初始化 SDIO 接口

4.卡识别和初始化

六、数据读写操作

1.读取数据

2.写入数据

3.错误处理

七、应用实例

1.数据存储与读取

2.文件系统支持

八、总结


​​​​​​​

一、引言

        在嵌入式系统开发中,存储设备的高效访问和数据传输是至关重要的。STM32 系列微控制器提供的 SDIO(Secure Digital Input/Output)接口为与 SD 卡、MMC(MultiMediaCard)卡等存储设备的连接提供了强大的解决方案。本文将以 STM32F429 和 HAL 库为例,详细介绍 SDIO 接口的工作原理、配置方法以及实际应用。

二、SDIO 控制器组成

1.时钟管理模块   

  • 负责产生和管理 SDIO 接口所需的时钟信号。可以根据不同的应用需求调整时钟频率,以实现最佳的数据传输速度和功耗平衡。
  • 与系统时钟源进行连接,通过分频和倍频等操作生成适合 SDIO 通信的时钟信号。例如,从高速的系统时钟中分频得到合适的 SDIO 时钟,确保数据传输的稳定性和准确性。

2.命令通道模块

  • 用于发送和接收 SDIO 命令。与外部 SDIO 设备进行通信时,通过命令通道发送各种操作指令,如读、写、擦除等命令。
  • 解析从外部设备接收到的响应命令,将其传递给处理器进行进一步处理。例如,当发送一个读命令后,等待外部设备的响应,并将读取的数据传输到内部数据缓冲区。

3.数据通道模块

  • 负责数据的传输。在读写操作中,通过数据通道将数据从处理器传输到外部设备,或者从外部设备读取数据并传输到处理器。
  • 支持不同的数据传输模式,如 1 位和 4 位数据传输模式。可以根据外部设备的特性和应用需求选择合适的数据传输模式,以提高数据传输效率。

4.中断管理模块

  • 监测 SDIO 接口的状态变化,并产生中断信号通知处理器。例如,当数据传输完成、错误发生或卡插入 / 移除时,触发相应的中断。
  • 处理器可以通过中断服务程序及时响应这些事件,提高系统的实时性和响应速度。中断管理模块可以配置不同的中断源和优先级,以满足复杂应用的需求。

三、STM32F429 的 SDIO 特性

1.高速数据传输

1.1 支持多种数据传输模式:

  • 1 位数据传输模式:适用于对数据传输速度要求不高的场景,可降低硬件设计的复杂性。
  • 4 位数据传输模式:能够实现高速数据传输,提高数据吞吐量,满足对性能要求较高的应用。

1.2 高时钟频率:

  • 可以配置较高符合 SD 卡规范版本:的时钟频率,以加快数据传输速度。具体的时钟频率取决于系统设计和 SD 卡的性能。
  • 例如,在某些应用中,可以将 SDIO 时钟配置为几十兆赫兹,从而实现快速的数据读写操作。

2.兼容性强

2.1 支持多种存储卡类型:

  • SD 卡:包括标准 SD 卡、高容量 SD 卡(SDHC)和超大容量 SD 卡(SDXC)。能够与不同容量和规格的 SD 卡进行通信,满足各种存储需求。
  • MMC 卡:支持 MultiMediaCard 标准的存储卡,具有广泛的应用场景。STM32F429 的 SDIO 接口可以与 MMC 卡进行兼容通信。

2.2 符合 SD 卡规范版本:

  • 支持 SD 卡规范版本 2.0 和更高版本。这意味着它能够与符合这些规范的 SD 卡进行交互,确保兼容性和稳定性。
  • 对于新推出的 SD 卡,也有较高的兼容性概率,能够适应不断发展的存储技术。

3.灵活的配置选项

3.1 中断支持:

  • 具备中断功能,可以在数据传输完成、卡插入 / 移除等事件发生时产生中断信号。这使得微控制器能够及时响应 SDIO 接口的状态变化,提高系统的实时性。
  • 例如,当 SD 卡中有新的数据写入时,可以通过中断通知微控制器进行数据处理,避免数据丢失或延迟处理。

3.2 电源管理

  • 支持多种电源管理模式,以适应不同的应用需求。可以根据系统的功耗要求和 SD 卡的特性,选择合适的电源模式。
  • 例如,在低功耗模式下,可以降低 SDIO 接口的功耗,延长电池寿命。同时,在需要高速数据传输时,可以切换到高性能电源模式。

3.3 GPIO 配置灵活

  • SDIO 接口的 GPIO 引脚可以进行灵活配置,以适应不同的硬件设计。可以选择不同的 GPIO 引脚作为 SDIO 的数据线、时钟线、命令线等。
  • 这使得开发者可以根据实际的 PCB 布局和硬件资源,进行最优的引脚分配,提高系统的可扩展性和兼容性。

4.可靠性和稳定性 

4.1 数据校验和错误处理

  • 在数据传输过程中,STM32F429 的 SDIO 接口支持数据校验功能,如 CRC(Cyclic Redundancy Check)校验。可以检测数据传输中的错误,并采取相应的错误处理措施。
  • 例如,当检测到数据错误时,可以重新发送数据请求,确保数据的准确性和完整性。

4.2 卡检测和初始化 

  • 能够自动检测 SD 卡或 MMC 卡的插入和移除,并进行相应的初始化操作。这使得系统能够在卡插入时自动识别并配置存储卡,提高了系统的易用性和可靠性。
  • 在初始化过程中,SDIO 接口会发送一系列命令来获取卡的信息,并设置合适的数据传输模式和参数,确保数据传输的稳定性。

四、HAL 库中的 SDIO 相关结构和函数

1.SD_HandleTypeDef结构体

  • 用于存储 SDIO 接口的配置信息和状态变量。包括时钟频率、数据传输模式、中断使能等参数。
  • 例如,可以通过设置该结构体中的成员变量来配置 SDIO 接口的工作模式。

2.HAL_SD_Init函数

  • 用于初始化 SDIO 接口。该函数会根据传入的参数配置 SDIO 时钟、GPIO 引脚等,并进行卡的识别和初始化。
  • 示例代码:
SD_HandleTypeDef hsd;
HAL_SD_Init(&hsd);

3.HAL_SD_ReadBlocksHAL_SD_WriteBlocks函数 

  • 分别用于从 SD 卡读取数据块和向 SD 卡写入数据块。
  • 参数包括存储数据的缓冲区地址、SD 卡中的起始地址、要读取或写入的数据块数量等。
  • 示例代码:
uint8_t buffer[512];
HAL_SD_ReadBlocks(&hsd, buffer, 0, 1, HAL_MAX_DELAY);
HAL_SD_WriteBlocks(&hsd, buffer, 0, 1, HAL_MAX_DELAY);

五、SDIO 接口配置步骤 

1.开启 SDIO 时钟和相关 GPIO 时钟

  • 使用__HAL_RCC_SDIO_CLK_ENABLE()开启 SDIO 时钟。
  • 根据连接 SD 卡的 GPIO 引脚,开启相应的 GPIO 时钟。

2.配置 GPIO 引脚

  • 将用于 SDIO 接口的 GPIO 引脚设置为复用功能模式,例如推挽输出或复用推挽输出。
  • 设置引脚的速度和上拉 / 下拉电阻等参数。

3.初始化 SDIO 接口

  • 创建一个SD_HandleTypeDef结构体变量,并设置其成员变量,如时钟频率、数据传输模式等。
  • 调用HAL_SD_Init函数进行初始化。

4.卡识别和初始化

  • 在初始化过程中,SDIO 接口会自动发送命令进行卡的识别和初始化。
  • 可以通过检查返回值来确定初始化是否成功。

六、数据读写操作

1.读取数据

  • 使用HAL_SD_ReadBlocks函数从 SD 卡读取指定数量的数据块到缓冲区中。
  • 可以根据需要设置读取的起始地址和数据块数量。

2.写入数据

  • 使用HAL_SD_WriteBlocks函数将缓冲区中的数据写入 SD 卡。
  • 同样需要设置写入的起始地址和数据块数量。

3.错误处理

  • 在数据读写过程中,可能会出现错误。可以通过检查返回值和SD_Error枚举类型来确定错误类型,并进行相应的处理。

七、应用实例

1.数据存储与读取

  • 在嵌入式系统中,可以使用 SDIO 接口将传感器数据、日志信息等存储到 SD 卡中。
  • 当需要读取数据时,再从 SD 卡中读取出来进行分析和处理。

2.文件系统支持

  • 可以在 SD 卡上创建文件系统,如 FATFS,以便更方便地管理数据。
  • 通过文件系统,可以进行文件的创建、删除、读取和写入等操作。

八、总结

STM32F429 的 SDIO 接口结合 HAL 库提供了一种方便、高效的数据存储解决方案。通过正确配置和使用 SDIO 接口,可以实现嵌入式系统与 SD 卡等存储设备的快速数据传输。在实际应用中,需要注意电源供应、时钟频率设置、卡的兼容性等问题,并进行充分的错误处理,以确保系统的稳定性和可靠性。

希望本文对大家在使用 STM32F429 的 SDIO 接口时有所帮助。

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

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

相关文章

基于SpringBoot+Vue的在线问诊管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…

OpenCV特征检测(12)检测图像中的潜在角点函数preCornerDetect()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 计算用于角点检测的特征图。 该函数计算源图像的基于复杂空间导数的函数 dst ( D x src ) 2 ⋅ D y y src ( D y src ) 2 ⋅ D x x src − 2 …

vue使用PDF.JS踩的坑--部署到服务器上显示pdf.mjs viewer.mjs找不到资源

之前项目使用的pdf.js 是2.15.349版本,最近换了一个4.6.82的版本,在本地上浏览文件运行的好好的,但是发布到服务器(IIS)上打不开文件,控制台提示找不到pdf.mjs viewer.mjs。 之前使用的2.15.349pdf和viewer…

自动换行且带下划线的居中长标题的论文封面一种绘图实现

自动换行且带下划线的居中长标题的论文封面一种绘图实现 引言 在一些学位论文的封面上要求标题带有下划线,但长标题的情况下标题自动换行后下划线就会面临一些问题。 因此,往往需要一些特殊的处理。 在《如何制作自动换行且有定长下划线的论文封面模板…

第九节 Opencv自带颜色表操作

知识点:Look Up lTable(LUT)查找表 了解LUT查找表的作用与用法,代码实现与API介绍 -applyColorMap(src,dst,COLORMAP) -src表示输入图像 -dst表示输出图像 匹配到的颜色LUT,Opencv支持13种…

17.2 ksm源码讲解

本节重点介绍 : k8s资源对象的 buildStores构造函数注入MetricFamiliesk8s client-go 之 Reflector listAndWatch 方法watchHandler 监听更新,调用add等action 架构图总结 项目地址 地址 go get go get -v -d k8s.io/kube-state-metrics/v2v2.1.1源码分析 m…

【Godot4.3】自定义数列类NumList

概述 数列是一种特殊数组。之前写过等比、等差数列、斐波那契等数列的求取函数。今天就汇总到一起,并添加其他的一些数列,比如平方数、立方数、三角形数等。 这里我首先采用以前比较喜欢的静态函数库的写法,然后在其基础上改进为基于类继承…

大数据毕业设计选题推荐-国潮男装微博评论数据分析系统-Hive-Hadoop-Spark

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇…

[vulnhub] Jarbas-Jenkins

靶机链接 https://www.vulnhub.com/entry/jarbas-1,232/ 主机发现端口扫描 扫描网段存活主机,因为主机是我最后添加的,所以靶机地址是135的 nmap -sP 192.168.75.0/24 // Starting Nmap 7.93 ( https://nmap.org ) at 2024-09-21 14:03 CST Nmap scan…

Android中高级面试题笔记题理论知识大全(PDF免费下载)

Android中高级面试题笔记题理论知识大全(PDF免费下载) 基本上全覆盖了市面上中大厂的面试题,笔试题。而且持续更新。 而且现在市场行情非常不好,所以多学点,背点面试题,笔记题目总没有坏处,只有好处。想获取更多资料: …

手机上轻松解压并处理 JSON 文件

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,在手机上有着广泛的应用场景。 首先,在数据传输方面,许多移动应用程序通过网络请求与后端服务器进行交互,而服务器端的 API 接口通常使用 JS…

[Redis][持久化][上][RDB]详细讲解

目录 0.前言1.RDB0.是什么?1.触发机制2.流程说明3.RDB文件的处理4.RDB的优缺点 0.前言 Redis ⽀持 RDB 和 AOF 两种持久化机制,持久化功能有效地避免因进程退出造成数据丢失问题,当下次重启时利⽤之前持久化的⽂件即可实现数据恢复 RDB ->…

Qt/C++ 了解NTFS文件系统,解析MFT主文件表中的常驻属性与非常驻属性

系列文章目录 整个专栏系列是根据GitHub开源项目NTFS-File-Search获取分区所有文件/目录列表的思路。 具体的如下: Qt/C 了解NTFS文件系统,了解MFT(Master File Table)主文件表(一) 介绍NTFS文件系统,对比通过MFT(Master File Tab…

16、斑马设备的ppocer-4进行文字识别,和opencv-mobile中文显示

基本思想:手上有个斑马设备,是客户的,简单记录一下开发过程和工程项目,同时记录跟着android小哥学习了很多anroid的知识,转ppocr-4参考之前的ppocr-3转换即可,整个框架仍然使用c++ ncnn jni框架推理和现实,图像库使用opencv-mobile 一、首先转paddle-cor-4 到ncnn的框架…

Pointnet++改进59:全网首发MogaBlock(2024最新模块)|用于在纯基于卷积神经网络的模型中进行判别视觉表示学习,具有良好的复杂性和性能权衡

简介:1.该教程提供大量的首发改进的方式,降低上手难度,多种结构改进,助力寻找创新点!2.本篇文章对Pointnet++特征提取模块进行改进,加入MogaBlock,提升性能。3.专栏持续更新,紧随最新的研究内容。 目录 1.理论介绍 2.修改步骤 2.1 步骤一 2.2 步骤二 2.3 步骤三 1.…

pdf怎么删除空白页?分享5个删除pdf页面的方法(批量删除法)

pdf文件因其跨平台、格式稳定的特性,已成为我们工作、学习中不可或缺的一部分。那么在编辑pdf格式文档中,总会遇到一些难题,比如说pdf怎么删除空白页 pdf与word一样,具备了多种编辑功能,只不过是word倾向于编辑&#x…

gitlab集成CI/CD,shell方式部署

目录 1.首先安装好gitlab和gitlab-runner,这两个,看我以往的教程 2.注册新的 Runner 3. 步骤 3.1 Enter the GitLab instance URL (for example, https://gitlab.com/): 3.2 Enter the registration token: 3.3 Enter a description for the runner: 3…

Python模块和包:自定义模块和包③

文章目录 一、模块1.1 什么是模块1.2 创建模块1.3 导入模块1.4 模块的命名空间 二、包2.1 什么是包2.2 创建包2.3 导入包2.4 包的命名空间 三、综合详细例子3.1 项目结构3.2 模块代码student.pycourse.pymanager.py 3.3 主程序代码main.py 3.4 运行结果 四、总结 Python模块和包…

Java 中的运算符重载

在这篇文章中,我们将深入探讨 Java 中 Operator 重载的迷人世界。尽管 Java 本身不支持运算符重载,但我们将发现 Manifold 如何使用该功能扩展 Java。我们将探讨它的好处、局限性和用例,尤其是在科学和数学代码方面。 我们还将探索 Manifold …

高清8k电脑壁纸分享

Hello!欢迎各位新老朋友来看小弟博客,祝大家事业顺利,财源广进!! 主题:高清壁纸分享 文件太大上传不上去😅😅😅😅😅,需要的朋友自取&…