【STM32】SDIO—SD 卡读写01

news2025/1/8 19:24:52

基于stm32f103
基于零死角玩转STM32—F103指南者

简介

1.SD 卡总共有 8 个寄存器,用于设定或表示 SD 卡信息。
在这里插入图片描述

2.SD卡的寄存器不能像STM32那样访问,而是利用命令访问,SDIO 定义了 64 个命令。SD 卡接收到命令后,根据命令要求对 SD 卡内部寄存器进行修改,程序控制中只需要发送组合命令就可以实现 SD 卡的控制以及读写操作。

总线

在这里插入图片描述
1.SD 卡一般都支持 SDIO 和 SPI 这两种接口。另外,STM32F42x系列控制器的 SDIO是不支持 SPI 通信模式的,如果需要用到 SPI 通信只能使用 SPI 外设。

2.SD 卡使用 9-pin 接口通信,其中 3 根电源线、1 根时钟线、1 根命令线和 4 根数据线.

CLK:时钟线,由 SDIO 主机产生,即由 STM32 控制器输出;
CMD:命令控制线,SDIO 主机通过该线发送命令控制 SD 卡,如果命令要求 SD 卡提供应答(响应),SD 卡也是通过该线传输应答信息;
D0-3:数据线,传输读写数据;SD 卡可将 D0 拉低表示忙状态;
VDD、VSS1、VSS2:电源和地信号。

SD 卡操作过程会使用两种不同频率的时钟同步数据,一个是识别卡阶段时钟频率 FOD,最高为 400kHz,另外一个是数据传输模式下时钟频率 FPP,默认最高为 25MHz,如果通过相关寄存器配置使 SDIO 工作在高速模式,此时数据传输模式最高频率为 50MHz

总线协议

SDIO 不管是从主机控制器向 SD 卡传输,还是 SD 卡向主机控制器传输都只以 CLK 时钟线的上升沿为有效.

SD 总线通信是基于命令和数据传输的。通讯由一个起始位(“0”),由一个停止位(“1”)终止。SD 通信一般是主机发送一个命令(Command),从设备在接收到命令后作出响应(Response),如有需要会有数据(Data)传输参与。

SD 数据是以(Black)形式传输,数据块长度一般为 512 字节,数据可以从主机到卡,也可以是从卡到主机。

STM32 控制器可以控制使用单线4 线传输。

在这里插入图片描述

命令和响应

一个完整的 SD 卡操作过程是:主机(单片机等)发起“命令”,SD 卡根据命令的内容决定是否发送响应信息及数据等,如果是数据读/写操作,主机还需要发送停止读/写数据的命令来结束本次操作,这意味着主机发起命令指令后,SD 卡可以没有响应、数据等过程,这取决于命令的含义。
在这里插入图片描述

命令格式

SD 命令格式固定为 48bit,都是通过 CMD 线连续传输的(数据线不参与)
在这里插入图片描述
SD 命令的组成如下:
起始位和终止位:命令的主体包含在起始位与终止位之间,它们都只包含一个数据位,起始位为 0,终止位为 1。
传输标志:用于区分传输方向,该位为 1 时表示命令,方向为主机传输到 SD卡,该位为 0 时表示响应,方向为 SD 卡传输到主机。命令主体内容包括命令、地址信息/参数和 CRC 校验三个部分。
命令号:它固定占用 6bit,所以总共有 64 个命令(代号:CMD0~CMD63),每个命令都有特定的用途,部分命令不适用于 SD 卡操作,只是专门用于 MMC 卡或者SD I/O 卡。
地址/参数:每个命令有 32bit 地址信息/参数用于命令附加内容,例如,广播命令没有地址信息,这 32bit 用于指定参数,而寻址命令这 32bit 用于指定目标 SD 卡的地址。
CRC7 校验:长度为 7bit 的校验位用于验证命令传输内容正确性,如果发生外部干扰导致传输数据个别位状态改变将导致校准失败,也意味着命令传输失败,SD卡不执行命令。

