sd卡详细资料

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)
 
sd卡详细资料_第1张图片
 
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的、也有用于蓝牙的。

3、SD卡协议

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

2.0: 2

3.0: >32GB

4、SD卡通信接口

SD卡有9个pin:1个VDD,2个VSS(GND),CLK,CMD,DATA0-DATA3, 【DATA3可以作为卡检测脚】

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

SD总线接口描述:

sd卡详细资料_第2张图片

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

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

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

VDD:VDD is the power supply line for all cards. 

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

SPI接口描述:

sd卡详细资料_第3张图片

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. 

5、SD卡内部结构

sd卡详细资料_第4张图片

Each  card has a set of information registers 
sd卡详细资料_第5张图片
The RCA register is not available in SPI Mode. 
OCR: 卡操作电压寄存器 32位, 只读,每隔0.1V占1位, 第31位卡上电过程是否完成
CID: 卡身份识别寄存器 128bit,只读, 厂家号,产品号,串号,生产日期
SCR: 卡配置寄存器, 可写的 64bit 是否用Security特性(LINUX不支持),以及数据位宽(1bit或4bit)
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.
 
5、SD卡上电过程
sd卡详细资料_第6张图片

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

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

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

卡寻址通过会话地址方式实现,地址在初始化的时候分配给卡。SD 总线上 
的基本操作是command/response。 
 
数据传送采用块方式,数据块后接CRC 校验位,操作包括单数据块和多数据
块。多数据块更适合快速写操作,多数据块传输当在 CMD 线出现停止命令时结束。 
数据传输可以在主机端设置采用单数据线或多数据线方式。 
 
块写操作在DAT0 数据线写操作期间使用忙信号,无论用来传输的信号线数
 
目是多少。

命令:通过CMD线
sd卡详细资料_第7张图片
 
响应:通过CMD线
sd卡详细资料_第8张图片
数据:通过4条数据线
sd卡详细资料_第9张图片

最多支持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 lines are connected together in the host. If they are separated then each card will accept it separately on his turn.
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 sent as 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


7、SD卡的状态

sd卡详细资料_第10张图片
 
8、SD卡的操作模式
对卡而言也有两类操作:
卡识别模式——在重置(reset)后当主机查找总线上的新卡时,处
 
于卡识别模式。重置后SD卡将始终处于该模式,直到收到
 
SEND_RCA命令(CMD3)。 
数据传输模式—一旦卡的REC发布后,将进入 数据传输模式。主机一旦识别了所有总线上的卡后,将进入数据传输模式。 
卡识别模式

sd卡详细资料_第11张图片
   GO_IDLE_STATE(CMD0)是软件重置命令,设置每个SD卡进入Idle状态。处于Inactive状态的卡不受此命令影响。主机上电后,所有SD卡进入Idle状态,包括处于Inactive状态的卡。至少74个时钟周期后才能开始总线传输。上电或CMD0(重置)后,所有SD卡的命令线处于输入模式,等待下一个命令的起始位。卡通过一个默认的相对卡地址RCA(RCA=0x0000)和默认驱动 寄存器设置(最低速,最高驱动电流)初始化。
   SD的物理规范标准要求所有SD卡能通过最小和最大供电电压间的任何电压和主机建立通信。然而,数据传输时的最小和最大电压值在操作条件 寄存器OCR中定义,可能并不能覆盖所有的电压范围。SD卡主机希望通过读取卡的OCR寄存器获取合适的电压值或弹出卡。
    在识别时钟速率fOD下主机开始卡识别过程。SD卡的CMD线输出驱动是push-pull驱动。 总线激活后,主机要求卡发送它们的有效操作条件(ACMD41 preceding with APP_CMD—CMD55 with RCA=0x0000)。ACMD41命令的响应是卡的操作条件寄存器。相同的命令将发送给系统中所有的卡。不兼容的卡将进入Inactive状态。 主机然后发送命令ALL_SEND_CID(CMD2)到每个卡以获取每个卡的唯一标识CID号。未识别的卡通过CMD线发送CID号作为响应。当卡发送CID号后,进入识别状态(Identification State)。此后,主机发送CMD3(SEND_RELATIVE_ADDR)要求卡发布一个新的相对卡地址RCA,地址比CID短,在以后的 数据传输模式中用来 寻址卡。一旦获得RCA后,卡状态变成就绪状态(Stand-by state)。此时,如果主机要求卡换成其他的RCA号,可以通过发送另一个SEND_RELATIVE_ADDR命令给卡,要求发布一个新的RCA,最后发布的RCA是实际使用的RCA。主机对系统中的每个卡重复识别过程。 所有的SD卡初始化完以后,系统将开始初始化MMC卡(如果有的话),使用MMC卡的CMD2和CMD3。

                                      数据传输模式
