从零开始,基于FPGA实现SD卡高效读写操作(一)

引言:本文介绍写SD卡的理论知识,主要包括SD卡分类、容量、速度、管脚、物理结构以及命令控制等。

1. 概述

SD卡存储卡,是用于手机、数码相机、便携式电脑、MP3和其他数码产品上的独立存储介质,一般是卡片的形态,故统称为“存储卡”,又称为“数码存储卡”、“数字存储卡”、“储存卡”等。

SD 卡是在 MMC 卡的基础上发展而来,全称 Secure Digital Card,译为安全数字卡,简称SD卡。由松下电器、东芝和闪迪联合推出,1999 年 8 月发布。SD卡的数据传送和物理规范与MMC相似,大小和MMC卡差不多,尺寸为32mmx24mmx2.1mm。长宽和MMC卡一样,只是比MMC卡厚了0.7mm,以容纳更大容量的存贮单元。SD卡与MMC卡保持着向上的兼容,MMC卡可以被新的SD设备存取,兼容性则取决于应用软件,但SD卡却不可以被MMC设备存取。

图片

图1:MMC卡与SD卡

图片

图2:SD卡发展历程

按照外形与尺寸,SD卡可分为三类:标准SD卡、MiniSD卡和MicroSD 卡,典型参数如图3所示。

图片

图3:三类SD典型参数

(1)标准SD:规格最大的一种,今天市面上大多数消费级数字相机和摄像机均使用此标准的SD卡,这种卡有标准的“缺角”设计。

(2)mini-SD:在数码相机,PDA等所用的Flash Memory Card(中文名:快闪存储卡)基础上发展出的一种更小更适合小型手机用的存储卡。尽管mini-SD卡的外形大小及接口形状与原来的SD卡不同,但接口等电气标准相同,以确保兼容性。将mini-SD卡插入专用适配器,可通过原来的SD卡插槽读写mini-SD卡。不过,不具备像SD卡那样防写入的锁定功能。

(3)Micro SD:原名Trans-flash Card(TF卡),2004年正式更名为Micro SD Card,由SanDisk(闪迪)公司发明,主要用于移动电话。目前,提供128MB、256MB、512MB、1G、2G、4G、8G、16G、32G、64G、128G、256G、512G、1T容量的Micro SD卡供消费者选用。

SD卡管脚定义如下图4和图5所示。

图片

图片

图4:SD卡典型管脚定义

图片

图5:Micro SD卡典型管脚定义

2. SD卡的容量和速度

2.1 SD卡容量

SD卡按照容量标准可分为 4 个等级:

SD:Secure Digital Card,安全数字卡;

SDHC :Secure Digital High Capacity,高容量安全数字卡;

SDXC :SD eXtended Capacity,容量扩大化的安全数字卡;

SDUC:Secure Digital Ultra Capacity,超容量安全数字卡。

图片

图6:SD卡按容量分类

市场的主流SD产品是SDHC和SDXC这两种较大容量的存储卡,SD卡因容量过小,已逐渐被市场淘汰,SDUC则是容量太大,预计会出现在未来市场。

2.2 SD卡速度

不同品牌和厂商生产的SD卡在对存取速度上的定义标准不同,这会使用户在选择SD卡时产生困扰。所以SD协会根据视频匀速写入到SD卡的最低持续速度来划分不同等级,每个等级的速率是以每秒传输多少MB来衡量的,单位为 MB/SSD协会定义了三种速度等级:速度等级、UHS速度等级与视频速度等级。三种速度等级的具体传输速度如图7所示。

图片

图7:SD卡速度等级

从SD2.0的规范开始,对SD普通卡和高速卡的速度分级是:Class2、Class4、Class6和 Class 10 四个等级。

UHS 速度等级

UHS(Ultra High Speed)是与SDXC同时推出的SD卡总线标准。UHS 速度等级适用于SDHC和SDXC。

SD协会定义的UHS速度等级是UHS速度等级1(UHS-1)和UHS速度等级 3(UHS-3)。U1和U3可应用于UHS总线IF产品系列(UHS-I,UHS-II和UHS-III)。厂商一般会直接在SD卡上标注速度,这可协助消费者透过读写标志来选择所需要的效能。

视频速度等级

视频速度等级定义为能满足高分辨率和高质量 4K/8K 视频录制的需求,它还具有支持下一代闪存类型(如3D NAND)的重要功能。此外,视频速度等级还涵盖了HD高清(2K)视频的速度。SD协会定义的视频速度等级为V6,V10,V30,V60和V90。V6和V10可应用于高速和UHS总线IF产品系列。V30可应用于UHS总线 IF产品系列。V60和V90可应用于UHS-II/UHS-III 产品系列。

3. SD卡物理结构

SD卡物理结构如图8所示。

图片

图8:SD卡物理结构

SD卡从物理结构看包括5个部分,分别为存储单元、存储单元接口、电源检测、卡及接口控制器和接口驱动器,具体见图8。存储单元是存储数据部件,存储单元通过存储单元接口与卡控制单元进行数据传输;电源检测单元保证SD卡工作在合适的电压下,如出现掉电或上电状态时,它会使控制单元和存储单元接口复位;卡及接口控制单元控制SD卡的运行状态,它包括有8个寄存器;接口驱动器控制SD卡引脚的输入输出。

常规的SD卡共有9个引脚接口,其中包括3根电源线、1根时钟线、1根命令线和4根数据线。工作模式有两种:SDIO模式和SPI模式(模式3)。各信号简介如下:

CLK:同步时钟线,由SDIO主机产生,即由主机控制器输出;使用SPI模式时,该引脚与SPI总线的SCK时钟信号相连;

