许多单片机体系都需求大容量存储设备,以存储数据。现在常用的有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所示:
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
|
5
|
31
|
7
|
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卡指令传输进程
R1呼应格局
|
||||||||
位
|
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
意义
|
开端位
一直为0 |
参数
过错 |
地址
过错 |
擦除序列
过错 |
CRC过错
|
不合法
指令 |
擦除
复位 |
搁置
状况 |
表45.1.6 R1呼应各位描绘
接着咱们看看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.2 SD卡SPI办法硬件衔接示意图
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/ruanjian/258396.html