sd卡详细资料_第12张图片
   直到主机知道所有CSD寄存器的内容,fpp 时钟速率必须保持在fOD,因为 
一些卡有操作频率限制。主机发送SEND_CSD(CMD9)获取卡定义数据(Card 
 Specific Data,CSD 寄存器),如块大小、卡存储容量、最大时钟速率等。 
    CMD7用来选择一个卡并将它置于传输状态(Transfer state),在任何时间只能有一个卡处于传输状态。如果已有一个卡处于传输状态,它和主机的连接将释放,并返回到Stand-by状态。
    当CMD7以保留相对地址“0x0000”发送时,所有卡将返回到Stand-by状态。这可以用来识别新的卡而不重置其他已注册的卡。在这种状态下已有一个RCA地址的卡不响应识别命令(ACMD41,CMD2,CMD3)。 
   注意:当卡接收到一个带有不匹配RCA的CMD7时,卡将取消选中。在公用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 State,DAT0将保持低电平(BUSY)。 
   写CSD、CID、写保护和擦除时没有缓冲。这表明在卡因这些命令而处于忙时,不再接收其他 数据传输命令。在卡忙时DAT0保持低电平,并处于Programming State。实际上如果CMD和DAT0线分离,而且 主机占有的忙DAT0线和其他DAT0线分开,那么在卡忙时,主机可以访问其他卡。 
   在卡被编程(programming)时,禁止参数设置命令。参数设置命令包括:设置块长度(CMD16),擦除块开始(CMD32)和擦除块结束(CMD33)。 
   卡在操作时不允许读命令。 
   使用CMD7指令把另一个卡从Stand-by状态转移到Transfer状态不会中止擦除和编程(programming)操作。卡将切换到Disconnect状态并释放DAT线。 
   使用CMD7指令可以不选中处于Disconnect状态的卡。卡将进入Programming状态,重新激活忙指示。 
   使用CMD0或CMD15重置卡将中止所有挂起和活动的 编程(programming)操作。这可能会破坏卡上的数据内容,需要主机保证避免这样的操作。

9、SD卡是否选择宽总线选择
   宽总线(4位总线宽度)操作模式通过ACMD6选择和不选择。在上电后或GO_IDLE(CMD0)命令后默认的总线宽度是1位。ACMD6命令只在“tran state”有效,即只有在卡选中后(CMD7)总线宽度才能修改。
 
10、SD卡读数据格式
   DAT总线在没有 数据传输时处于高电平。一个传输数据块包含一个起始位(LOW),接着连续的数据流。数据流包含有效数据(如果使用了ECC了还包括错误纠正位)。数据流以一个结束位(HIGH)结束。数据传输和时钟信号同步。 
  以块传输的有效数据包含CRC校验和。产生多项式是标准CCITT 多项式。 采用了缩短的BCH码,d=4,有效数据长度最长为2048字节。CRC校验和对每个DAT线单独计算并附加在每个数据块后。在宽总线模式操作
(DAT0-DAT3)中,16位的CRC校验对每个DAT分别计算。 
  数据块读:  传输的基本单位是数据块,最大尺寸在CSD中定义(READ_BL_LEN)。 开始和结束地址完全包含在一个物理数据快(如READ_BL_LEN定义)中的较 小的块也可以传递。CRC附加在每个数据块的尾部用来保证数据传输的完整性。 CMD17(READ_SINGLE_BLOCK)开始一个块读操作,然后传输完成后进入 Transfer状态。CMD18(READ_MULTIPLE_BLOCK)开始连续的块传输,直到停 止命令。停止命令有一个执行延迟。在停止命令最后一位发送完以后数据传输 止。  如果主机使用累计长度不是块对齐的部分块,在第一个不对齐块的开始,卡 会发现一个块未对齐错误,在状态寄存器中设置ADDRESS_ERR错误,中止传 输并等待(在Data状态)停止命令。

11、SD卡写数据格式
 
