SD 学习历程

本文详细介绍了SD卡的相关知识,包括SD、SDHC、SDXC等不同类型的区分,以及SD/MMC协议与命令,如CMD0、CMD8、CMD16等。还探讨了Linux中SD/MMC设备驱动流程,涉及mmc_host、mmc_core、mmc_card等组件。此外,文章还讲解了Vold在SD卡挂载过程中的作用,展示了从内核到用户层的挂载流程。
摘要由CSDN通过智能技术生成

SD card

 高均 收集整理 自学用

几个概念:SDSDHCSDXCSDIOMMCMCI

MmcMMC(Multi Media Card)由西门子公司和首推CFSanDisk1997年推出的多媒体记忆卡标准。较早的一种记忆卡标准

SD:由MMC演变而来的,最大支持2GB大小容量。(Secure Digital Memory Card)由日本松下、东芝及美国SanDisk公司于19998月共同开发研制的新一代记忆卡标准,已完全兼容MMC标准。
SDHC是大容量SD卡,也就是SD High Capacity,支持最大32GB大小容量
SDXC(SD eXtended Capacity)09年才发布的新标准,支持最大2TB的大小容量

SDIO (Secure Digital Input and Output Card)安全数字输入输出卡。SDIO是在SD标准上定义了一种外设接口,通过SDI/O接脚来连接外围设备,并且通过SD上的 I/O数据接位与这些外围设备进行数据传输。

MCI: MCIMultimedia Card Interface的简称,即多媒体卡接口。上述的MMC,SD,SDI卡定义的接口都属于MCI接口。MCI这个术语在驱动程序中经常使用,很多文件,函数名字都包括”mci”.

 

MMCSDSDIO的电气特性及性能和不同工作模式下支持的传输模式情况:

引脚图micro-SD8个,少一个接地pin脚)

 

2. SD卡的引脚图

注:S:电源供给 I:输入 O:采用推拉驱动的输出

PP:采用推拉驱动的输入输出 

 高均 收集整理 自学用

SD/MMC协议与命令了解

SD2.0规范介绍

1、版本

SD spec1.0  低速度、低容量   25M    2G

   SD spec1.1  高速度、低容量   50M    2G

SD spec2.0  高速度、高容量   50M    32G

2SD规范包括

(1)  物理层规范 

(2)  文件系统规范

(3)  SD卡安全规范

(4)  SD卡音频应用规范+其他相关应用规范

(5)  SD MC扩展规范 移动设备

(6)  SDIO卡规范

3、符合SD2.0规范的设备

SD     MiniSDMicroSD    1.0/1.1

SDIO   wifiGPS,条形扫描仪

SDHC     2.0   最少支持class2   

SDXC           网卡,电视卡