也就是说,在clk的上升沿,按照一定的规律发送CMD命令就可以发送可识别的SD卡命令

外设SDIO

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

SDIO由两部分组成 使用两个时钟信号


SDIO 使用两个时钟信号,一个是 SDIO 适配器时钟(SDIOCLK=HCLK=72MHz),另外一个是AHB总线时钟的二分频(HCLK/2,一般为 36MHz)。适配器寄存器和 FIFO使用 AHB总线一侧的时钟(HCLK/2),控制单元、命令通道和数据通道使用 SDIO 适配器一侧的时钟(SDIOCLK)。

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 字节对齐的内存进行操作,否则将导致出错!

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

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

相关文章

今天的消费情况

1、今天消费1710元 意外险 住院--集中参保 校---******----服 1220 rmB lunch 240Rmb

若依前端使用

初始化页面时,路由上加参数 多个菜单对应一个页面,默认查询的数据状态不一样 vue 页面上 通过 debugger; 查看所有的参数, 最后取到了

【Android知识笔记】FrameWork中的设计模式

一、FrameWork中有哪些设计巧妙之处 例如: Binder调用,模糊进程边界: 屏蔽跨进程IPC通信的细节,让开发者把精力放在业务上面,无需关心进程之间的通信。Bitmap大图传输,高性能: 只传递Binder句柄,到目标进程后做内存映射,不用做大量数据拷贝,速度非常快。Zygote创建进…

想要定制一个自己的ChatGPT?三步就可以搞定!

2022年底ChatGPT上线,短短两个月用户就超过一亿,成为了人工智能界当之无愧的超级大网红。ChatGPT凭借着自身强大的拟人化及时应答能力迅速破圈,引起了各行各业的热烈讨论。简单来说ChatGPT就是可以基于用户文本输入自动生成回答的AI聊天机器人…

数据结构——KD树

KD树(K-Dimensional Tree)是一种用于多维空间的二叉树数据结构,旨在提供高效的数据检索。KD树在空间搜索和最近邻搜索等问题中特别有用,允许在高维空间中有效地搜索数据点。 重要性质 1.分割K维数据空间的数据结构 2.是一颗二叉树…

中期科技:智慧公厕是智慧城市管理智慧化的至佳表现

智慧公厕,作为智慧城市建设的一部分,正逐渐成为城市管理的新标杆。它不仅为城市居民提供便利,还深刻地改善了城市管理的效率。如中期科技「智慧公厕-智慧厕所」通过运用先进的科技手段,智慧公厕在优化城市管理、提升城市服务、促进…

电巢科技出席第26届西北地区电子技术与线路课程教学改革研讨会,聚焦一流课程建设!

2023年9月15日至17日,北方民族大学召开第26届西北地区电子技术与线路课程教学改革研讨会。本次会议围绕“梳理课程教学内容,改革教学方式,探索虚拟教研室构建方式,完善基层教学组织,推进一流课程和一流教材资源共享&am…

ip地址与网络上的其他地址有冲突吗?

ip地址相当于是计算机的号码。ip地址与网络上的其他ip地址有冲突是局域网ARP病毒攻击导致的。 ARP,即地址解析协议,实现通过IP地址得知其物理地址。 arp协议是TCP/IP协议组的一个协议,用于进行把网络地址翻译成物理地址(又称MAC地址)。arp病毒…

密码学【对称加密-DES\AES】

前言 在密码学中,加密算法分为双向加密和单向加密。单向加密包括MD5、SHA等摘要算法,它们是不可逆的。双向加密包括对称加密和非对称加密,对称加密包括AES加密、DES加密等。双向加密是可逆的,存在密文的密钥。AES算法是DES算法的替…

7.1、如何理解Flink中的时间语义