数据写传输格式类似于读格式。对于以块为单位的写数据传输,CRC检验
位附加到每个数据块。卡的每根数据线在接收到数据并在写操作前,执行CRC
校验。 
数据块写 
数据块写(CMD24-27,42,56(W)),一个或多个数据块从主机发送给卡,主机
在每个数据块后附加CRC校验。数据块长度WRITE_BL_LEN(512B)。如果
CRC校验失败,卡将在DAT 数据线上指示错误。传输的数据将被抛弃,而且后
续传输的数据块(在多数据块写模式)也都会被忽略。 
多数据块写命令比连续的单数据块写命令速度快。不允许部分块写(小于
512B)。 
主机试图在写保护区域写数据时写操作将中止。在这种情况下,卡在状态
寄存器设置WP_VIOLATION位,并忽略所有后续 数据传输,并在Receive-data
状态下等待停止命令。 
对CID和CSD寄存器进行编程操作不需要实现设置块长度,传输的数据也
是CRC保护的。如果CSD或CID寄存器一部分存储于ROM中,那么不可改变
部分必须和接收缓冲中的相应部分内容保持一致。如果匹配失败,卡将报告一个
错误,而且不改变任何 寄存器内容。 
接收到一个数据块并完成CRC校验后,卡将开始写,如果写缓冲满而且不
能从一个新的WRITE_BLOCK命令接收新数据时,  DAT0 线保持为低电平。任
何时候主机都可以通过SEND_STATUS(CMD13)命令获取卡的状态。状态位
READY_FOR_DATA指示卡是否可以接收新数据或写操作还在进行中。主机通
过CMD7(选中另一个卡)不选中卡,这个操作可以把卡的状态编程Disconnect
并释放DAT线而不中断写操作。当不选中卡时,如果 编程还在进行而且写缓冲
不可用时,将通过下拉DAT为低电平来重新激活忙信号。实际上,主机通过
interleaving可以实现多个卡同时写操作,interleaving过程可以通过在卡忙时访问
其他卡实现。 
预擦除设置优先于多数据块写操作 
设置多个写数据块的预擦除(ACMD23)可以使得接下来的多个数据块写操
作比没有预先执行ACMD23的相同操作更快。主机可以通过该命令设置多少个
数据块将在接下来的写操作中发送。如果在所有数据块发送给卡时中止了写操作
(使用停止传输命令),残余写数据块的内容(指要写入新内容的数据块?)将变
得不确定(可能已擦除或还是原来的数据)。如果 主机发送了超过ACMD23中
定义的数据块数目的数据,卡将逐个擦除数据块(在收到新数据时)。多数据块
写操作完成后值将重新设置为默认值1。 
建议在CMD25命令前使用该命令以加速写操作。如果需要预擦除主机在写
命令前发送ACMD23。如果不发送ACMD23命令,设置的预擦除数将在其他指
令执行时自动清除。 
发送写数据块数目 
系统使用管道机制进行数据缓冲管理,有时候在多数据块写操作过程中发生
错误,使得无法确定哪一个数据块是最后成功写入的数据块。卡可以把正常写入
的数据块数(the number of well-written blocks)作为对命令ACMD22的响应。 
擦除 
同时擦除多个写数据块可以提高数据吞吐量。通过
ERASE_WR_BLK_START(CMD32)和ERASE_WR_BLK_END(CMD33)实现写
数据块的识别。 
主机必须严格按照下列的命令操作顺序:ERASE_WR_BLK_START,
RASE_WR_BLK_END,and ERASE (CMD38)。 
如果不按顺序接收到擦除指令(CMD38)或地址设置指令(CMD32,33),
卡将在状态寄存器中设置ERASE_SEQ_ERROR位,并重置整个顺序(sequence)。 
如果接收到一个不顺序的命令(除了SEND_STATUS),卡将在状态寄存
器设置ERASE_RESET状态位,重置擦除顺序和执行最后的命令。 
如果擦除范围包括写保护扇区,将不被擦除,擦除命令只擦除无保护的扇区。
状态 寄存器的WP_ERASE_SKIP位将设置。 
地址设置命令中的地址是以字节为单位的块写地址。卡将忽略所有小于
WRITE_BLK_LEN(CSD)LSB(最低有效位)。 
如上所述的块写操作,卡通过保持DAT0为低电平指示擦除操作正在进行中。
实际的擦除操作时间可能会很长,主机可以通过CMD7不选中卡或执行卡断开
操作。 
卡上擦除操作后的数据为“0”或“1”,由卡制造商确定。SCR寄存器的
DATA_STAT_AFTER_ERASE(bit55)定义了是“0”或“1”。

你可能感兴趣的:(LINUX驱动)