STM32F407--第四十三章 SD卡实验

sd

我的SD 实验学习,预计使用三章内容,分别是:
1. SD 卡的基本内容
2. sdmi 模式下读取SD卡
3. spi 模式下读取SD卡

  1. FATFS文件系统讲解
  2. FATFS文件移植
  3. FATFS文件应用(SD卡中存储 文字,音频 ,图像,视频)

可以说 FATFS 是一种小型的文件管理的方式,是操作系统中的一部分。

SD

学习这里首先要了解一下SD卡基本资料:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

SD卡的分类

关于SD卡的引脚:
小卡是 8pin 。
大卡是 9pin

还有那种可以接在相机里面的存储卡

SDHC 是 “High Capacity SD Memory Card” 的缩写。即是 “高容量SD存储卡”
SDHC V2.0 是指SD卡大于 2G 并且小于 32G 的内存卡。

关于速度的标记:
Class 2 : 最低是2M/s
Class 4 :最低是4M/s
Class 6 :最低是6M/s

我们所说的SD卡只是闪存的一种其全称是Secure Digital,意为“安全数码”,
是由日本两大电器集团松下电器和东芝联手 SanDisk 共同推出的,于1999年8月首次发布。

常见的闪存有:SD卡、CF卡、XD卡、MMC卡、SM卡、Mini SD卡、T-Flash卡。

而SD卡又分类为:
SD、MiniSD、MicroSD、SDHC、MiniSD、MicroSD、SDXC、smart SD、SDI/O。
它们在外形、速度、容量和命令都有区别。

SD卡支持两种总线方式:SD方式与SPI方式。
其中SD方式采用6线制,
使用CLK、CMD、DAT0~DAT3进行数据通信。
而SPI方式采用4线制,
使用CS、CLK、DataIn、DataOut进行数据通信。
SD方式时的数据传输速度与SPI方式要快,采用单片机对SD卡进行读写时一般都采用SPI模式。
采用不同的初始化方式可以使SD卡工作于SD方式或SPI方式。

这就说明SD卡里面是有一个控制器的,有相应寄存器,
我们用SD卡其实是对相应的寄存器的设置,设置好后就可以用命令来对它进行操作了,
(所以说SD卡用起来简单,因为很多事SD卡厂商已经做了)。

一,SPI方式驱动SD卡的方法

SD卡的SPI通信接口使其可以通过SPI通道进行数据读写。
从应用的角度来看,采用SPI接口的好处在于,很多单片机内部自带SPI控制器,不光给开发上带来方便,同时也见降低了开发成本。
然而,它也有不好的地方,失去了SD卡的快速的性能优势。(SPI模式下用USB下载测试只100K–300K的速度,而用SD模式就可以高达3M–10M),这就是SPI严重的缺点,但是对于我们学生用SPI是最简单,SD模式有很复杂的模式转换,转来转去的有一定的难度,不过也可以做SD模式,很多控制器都有SDIO了。尤其是STM32就存在着 SDIO 。

//
/
/
/**********************************************************************************/

二,SD卡的命令

SD卡最重要的就是初始化,初始化重要的是命令的使用。SD卡初始化成功后几乎都能用了,所以我们要重点看一下初始化,不同的卡又不同的初始化过程(初始化时要注意SPI的速度不要高于400K)

SD卡的典型初始化过程如下:

1、初始化与SD卡连接的硬件条件(MCU的 SPI配置,IO口配置);

2、上电延时(>74 个 CLK)(必须的);

3、复位卡(CMD0);

4、激活卡,内部初始化并获取卡类型(CMD1(用于 MMC卡)、CMD55、CMD41)
(不同的地方就在这里)

5.、查询 OCR,获取供电状况(CMD58)(就是电压,一般不判断不然很多卡不能用);

6、是否使用CRC(CMD59)(CRC校验);

7、设置读写块数据长度(CMD16);

8、读取 CSD,获取存储卡的其他信息(CMD9);

9、发送 8CLK 后,禁止片选;

可以看出操作SD卡都是命令,只要把这些命令作用搞清楚就可以自己驱动SD卡了,我把命令都贴出来:

SPI方式下的要SD模式下的话STM官方有很详细的库文件;
Class0 :(卡的识别、初始化等基本命令集)

CMD0:复位SD 卡.

CMD1:读OCR寄存器.

CMD9:读CSD寄存器.

CMD10:读CID寄存器.

CMD12:停止读多块时的数据传输

CMD13:读 Card_Status 寄存器

Class2 (读卡命令集):

CMD16:设置块的长度

CMD17:读单块.

CMD18:读多块,直至主机发送CMD12为止 .

Class4(写卡命令集) :

CMD24:写单块.

CMD25:写多块.

CMD27:写CSD寄存器 .

Class5 (擦除卡命令集):

CMD32:设置擦除块的起始地址.

CMD33:设置擦除块的终止地址.

CMD38: 擦除所选择的块.

Class6(写保护命令集):

CMD28:设置写保护块的地址.

CMD29:擦除写保护块的地址.

CMD30: Ask the card for the status of the write protection bits

class7:卡的锁定,解锁功能命令集

class8:申请特定命令集。

class10 -11 :保留

其中 class1, class3,class9:SPI模式不支持

命令知道了我们来看一下命令的格式:

SD卡的指令由6字节(Byte)组成,如下:
Byte1:0 1 x x x x x x(命令号,由指令标志定义,如CMD39为100111即16进制0x27,那么完整的CMD39第一字节为01100111,即0x27+0x40)
Byte2-5:Command Arguments,命令参数,有些命令没有参数
Byte6:前7位为CRC(Cyclic Redundacy Check,循环冗余校验)校验位,最后一位为停止位1

byte1 byte2-5 byte6

01命令号 参数 CRC校验+1

参数是命令需要的没有参数的用0,比如CMD16在这写的就是512。

SD卡接口

硬件连接设计

软件设计

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值