【SDIO】SD卡基本概念说明

1、SDIO简介

        SD卡(Secure Digital Memory Card)在我们生活中已经非常普遍了,控制器对SD卡进行读写通信操作一般有两种通信接口可选,一种是SPI接口,另外一种就是SDIO接口。SDIO全称是安全数字输入/输出接口,多媒体卡(MMC)、SD卡、SD I/O卡都有SDIO接口。STM32F10x系列控制器有一个SDIO主机接口,它可以与MMC卡、SD卡、SD I/O卡以及CE-ATA设备进行数据传输。

  • MMC卡可以说是SD卡的前身,现阶段已经用得很少。
  • SD I/O卡本身不是用于存储的卡,它是指利用SDIO传输协议的一种外设。比如Wi-Fi Card,它主要是提供Wi-Fi功能,有些Wi-Fi模块是使用串口或者SPI接口进行通信的,但Wi-Fi SDIO Card是使用SDIO接口进行通信的。并且一般设计SD I/O卡是可以插入到SD的插槽。
  •  CE-ATA是专为轻薄笔记本硬盘设计的硬盘高速通讯接口。

目前SD协议供的SD卡规范版本最新是4.01版本,但是STM32系列控制器只支持SD卡规范版本2.0,即只支持标准容量SD和高容量SDHC标准卡,不支持超大容量SDXC标准卡,所以可以支持的最高卡容量是32GB。

2、SD卡简介

        SD卡按内存容量分类:

简称全称容量大小SD版本
SDSCStandard Capacity SD Memory Card<=2GB2.0版本以上
SDHCHigh Capacity SD Memory Card2GB~32GB2.0版本以上
SDXCExtended Capacity SD Memory Card32GB~2TB3.0版本以上
SDUCUltra Capacity SD Memory Card2TB~128TB8.0版本以上

        总线速度模式分类如下:

SD版本总线速度总线接口
2.0最高速度 < 25 MB/sec1. 支持4条3.3V数据线High Speed模式
3.0最高速度 < 104 MB/sec1. 支持4条3.3V数据线High Speed模式
2. 支持4条1.8V数据线 UHS-I模式
6.0最高速度 < 6.24Gbps per lane1. 支持4条3.3V数据线High Speed模式
2. 支持4条1.8V数据线 UHS-I模式
3. 支持UHS-II、UHS-III不同的接口总线模式
8.0最高速度 < 3938MB/s1. 支持4条3.3V数据线High Speed模式
2. 支持4条1.8V数据线 UHS-I模式
3. 支持UHS-II、UHS-III不同的接口总线模式
4. 支持PCIe Gen 4 2 lanes不同的接口总线模式

2.1、SD卡物理结构

        一张 SD卡包括有存储单元、存储单元接口、电源检测、卡及接口控制器和接口驱动器 5个部分。

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

SD卡

        引脚定义如下:

microSD卡(也称TF卡)

引脚定义如下:

        我们可以看到microSD卡和SD卡只在外观和引脚定义上有一点区别,我们后面内容就以SD卡来讲解。

SD卡寄存器

        D卡总共有8个寄存器,用于设定或表示SD卡信息,参考下表 。这些寄存器只能通过对应的命令访问,对SD卡进行控制操作并不是像操作控制器GPIO相关寄存器那样一次读写一个寄存器的,它是通过命令来控制,SDIO定义了64个命令,每个命令都有特殊意义,可以实现某一特定功能,SD卡接收到命令后,根据命令要求对SD卡内部寄存器进行修改,程序控制中只需要发送组合命令就可以实现SD卡的控制以及读写操作。   

名称bit宽度描述
CID128卡识别号(Card identification number):用来识别的卡的个体号码(唯一的)
RCA16相对地址(Relative card address):卡的本地系统地址,初始化时,动态地由卡建议,主机核准。
DSR16驱动级寄存器(Driver Stage Register):配置卡的输出驱动
CSD128卡的特定数据(Card Specific Data):卡的操作条件信息
SCR64SD配置寄存器(SD Configuration Register):SD 卡特殊特性信息
OCR32操作条件寄存器(Operation conditions register)
SSR512SD状态(SD Status):SD卡专有特征的信息
CSR32卡状态(Card Status):卡状态信息

3、SD卡总线

3.1、总线拓扑

        SD卡一般都支持SDIO和SPI这两种接口,本章内容只介绍SDIO接口操作方式,另外,STM32系列控制器的SDIO大部分是不支持SPI通信模式的,如果需要用到SPI通信只能使用SPI外设。

        SD卡使用9-pin接口通信,其中3根电源线、1根时钟线、1根命令线和4根数据线,具体说明如下:

  • CLK:时钟线,由SDIO主机产生,即由STM32控制器输出;

  • CMD:命令控制线,SDIO主机通过该线发送命令控制SD卡,如果命令要求SD卡提供应答(响应),SD卡也是通过该线传输应答信息;

  • D0-3:数据线,传输读写数据;SD卡可将D0拉低表示忙状态;

  • VDD、VSS1、VSS2:电源和地信号。

        SDIO的通信时序相对于SPI简单了许多,不管是从主机控制器 向SD卡传输,还是SD卡向主机控制器传输都只以CLK时钟线的上升沿为有效。

        SD卡操作过程会使用两种不同频率 的时钟同步数据,一个是识别卡阶段时钟频率FOD,最高为400kHz,另外一个是数据传输模式下时钟频率FPP,默认最高 为25MHz,如果通过相关寄存器配置使SDIO工作在高速模式,此时数据传输模式最高频率为50MHz。

