打印
[STM32F1]

STM32F103对SD卡数的读写

[复制链接]
1639|84
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
SD卡介绍
SD存储卡是一种基于半导体快闪**器的新一代**设备,由于它体积小、数据传输速度快、可热插拔等优良的特性,被广泛地于便携式装置上使用,例如数码相机、平板电脑和多媒体播放器等。 SD卡具有高**容量、快速数据传输率、极大的移动灵活性以及很好的安全性,它被广泛地应用于便携式装置上,例如数码相机、平板电脑和多媒体播放器等。 SD卡的结构能保证数字文件传送的安全性,也很容易重新格式化,所以有着广泛的应用领域。音乐、电影等多媒体文件都可以方便地保存到SD卡中。目前市场上SD卡的品牌很多诸如:SANDISK、Kingmax、Panasonic和Kingston。 SD卡作为一种新型的存储设备,具有以下特点: ●高存储容量,最常用的容量:8GB、16GB、32GB、128GB、256GB等。 ●内置加密技术,适应基于SDMI协议的著作版权保护功能。 ●高速数据传送;最大读写速率为100MB/s。 ●体积轻小,便于携带,具有很强的抗冲击能力。

使用特权

评论回复
评论
纠结的那些年 2022-8-31 15:58 回复TA
———————————————— 版权声明:本文为CSDN博主「cleveryoga」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/cleveryoga/article/details/122088836 
沙发
纠结的那些年|  楼主 | 2022-8-31 16:03 | 只看该作者
SD卡物理结构
一张SD卡包括有存储单元、存储单元接口、电源检测、卡及接口控制器和接口驱动器5个部分,见图 362。存储单元是存储数据部件,存储单元通过存储单元接口与卡控制单元进行数据传输;电源检测单元保证SD卡工作在合适的电压下,如出现掉电或上状态时,它会使控制单元和存储单元接口复位;卡及接口控制单元控制SD卡的运行状态,它包括有8个寄存器;接口驱动器控制SD卡引脚的输入输出。

使用特权

评论回复
板凳
纠结的那些年|  楼主 | 2022-8-31 16:07 | 只看该作者

使用特权

评论回复
地板
纠结的那些年|  楼主 | 2022-8-31 16:08 | 只看该作者
SD卡寄存器
SD卡总共有8个寄存器,用于设定或表示SD卡信息,参考表格。这些寄存器只能通过对应的命令访问,对SD卡进行控制操作并不是像操作控制器GPIO相关寄存器那样一次读写一个寄存器的,它是通过命令来控制,SDIO定义了64个命令,每个命令都有特殊意义,可以实现某一特定功能,SD卡接收到命令后,根据命令要求对SD卡内部寄存器进行修改,程序控制中只需要发送组合命令就可以实现SD卡的控制以及读写操作。
  

使用特权

评论回复
5
纠结的那些年|  楼主 | 2022-8-31 17:32 | 只看该作者

使用特权

评论回复
6
纠结的那些年|  楼主 | 2022-8-31 17:36 | 只看该作者
SD总线协议

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

使用特权

评论回复
7
纠结的那些年|  楼主 | 2022-8-31 17:37 | 只看该作者

使用特权

评论回复
8
纠结的那些年|  楼主 | 2022-8-31 17:38 | 只看该作者
SD数据是以块(Black)形式传输的,SDHC卡数据块长度一般为512字节,数据可以从主机到卡,也可以是从卡到主机。数据块需要CRC位来保证数据传输成功。CRC位由SD卡系统硬件生成。STM32控制器可以控制使用单线或4线传输,本开发板设计使用4线传输。图 365为主机向SD卡写入数据块操作示意。

使用特权

评论回复
9
纠结的那些年|  楼主 | 2022-8-31 17:39 | 只看该作者

使用特权

