您的位置 首页 软件

STM32之SD卡驱动

很多单片机系统都需要大容量存储设备,以存储数据。目前常用的有U盘,FLASH芯片,SD卡等。他们各有优点,综合比较,最适合单片机系统的莫过

许多单片机体系都需求大容量存储设备,以存储数据。现在常用的有U盘,FLASH芯片,SD卡等。他们各有长处,归纳比较,最适合单片机体系的莫过于SD卡了,它不只容量能够做到很大(32Gb以上),并且支撑SPI接口,便利移动,并且有几种体积的规范可供挑选(规范的SD卡规范,以及TF卡规范等),能满意不同运用的要求。

只需求4个IO口即可外扩一个最大达32GB以上的外部存储器,容量从几十M到几十G挑选规范很大,替换也很便利,编程也简略,是单片机大容量外部存储器的首选。
ALIENTKE战舰STM32开发板自带了规范的SD卡接口,可运用STM32自带的SPI/SDIO接口驱动(经过跳线帽挑选驱动办法),本章咱们运用SPI驱动,最高通讯速度可达18Mbps,每秒可传输数据2M字节以上,关于一般运用足够了。在本章中,咱们将向咱们介绍,如安在ALIENTEK战舰STM32开发板上完结SD卡的读取。本章分为如下几个部分:
44.1 SD卡简介
44.2硬件规划
44.3软件规划
44.4下载验证


44.1 SD卡简介
SD卡(Secure Digital Memory Card)中文翻译为安全数码卡,它是在MMC的基础上开展而来,是一种依据半导体快闪回忆器的新一代回忆设备,它被广泛地于便携式设备上运用,例如数码相机、个人数码助理(PDA)和多媒体播放器等。SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研发。巨细犹如一张邮票的SD回忆卡,分量只要2克,但却具有高回忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性。按容量分类,能够将SD卡分为3类:SD卡、SDHC卡、SDXC卡。如表44.1.1所示:
容量
命名
简称
0~2G
Standard Capacity SD Memory Card
SDSC或SD
2G~32G
High Capacity SD Memory Card
SDHC
32G~2T
Extended Capacity SD Memory Card
SDXC
表44.1.1 SD卡按容量分类
SD卡和SDHC卡协议根本兼容,可是SDXC卡,同这两者差异就比较大了,本章咱们评论的主要是SD/SDHC卡(简称SD卡)。
SD卡一般支撑2种操作形式:
1,SD卡形式(经过SDIO通讯);
2,SPI形式;
主机能够挑选以上恣意一种形式同SD卡通讯,SD卡形式答应4线的高速数据传输。SPI形式答应简略的经过SPI接口来和SD卡通讯,这种形式同SD卡形式比较便是丧失了速度。
SD卡的引脚排序如下图44.1.1所示:

图44.1.1 SD卡引脚排序图
SD卡引脚功用描绘如表45.1.2所示:

表45.1.2 SD卡引脚功用表

