xiaojin_lin的个人空间 https://blog.eetop.cn/821462 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

SD卡的详细资料(开发文档)

已有 1793 次阅读| 2015-12-1 20:34 |个人分类:文件系统

转自: http://www.51hei.com/mcu/4125.html

 

1、简介  

SD卡是基于flash的存储卡。 

SD卡和MMC卡的区别在于初始化过程不同。 

SD卡的通信协议包括SD总线和SPI两类。 

SD卡使用卡内智能控制模块进行FLASH操作控制,包括协议、安全算法、数据存取、ECC算法、缺陷处理和分析、电源管理、时钟管理。

通信电压范围:2.0-3.6V;工作电压范围:2.0-3.6V

最大读写速率:10Mbyte/s  

最大10 个堆叠的卡(20MHz,Vcc=2.7-3.6V)

 

2:卡类型
MMC: MultiMedia card,有 7 个触点( 引脚),分为两种操作模式,分别为 MMC模式与SPI 模式,两种模式对引脚的定义是不同的。SPI 模式只有 Host 具有SPI 接口时才能使用。MMC只具有存储功能,不像SD卡还具有加密功能。
SD: Security Digtial card,共有9 个触点( 引脚),多余的 2 个引脚为数据线,但使用与 MMC卡兼容的模式时,这两个多余的引脚没有起到作用。SD卡除了存储功能外,还有一种加密功能,但加密功能是收费的(所以开源的linux中只包含mmc的驱动目录),因为当初SD卡联盟中(索尼)就是发明这种卡就是用来存储音乐(淘汰卡带),并使用加密特性,防止拷贝。


TF卡:软件上SD卡一致,只是在硬件的体积上比SD卡西小,所以市场上很多的TF卡的SD外形卡套
SDIO卡: 这种卡并不是存储卡,可以理解为一个SDIO接口卡,如WIFI(SDIO接口);并非memory卡,故名思意,

就是输入/ 输出卡,这种卡有用于 LAN的、也有用于蓝牙的。

3SD卡协议