目录 1、如何理解Flink中的时间语义 2、实时计算时,应该如何选择时间语义? 3、时间语义与窗口的关系 1、如何理解Flink中的时间语义 flink作为流式计算引擎,提供了 两种时间语义 来对流式数据进行计算 事件时间(EventTime) : 事件产生的…

【架构篇】Supabase架构和功能介绍

Supabase是什么 Supabase将自己定位为Firebase的开源替代品,提供了一套工具来帮助开发者构建web或移动应用程序。Supabase是建立在Postgres之上的,Postgres是一个免费的开源数据库,被认为是世界上最稳定、最先进的数据库之一。Supabase对标F…

ValueError: Index contains duplicate entries,cannot reshape

项目场景: python-dataframe 在对行转列的时候出现 ValueError: Index contains duplicate entries,cannot reshape 问题描述 dataframe官方文档 # 为什么报错 是因为 index 和 columns 有重复值 df df.drop_duplicates(subset[foo,bar],keepfrist) df.pivot(i…

web vr3d可视化编辑工具推动VR教育应用落地和发展

VR编辑器可广泛的应用于教育教学、城市规划、室内设计、工业仿真、古迹复原、桥梁道路设计、军事模拟等行业。该软件适用性强、操作简单、功能强大、高度可视化、所见即所得,他的出现将给正在发展的VR产业注入新的活力。 作为企业级VR应用的一款重要工具&#xff0c…

vue模板语法上集->插值,指令,过滤器,计算属性监听属性,vue购物车

插值指令过滤器计算属性&监听属性vue购物车 1.插值 <!DOCTYPE html> <html><head><meta charset"utf-8"><script src"https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script><script src&quo…

视频汇聚/视频云存储/视频监控管理平台EasyCVR录像存储功能如何优化?具体步骤是什么?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。视频监控系统EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、云存储、…

股指期权交割日大盘必跌吗?

股指期权交割日大盘必跌没有这一说法&#xff0c;股指期货的价格涨跌和交割日并无太大关系&#xff0c;临近交割日以后&#xff0c;股指价格和大盘趋于一致&#xff0c;如果价格相同的话&#xff0c;不存在下跌的可能性&#xff0c;下文揭秘股指期权交割日大盘必跌吗&#xff1…

面试算法8:和大于或等于k的最短子数组

题目 输入一个正整数组成的数组和一个正整数k&#xff0c;请问数组中和大于或等于k的连续子数组的最短长度是多少&#xff1f;如果不存在所有数字之和大于或等于k的子数组&#xff0c;则返回0。例如&#xff0c;输入数组[5&#xff0c;1&#xff0c;4&#xff0c;3]&#xff0…

部署大数据平台详细教程以及遇到的问题解答(ubuntu18.04下安装ambari2.7.3+HDP3.1.0)

节点准备: 我搭建的是3台,节点可以随意。建议最少是3台 hostname ip 角色 ubuntu-1804-1 172.21.73.53 从节点 ubuntu-1804-2 172.21.73.54 主节点 ubuntu-1804-3 172.21.73.55 从节点 一:关闭所有节点的防火墙 sudo ufw disable二:配置时钟同步NTP 所有节点安装ntp sud…

nodejs使用jsonwebtoken/jwt-decode生成jwt和解密token的方法

首先需要安装jsonwebtoken/jwt-decode依赖&#xff0c;这个就不用说了。 生成jwt的token&#xff0c;需要有一个加密用的salt&#xff0c;然后使用jwt.sign方法生成jwt token,具体如下&#xff1a; const jwt require("jsonwebtoken"); const jwtSalt "jasdo…

LinkedList相较于Arravlist的特点/优化

Arravlist底层是内存空间连续的数组&#xff0c;可以根据下标进行随机访问&#xff0c;效率比较高&#xff0c;因为在根据下标访问某一个元素时&#xff0c;并不是一个一个去查&#xff0c;而是算出来这个下标的地址&#xff0c;直接根据这个地址的指向去获取的&#xff0c;因为…