评论回复
10
纠结的那些年|  楼主 | 2022-8-31 17:40 | 只看该作者
SD卡的操作模式及切换
SD卡有多个版本,STM32控制器目前最高支持《Physical Layer Simplified Specification V2.0》定义的SD卡,STM32控制器对SD卡进行数据读写之前需要识别卡的种类:V1.0标准卡、V2.0标准卡、V2.0高容量卡或者不被识别卡。
SD卡系统(包括主机和SD卡)定义了两种操作模式:卡识别模式和数据传输模式。在系统复位后,主机处于卡识别模式,寻找总线上可用的SDIO设备;同时,SD卡也处于卡识别模式,直到被主机识别到,即当SD卡接收到SEND_RCA(CMD3)命令后,SD卡就会进入数据传输模式,而主机在总线上所有卡被识**也进入数据传输模式。在每个操作模式下,SD卡都有几种状态,参考表 格,通过命令控制实现卡状态的切换。

使用特权

评论回复
11
纠结的那些年|  楼主 | 2022-8-31 17:44 | 只看该作者

使用特权

评论回复
12
纠结的那些年|  楼主 | 2022-8-31 17:45 | 只看该作者

使用特权

评论回复
13
纠结的那些年|  楼主 | 2022-8-31 17:45 | 只看该作者

使用特权

评论回复
14
纠结的那些年|  楼主 | 2022-8-31 17:46 | 只看该作者
SD卡初始化(SPI模式)

SPI操作模式下:在SD卡收到复位命令时,CS为有效电平(低电平),则SPI模式被启用,在发送CMD之前要先发送74个时钟,64个为内部供电上升时间,10个用于SD卡同步;之后才能开始CMD操作,在初始化时CLK时钟不能超过400KHz。

使用特权

评论回复
15
纠结的那些年|  楼主 | 2022-8-31 17:47 | 只看该作者
1、初始化与SD卡连接的硬件条件(MCU的SPI配置,IO口配置); 2、上电延时(>74个CLK); 3、复位卡(CMD0),进入IDLE状态; 4、发送CMD8,检查是否支持2.0协议; 5、根据不同协议检查SD卡(命令包括:CMD55、CMD41、CMD58和CMD1等); 6、取消片选,发多8个CLK,结束初始化 这样我们就完成了对SD卡的初始化,注意末尾发送的8个CLK是提供SD卡额外的时钟,完成某些操作。通过SD卡初始化,我们可以知道SD卡的类型(V1、V2、V2HC或者MMC),在完成了初始化之后,就可以开始读写数据了。

使用特权

评论回复
16
纠结的那些年|  楼主 | 2022-8-31 17:50 | 只看该作者
SD卡读取与写入(SPI模式)

1、发送CMD17;
2、接收卡响应R1;
3、接收数据起始令牌0XFE;
4、接收数据;
5、接收2个字节的CRC,如果不使用CRC,这两个字节在读取后可以丢掉。
6、禁止片选之后,发多8个CLK;

使用特权

评论回复
17
纠结的那些年|  楼主 | 2022-8-31 17:50 | 只看该作者
以上就是一个典型的读取SD卡数据过程,SD卡的写于读数据差不多,写数据通过CMD24来实现,具体过程如下:
1、发送CMD24; 2、接收卡响应R1; 3、发送写数据起始令牌0XFE; 4、发送数据; 5、发送2字节的伪CRC; 6、禁止片选之后,发多8个CLK;
以上就是一个典型的写SD卡过程。

使用特权

评论回复
18
纠结的那些年|  楼主 | 2022-8-31 17:52 | 只看该作者
题目要求

掌握SD卡协议原理,用STM32F103完成对SD卡的数据读取(fat文件模式)。

使用特权

评论回复
19
纠结的那些年|  楼主 | 2022-8-31 17:52 | 只看该作者
STM32CubeMX建立工程

1、打开STM32CubeMX新建一个工程。配置管脚,将对应的管脚设置成如图所示的样子。

使用特权

评论回复
20
纠结的那些年|  楼主 | 2022-8-31 17:53 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

46

主题

688

帖子

0

粉丝