1.x:小于2GB的卡(但通过相关的软件,可以模拟实现大于2GB

2.0: 2<SD<32 GB

3.0: >32GB

4SD卡通信接口

SD卡有9pin1VDD,2VSS(GND)CLK,CMD,DATA0-DATA3, DATA3可以作为卡检测脚】

SD卡可以使用SD总线接口,也可以使用SPI通信接口;

SD总线接口描述:

CMDCommand is a bi-directional signal. (Host and card drivers are operating in push pull mode.) 【命令与响应都是走这条线】

DAT0-3Data lines are bi-directional signals. (Host and card drivers are operating in push pull mode.) 【真正的数据走这几条线,数据位是可以配置:1~4

CLKClock is a host to cards signal. (CLK operates in push pull mode.) 

VDDVDD is the power supply line for all cards. 

VSS[1:2]VSS are two ground lines. 

SPI接口描述:

CS:Host to card Chip Select signal.

CLK:Host to card clock signal. 

DataIn:Host to card data signal. 

DataOut:Card to host data signal. 

5SD卡内部结构

Each card has a set of information registers 

The RCA register is not available in SPI Mode. 

OCR: 卡操作电压寄存器 32位, 只读,每隔0.1V1位, 第31位卡上电过程是否完成

CID: 卡身份识别寄存器 128bit,只读, 厂家号,产品号,串号,生产日期

SCR: 卡配置寄存器, 可写的 64bit 是否用Security特性(LINUX不支持),以及数据位宽(1bit4bit

RCA: 卡地址寄存器: 可写的 16bit SD host和卡进行协商的一个地址,内核中会在代码里面记录这个地址,卡这      边则写到RCA寄存器

CSD: 卡专有数据寄存器 部分可读写 128bit, 卡容量,最大传输速率,读写操作的最大电流、电压,读写擦出块的最大长度等

 

The host may reset the cards by switching the power supply off and on again. The card has its own power-on detection circuitry which puts the card into an idle state after the power-on. The card can also be reset by sending the GO_IDLE (CMD0) command.

 

5SD卡上电过程

上电初始化需要1ms或者74 CLOCK(SD卡的clock,400KHZ)两者大致,SD卡的电压上到2.0VSD卡开始工作,此时支持的命令非常有限(其中最主要支持ACMD41命令,sd host问卡的操作电压时多少? 卡就会从它的OCR寄存器里面读出SD卡出厂就烧录在里面的卡的操作电压值返回给sd host),当电压调整到它要求的VDD时候(SD卡的工作电压在2.7~3.6V,常见3.3V),同时SDCLK400KHZ调整到更高频率(比如25MHZ),这时卡就完全正常的工作了。接下来可以去获取卡的生产厂家,容量等信息。

6SD卡的命令和响应以及数据传送的格式

 

MMC/SD通过发命令的方式来实现卡的初始化和数据访问

 

卡寻址通过会话地址方式实现,地址在初始化的时候分配给卡。SD 总线上 

的基本操作是command/response 

 

数据传送采用块方式,数据块后接CRC 校验位,操作包括单数据块和多数据

块。多数据块更适合快速写操作,多数据块传输当在 CMD 线出现停止命令时结束。 

数据传输可以在主机端设置采用单数据线或多数据线方式。 

 

块写操作在DAT0 数据线写操作期间使用忙信号,无论用来传输的信号线数

 

目是多少。

 

命令:通过CMD线

 

响应:通过CMD线

数据:通过4条数据线

最多支持64个命令: CMD0~CMD63,(其中CMD57~63是保留的)
ACMD: Application Sepcific command:
ACMD41 =cmd55 + cmd41,
组合命令,CMD55是前导命令,提醒卡后面的CMD41是一个特殊的命令
命令的类型

广播命令(bc,bcr)——广播命令发送给所有SD卡,有些命令需要响应。 

寻址(点对点)命令

ac,adtc

 

——

 

寻址命令只发送给具有相应地址的卡,并

 

需要从卡返回一个响应。

Broadcast Commands ( bc), no response

The broadcast feature is applicable only if all the CMD linesare connected together in the host. If they are separated then each card will accept it separately on histurn.

Broadcast Commands with Response (bcr )

response from all cards simultaneously. Since there is no Open Drain mode in SD Card, this type of command is used only if all the CMD lines are separated.The command will be accepted and responded to by every card separately.

Addressed (point-to-point) Commands (ac )

no data transfer on DAT.

Addressed (point-to-point) Data Transfer Commands (adtc)

data transfer on DAT.

 

响应:
R1 (standard response): response length 48 bit
R1b is identical to R1 with an optional busy signal transmitted on the data line
R2 (CID, CSD register): response length 136 bits. The content of the CID register is sent as a response to CMD2 and CMD10. The content of the CSD register is sentas a response to CMD9.
R3 (OCR register): response length 48 bits. The contents of the OCR register are sent as a response to ACMD41.
R4~R5
 responses are not supported.
R6
(Published RCA response): code length 48-bit, response to CMD3

 

 

7SD卡的状态

 

8SD卡的操作模式

对卡而言也有两类操作:

卡识别模式——在重置(reset)后当主机查找总线上的新卡时,处于卡识别模式。重置后SD卡将始终处于该模式,直到收到SEND_RCA命令(CMD3)。 

数据传输模式—一旦卡的REC发布后,将进入数据传输模式。主机一旦识别了所有总线上的卡后,将进入数据传输模式。 

卡识别模式

   GO_IDLE_STATE(CMD0)是软件重置命令,设置每个SD卡进入Idle状态。处于Inactive状态的卡不受此命令影响。主机上电后,所有SD卡进入Idle状态,包括处于Inactive状态的卡。至少74个时钟周期后才能开始总线传输。上电或CMD0(重置)后,所有SD卡的命令线处于输入模式,等待下一个命令的起始位。卡通过一个默认的相对卡地址RCARCA=0x0000)和默认驱动寄存器设置(最低速,最高驱动电流)初始化。

   SD的物理规范标准要求所有SD卡能通过最小和最大供电电压间的任何电压和主机建立通信。然而,数据传输时的最小和最大电压值在操作条件寄存器OCR中定义,可能并不能覆盖所有的电压范围。SD卡主机希望通过读取卡的OCR寄存器获取合适的电压值或弹出卡。

    在识别时钟速率fOD下主机开始卡识别过程。SD卡的CMD线输出驱动是push-pull驱动。 总线激活后,主机要求卡发送它们的有效操作条件(ACMD41 preceding with APP_CMDCMD55 with RCA=0x0000)。ACMD41命令的响应是卡的操作条件寄存器。相同的命令将发送给系统中所有的卡。不兼容的卡将进入Inactive状态。主机然后发送命令ALL_SEND_CIDCMD2)到每个卡以获取每个卡的唯一标识CID号。未识别的卡通过CMD线发送CID号作为响应。当卡发送CID号后,进入识别状态(Identification State)。此后,主机发送CMD3SEND_RELATIVE_ADDR)要求卡发布一个新的相对卡地址RCA,地址比CID短,在以后的数据传输模式中用来寻址卡。一旦获得RCA后,卡状态变成就绪状态(Stand-by state)。此时,如果主机要求卡换成其他的RCA号,可以通过发送另一个SEND_RELATIVE_ADDR命令给卡,要求发布一个新的RCA,最后发布的RCA是实际使用的RCA。主机对系统中的每个卡重复识别过程。 所有的SD卡初始化完以后,系统将开始初始化MMC卡(如果有的话),使用MMC卡的CMD2CMD3

 

