STM32的SD卡读取
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
连载】【ALIENTEK 战舰STM32开发板】STM32开发指南--第四十四章SD卡实验
2013-04-04 23:07
第四十四章 SD卡实验
很多单片机系统都需要大容量存储设备,以存储数据。目前常用的有U盘,FLASH芯片,SD卡等。他们各有优点,综合比较,最适合单片机系统的莫过于SD卡了,它不仅容量可以做到很大(32Gb以上),而且支持SPI接口,方便移动,并且有几种体积的尺寸可供选择(标准的SD卡尺寸,以及TF卡尺寸等),能满足不同应用的要求。
只需要4个IO口即可外扩一个最大达32GB以上的外部存储器,容量从几十M到几十G 选择尺度很大,更换也很方便,编程也简单,是单片机大容量外部存储器的首选。ALIENTKE 战舰STM32开发板自带了标准的SD卡接口,可使用STM32自带的SPI/S DIO接口驱动(通过跳线帽选择驱动方式),本章我们使用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 5 0 31 0 7 1 0
0 1 command 命令参数CRC 1
表45.1.4 SD卡命令格式
SD卡的指令由6个字节组成,字节1的最高2位固定为01,低6位为命令号(比如CM D16,为10000即16进制的0X10,完整的CMD16,第一个字节为01010000,即0 X10+0X40)。
字节2~5为命令参数,有些命令是没有参数的。
字节6的高七位为CRC值,最低位恒定为1。
SD卡的命令总共有12类,分为Class0~Class11,本章,我们仅介绍几个比较重要的命令,如表45.1.5所示:
命令参数回应描述
CMD0(0X0
0)
NONE R1 复位SD卡
CMD8(0X0
8) VHS+Check patter
n
R7 发送接口状态命令
CMD9(0X0
9)
NONE R1 读取卡特定数据寄存器CMD10(0X0
A)
NONE R1 读取卡标志数据寄存器CMD16(0X1
0)
块大小R1 设置块大小(字节数)CMD17(0X1
1)
地址R1 读取一个块的数据CMD24(0X1
8)
地址R1 写入一个块的数据
CMD41(0X2
9) NONE R3
发送给主机容量支持信息和激活
卡初始化过程
CMD55(0X3
7)
NONE R1 告诉SD卡,下一个是特定应用命令CMD58(0X3
A)
NONE R3 读取OCR寄存器
表45.1.5 SD卡部分命令