sd卡学习笔记
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、简介:
SD 卡(Secure Digital Memory Card )是一种为满足安全性、容量、性能和使用环境等各方面
的需求而设计的一种新型存储器件,SD 卡允许在两种模式下工作,即SD 模式和SPI 模式,本系统采用SPI 模式。本小节仅简要介绍在SPI 模式下,STM32 处理器如何读写SD 卡,如果读者如希望详细了解SD 卡,可以参考相关资料。
SD 卡内部结构及引脚如下图所示:
SD 卡内部图.JPG
2、SD 卡管脚图:
SD 卡图.JPG
3、SPI 模式下SD 各管脚名称为:
sd 卡:
SPI 模式下SD 各管脚名称为.JPG
注:一般SD 有两种模式:SD 模式和SPI 模式,管脚定义如下:
(A)、SD MODE 1 、CD/DATA3 2、CMD 3 、VSS1 4 、VDD 5 、CLK 6 、VSS2 7 、DATA0 8、DATA1 9 、DATA2
(B)、SPI MODE 1 、CS 2、DI 3 、VSS 4 、VDD 5 、SCLK 6 、VSS2 7 、DO 8、RSV 9 、RSV
SD 卡主要引脚和功能为:
CLK :时钟信号,每个时钟周期传输一个命令或数据位,频率可在0~25MHz 之间变化,SD 卡的总线管理器可以不受任何限制的自由产生0~25MHz 的频率;
CMD :双向命令和回复线,命令是一次主机到从卡操作的开始,命令可以是从主机到单卡寻址,
也可以是到所有卡;回复是对之前命令的回答,回复可以来自单卡或所有卡;
DAT0 ~3:数据线,数据可以从卡传向主机也可以从主机传向卡。
SD 卡以命令形式来控制SD 卡的读写等操作。可根据命令对多块或单块进行读写操作。在SPI 模式下其命令由 6 个字节构成,其中高位在前。SD 卡命令的格式如表 1 所示,其中相关参数可
以查阅SD 卡规范。
4、MicroSD 卡管脚图:
MicroSD 卡管脚图.JPG
5、MicroSD 卡管脚名称:
MicroSD 卡管脚名称.JPG
SD 卡与MicroSD 卡仅仅是封装上的不同,MicroSD 卡更小,大小上和一个SIM 卡差不多,但是协议与SD 卡相同。
一般我们用单片机操作SD 卡时,都不需要对FAT 分区表信息做处理,原因如下:
1)、操作FAT分区表要增加程序代码量、增加SRAM的消耗,对于便携应用来说代码大小和
占用SRAM的多少至关重要。
2)、即使我们对FAT分区表不做任何了解,实际上我们一样可以向SD卡上写入数据,这就表明使用FAT对我们做数据存储应用来说如同鸡肋。
3)、耗费大量经历和时间去了解FAT分区表对于我们做嵌入式软件开发的人来说有些得不偿失。4)、SD卡支持两种操作模式,SD模式和SPI模式,SPI模式做SD数据操作时根本不需要知道FAT,这时候SD卡对于我们来说实际上就是个大的、快速的、方便的、容量可变的外部存储器。
基于以上原因,一般情况下对SD卡的操作只需要了解SPI通讯就可以了,而现在大部分单片机都有SPI接口,那么操作SD卡易如反掌。
以下是做SD卡试验时使用的电路图:
SD卡试验时使用的电路图.JPG
SD_CS/ 连接到单片机的片选SD 管脚,只有单片机设置SD_CS/ 为低电平时才可以操作SD 卡。MOSI 连接单片机SPI 总线的MOSI 管脚(SPI 数据输入),单片机从这个管脚读取SD 卡内的数据。
MISO 连接单片机SPI 总线的MISO 管脚(SPI 数据输出)、单片机通过这个管脚向SD 卡内写入数据。
SCK 连接单片机SPI 总线的SCK(SPI 时钟)
SD 管脚实际上在SD 卡内部连接到了GND ,当SD 插座上没插入SD 卡时,单片机从这个管脚
能读到高电平(前提是使用单片机内部上拉输入,或者外部增加一个上拉电阻),一旦插入SD 卡,这个管脚就变成低电平,这个功能用来检测是否插入SD 卡。
RSV1 和RSV2 是保留功能管脚,不需要操作。
MicroSD 卡的连接和SD 卡大同小异,只是MicroSD 卡比SD 卡少一个GND 管脚,所以不能使用上面做的这种插入卡的检测,实际上现在很多SD 卡/MicroSD 卡插座都有插入检测管脚,当
然,一分钱一分货,价格上当然也要贵一些
顺便提一下,普通SD 卡插座最多 5 块钱。
SPI 命令格式
Byte 1 Byte2-5 Byte 6
7 6 5 0 31 0 7 0
0 1 Command Command Argument CRC 1
以下是一个简单的测试SD 卡读写的程序,程序是基于Atmega128 单片机编写的,对于Atmega 的其他单片机仅需要做管脚改动就可以使用,其他单片机更改要更大。
sd.h
//******************************************************************
//SPI 各线所占用的端口
#define SD_SS PB6
#define SD_SCK PB1
#define SD_MOSI PB2
#define SD_MISO PB3
//******************************************************************
#define SD_DDR DDRB
#define SD_PORT PORTB
#define SD_PIN PINB