sd
我的SD 实验学习,预计使用三章内容,分别是:
1. SD 卡的基本内容
2. sdmi 模式下读取SD卡
3. spi 模式下读取SD卡
- FATFS文件系统讲解
- FATFS文件移植
- 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。