sd卡电路图学习
- 格式:doc
- 大小:391.50 KB
- 文档页数:14
SD卡工作原理介绍和工作原理图大容量SD卡在海洋数据存储中的应用本设计使用8 GB的SDHC(High Capacity SD Memory Card,大容量SD存储卡),为了方便卡上数据在操作系统上的读取,以及数据的进一步分析和处理,在SDHC卡上建立了FAT32文件系统。
海洋要素测量系统要求数据存储量大、安全性高,采用可插拔式存储卡是一种不错的选择。
目前,可插拔式存储卡有CF卡、U 盘及SD卡。
CF卡不能与计算机直接通信;U盘需要外扩接口芯片才能与单片机通信,增加了外形尺寸及功耗;而SD卡具有耐用、可靠、安全、容量大、体积小、便于携带和兼容性好等优点,非常适合于测量系统长期的数据存储。
1 SD卡接口的硬件设计STM32F103xx增强型系列是意法半导体公司生产的基于Cortex-M3的高性能的32位RISC内核,工作频率为72 MHz,O端口和连接到2条APB总线的外设。
内置高速存储器(128 KB的闪存和20 KB 的SRAM),以及丰富的增强I,STM32F103xx系列工作于-40,+105?的温度范围,供电电压为2.0,3.6 V,与SD 卡工作电压兼容,一系列的省电模式可满足低功耗应用的要求。
SD卡支持SD模式和SPI模式两种通信方式。
采用SPI模式时,占用较少的I,O资源。
STM32F103VB包含串行外设SPI接口,可方便地与SD卡进行连接。
通过4条信号线即可完成数据的传输,分别是时钟SCLK、主机输入从机输出MISO、主机输出从机输入MOSI和片选CS。
STM32F103VB与SD卡卡座的接口电路如图1所示。
SD卡的最高数据读写速度为10 MB,s,接口电压为2.7,3.6 V,具有9个引脚。
SD卡使用卡座代替传输电缆,减少了环境干扰,降低了出错率,而且1对1传输没有共享信道的问题。
SD卡在SPI模式下各引脚的定义如表1所列。
2 SD卡接口的软件设计本设计采用STM32F103VB自带的串行外设SPI接口与SD卡进行通信,这里只介绍SPI模式的通信方式。
大容量SD卡在海洋数据存储中的应用本设计使用8 GB的SDHC(High Capacity SD Memory Card,大容量SD存储卡),为了方便卡上数据在操作系统上的读取,以及数据的进一步分析和处理,在SDHC卡上建立了FAT32文件系统。
海洋要素测量系统要求数据存储量大、安全性高,采用可插拔式存储卡是一种不错的选择。
目前,可插拔式存储卡有CF 卡、U盘及SD卡。
CF卡不能与计算机直接通信;U盘需要外扩接口芯片才能与单片机通信,增加了外形尺寸及功耗;而SD卡具有耐用、可靠、安全、容量大、体积小、便于携带和兼容性好等优点,非常适合于测量系统长期的数据存储。
1 SD卡接口的硬件设计STM32F103xx增强型系列是意法半导体公司生产的基于Cortex-M3的高性能的32位RISC内核,工作频率为72 MHz,内置高速存储器(128 KB的闪存和20 KB的SRAM),以及丰富的增强I/O端口和连接到2条APB总线的外设。
STM32F103xx系列工作于-40~+105℃的温度范围,供电电压为2.0~3.6 V,与SD卡工作电压兼容,一系列的省电模式可满足低功耗应用的要求。
SD卡支持SD模式和SPI模式两种通信方式。
采用SPI模式时,占用较少的I/O资源。
STM32F103VB包含串行外设SPI接口,可方便地与SD卡进行连接。
通过4条信号线即可完成数据的传输,分别是时钟SCLK、主机输入从机输出MISO、主机输出从机输入MOSI和片选CS。
STM32F103VB与SD卡卡座的接口电路如图1所示。
SD卡的最高数据读写速度为10 MB/s,接口电压为2.7~3.6 V,具有9个引脚。
SD卡使用卡座代替传输电缆,减少了环境干扰,降低了出错率,而且1对1传输没有共享信道的问题。
SD卡在SPI模式下各引脚的定义如表1所列。
2 SD卡接口的软件设计本设计采用STM32F103VB自带的串行外设SPI接口与SD卡进行通信,这里只介绍SPI模式的通信方式。
摘要SD卡(Secure Digital Memory Card)是一种为满足安全性、容量、性能和使用环境等各方面的需求而设计的一种新型存储器件,它的出现提供了一种便宜的、结实的卡片式的存储媒介。
SD卡允许在两种模式下工作,即SD模式和SPI模式,SD卡在24mm×32mm×2.1mm的体积内结合了〔SanDisk〕快闪记忆卡控制与MLC (Multilevel Cell)技术和Toshiba(东芝)0.16u及0.13u的NAND技术,通过9针的接口界面与专门的驱动器相连接,不需要额外的电源来保持其上记忆的信息。
而且它是一体化固体介质,没有任何移动部分,所以不用担心机械运动SD卡的容量从16兆字节到最高32GB不等。
容量范围如此之宽,可为众多应用提供充足的外部存储空间。
SD卡做为各种消费电子产品外部存储的应用、开发技术己经非常成熟、广泛。
关键字SD卡存储器一SD卡发展历程SD卡的技术是基于MultiMedia卡(MMC)格式上发展而来,大小和MMC卡差不多,尺寸为32mm x 24mm x 2.1mm。
长宽和MMC卡一样,只是比MMC卡厚了0.7mm,以容纳更大容量的存贮单元。
SD卡与MMC卡保持着向上兼容,也就是说,MMC卡可以被新的SD设备存取,兼容性则取决于应用软件,但SD卡却不可以被MMC设备存取。
(SD卡外型采用了与MMC卡厚度一样的导轨式设计,以使SD设备可以适合MMC卡)。
SD卡接口除了保留MMC卡的7针外,还在两边加多了2针,作为数据线。
采用了NAND 型Flash Memory,基本上和SmartMedia的一样,平均数据传输率能达到2MB/s。
设有SD卡插槽的设备能够使用较簿身的MMC卡,但是标准的SD卡却不能插入到MMC卡插槽。
SD卡能够插于CF卡和PCMCIA卡上,插上转接器使用;而miniSD卡和microSD卡亦能插上转接器于SD卡插槽使用。
一些USB连接器能够插上SD卡,而且一些读卡器亦能够插上SD卡,并由许多连接埠,例如USB、FireWire等存取使用。
1、简介:SD卡(Secure Digital Memory Card)是一种为满足安全性、容量、性能和使用环境等各方面的需求而设计的一种新型存储器件,SD卡允许在两种模式下工作,即SD模式和SPI模式,本系统采用SPI模式。
本小节仅简要介绍在SPI模式下,STM32处理器如何读写SD卡,如果读者如希望详细了解SD卡,可以参考相关资料。
SD 卡内部结构及引脚如下图所示:SD卡内部图.JPG 2、SD卡管脚图:SD卡图.JPG3、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、RSVSD 卡主要引脚和功能为:CLK:时钟信号,每个时钟周期传输一个命令或数据位,频率可在0~25MHz之间变化,SD卡的总线管理器可以不受任何限制的自由产生0~25MHz 的频率;CMD:双向命令和回复线,命令是一次主机到从卡操作的开始,命令可以是从主机到单卡寻址,也可以是到所有卡;回复是对之前命令的回答,回复可以来自单卡或所有卡;DAT0~3:数据线,数据可以从卡传向主机也可以从主机传向卡。
SD卡以命令形式来控制SD卡的读写等操作。
可根据命令对多块或单块进行读写操作。
在SPI模式下其命令由6个字节构成,其中高位在前。
SD卡命令的格式如表1所示,其中相关参数可以查阅SD卡规范。
4、MicroSD卡管脚图:MicroSD卡管脚图.JPG5、MicroSD卡管脚名称:MicroSD卡管脚名称.JPGSD 卡与MicroSD卡仅仅是封装上的不同,MicroSD卡更小,大小上和一个SIM卡差不多,但是协议与SD卡相同。
TF 暴力拆解
1.Micro—Sd也就是TF卡。
多层塑封结构。
从侧面看有不同颜色的层构成。
2.首先是用刀片轻轻刮开背部就能看到完整的电路板了。
3.正面慢慢刮开,首先看到的就是主控芯片,就是这个芯片负责NAND与SDIO口之间的
桥梁,内存的管理协议的转换。
周围有黄色的丝线是金丝bonding。
直接将主控的接口与NAND闪存颗粒的数据口、控制口等相连接。
下图是30倍放大后的照片。
4.一直刮到无法再刮。
可以看到主控下面有个面积较大的彩色光的方块,这就是NAND闪存颗粒了。
现在市场上较高端的TF卡的工艺一般都是32层堆叠的。
同样闪存颗粒周边就是金丝飞线(bonding线)。
上面两个是0402的电容。
SD卡电路介绍和维修指导我们经常接触的内存卡,一般有四种:SD卡、miniSD卡、microSD卡、T-Flash(TF)卡。
尺寸上,这四种卡从左至右,越来越小;使用功能上,这四种卡几乎没有区别。
TF卡大小和microSD卡一样没有区别。
SD卡上的表面一些数字定义如下图:从上图可以看出CLASS 2:能满足观看普通MPEG4、MPEG2的电影、SDTV、数码摄像机拍摄;CLASS 4:可以流畅播放高清电视(HDTV),数码相机连拍等需求;CLASS 6:满足单反相机连拍和专业设备的使用要求;CLASS 10:全新的Class 10超越了高清视频录制性能需求。
另外我们在卡表面也会看到SD、SDHC、SDXC的标识,这个标识的含义如下:SD: 最大支持2GB。
SDHC: SD High Capacity. SD2.0发布的规范,容量2GB ~ 32GB,采用FAT32(FAT16最大只能到2GB)。
SDXC: SD eXtended Capactiy. SD3.0发布的规范,容量2GB ~ 2TB,采用exFAT(vista的新文件系统)。
支持UHS-1。
下面是介绍常用的micro SD卡的脚定义:SD卡有多个信号脚(VDD、VSS、CMD、CLK、DATA0~3),具体如上图所示,下面是信号脚介绍:脚位定义:VDD(VREG_L11_2P285):电源输入管脚,电流最高可达到800MA,所以PCB检查时注意线宽。
CLK:系统时钟信号,从上图可知在识别模式CLK是400KHz,在高速传输模式是50MHz。
CMD:命令/回复。
DATA0~3:数据信号,单根线可以传输200MHZ。
VSS:参考地。
DET_SD:热拔插脚,根据卡槽分高有效或者低有效,需要去看卡槽规格书确定此脚插入后状态。
电路上面信号脚串22R是为了防信号反射,以及防干扰。
具体参考电路图如下:SD卡出现不良问题如何维修,1、排除SD卡本体问题,可以换用不同卡试一下。
深入理解SD卡基础原理以及内部结构的总结2009-09-03 18:291、简介:SD卡(Secure Digital Memory Card)是一种为满足安全性、容量、性能和使用环境等各方面的需求而设计的一种新型存储器件何读写SD卡,如果读者如希望详细了解SD卡,可以参考相关资料。
SD卡内部结构及引脚如下图所示:SD卡内2、SD卡管脚图:SD卡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、RSVSD卡主要引脚和功能为:CLK:时钟信号,每个时钟周期传输一个命令或数据位,频率可在0~25MHz之间变化,SD卡的总线管 CMD:双向命令和回复线,命令是一次主机到从卡操作的开始,命令可以是从主机到单卡寻址,也可 DAT0~3:数据线,数据可以从卡传向主机也可以从主机传向卡。
SD卡以命令形式来控制SD卡的读写等操作。
可根据命令对多块或单块进行读写操作。
在SPI模式下其4、MicroSD卡管脚图:MicroSD卡5、MicroSD卡管脚名称:MicroSD卡SD卡与MicroSD卡仅仅是封装上的不同,MicroSD卡更小,大小上和一个SIM卡差不多,但是协议与SD卡一般我们用单片机操作SD卡时,都不需要对FAT分区表信息做处理,原因如下:1)、操作FAT分区表要增加程序代码量、增加SRAM的消耗,对于便携应用来说代码大小和占用SRAM的多2)、即使我们对FAT分区表不做任何了解,实际上我们一样可以向SD卡上写入数据,这就表明使用FAT对3)、耗费大量经历和时间去了解FAT分区表对于我们做嵌入式软件开发的人来说有些得不偿失。
1、简介:SDxx(Secure Digital Memory Card)是一种为满足xx、容量、性能和使用环境等各方面的需求而设计的一种新型存储器件,SDxx允许在两种模式下工作,即SD模式和SPI模式,本系统采用SPI模式。
本小节仅简要介绍在SPI模式下,STM32处理器如何读写SDxx,如果读者如希望详细了解SDxx,可以参考相关资料。
SD xx内部结构及引脚如下图所示:SDxx内部图.JPG 2、SDxx管脚图:SDxx.JPG3、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、CS2、DI 3、VSS 4、VDD 5、SCLK 6、VSS2 7、DO8、RSV 9、RSVSD xx主要引脚和功能为:CLK:时钟信号,每个时钟周期传输一个命令或数据位,频率可在0~25MHz之间变化,SDxx的总线管理器可以不受任何限制的自由产生0~25MHz 的频率;CMD:双向命令和回复线,命令是一次主机到从xx操作的开始,命令可以是从主机到单xx寻址,也可以是到所有xx;回复是对之前命令的回答,回复可以来自单 xx或所有xx;DAT0~3:数据线,数据可以xx向主机也可以从主机传向xx。
SDxx以命令形式来控制SDxx的读写等操作。
可根据命令对多块或单块进行读写操作。
在SPI模式下其命令由6个字节构成,其中高位在前。
SDxx命令的格式如表1所示,其中相关参数可以查阅SDxx规范。
4、MicroSDxx管脚图:MicroSDxx管脚图.JPG5、MicroSDxx管脚名称:MicroSDxx管脚名称.JPGSD xx与MicroSDxx仅仅是封装上的不同,MicroSDxx更小,大小上和一个SIMxx差不多,但是协议与SDxx相同。
SD卡存储采集数据电路设计引言:随着现代科技的发展,数据采集和存储变得越来越重要。
SD卡存储采集数据电路是一种常用的数据采集和存储解决方案。
本文将从硬件电路设计的角度,为大家介绍SD卡存储采集数据电路的设计原理与方法。
一、设计目标与需求分析1.设计目标:设计一个可靠、高效的SD卡存储采集数据电路,可以用于各种数据采集和存储应用场景。
2.需求分析:(1)采集数据的接口要与主控芯片兼容,能够稳定、准确地接收来自主控芯片的数据;(2)实现SD卡存储数据的读写功能,包括数据的写入和读取;(3)设计具备错误检测与纠正功能,确保数据的可靠性;(4)电路设计要尽量简洁,兼顾成本和性能。
二、设计原理与方法1.硬件接口设计将SD卡存储采集数据电路与主控芯片连接,需要根据SD卡的接口标准设计对应的硬件接口。
SD卡的接口标准包括SPI和SDIO两种,根据具体应用需求选择相应的接口。
2.数据采集与存储设计(1)数据采集:通过与主控芯片的接口通信,实现数据的采集。
根据采集数据的类型,选择相应的传感器或模拟电路设计采集电路。
(2)数据存储:将采集到的数据经过适当的处理后,通过硬件电路将数据写入SD卡中。
SD卡存储数据采用的是FAT文件系统,需要根据SD卡的文件系统规范进行数据的写入和读取操作。
3.错误检测与纠正设计为了保证数据的可靠性,需要设计错误检测与纠正的功能。
主要包括数据校验和ECC纠错码的设计。
数据校验可以采用CRC校验或其他校验算法,通过对数据进行校验,可以检测出数据传输过程中的错误。
而ECC纠错码可以在数据写入SD卡时对数据进行编码与解码,以纠正和恢复部分错误数据。
4.电路设计根据以上原理与需求分析,进行电路设计。
具体的设计包括SD卡接口电路的设计、数据采集电路的设计、数据存储电路的设计和错误检测与纠正电路的设计。
对于电路设计应尽量简练,兼顾成本和性能。
三、设计实现与测试验证1.实施设计根据上述设计原理与方法,进行电路设计。
SD卡接口设计[附硬件电路和程序]1标准SD卡标准是SD卡协会针对可移动存储设备设计专利并授权的一种标准,主要用于制定卡的外形尺寸、电气接口和通信协议。
1.1SD卡引脚功能SD卡的外形如图1所示,引脚功能如表1所列。
SD卡的引脚具有双重功能,既可工作在SD模式,也可工作在SPI模式。
不同的模式下,引脚的功能不同。
SD模式多用于对SD卡读写速度要求较高的场合,SPI模式则是以牺牲读写速度换取更好的硬件接口兼容性。
由于SPI协议是目前广泛流行的通信协议,大多数高性能单片机都配备了SPI硬件接口,硬件连接相对简单,因此,在对SD卡读写速度要求不高的情况下,采用SPI模式无疑是一个不错的选择。
1.2SPI模式SPI模式是一种简单的命令响应协议,主控制器发出命令后,SD卡针对不S同的命令返回对应的响应。
SD卡的命令列表都是以CMD和ACMD开头,分别指通用命令和专用命令,后面接命令的编号。
例如,CMD17就是一个通用命令,用来读单块数据。
在SPI模式中,命令都是以如下的6字节形式发送的:每帧命令都以“01”开头,然后是6位命令号和4字节的参数(高位在前,低位在后),最后是7位CRC校验和1位停止位“1”。
SD卡的每条命令都会返回对应的响应类型。
在SPI模式下,共有3种响应类型:R1、R2和R3,分别占1、2和3个字节。
这里仅列出了R1响应的格式,如表2所列。
当出现表中所描述的状态时,相应的位置1。
R2和R3的第1个字节格式与R1完全一样,详细内容请参考SD卡标准。
2硬件设计本设计选用Freescale公司的32位低功耗微控制器MCF51QE128,采用SPI模式实现与SD卡的接口。
由于MCF51QE128是一款低功耗的微控制器,工作电压的典型值为3.6V,与SD卡的工作电压兼容,因而可以直接与SD卡连接,无需电平转换电路。
这里选用的是MCF51QE128的第2个SPI口,硬件连接如图2所示。
3软件实现软件部分主要实现MCF51QE128的初始化、底层SPI通信,以及SD卡的通用写命令、初始化和单块数据的读写等功能。
SD卡原理及内部结构1、简介:SD卡(Secure Digital Memory Card)是一种为满足安全性、容量、性能和使用环境等各方面的需求而设计的一种新型存储器件,SD卡允许在两种模式下工作,即SD模式和SPI模式,本系统采用SPI模式。
本小节仅简要介绍在SPI 模式下,STM32处理器如何读写SD卡,如果读者如希望详细了解SD卡,可以参考相关资料。
SD 卡内部结构及引脚如下图所示:SD卡内部图.JPG2、SD卡管脚图:SD卡图.JPG3、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、RSVSD 卡主要引脚和功能为:CLK:时钟信号,每个时钟周期传输一个命令或数据位,频率可在0~25MHz之间变化,SD卡的总线管理器可以不受任何限制的自由产生0~25MHz 的频率;CMD:双向命令和回复线,命令是一次主机到从卡操作的开始,命令可以是从主机到单卡寻址,也可以是到所有卡;回复是对之前命令的回答,回复可以来自单卡或所有卡;DAT0~3:数据线,数据可以从卡传向主机也可以从主机传向卡。
SD卡以命令形式来控制SD卡的读写等操作。
可根据命令对多块或单块进行读写操作。
在SPI模式下其命令由6个字节构成,其中高位在前。
SD卡命令的格式如表1所示,其中相关参数可以查阅SD卡规范。
4、MicroSD卡管脚图:MicroSD卡管脚图.JPG5、MicroSD卡管脚名称:MicroSD卡管脚名称.JPGSD 卡与MicroSD卡仅仅是封装上的不同,MicroSD卡更小,大小上和一个SIM卡差不多,但是协议与SD卡相同。
手机常见SD卡接口电路实例分析目的:让大家理解常见SD卡接口电路的工作原理和设计注意事项。
作者:胡波日期:2011/12/201.概述现在的很多手机中都有存储卡的卡座,常被称为T-FLASH CARD,它的体积与常见的Micro SD卡相比要小很多,因此更适用于手机的设计中,但T卡的接口电路是与SD卡的接口电路是一样的,它们的主要差别就是卡的外形与体积不一样。
为了能够读写这些卡,一般现在的手机的核心处理器都设计有SD卡的读写接口电路,在此我就简单介绍一下SD卡的接口电路。
本例中的原理图来至于MTK的MT6573智能手机平台,与原图相比,只是做了部分美观方面的处理,看起来显得比原图紧凑一点,其余方面未做任何的改动。
2.SD卡接口电路实例分析2.1.MTK6573智能机SD卡接口电路原理分析SD卡的总线是一个业内的标准总线,它采用串行的方式输入和输出数据,对于硬件设计来讲,只要根据SD卡的接口规范,将SD 对应的信号线接到处理器的SD卡控制器的端口就可以了。
而SD卡的读写控制,有着专门的软件通信协议,使得读写SD卡的内容变得非常的简单,在不同的嵌入式操作系统中,都有着专门的驱动程序,会将其映射成一个磁盘,使用特定的文件系统来完成数据的存储和删除。
例如我们常用的读卡器,就可以将SD卡在Windows的操作系统中被认作一个U盘,从而非常简单地就可以实现对于SD卡的读写。
在手机的操作系统中,一般也是将其当作一个磁盘来对待的,这都是软件层面的事情,在这里就不多说了。
对于搞硬件设计的人来讲,关心连线的对应关系就好了,而搞软件的人就只要关心SD卡的控制协议就可以了。
2.2.电路中的器件及关键网络信号介绍3.硬件设计注意事项3.1.在选择上拉电阻时,对于手机设计来讲,尽量选用电阻比较大一点的电阻,可以减小手机的待机功耗。
在本例中,选用了47.5K 的电阻,不是很好。
一般47K的电阻更容易购买一些,因此在选用电阻时,请参考电阻的系列参数。
SD卡在单片机上的应用以及SD卡引脚电路图及工作原理介绍部门: xxx时间: xxx整理范文,仅供参考,可下载自行编辑SD卡在现在的日常生活与工作中使用非常广泛,时下已经成为最为通用的数据存储卡。
在诸如MP3、数码相机等设备上也都采用SD卡作为其存储设备。
SD卡之所以得到如此广泛的使用,是因为它价格低廉、存储容量大、使用方便、通用性与安全性强等优点。
既然它有着这么多优点,那么如果将它加入到单片机应用开发系统中来,将使系统变得更加出色。
这就要求对SD卡的硬件与读写时序进行研究。
对于SD卡的硬件结构,在官方的文档上有很详细的介绍,如SD卡内的存储器结构、存储单元组织方式等内容。
要实现对它的读写,最核心的是它的时序,笔者在经过了实际的测试后,使用51单片机成功实现了对SD卡的扇区读写,并对其读写速度进行了评估。
下面先来讲解SD卡的读写时序。
1)SD卡的引脚定义:SD卡引脚功能详述:注:S:电源供给I:输入O:采用推拉驱动的输出PP:采用推拉驱动的输入输出SD卡SPI模式下与单片机的连接图:SD卡支持两种总线方式:SD方式与SPI方式。
其中SD方式采用6线制,使用CLK、CMD、DAT0~DAT3进行数据通信。
而SPI方式采用4线制,使用CS、CLK、DataIn、DataOut进行数据通信。
SD方式时的数据传输速度与SPI方式要快,采用单片机对SD卡进行读写时一般都采用SPI模式。
采用不同的初始化方式可以使SD卡工作于SD方式或SPI方式。
这里只对其SPI方式进行介绍。
b5E2RGbCAP<2)SPI方式驱动SD卡的方法 SD卡的SPI通信接口使其可以通过SPI通道进行数据读写。
从应用的角度来看,采用SPI接口的好处在于,很多单片机内部自带SPI控制器,不光给开发上带来方便,同时也见降低了开发成本。
然而,它也有不好的地方,如失去了SD卡的性能优势,要解决这一问题,就要用SD方式,因为它提供更大的总线数据带宽。
,时下已经成为最为通用的数据存储卡。
在诸如MP3、数码相机等设备上也都采用SD卡作为其存储设备。
SD卡之所以得到如此广泛的使用,是因为它价格低廉、存储容量大、使用方便、通用性与安全性强等优点。
既然它有着这么多优点,那么如果将它加入到单片机应用开发系统中来,将使系统变得更加出色。
这就要求对SD卡的硬件与读写时序进行研究。
对于SD卡的硬件结构,在官方的文档上有很详细的介绍,如SD卡内的存储器结构、存储单元组织方式等内容。
要实现对它的读写,最核心的是它的时序,笔者在经过了实际的测试后,使用51单片机成功实现了对SD卡的扇区读写,并对其读写速度进行了评估。
下面先来讲解SD卡的读写时序。
(1)SD卡的引脚定义:SD卡引脚功能详述:SD卡SPI模式下与单片机的连接图:SD卡支持两种总线方式:SD方式与SPI方式。
其中SD方式采用6线制,使用CLK、CMD、DAT0~DAT3进行数据通信。
而SPI方式采用4线制,使用CS、CLK、DataIn、DataOut进行数据通信。
SD方式时的数据传输速度与SPI方式要快,采用单片机对SD卡进行读写时一般都采用SPI模式。
采用不同的初始化方式可以使SD卡工作于SD方式或SPI方式。
这里只对其SPI方式进行介绍。
(2) SPI方式驱动SD卡的方法SD卡的SPI通信接口使其可以通过SPI通道进行数据读写。
从应用的角度来看,采用SPI接口的好处在于,很多单片机内部自带SPI 控制器,不光给开发上带来方便,同时也见降低了开发成本。
然而,它也有不好的地方,如失去了SD卡的性能优势,要解决这一问题,就要用SD方式,因为它提供更大的总线数据带宽。
SPI接口的选用是在上电初始时向其写入第一个命令时进行的。
以下介绍SD卡的驱动方法,只实现简单的扇区读写。
1)命令与数据传输1. 命令传输SD卡自身有完备的命令系统,以实现各项操作。
命令格式如下:命令的传输过程采用发送应答机制,过程如下:每一个命令都有自己命令应答格式。
在SPI模式中定义了三种应答格式,如下表所示:写命令的例程://----------------------------------------------------------------------------------------------- 向SD卡中写入命令,并返回回应的第二个字节//----------------------------------------------------------------------------------------------- unsigned char Write_Command_SD(unsigned char *CMD){unsigned char tmp;unsigned char retry=0;unsigned char i;//禁止SD卡片选SPI_CS=1;//发送8个时钟信号Write_Byte_SD(0xFF);//使能SD卡片选SPI_CS=0;//向SD卡发送6字节命令for (i=0;i<0x06;i++){Write_Byte_SD(*CMD++);}//获得16位的回应Read_Byte_SD(); //read the first byte,ignore it.do{ //读取后8位tmp = Read_Byte_SD();retry++;}while((tmp==0xff)&&(retry<100));return(tmp);}2)初始化SD卡的初始化是非常重要的,只有进行了正确的初始化,才能进行后面的各项操作。
在初始化过程中,SPI的时钟不能太快,否则会造初始化失败。
在初始化成功后,应尽量提高SPI的速率。
在刚开始要先发送至少74个时钟信号,这是必须的。
在很多读者的实验中,很多是因为疏忽了这一点,而使初始化不成功。
随后就是写入两个命令CMD0与CMD1,使SD卡进入SPI模式初始化时序图:初始化例程://--------------------------------------------------------------------------初始化SD卡到SPI模式//--------------------------------------------------------------------------unsigned char SD_Init(){unsigned char retry,temp;unsigned char i;unsigned char CMD[] = {0x40,0x00,0x00,0x00,0x00,0x95};SD_Port_Init(); //初始化驱动端口Init_Flag=1; //将初始化标志置1for (i=0;i<0x0f;i++){Write_Byte_SD(0xff); //发送至少74个时钟信号}//向SD卡发送CMD0retry=0;do{ //为了能够成功写入CMD0,在这里写200次temp=Write_Command_SD(CMD);retry++;if(retry==200){ //超过200次return(INIT_CMD0_ERROR);//CMD0 Error!}}while(temp!=1); //回应01h,停止写入//发送CMD1到SD卡CMD[0] = 0x41; //CMD1CMD[5] = 0xFF;retry=0;do{ //为了能成功写入CMD1,写100次temp=Write_Command_SD(CMD);retry++;if(retry==100){ //超过100次return(INIT_CMD1_ERROR);//CMD1 Error!}}while(temp!=0);//回应00h停止写入Init_Flag=0; //初始化完毕,初始化标志清零SPI_CS=1; //片选无效return(0); //初始化成功}3)读取CIDCID寄存器存储了SD卡的标识码。
每一个卡都有唯一的标识码。
CID寄存器长度为128位。
它的寄存器结构如下:4)读取CSDCSD(Card-Specific Data)寄存器提供了读写SD卡的一些信息。
其中的一些单元可以由用户重新编程。
具体的CSD结构如下:读CSD的时序:相应的程序例程如下://----------------------------------------------------------------------------------------- 读SD卡的CSD寄存器共16字节返回0说明读取成功//----------------------------------------------------------------------------------------- unsigned char Read_CSD_SD(unsigned char *Buffer){//读取CSD寄存器的命令unsigned char CMD[] = {0x49,0x00,0x00,0x00,0x00,0xFF};unsigned char temp;temp=SD_Read_Block(CMD,Buffer,16); //read 16 bytesreturn(temp);}4)读取SD卡信息综合上面对CID与CSD寄存器的读取,可以知道很多关于SD卡的信息,以下程序可以获取这些信息。
如下://-----------------------------------------------------------------------------------------------//返回// SD卡的容量,单位为M// sector count and multiplier MB are inu08 == C_SIZE / (2^(9-C_SIZE_MULT))// SD卡的名称//-----------------------------------------------------------------------------------------------void SD_get_volume_info(){unsigned char i;unsigned char c_temp[5];VOLUME_INFO_TYPE SD_volume_Info,*vinf;vinf=&SD_volume_Info; //Init the pointoer;/读取CSD寄存器Read_CSD_SD(sectorBuffer.dat);//获取总扇区数vinf->sector_count = sectorBuffer.dat[6] & 0x03;vinf->sector_count <<= 8;vinf->sector_count += sectorBuffer.dat[7];vinf->sector_count <<= 2;vinf->sector_count += (sectorBuffer.dat[8] & 0xc0) >> 6;// 获取multipliervinf->sector_multiply = sectorBuffer.dat[9] & 0x03;vinf->sector_multiply <<= 1;vinf->sector_multiply += (sectorBuffer.dat[10] & 0x80) >> 7;//获取SD卡的容量vinf->size_MB = vinf->sector_count >> (9-vinf->sector_multiply);// get the name of the cardRead_CID_SD(sectorBuffer.dat);vinf->name[0] = sectorBuffer.dat[3];vinf->name[1] = sectorBuffer.dat[4];vinf->name[2] = sectorBuffer.dat[5];vinf->name[3] = sectorBuffer.dat[6];vinf->name[4] = sectorBuffer.dat[7];vinf->name[5] = 0x00; //end flag}以上程序将信息装载到一个结构体中,这个结构体的定义如下:typedef struct SD_VOLUME_INFO{ //SD/SD Card infounsigned int size_MB;unsigned char sector_multiply;unsigned int sector_count;unsigned char name[6];} VOLUME_INFO_TYPE;5)扇区读扇区读是对SD卡驱动的目的之一。