Combo Card组合卡(存储器+SDIO

4、传输速度类型分为

class0   旧的卡,

class2   大于2MB/S

class4   大于4MB/S

class6   大于6MB/S

5总线传输模式

SD卡支持两种总线方式:SD方式与SPI方式。其中SPI   串行传输、低速度;SD   最多支持四线传输。SD方式采用6线制,使用CLKCMDDAT0~DAT3进行数据通信。而SPI方式采用4线制,使用CSCLKDataInDataOut进行数据通信。兼容MMC

SD/SDIO 的传输模式

SD 传输模式有以下 3种:

·   SPI mode required

·   1-bit mode

·   4-bit mode

SDIO 同样也支持以上 3种传输模式。依据 SD标准,所有的 SD(记忆卡)与 SDIO(外围)都必须支持 SPI mode,因此 SPI mode是「required」。此外,早期的 MMC卡(使用 SPI传输)也能接到 SD插糟(SD slot),并且使用 SPI mode 1-bit mode来读取。

 

6SD总线

1 总线分为hostódevice

(1)  comand  命令 host => device都是48

A、广播命令

B、点对点命令

(2)  response 响应 device => host

根据内容不同分为R1R3R4R7(48)R2(136)

  首先由主机向SD卡发送命令command,等待SD卡的回复response,如果成功收到回复,则进行数据传输。其中,指令线和数据线上传输的指令和数据都要遵循相应的协议格式。

 

   一条指令command48位,其中command index指代这条具体的指令名称,argument为该指令的参数。一条回复response根据不同的指令有几种不同类型。

struct mmc_command {
 u32   opcode;            //对应command index
 u32   arg;
                  //对应argument
 u32   resp[4];           
//对应response
 unsigned int  flags;  /* expected response type */

 ... ...

 unsigned int  retries; /* max number of retries */
 unsigned int  error;  /* command error */

 struct mmc_data  *data;  /* data segment associated with cmd */
 struct mmc_request *mrq;  /* associated request */
}; 

 

初始化阶段,hostSD卡分配地址

数据传输是有单块传输命令和多块传输命令,然后通过发送一个终止命令停止传输

单块还是多块传输,通过host去配置

命令先传msb lsb

 

SD/MMC卡相关寄存器

SD卡内部有7个寄存器.其中OCR,CID,CSD和SCR寄存器保存卡的配置信息;RCA寄存器保存着通信过程中卡当前暂时分配的地址(只适合SD模式);CSR卡状态(Card Status)和SSR SD状态(SD Status)寄存器保存着卡的状态(例如,是否写成功,通信的CRC校验是否正确等),这两个寄存器的内容与通信模式(SD模式或SPI模式)相关.MMC卡没有SCR和SD Status寄存器.如下表1所示:

 

1.1.OCR寄存器(操作寄存器   电压值上电状态)

OCR寄存器保存着SD/MMC卡的供电电允许范围.如下表2所示:如果OCR寄存器的某位为1,表示卡支持该位对应的电压。最后一位表示卡上电后的状态(是否处于”忙状态”),如果该位为0,表示忙,如果为1,表示处于空闲状态(MMC/SD协议P60)。


表2 OCR寄存器

1.2.CID寄存器(卡标识寄存器 产品序列生产日期)

CID为一个16个字节的寄存器,该寄存器包含一个独特的卡标识号。如下表3所示:


表3 CID寄存器

1.3.CSD寄存器(卡特性寄存器 )

CSD寄存器(卡特殊数据寄存器)包含访问卡存储时需要的相关信息。如下表4所示:


表4 CSD寄存器

1.4.SCR寄存器(卡配置寄存器 支持协议 支持总线宽度  )
SCR寄存器提供SD卡的特殊特性信息,其大小为64位。该寄存器由厂商编程,主机不能对它进行编程。MMC卡没有SCR。如下表5所示:


表 5 SCR寄存器

1.5. RCA寄存器(卡地址)

该16位卡地址寄存器保存了在卡识别过程中卡发布的器件地址。该地址用于在卡识别后主机利用该地址与卡进行通信。该寄存器只有在SD总线模式下才有效。

 

SD卡的命令

1.SD卡的命令格式:

SD卡的指令由6字节(Byte)组成,如下:


Byte101 x x x x x x(命令号,由指令标志定义CMD39为100111即16进制0x27,那么完整的CMD39第一字节为01100111,即0x27+0x40)。

Byte2-5:Command Arguments,命令参数,有些命令没有参数。

Byte6:前7位为CRC(Cyclic Redundacy Check,循环冗余校验)校验位,最后一位为停止位0

2. SD卡的命令

SD卡命令共分为12类,分别为class0到Class11.

2.1. Class0 :(卡的识别、初始化等基本命令集)

CMD0:复位SD 卡。
CMD1:读OCR寄存器。

CMD9:读CSD寄存器。

CMD10:读CID寄存器。

CMD12:停止读多块时的数据传输。

CMD13:读 Card_Status 寄存器。

2.2.Class2 (读卡命令集):

CMD16:设置块的长度。
CMD17:读单块。

CMD18:读多块,直至主机发送CMD12为止 。

2.3.Class4(写卡命令集) :

CMD24:写单块。
CMD25:写多块。

CMD27:写CSD寄存器 。

2.4.Class5 (擦除卡命令集):

CMD32:设置擦除块的起始地址。
CMD33:设置擦除块的终止地址。

CMD38: 擦除所选择的块。

2.5.Class6(写保护命令集):

CMD28:设置写保护块的地址。
CMD29:擦除写保护块的地址。

CMD30: Ask the card for the status of the write protection bits

class7:卡的锁定,解锁功能命令集。

class8:申请特定命令集 。

class10 -11 :保留。

其中 class1, class3,class9SPI模式不支持

 

 高均 收集整理 自学用

3.SD卡的工作流程

首先看下脱离操作系统如何在ARM处理器上实现SD卡的读写。过程可以分为3个大的步骤:初始化sd卡、写sd卡、读sd卡。

3.1.工作条件检测

卡在识别模式下的命令流程如图3.1所示(英文版见标准SD卡协议P24)



图3.1 卡在识别模式下的命令流程

结合代码

结合代码

  mmc_go_idle(host);                     CMD0

  Idle State

  mmc_send_if_cond(host, ocr);     CMD8

  mmc_send_app_op_cond(host, ocr, NULL);      ACMD41

  Ready State

  mmc_all_send_cid(host, cid);       CMD2

  IdentificationState

  mmc_send_relative_addr(host, &card->rca);     CMD3

 

1)在主机和SD卡进行任何通信之前,主机不知道SD卡支持的工作电压范围,卡也不知道是否支持主机当前提供的电压。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值