3.2、总线协议

        SD总线通信是基于命令和数据传输的。通讯由一个起始位(“0”),由一个停止位(“1”)终止。SD通信一般是主机发送一个命令(Command),从设备在接收到命令后作出响应(Response),如有需要会有数据(Data)传输参与。    

  • Command:Command是启动操作的令牌。Command从主机发送到单个卡(寻址命令)或所有连接的卡(广播命令)。Command在CMD数据线上串行传输。
  • Response:Response是一个令牌,它从一个有地址的卡或从所有连接的卡发送到主机,作为对先前接收到的命令的回答。Response在CMD数据线上串行传输。
  • Data:Data可以从卡转移到主机或反之亦然。Data通过DAT数据线传输。

        SD总线的基本交互是命令与响应交互,如下图:

        SD数据是以块(Black)形式传输的,SDHC卡数据块长度一般为512字节,数据可以从主机到卡,也可以是从卡到主机。数据块需要CRC位来 保证数据传输成功。CRC位由SD卡系统硬件生成。下图为主机向 SD卡写入数据块操作示意:

        SD数据传输支持单块和多块读写,它们分别对应不同的操作命令,多块写入还需要使用命令来停止整个写入操作。数据写入前需要检测SD卡忙状态,因为SD卡在接收到数据后编程到存储区过程需要一定操作时间。SD卡忙状态通过把D0线拉低表示

        数据块读操作与之类似,只是无需忙状态检测。

3.2.1、Cmd命令

cmd命令格式

        SD命令由主机发出,以广播命令寻址命令为例,广播命令是针对与SD主机总线连接的所有从设备发送的,寻址命令是指定某个地址设备进行命令传输。

        SD命令格式固定为48bit,都是通过CMD线连续传输的(数据线不参与),如下图:

        命令主体内容包括命令、地址信息/参数和CRC校验三个部分。

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

  • 地址/参数:每个命令有32bit地址信息/参数用于命令附加内容,例如,广播命令没有地址 信息,这32bit用于指定参数,而寻址命令这32bit用于指定目标SD卡的地址。

  • CRC7校验:长度为7bit的校验位用于验证命令传输内容正确性,如果发生外部干扰导致传输 数据个别位状态改变将导致校准失败,也意味着命令传输失败,SD卡不执行命令。

        逻辑分析仪抓取CMD8的实际波形图如下:

cmd命令分类及描述

        SD命令有4种类型:

  • 无响应广播命令(bc),发送到所有卡,不返回任务响应;

  • 带响应广播命令(bcr),发送到所有卡,同时接收来自所有卡响应;

  • 寻址命令(ac),发送到选定卡,DAT线无数据传输;

  • 寻址数据传输命令(adtc),发送到选定卡,DAT线有数据传输。

        另外,SD卡主机模块系统旨在为各种应用程序类型提供一个标准接口。在此环境中,需要有特定的客户/应用程序功能。为实现这些功能,在标准中定义了两种类型的通用命令:特定应用命令(ACMD)和常规命令(GEN_CMD)。要使用SD卡制造商特定的ACMD命令如ACMD6,需要在发送该命令之前无发送CMD55命令,告知SD卡接下来的命令为特定应用命令。CMD55命令只对紧接的第一个命令有效,SD卡如果检测到CMD55之后的第一条命令为ACMD则执行其特定应用功能,如果检测发现不是ACMD命令,则执行标准命令。

        针对SD卡系统的命令被分为多个类,每个类支持一种“卡的功能设置”。SD卡部分命令信息如下表所示:

3.2.2、Response命令

        响应由SD卡向主机发出,部分命令要求SD卡作出响应,这些响应多用于反馈SD卡的状态。SDIO总共有7个响应类型(代号:R1~R7),其中SD卡没有R4、R5类型响应。特定的命令对应有特定的响应类型,比如当主机发送CMD3命令时,可以得到响应R6。与命令一样,SD卡的响应也是通过CMD线连续传输的。根据响应内容大小可以分为短响应长响应。短响应是48bit长度,只有R2类型是长响应,其长度为136bit。 

        SD卡响应类型如下图所示:

3.2.3、Data数据

        Data有1线传输(卡识别模式阶段)和4线传输(数据传输阶段常用)两种传输方式。使用4数据线传输时,每次传输4bit数据,每根数据线都必须有起始位、终止位以及CRC位,CRC位每根数据线都要分别检查,并把检查结果汇总然后在数据传输完后通过D0线反馈给主机。

        SD卡数据包有两种格式,一种是常规数据(8bit宽),它先发低字节再发高字节,而每个字节则是先发高位再发低位。

        1或4线传输常规数据包示意图如下所示:

        4线同步发送,每根线发送一个字节的其中两个位,数据位在四线顺序排列发送,DAT3数据线发较高位,DAT0数据线发较低位

        另外一种数据包发送格式是宽位数据包格式,对SD卡而言宽位数据包发送方式是针对SD卡SSR(SD状态)寄存器内容发送的,SSR寄存器总共有512bit,在 主机发出ACMD13命令后SD卡将SSR寄存器内容通过DAT线发送给主机。

        1或4线传输宽位数据包示意图如下所示:

逻辑分析仪抓取SD卡传输Data的实际波形图如下:

  • 29
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值