CMD:命令控制线,SDIO主机通过该线发送命令控制SD卡,如果命令要求SD卡提供应答(响应),SD卡也是通过该线传输应答信息;使用SPI模式时,该引脚与SPI总线的MOSI信号相连,SPI主机通过它向SD卡发送命令及数据,但因为SPI总线的MOSI仅用于主机向从机输出信号,所以SD卡返回应答信息时不使用该信号线;

DAT0-3:在SDIO模式下,它们均为数据线,传输读写数据,SD卡可将 D0拉低表示忙状态;在SPI模式下,DAT0与SPI总线的MISO信号相连,SD卡通过该信号线向主机发送数据或响应,DAT3与总线的CS信号相连,SPI主机通过该信号线选择要通讯的SD卡。

VDD、VSS1、VSS2:电源和地信号,其中Micro SD卡不包含VSS2信号,即Micro SD卡仅有8根线。

SD卡有两种工作模式,在SDIO模式下,SD卡共使用到CLK、CMD、DAT[3:0]六根信号线;SDIO总线与多张SD卡连接时,可以共用CLK时钟信号线,对于CMD、DAT[3:0]信号线,每张SD卡都要独立连接。SDIO总线与SD卡连接方式,具体见图9。

图片

图9:SDIO总线与SD卡互联

在SPI模式下,SD卡共使用到CS(DAT[3])、CLK、MISO(DAT[0])、MOSI(CMD)四根信号线;SPI 总线与多张 SD卡连接时,除CS片选信号线不可共用外,其他信号均可公用。SPI总线与SD卡连方式,具体见图10。

图片

图10:SPI总线与SD卡互联

4. SD卡寄存器

SD卡总共有8个寄存器,用于设定或表示SD卡信息,寄存器描述具体见图11。这些寄存器只能通过对应的命令访问,对SD卡的控制操作是通过命令来执行的,SD卡定义了64个命令(部分命令不支持SPI模式),每个命令都有特殊意义,可以实现某一特定功能,SD卡接收到命令后,根据命令要求对SD卡内部寄存器进行修改,程序控制中只需要发送组合命令就可以实现SD卡的控制以及读写操作。

图片

图11:SD卡寄存器寄存器简述

5. SD卡命令控制

5.1 SD卡控制时序

SD卡的通信是基于命令和数据传输的。通讯由一个起始位(“0”)开始,由一个停止位(“1”)终止。SD通信一般是主机发送一个命令(Command),从设备在接收到命令后作出响应(Response),如有需要会有数据(Data)传输参与。SD卡的基本交互是命令与响应交互,如图12所示,图中的DataIn和DataOut线分别是SPI的MISO及MOSI信号。

图片

图12:命令与响应交互

SD数据是以块(Block)形式传输的,SDHC卡数据块长度一般为512字节,数据可以从主机到卡,也可以是从卡到主机。数据块需要CRC位来保证数据传输成功,CRC位由SD卡系统硬件生成。单个数据块的读写时序见图12、图13。

图片

图 12:单块读操作

图片

图:13:单块写操作

读写操作都是由主机发起的,主机发送不同的命令表示读或写,SD卡接收到命令后对命令返回响应。在读操作中,SD卡返回一个数据块,数据块中包含 CRC校验码;在写操作中,主机接收到命令响应后需要先发送一个标志(TOKEN)然后紧跟一个要写入的数据块,卡接收完数据块后会返回一个数据响应及忙碌标志,当SD卡把接收到的数据写入到内部存储单元完成后,会停止发送忙碌标志,主机确认SD卡空闲后,可以发送下一个命令。SD数据传输支持单块和多块读写,它们分别对应不同的操作命令,结束多块读写时需要使用命令来停止操作。

5.2 SD卡命令

命令格式

SD命令由主机发出,命令格式固定为48bit,通过CMD信号线连续传输。SD 命令格式,具体见图14。

图片

图:14:命令格式

起始位和终止位:命令的主体包含在起始位与终止位之间,它们都只包含一个数据位,起始位为 0,终止位为 1。

传输标志:用于区分传输方向,该位为1时表示命令,方向为主机传输到SD卡,该位为0时表示响应,方向为SD卡传输到主机。命令主体内容包括命令、地址信息/参数和CRC校验三个部分。

命令号:它固定占用6bit,所以总共有64个命令,每个命令都有特定的用途,部分命令不适用于SPI总线,或不适用于SD卡操作,只是专门用于MMC卡或者 SD I/O卡。

地址/参数:每个命令32bit地址信息/参数用于命令附加内容,例如,广播命令没有地址信息,这32bit用于指定参数,而寻址命令这32bit用于指定目标SD卡的地址,当使用SDIO驱动多张SD卡时,通过地址信息区分控制不同的卡,使用SPI总线驱动时,通过片选引脚来选择不同的卡,所以使用这些命令时地址可填充任意值。

CRC7校验:长度为7bit的校验位用于验证命令传输内容正确性,如果发生外部干扰导致传输数据个别位状态改变将导致校准失败,也意味着命令传输失败,SD卡不执行命令。使用SDIO驱动时,命令中必须包含正确的CRC7校验值;而使用SPI驱动时,命令中的CRC7校验默认是关闭的,即这CRC7校验位中可以写入任意值而不影响通讯,仅在发送CMD0命令时需要强制带标准的CRC7校验。

命令说明

SD卡命令可分为标准命令 (如CMD0)和特殊应用命令 (如ACMD41),其中特殊应用命令只有在先写入CMD55命令后才能被识别。按照指令类型又可将 SD卡命令分为基本命令、数据块写命令、数据块读命令、擦除命令等12种(class0 ~ class11),部分命令不适用于SPI 总线,或不适用于SD卡操作,只是专门用于MMC卡或者 SD I/O 卡。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值