数据传输模式

   直到主机知道所有CSD寄存器的内容,fpp 时钟速率必须保持在fOD,因为 

一些卡有操作频率限制。主机发送SEND_CSDCMD9)获取卡定义数据(Card 

 Specific DataCSD寄存器),如块大小、卡存储容量、最大时钟速率等。 

    CMD7用来选择一个卡并将它置于传输状态(Transfer state),在任何时间只能有一个卡处于传输状态。如果已有一个卡处于传输状态,它和主机的连接将释放,并返回到Stand-by状态。

    CMD7以保留相对地址“0x0000”发送时,所有卡将返回到Stand-by状态。这可以用来识别新的卡而不重置其他已注册的卡。在这种状态下已有一个RCA地址的卡不响应识别命令(ACMD41,CMD2,CMD3)。 

   注意:当卡接收到一个带有不匹配RCACMD7时,卡将取消选中。在公用CMD线时,选中一个卡时将自动不选中其他卡。

   因此,在SD卡系统中,主机具有如下功能:

        初始化完成后,在公用CMD线时,不选中卡是自动完成的。

        如果使用单独的CMD线,需要关注不选中卡的操作

   在主机和选择的SD卡之间的所有数据通信是点对点的方式。所有寻址命令都需要响应。 

   不同数据传输模式的关系如图4-8所示,使用如下步骤: 

   所有读数据命令可以在任何时候通过停止命令(stop command,CMD12)中止。数据传输将中止,卡回到传输状态(Transfer State)。读命令有:块读命令(CMD17),多块读命令(CMD18),发送读保护(CMD30),

发送scr(ACMD51),以及读模式的通用命令(CMD56) 

   所有写数据命令可以在任何时候通过停止命令(stop command,CMD12)中止。在不选中卡命令CMD7前写命令必须停止。写命令有:块写命令 (CMD24 and CMD25),  CID (CMD26), CSD(CMD27), lock/unlock 

命令(CMD42) 以及写模式通用命令(CMD56) 

   一旦数据传输完成,卡将退出数据写状态并进入Programming State(传输成功)Transfer State(传输失败)。 

   如果一个快写操作停止,而且最后一块块长度和CRC是有效的,那么数据可以被操作(programmed)。 

   卡可能提供块写缓冲。这意味着在前一块数据被操作时,下一块数据可以传送给卡。如果所有卡写缓冲已满,只要卡在Programming StateDAT0将保持低电平(BUSY)。 

   CSDCID、写保护和擦除时没有缓冲。这表明在卡因这些命令而处于忙时,不再接收其他数据传输命令。在卡忙时DAT0保持低电平,并处于Programming State。实际上如果CMDDAT0线分离,而且主机占有的忙DAT0线和其他DAT0线分开,那么在卡忙时,主机可以访问其他卡。 

   在卡被编程(programming)时,禁止参数设置命令。参数设置命令包括:设置块长度(CMD16),擦除块开始(CMD32)和擦除块结束(CMD33)。 

   卡在操作时不允许读命令。 


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 2

    粉丝
  • 0

    好友
  • 0

    获赞
  • 1

    评论
  • 252

    访问数
关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-21 12:51 , Processed in 0.028565 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部