您的位置 首页 测评

STM32下SD卡驱动详解

自己在这几个月中为了毕业设计放下了对S3C2440的学习,从而着手在STM32上的模块开发。我用STM32做的是一个有界面的MP3所以不得不用到SD卡,…

自己在这几个月中为了毕业设计放下了对S3C2440的学习,然后着手在STM32上的模块开发。我用STM32做的是一个有界面的MP3所以不得不用到SD卡,(当然nandflash也能够不过pcb难画不说,最主要简略坏掉)。SD卡便利快捷。

说道SD卡就会想到他的具体驱动,网上也有许多比方,可是都没这么具体说一个进程关于新手很难吃懂,当然这篇关于做过的同学来说没有什么效果,现在来具体分析一下吧。

咱们所说的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了。

二,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卡的每一个BLOCK的巨细便是在这决议的一般为512.

能够看出操作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。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ceping/274354.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部