SD卡只能运用3.3V的IO电平,所以,MCU一定要能够支撑3.3V的IO端口输出。留意:在SPI形式下,CS/MOSI/MISO/CLK都需求加10~100K左右的上拉电阻。
SD卡有5个寄存器,如表45.1.3所示:
称号
宽度
描绘
CID
128
卡标识寄存器
RCA
16
相对卡地址(Relative card address)寄存器:本地体系中卡的地址,动态改变,在主机初始化的时分确认
*SPI形式中没有
CSD
128
卡描绘数据:卡操作条件相关的信息数据
SCR
64
SD装备寄存器:SD卡特定信息数据
OCR
32
操作条件寄存器
表45.1.3 SD卡相关寄存器
关于这些寄存器的具体描绘,请参阅光盘相关SD卡材料。咱们在这儿就不描绘了。接下来,咱们看看SD卡的指令格局,如表45.1.4所示:
字节1
字节2–5
字节6
7
6
50
310
71
0
0
1
command
指令参数
CRC
1
表45.1.4 SD卡指令格局
SD卡的指令由6个字节组成,字节1的最高2位固定为01,低6位为指令号(比方CMD16,为10000即16进制的0X10,完好的CMD16,第一个字节为01010000,即0X10+0X40)。
字节2~5为指令参数,有些指令是没有参数的。
字节6的高七位为CRC值,最低位恒定为1。
SD卡的指令总共有12类,分为Class0~Class11,本章,咱们仅介绍几个比较重要的指令,如表45.1.5所示:
指令
参数
回应
描绘
CMD0(0X00)
NONE
R1
复位SD卡
CMD8(0X08)
VHS+Check pattern
R7
发送接口状况指令
CMD9(0X09)
NONE
R1
读取卡特定数据寄存器
CMD10(0X0A)
NONE
R1
读取卡标志数据寄存器
CMD16(0X10)
块巨细
R1
设置块巨细(字节数)
CMD17(0X11)
地址
R1
读取一个块的数据
CMD24(0X18)
地址
R1
写入一个块的数据
CMD41(0X29)
NONE
R3
发送给主机容量支撑信息和激活
卡初始化进程
CMD55(0X37)
NONE
R1
奉告SD卡,下一个是特定运用指令
CMD58(0X3A)
NONE
R3
读取OCR寄存器
表45.1.5 SD卡部分指令
上表中,大部分的指令是初始化的时分用的。表中的R1、R3和R7等是SD卡的回应,SD卡和单片机的通讯选用发送应对机制,如图45.1.2所示:
图45.1.2 SD卡指令传输进程
每发送一个指令,SD卡都会给出一个应对,以奉告主机该指令的执行情况,或许回来主机需求获取的数据。SPI形式下,SD卡针对不同的指令,应对能够使R1~R7,R1的应对,各位描绘如表45.1.6所示:
R1呼应格局
7
6
5
4
3
2
1
0
意义
开端位
一直为0
参数
过错
地址
过错
擦除序列
过错
CRC过错
不合法
指令
擦除
复位
搁置
状况
表45.1.6 R1呼应各位描绘
R2~R7的呼应,咱们就不介绍了,请的咱们参阅SD卡2.0协议。接下来,咱们看看SD卡初始化进程。由于咱们运用的是SPI形式,所以先得让SD卡进入SPI形式。办法如下:在SD卡收到复位指令(CMD0)时,CS为有用电平(低电平)则SPI形式被启用。不过在发送CMD0之前,要发送>74个时钟,这是由于SD卡内部有个供电电压上升时间,大约为64个CLK,剩余的10个CLK用于SD卡同步,之后才干开端CMD0的操作,在卡初始化的时分,CLK时钟最大不能超过400Khz!。
接着咱们看看SD卡的初始化,SD卡的典型初始化进程如下:
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),在完结了初始化之后,就能够开端读写数据了。
SD卡读取数据,这儿经过CMD17来完结,具体进程如下:
1、发送CMD17;
2、接纳卡呼应R1;
3、接纳数据开始令牌0XFE;
4、接纳数据;
5、接纳2个字节的CRC,假如不运用CRC,这两个字节在读取后能够丢掉。
6、制止片选之后,发多8个CLK;
以上便是一个典型的读取SD卡数据进程,SD卡的写于读数据差不多,写数据经过CMD24来完结,具体进程如下:
1、发送CMD24;
2、接纳卡呼应R1;
3、发送写数据开始令牌0XFE;
4、发送数据;
5、发送2字节的伪CRC;
6、制止片选之后,发多8个CLK;
以上便是一个典型的写SD卡进程。关于SD卡的介绍,咱们就介绍到这儿,更具体的介绍请参阅光盘SD卡的参阅材料(SD卡2.0协议)。
44.2硬件规划
本章试验功用简介:开机的时分先初始化SD卡,假如SD卡初始化完结,则提示LCD初始化成功。按下KEY0,读取SD卡扇区0的数据,然后经过串口发送到电脑。假如没初始化经过,则在LCD上提示初始化失利。相同用DS0来指示程序正在运转。
本试验用到的硬件资源有:
1)指示灯DS0
2)KEY0按键
3)串口
4)TFTLCD模块
5)SD卡
前面四部分,在之前的实例现已介绍过了,这儿咱们介绍一下战舰STM32开发板板载的SD卡接口和STM32的衔接联系,如图44.2.1所示:

图44.2.1 SD卡接口与STM32衔接原理图

咱们用跳线帽将P10的SD_DT3、SD_CMD、SD_SCK、SD_DT0别离同P12的SD_CS、SPI2_MOSI、SPI2_SCK、SPI2_MISO衔接起来,即完结SD卡的SPI形式衔接。硬件衔接示意图如图44.2.2所示:

图44.2.2 SD卡SPI办法硬件衔接示意图
将图中所示的4处,用跳线帽短接,接口完结SD卡与STM32的SPI衔接。最终,你还得自备一个SD卡,将其刺进板子下面的SD卡接口。

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部