Chinaunix首页 | 论坛 | 博客
  • 博客访问: 276790
  • 博文数量: 61
  • 博客积分: 655
  • 博客等级: 上士
  • 技术积分: 489
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-21 18:21
文章分类

全部博文(61)

文章存档

2014年(9)

2013年(23)

2012年(26)

2011年(3)

我的朋友

分类: LINUX

2013-07-19 16:48:04

SD存储卡系统物理层简化规范V2.00——汉化简化版

原文地址:%E5%AD%98%E5%82%A8%E5%8D%A1%E7%B3%BB%E7%BB%9F%E7%89%A9%E7%90%86%E5%B1%82%E7%AE%80%E5%8C%96%E8%A7%84%E8%8C%83V2.00%E2%80%94%E2%80%94%E6%B1%89%E5%8C%96%E7%AE%80%E5%8C%96%E7%89%88
声明:本译文仅适用于SD总线的SD卡应用,并且仅供参考,如有翻译错误,请以英文原文为准。

目录

[]

[] 系统特性

  • 针对移动和固定应用
  • 存储容量
    • 标准容量SD存储卡:最高2G
    • 高容量SD存储卡:2G以上(在该规范版本中,最高32G)
  • 电压范围
    • 高电压SD存储卡 — 操作电压范围:2.7~3.6V
    • 双电压SD存储卡 — 操作电压范围:低电压范围(T.B.D)和2.7~3.6V
  • 分为只读卡和读/写卡
  • 默认模式:时钟频率可在0~25MHz间变化,高达12.5MB/s的接口速度(使用4条并行数据线)
  • 高速模式:时钟频率可在0~50MHz间变化,高达25MB/s的接口速度(使用4条并行数据线)
  • 支持高速,电子商务和将来功能的转换功能命令
  • 存储域错误纠正
  • 读操作期间移去卡,内容不损坏
  • 内容保护机制 — 符合SDMI标准的最高安全性
  • 卡的密码保护(CMD42 - LOCK_UNLOCK)
  • 机械开关的写保护特性
  • 内嵌的写保护特性(永久或暂时)
  • 卡检测(插入/移去)
  • 应用特定命令
  • 舒适的擦除机制
  • 通信通道协议属性

SD Memory Card Communication Channel.png

  • SD存储卡外形尺寸
    • 标准尺寸SD存储卡(32*24*2.1mm)

SD & SDHC.png

    • mini-SD存储卡(21.5*20*1.4mm)

Mini-SD & mini-SDHC.png

    • micro-SD存储卡(15*11*1.0mm)

Micro-SD & micro-SDHC.png

[] 系统概念

[] 读写属性

按照读写属性定义,有两种类型的SD存储卡:

  • 读/写(R/W)卡(Flash, OTP(一次可编程), MTP(多次可编程))。这些卡通常买来时是空白的,用于大量数据的存储,以及记录用户的音频、视频和图像。
  • 只读存储器(ROM)。这些卡生产有固定的数据内容。通常作为软件、音频、视频等的发行媒介。

[] 操作电压范围

按照操作电压定义,有两种类型的SD存储卡:

  • 高电压SD存储卡:工作在2.7~3.6V的电压范围内
  • 双电压SD存储卡:能够工作在低电压范围(T.B.D)和2.7~3.6V的电压范围内

注意:双电压SD存储卡的细节,将在未来规范中定义。

[] 卡容量

按照容量定义,有两种类型的SD存储卡:

  • 标准容量SD(SD)存储卡:支持容量高达2GB(231 B)。所有物理层规范都定义了标准容量SD存储卡。
  • 高容量SD(SDHC)存储卡:支持容量在2GB以上,该规范版本中将容量限制在32GB。高容量SD存储卡是在V2.00中新定义的。
高容量SD存储卡有两种类型:
  • Type A(单态卡)只有高容量存储区。
  • Type B(双态卡)有高容量存储区和标准容量存储区。在Type B卡中,任何时候,只能有一种存储区能被使用。有一机械开关选择想要的存储区。Type B的细节将在以后的规范中定义。主机可以不必区分高容量SD卡的类型。

只有符合SD存储卡物理层规范V2.00或更高并且符合SD文件系统规范V2.00的主机才能访问高容量SD存储卡。其它主机初始化高容量SD存储卡时,将失败(见下图)。
注意:

  1. SD存储卡物理层规范V2.00和SD文件系统规范V2.00允许标准容量SD存储卡容量高达2GB,高容量SD存储卡容量高达32GB。容量高于32GB的SD存储卡将在以后的版本中定义。
  2. 能够访问容量高于2GB的SD存储卡的主机,也能够访问2GB以下的SD存储卡。

Hosts-Cards Usability.png

[] 速度等级

本规范中定义了4种速度等级,用于指示卡的最低性能:

  • Class 0 – 这类卡没有指定性能,包括该规范之前的所有旧卡,可以忽略它的性能
  • Class 2 – 性能在 2 MB/sec 或以上
  • Class 4 – 性能在 4 MB/sec 或以上
  • Class 6 – 性能在 6 MB/sec 或以上

高容量SD存储卡的速度等级至少为 Class 2。

[] 总线协议

SD存储卡支持SD总线协议SPI总线协议,本文档只介绍SD总线协议。

[] SD总线

SD总线上的通信是基于命令/响应的,并且数据位流以一个起始位开始,以一个停止位结束。

  • Command:命令是开始一项操作的令牌。命令可以由主机发送到一个卡(寻址命令)或者所有连接的卡(广播命令)。命令在命令线CMD上串行传输。
  • Response:响应是对先前接收到命令的一个应答。响应可以由被寻址的卡或所有连接的卡发送到主机。响应在命令线CMD上串行传输。
  • Data:数据可以从卡发送到主机,也可以从主机发送到卡。数据在数据线DAT上传输。
(图)无响应和无数据操作

No response and no data operations.png

卡寻址是使用一个会话地址来实现的,这个地址是在初始化阶段分配给卡的。命令、响应和数据块结构见SD存储卡功能描述。SD总线上的基本操作是命令/响应操作(见上图)。这种总线操作类型直接在命令或响应结构中发送它们的信息。另外,有些命令有一个数据令牌。
数据传输是以块进行的,分为单块传输和多块传输。数据块后总是跟着CRC位。多块传输可以更好地实现更快的写操作。当一条停止命令跟在命令线CMD上时,一次多块传输结束。数据传输可使用单数据线或多数据线,由主机配置。

(图)(多)数据块读操作

(multiple)block read operation.png

数据块写操作使用一个简单的写操作忙信号(见下图)。在写操作期间,无论传输数据的数据线条数,该信号只持续在数据线DAT0上。多数据块写操作可以更好地实现更快的写操作。

(图)(多)数据块写操作

(multiple)block write operation.png

命令令牌的编码方案如下:

(图)命令令牌格式

Command Token Format.png

每个命令令牌前面有一个起始位(0),后面有一个结束位(1)。总长度48位。每个令牌由CRC位保护以至于能检测出传输错误,必要时并重复操作。
响应令牌有四种编码方案,每个响应只能为其中的一种,取决于它们的内容。总长度为48或136位。详见SD存储卡功能描述。

(图)响应令牌格式

Response Token Format.png

在命令线CMD上,先传输最高有效位(msb),最后传输最低有效位(lsb)。
当使用宽总线模式时,一次传输4位数据。每条数据线上都会传输起始位、结束位和CRC位。每条数据线单独计算并检查CRC位。CRC状态响应和忙指示仅由卡通过DAT0发送给主机(此时,不关心DAT1-DAT3)。

SD卡有两种数据包格式:

1. 常规数据(Usual data ,8位宽):常规数据先发送最低有效字节(LSB),最后发送最高有效字节(MSB)。但是,在单个字节中,先发送最高有效位(msb),最后发送最低有效位(lsb)。

(图)数据包格式——常规数据 Data Packet Format - Usual Data.png

2. 宽幅数据(Wide width data ,SD寄存器):宽幅数据从最高有效位开始移位。

(图) 数据包格式——宽幅数据 Data Packet Format - Wide Width Data.png

[] SD存储卡功能描述

[] 概述

主机和卡之间的所有通信都是由主机控制的。
主机发送的命令有两种:广播命令和寻址(点对点)命令。

  • 广播命令
广播命令将发送到所有的卡。有些广播命令需要响应。
  • 寻址(点对点)命令
寻址命令将发送到被寻址的卡,并且从这个卡返回一个响应。

SD存储卡系统(主机和卡)定义了两种操作模式:

  • 卡识别模式
主机复位后或正在总线上寻找新卡时,处于卡识别模式。卡复位后,将一直处于卡识别模式,直到收到 SEND_RCA命令(CMD3)。
  • 数据传输模式
卡在它的RCA第一次被发布后,进入数据传输模式。主机在识别总线上所有的卡后,进入数据传输模式。

下表列出了操作模式和卡状态之间的关系。

(表) 卡状态与操作模式

Overview of Card States vs. Operation Modes.png

[] 卡识别模式

在卡识别模式下,主机复位所有处于卡识别模式下的卡、确认操作电压范围、识别卡并且要求卡发布它们的相对卡地址(RCA)。该操作是在卡各自的CMD线上分别完成的。在卡识别模式下,所有数据通信只使用CMD线。
在卡识别过程中,SD时钟频率必须为FOD(0~400KHz)。

[] 卡复位

CMD0 (GO_IDLE_STATE)是软件复位命令,它将所有卡置于空闲状态(Idle State),而不管卡的当前状态。注意,该命令对非激活状态下的卡没有影响。

上电后,所有的卡都处于空闲状态,包括那些之前处于非激活状态下的卡。如果是SD主机,CMD0不是必须的,如果是SPI主机,首先应该向卡发送CMD0。

上电后或执行CMD0后,所有卡的CMD线都处于输入模式,以等待下一个命令的起始位。同时所有卡都被初始化为一个默认的相对卡地址(RCA=0x0000)和一个默认的时钟频率(400KHz)。

[] 确认卡接口操作条件(操作电压范围)

在主机和卡通信开始时,主机不知道卡能否在它提供的电压下工作,卡也不知道它是否支持主机提供的电压。

  1. 发送CMD0
主机发送一个CMD0去复位卡。
  1. 发送CMD8
主机发送一个SEND_IF_COND(CMD8)去核实卡接口操作条件。详见CMD8。

主机必须在发送ACMD41之前发送CMD8,如果主机不发送CMD8,卡将在ACMD41时进入非激活状态。

(图) SD存储卡状态图(卡识别模式)

SD Memory Card State Diagram (card identification mode).png

[] 卡初始化和识别过程

总线被激活后,主机开始卡的初始化和识别过程(见下图)。

[] 初始化过程:
  1. 发送ACMD41
SD卡的初始化只需要ACMD41。详见ACMD41命令 [] 识别过程:
  1. 发送CMD2
主机发送ALL_SEND_CID(CMD2)到每个卡,以得到卡的唯一的CID寄存器。处于就绪状态并且没有被识别的卡,将它的CID作为CMD2的响应发送给主机,然后进入识别状态(Identification State)。
  1. 发送CMD3
主机发送SEND_RELATIVE_ADDR(CMD3)要求卡发布一个新的相对卡地址(RCA),它比CID短,用于在以后的数据传 输模式中对卡进行寻址。卡发布RCA后,进入就绪状态。此时,如果主机想要分配另一个RCA,它可以再次发送CMD3命令,要求卡发布一个新的RCA。最 后一次发布的RCA是卡的有效RCA。
(图) 卡初始化和识别流程(SD模式)

Card Initialization and Identification Flow (SD mode).png

[] CMD8

CMD8(SEND_IF_COND) 是物理层规范V2.00为了支持多电压范围新添加的命令,用于初始化符合物理层规范V2.00的SD存储卡。CMD8只有当卡处于空闲状态时才有效。该命令有两个功能。

  • 电压检查:
检查卡是否支持主机所提供的电压,即主机提供的电压是否在卡操作电压范围内。
  • 使能现有命令和响应的扩展功能
接收CMD8能够重新定义之前的保留位,从而扩展一些现有命令的新功能。ACMD41被扩展到支持高容量SD存储卡的初始化。

CMD8的格式如下:

(表) CMD8的格式

CMD8 Format.png


VHS.png

参数中的'voltage supplied(VHS)'应被设置为主机提供的电压所在的电压范围,在任何时候,VHS中必须只有1位被置为'1'。
CRC7和'check pattern'用于主机检查和卡之间通信的正确性,'check pattern'可以被设置为任一8位类型,推荐使用'10101010b'。
卡接收到CMD8后,检查它的操作电压范围是否与主机提供的电压所在的电压范围一致,如果一致,说明卡支持主机提供的电压,卡将返回响应R7。在响应中,卡返回在参数中设置的电压范围和检查类型。如果不一致,它不返回响应并停留在空闲状态。
必须在发送“第一ACMD41”(见ACMD41)去初始化高容量SD存储卡之前发送CMD8。卡收到CMD8后,就会知道主机支持物理层规范V2.00,从而去使能新的功能。
低电压主机也必须在发送ACMD41之前发送CMD8。如果一个双电压卡没有接收CMD8,那它只能作为一个高电压卡使用。
如果主机不发送CMD8,卡将在ACMD41时进入非激活状态。

[] CMD55

当卡收到APP_CMD(CMD55)命令时,将导致卡将接下来的命令解释为应用特定命令(ACMD)。ACMD具有普通命令相同的结构和CMD索引,因为它是出现在APP_CMD后面,所以卡把它识别为ACMD命令。
APP_CMD的唯一作用就是:如果卡在紧随其后收到一个已经定义的应用特定命令,则它才能被解释为应用特定命令,否则被解释为普通命令。例如:一个卡定 义了ACMD13而没有定义ACMD7,如果卡在紧随APP_CMD之后收到CMD13,则它将被解释为应用特定命令ACMD13;但是如果卡在紧随 APP_CMD之后收到CMD7,而这个卡没有定义ACMD7,则它将被解释为普通CMD7。

为了使用生产厂商指定的ACMD,主机应该完成以下操作:

  1. 发送APP_CMD
卡发回响应给主机,在响应中,APP_CMD(卡状态位5)位被置位,指示卡期待ACMD。
  1. 发送需要的ACMD
卡发回响应给主机,在响应中,APP_CMD位被置位,指示卡已经将收到的命令解释为ACMD。如果发送了一个非ACMD,则卡将其视为普通命令并且清除卡状态中的APP_CMD位。
  1. 连续发送多个CMD55,则每次响应中的APP_CMD位都会被置1。紧随最后一个CMD55的命令,将会被解释为ACMD。如果在CMD55后直接发送多个命令(CMD55除外),则只有第一个命令被解释为ACMD,其它命令将被解释为普通命令。

如果发送了一个无效的命令(既不是ACMD也不是CMD),则它将被作为SD存储卡非法命令错误进行处理。
生产厂商指定的ACMD索引是有限制条件的。下列ACMD索引被保留给SD存储卡专用应用的,任何SD存储卡生产厂商都不得使用:
ACMD6, ACMD13, ACMD17-25, ACMD38-49, ACMD51。

[] ACMD41

ACMD41(SD_SEND_OP_COND)就能完成SD卡的初始化,所以又称其为初始化命令。
ACMD41为主机提供了一种识别机制,使得主机能够识别那些与主机想要的VDD电压窗口匹配的卡,而拒绝那些不匹配的卡。主机发送一个以主机想要的 VDD电压窗口为的参数的ACMD41,即可完成此操作。在指定的VDD电压窗口内,不能完成数据传输的卡将忽略后面的总线操作并进入非激活状态。OCR 寄存器中定义了相应的VDD电压窗口。
ACMD41是一个应用特定命令,因此必须在紧随CMD55 (APP_CMD)之后发送。在空闲状态下,CMD55所使用的RCA必须是卡的默认RCA=0x0000。

ACMD41的格式如下:

(表) ACMD41的格式

ACMD41 Format.png

CMD8的接收扩展了ACMD41的功能:参数中的HCS和响应中的CCS。
参数中的HCS为主机容量支持(Host Capacity Support)位,HCS=1,表示主机支持高容量SD存储卡;HCS=0,表示主机不支持高容量SD存储卡。不响应CMD8的卡将忽略HCS。如果卡 没有返回CMD8的响应,主机应将HCS设为0。标准容量SD存储卡也会忽略HCS。如果HCS设为0,高容量SD存储卡将不会返回到就绪状态(保持 busy位为0)。

  1. 如果参数中的电压窗口域(bit 23-0)被设为0,该命令被称为“询问ACMD41(inquiry ACMD41)”,不启动初始化,用于获得OCR。“询问ACMD41”将忽略参数中的其他域(bit 31-24)。
  2. 如果参数中的电压窗口域(bit 23-0)被设为非0,该命令被称为“第一ACMD41(first ACMD41)”,启动初始化。参数中的其他域(bit 31-24)是有效的。

接下来的ACMD41的参数必须与“第一ACMD41”的参数相同。
卡只在“第一ACMD41”时,检查VDD电压窗口和HCS位。当重复ACMD41时,主机不能发送其它命令除了CMD0。
ACMD41的响应类型为R3,即OCR寄存器。卡通过OCR中的busy(OCR[31])位通知主机,ACMD41的初始化是否完成。busy=0表示卡还在初始化,busy=1表示初始化完成,并返回到就绪状态。主机重复发送ACMD41直到busy为1。
如果卡响应了CMD8,则ACMD41的响应中会包含CCS(Card Capacity Status)的信息。当卡返回到就绪态(busy=1)时,CSS是有效的。CSS=1表示卡是高容量SD存储卡,CSS=0表示卡是标准容量SD存储卡。

[] 数据传输模式

在卡识别模式结束前,主机时钟频率必须在FOD范围内(0~400KHz),因为有些卡在卡识别模式时,有工作频率限制。在数据传输模式,为了提高 系统性能,主机可以将时钟频率设为FPP(FPP最大值取决于TRAN_SPEED域(CSD[103:96]))。主机可以发送 SEND_CSD(CMD9)获得CSD寄存器。
CMD7用于选择一个卡,并将它置于传输状态(Transfer State)。在任一时刻,只能有一个卡处于传输状态。如果一个之前选择的卡正处于传输状态,那么它将释放与主机的连接并返回到待机状态(Stand- by State)。当默认RCA(0x0000)作为CMD7的参数被发送后,所有的卡都将返回到待机状态。

(图) SD存储卡状态图(数据传输模式)

SD Memory Card State Diagram (data transfer mode).png

在数据传输模式下,主机和被选择的卡之间的所有通信都是点对点的(使用寻址命令)。所有寻址命令都需要在CMD信号线上得到响应。

各种数据传输模式间的关系总结如下:

  • 所有数据读命令任何时候都能被停止命令(CMD12)终止。数据传输将结束,并且卡将返回到传输状态。读命令有:单数据块读(CMD17),多数据块读(CMD18),发送写保护(CMD30),发送SCR(ACMD51),读模式下的通用命令(CMD56)。
  • 所有数据写命令任何时候都能被停止命令(CMD12)终止。写命令有:单数据块写(CMD24),多数据块写(CMD25),编程CSD(CMD27),上锁/解锁命令(CMD42),写模式下的通用命令(CMD56)。
  • 数据传输完成后,卡将退出数据写状态,并且进入编程状态(传输成功)或传输状态(传输失败)。
  • 即使一个数据块写操作被停止,只要数据块长度和最后一个数据块的CRC是有效的,传输的数据就会被编程。
  • 卡可以为数据块写提供缓冲。这意味着,当前数据块正在被编程时,可以发送下一个数据块。如果所有写缓冲器满,并且只要卡处于编程状态,数据线DAT0就将保持为低(BUSY)。
  • 写CSD,写保护和擦除没有缓冲。这意味着,当卡正忙于服务这些命令中的任何一个时,卡不能接收其它数据传输命令。只要卡繁忙并且处于 编程状态,数据线DAT0就将保持为低。实际上,如果卡的命令线CMD和数据线DAT0是独立的,并且主机能使繁忙卡的DAT0从其它卡的DAT0上断开 连接,那么当卡繁忙时,主机可以访问其它卡。
  • 当卡处于编程状态时,不允许主机发送参数设置命令。参数设置命令有:设置数据块长度(CMD16),设置擦除数据块起始地址(CMD32)和设置擦除数据块结束地址(CMD33)。
  • 当卡处于编程状态时,不允许主机发送读命令。
  • 当使用CMD7选择另一个卡,将另一个卡从待机状态转移到传输状态时,擦除和编程操作不会被终止。卡将转到断开状态并释放数据线。
  • 当卡处于断开状态时,可以使用CMD7重新选择此卡。此时,卡将转移到编程状态,并重新启用繁忙指示。
  • 使用CMD0或CMD15复位一个卡时,任何挂起的或正在进行的编程操作都将被终止。这将损坏卡上的数据内容。主机应阻止这种情况的发生。
  • CMD34-37,CMD50和CMD57是保留给SD命令系统扩展的。这些命令的状态转换定义在各命令系统规范中。

[] 宽总线选择/取消选择

可以使用ACMD6来选择/取消选择宽总线(4位总线宽度)操作模式。上电后或执行CMD0后,默认的总线宽度是1位。
必须满足以下两个条件,才能改变总线宽度:

  1. 卡处于传输状态
  2. 卡没被上锁

一个上锁的卡将响应ACMD6为一个非法命令。

[] 2GB卡

对于2GB卡,最大数据块长度(READ_BL_LEN=WRITE_BL_LEN)应该被设为1024B。但是为了兼容最大数据块长度为512B的卡(小于或等于2GB的卡),数据块长度最大只能为512B。

[] 数据读

当没有数据传输时,数据总线被上拉为高电平。一个传输的数据块包括起始位(1或4位低电平),和随后的数据流。数据流包含有效载荷数据(和错误纠正 位,如果使用了卡外ECC)。数据流以结束位(1或4位高电平)结束。数据传输和时钟信号同步。面向数据块传输的有效载荷数据由1或4位CRC校验和保 护。关闭电源将中断从SD存储卡的读操作。在主机发出写或擦除操作外的任何情况下,甚至卡突然被关闭或移除,SD存储卡都将确保数据不被损坏。如果发生了 BLOCK_LEN_ERROR或ADDRESS_ERROR,则读命令被拒绝,将没有数据传输。

[] 数据块读

数据块读是面向块的数据传输。数据传输的基本单位是数据块,最大长度为512B。起始和结束地址都被包含在512B物理数据块边界内的较小数据块也能被传输。 数据块长度可以由CMD16设置为最大512B,不管READ_BL_LEN。
一个CRC被添加到每个数据块的末尾,以确保数据传输的完整性。CMD17(READ_SINGLE_BLOCK)启动一个数据块读操作,传输完成后,卡 返回到传输状态。CMD18(READ_MULTIPLE_BLOCK)开始一次多个连续的数据块读操作。数据块被连续的传输,直到主机发送一个 CMD12(STOP_TRANSMISSION) 。由于串行的命令传输(CMD线),停止传输命令有一个执行延迟。数据传输在停止传输命令的最后一位被发送后停止。
如果主机传输部分数据块,而累计的数据块长度不能与物理块对齐同时不允许块错位,卡将在第一个未对齐的块开始时检测出一个块错位错误,设置状态寄存器中的ADDRESS_ERROR错误位,终止传输并在数据状态等待一个停止命令。
下表定义了当一个部分数据块访问被使能时的卡行为。
如果未对齐的块是命令的第一个数据块(即命令的响应中报告了ADDRESS_ERROR),那么没有数据被传输并且卡保持在传输状态。

(表)读命令数据块长度

Read Command Blocklen.png

[] 数据写

数据传输格式和数据读格式类似。为了面向数据块写的数据传输,CRC检查位被添加到每个数据块的末尾。在写操作之前,卡先对每个接收到的数据块进行1或4位CRC奇偶校验检查。该机制可以阻止错误数据的写操作。
如果发生了BLOCK_LEN_ERROR或ADDRESS_ERROR,则写命令被拒绝,将没有数据传输。

[] 数据块写

在数据块写(CMD24 - 27,42,56(w))期间,主机把一个或多个数据块从主机发送到卡中,同时在每个数据块的末尾加上1或4位CRC。如果一个卡支持数据块写,那么它的 数据块长度应该由CMD16设为512B,不管WRITE_BL_LEN被设为1KB还是2KB。
(下表) 定义了当一个部分数据块访问被失能(WRITE_BL_PARTIAL = 0).时的卡行为。

(表)写命令数据块长度

Write Command Blocklen.png

如果WRITE_BL_PARTIAL=1,那么较小数据块(高达1B分辨率)也能被传输。如果CRC校验错误,卡通过数据线指示该错误;卡接收到的数据被丢弃而不被写入,所有后续传输的数据块(在多数据块写模式下)将被忽略。
为了使写操作更快,应该使用多数据块写命令去代替连续的单数据块写命令。
如果主机传输部分数据块,而累计的数据长度不能与物理块对齐同时不允许块错位(没设置CSD中的WRITE_BLK_MISALIGN位),卡将检测出块 错位错误并且在第一个未对齐的块开始前终止编程。卡将设置状态寄存器中的ADDRESS_ERROR错误位,并且忽略后续的数据传输,在接收数据状态等待 一个停止命令。
注意:如果未对齐的块是命令的第一个数据块(即在命令的响应中报告了ADDRESS_ERROR),那么卡保持在传输状态并且没有数据被编程。
如果主机尝试覆盖一个写保护区,写操作也会被终止。此时,卡会设置WP_VIOLATION位。
CSD寄存器的编程不需要提前设置数据块长度。传输的数据也是由CRC保护的。如果CSD寄存器的一部分被存储在ROM中,那么这个不能更改的部分应该和接收缓冲器中的对应部分匹配。如果不匹配,那么卡将报告一个错误并且不改变任何寄存器内容。
有些卡可能需要长的不可预计的时间去写一个数据块。接收一个数据块并完成CRC检查后,卡将开始写操作,如果它的写缓冲区满并且不能再从一个新的 WRITE_BLOCK命令接受新的数据,它将保持数据线DAT0为低。主机可以在任何时候使用SEND_STATUS命令(CMD13)查询卡的状态, 卡将它的状态作为响应返回给主机。READY_FOR_DATA状态位指示卡是否可以接受新的数据或写操作是否还在进行。主机可以使用CMD7取消选择当 前卡,而去选择另一个卡,此时卡将转入断开状态并且释放数据线而不打断写操作。当重新选择该卡时,如果编程仍在进行并且写缓冲区不可用,它将拉低数据线恢 复繁忙指示。实际上,主机使用交叉存取(inter-leaving)过程可以对几个卡同时进行写操作。此处,交叉存取是指当该卡繁忙时,可以去访问其他 不繁忙的卡。该过程可以通过命令线CMD和数据线上的适当操作(取消选择繁忙卡,去选择其它卡)来完成。

[] 多块写操作前的预擦除设置

设置预擦除数据块数目(ACMD23)将使得后面的多块写操作更快。主机将使用该命令定义在接下来的写操作中将要发送的数据块的数目。如果主机在定 义的所有数据块被发送到卡之前结束写操作(使用停止传输命令),则剩下的写数据块的内容要么被擦除,要么还是原来的数据。如果主机想要发送的数据块数目多 于ACMD23中定义的,随着数据的接收,块被一个接一个地擦除。多块写操作后,预擦除数据块数目被复位到默认值(=1)。
推荐在CMD25之前使用ACMD23,有些卡在多块写操作时会更快。注意,如果主机想要使用预擦除功能,主机必须只能在写命令之前发送ACMD23。否则,当执行其它命令时,预擦除数目会被自动清除。

[] 发送已写数据块的数目

如果在多块写操作中发生了错误,为管理数据缓冲器使用管道机制的系统,有时候不能确定哪个块是最后一个已被完整地写到flash中的块。卡将以已写好的数据块数目作为ACMD22的响应返回给主机。

[] 擦除

为了提高数据吞吐量,同时擦除多个写数据块是有意义的。这些写数据块的识别是由ERASE_WR_BLK_START (CMD32)和ERASE_WR_BLK_END (CMD33)完成的。
主机必须按照下列命令序列进行擦除:ERASE_WR_BLK_START,,ERASE_WR_BLK_END 和ERASE (CMD38)。
如果没有按照上述序列接收到擦除(CMD38)或地址设置(CMD32,33)命令,卡将设置状态寄存器中的ERASE_SEQ_ERROR位并且复位整个序列。
如果接收到一个序列之外的命令(除了SEND_STATUS),卡将设置状态寄存器中的ERASE_RESET状态位,复位擦除序列并执行该命令。
如果擦除范围包含了写保护扇区,它们将被跳过并只擦除非保护扇区。卡将设置状态寄存器中的WP_ERASE_SKIP状态位。
地址设置命令中的地址域是一个以字节为单位的写数据块地址。卡将忽略低于WRITE_BL_LEN的所有LSB字节。
如上所述为数据块写,卡将数据线DAT0保持为低,指示擦除正在进行。实际擦除时间可能相当长,主机可以发送CMD7取消选择此卡。
擦除后的数据是'0'还是'1',取决于卡制造商。SCR寄存器位DATA_STAT_AFTER_ERASE (位55) 定义了擦除后的数据是'0'还是'1'。

[] 写保护管理

SD存储卡支持如下三种写保护方式:

  1. 机械写保护开关(主机管理)
  2. 卡的内部写保护(卡管理)
  3. 密码保护的卡锁操作
[] 卡的内部写保护

卡的数据可以被保护不被覆盖或擦除。在CSD中永久地或临时地设置写保护位,生产厂商或内容提供商可以永久地对整个卡施行写保护。对于支持在CSD 中设置WP_GRP_ENABLE位从而提供一组扇区写保护的卡,部分数据可以被保护,写保护可以通过程序改变。写保护的基本单位是CSD参数 WP_GRP_SIZE个扇区。SET_WRITE_PROT和CLR_WRITE_PROT命令控制指定组的保护,SEND_WRITE_PROT命令 与单数据块读命令类似,卡送出一个包含32个写保护位(代表从指定地址开始的32个写保护组)的数据块,跟着一个16位的CRC码。写保护命令的地址域是 一个以字节为单位的组地址。
卡将截断所有组大小以下的地址。

[] 机械写保护开关

在卡的侧面有一个机械的滑动开关,允许用户设置或清除卡的写保护。当滑动开关置于小窗口打开的位置时,卡处于写保护状态,当滑动开关置于小窗口关闭 的位置时,可以更改卡中内容。在卡的插槽上的对应部位也有一个开关向主机指示卡是否处于写保护状态。卡的内部电路不知道写保护开关的位置。

[] 密码保护的卡锁操作

[] 概述

密码保护功能允许主机使用密码对卡实行上锁或解锁。密码和密码长度分别存储在一个128位的PWD寄存器和一个8位的PWD_LEN寄存器中。这些寄存器是不可挥发的,即掉电后它们的内容不丢失。
已上锁的卡能够响应和执行相应的命令,即允许SDIO卡主机模块执行复位、初始化、选择和查询状态等操作,但不允许访问卡中的数据。如果之前设置了密码(即PWD_LEN的数值不为0),上电后卡自动被上锁。
与CSD寄存器写命令类似,上锁/解锁命令仅在传输状态下有效。这意味着,命令中没有地址参数,并且在使用该命令之前必须先选择卡。
卡上锁/解锁命令具有单数据块写命令的结构和总线操作类型。传输的数据块包含命令所需要的所有信息(密码设置模式,PWD内容,卡上锁/解锁等等)。命令 数据块结构描述如下表。注意:当发送CMD42时,符合SD物理层规范V2.00的主机应将保留位(Bit[7:4])设为0。

(表)卡锁命令数据块结构

Card Lock Command Data Block Structure.png

  • ERASE:1 = 强制擦除,所有其它位必须为0,该命令的所有其他字节将会被卡忽略,可以不发送。
  • LOCK_UNLOCK:1 = 卡上锁;0 = 卡解锁。注意:该位可以与SET_PWD同时设置,但不能与CLR_PWD同时设置。
  • CLR_PWD:1 = 清除PWD。
  • SET_PWD:1 = 设置新密码到PWD。
  • PWDS_LEN:定义密码长度(以字节为单位)。如果设置一个新密码,密码长度高达16B。如果更改密码,密码长度高达32B。
  • Password data:如果设置一个新密码,它包含新密码。如果更改密码,它包含旧密码,后跟新密码。

命令数据块长度应由主机在发送卡上锁/解锁命令之前定义。数据块长度应大于或等于上锁/解锁命令所需的数据结构长度。在下面的解释中,对于上锁/解锁命令,改变数据块长度(CMD16)不是强制要求的。
以下几个段落定义了设置/清除密码、上锁/解锁和强制擦除的命令序列。

[] 设置密码
  1. 选择一个卡(CMD7),如果之前没有选择。
  2. 定义数据块长度(CMD16),包括8位卡上锁/解锁模式,8位密码长度(按字节),和新密码的字节数目。当更换了密码后,数据块长度必须同时考虑新旧密码的长度。
  3. 在数据线上发送适当数据块长度的卡上锁/解锁命令(CMD42),并包含16位CRC。数据块包含了操作模式(SET_PWD)、长度 (PWD_LEN)和密码(PWD)。当更换了密码后,长度数值(PWD_LEN)应包含新旧两个密码的长度,PWD域应包含旧密码(当前使用的)和随后 的新密码。注意,卡内部通过将PWD_LEN减去旧密码长度来计算新密码长度。
  4. 如果发送的旧密码正确(长度和内容都相同),则新密码和它的长度被分别存储在PWD和PWD_LEN域。如果发送的旧密码不正确(长度或内容不相同),则设置状态寄存器中的LOCK_UNLOCK_FAILED错误位,旧密码不变。

注意:密码长度域(PWD_LEN)指示当前是否设置了密码。当该域为0时,表示没有设置密码。当该域非零时,表示设置了密码,卡在上电后自动上锁。在供电过程中,也可以通过设置LOCK_UNLOCK位(设置密码时)或发送一个额外的上锁命令,立即锁住卡。

[] 清除密码
  1. 选择一个卡(CMD7),如果之前没有选择。
  2. 定义数据块长度(CMD16),包括8位卡上锁/解锁模式,8位密码长度(按字节),和当前使用的密码的字节数目。
  3. 在数据线上发送适当数据块长度的卡上锁/解锁命令(CMD42),并包含16位CRC。数据块包含了操作模式(CLR_PWD)、长度(PWD_LEN)和密码(PWD)。
  4. 如果发送的密码正确(长度和内容都相同),则PWD域被清除同时PWD_LEN被设为0。如果发送的密码不正确(长度或内容不相同),则设置状态寄存器中的LOCK_UNLOCK_FAILED错误位,密码不被清除。
[] 卡上锁
  1. 选择一个卡(CMD7),如果之前没有选择。
  2. 定义数据块长度(CMD16),包括8位卡上锁/解锁模式,8位密码长度(按字节),和当前使用的密码的字节数目。
  3. 在数据线上发送适当数据块长度的卡上锁/解锁命令(CMD42),并包含16位CRC。数据块包含了操作模式(LOCK_UNLOCK=1)、长度(PWD_LEN)和密码(PWD)。
  4. 如果发送的密码正确,则卡被上锁并设置状态寄存器中的CARD_IS_LOCKED状态位。如果发送的密码不正确,则设置状态寄存器中的LOCK_UNLOCK_FAILED错误位,卡上锁失败。

注意:设置密码和卡上锁可以在同一个序列中进行,此时,当发送新密码命令时,主机应完成前述设置密码所需的所有步骤,包括设置LOCK位。
如果之前设置过密码(PWD_LEN不为0),则卡在上电复位后将自动上锁。
试图对已经上锁的卡或没有密码的卡执行上锁操作将会导致失败,并设置状态寄存器中的LOCK_UNLOCK_FAILED错误位。

[] 卡解锁
  1. 选择一个卡(CMD7),如果之前没有选择。
  2. 定义数据块长度(CMD16),包括8位卡上锁/解锁模式,8位密码长度(按字节),和当前使用的密码的字节数目。
  3. 在数据线上发送适当数据块长度的卡上锁/解锁命令(CMD42),并包含16位CRC。数据块包含了操作模式(LOCK_UNLOCK=0)、长度(PWD_LEN)和密码(PWD)。
  4. 如果发送的密码正确,则卡被解锁并清除状态寄存器中的CARD_IS_LOCKED状态位。如果发送的密码不正确,则设置状态寄存器中的LOCK_UNLOCK_FAILED错误位,卡解锁失败。

注意:解锁只能在供电过程中进行,只要PWD域没被清除,下次上电后卡会被自动上锁。
试图对已经解锁的卡执行解锁操作会导致操作失败,并设置卡状态寄存器中的LOCK_UNLOCK_FAILED错误位。

[] CMD42的参数和结果

数据块长度应大于或等于CMD42所需的数据结构长度;否则CMD42的结果是未定义的,并且卡可能会进入无法预料的上锁状态。下表阐明了 CMD42的行为。不需要考虑CMD42参数中的保留位(位7-4)。如果CMD42需要密码,则需要在数据结构中正确地设置旧密码和新密码;否则卡将指 示一个错误。如果密码长度为0或者超过128位,卡也会指示一个错误。如果在执行CMD42时发生了错误,则LOCK_UNLOCK_FAILED (卡状态位24)被置1。LOCK_UNLOCK_FAILED可以在CMD42或之后CMD13的响应中查看。CMD42响应中的 CARD_IS_LOCKED (卡状态位25)应与表中的“Current Card State”一致。在CMD42执行后,如果卡状态中的CARD_IS_LOCKED从0变为1,则卡被上锁;如果卡状态中的 CARD_IS_LOCKED从1变为0,则卡被解锁。CARD_IS_LOCKED可以在之后CMD13的响应中查看。

Table 4-5- Lock Unlock Function (Basic Sequence for CMD42).png

应用说明: 如果想要替换密码,主机必须考虑下列情况。当PWD_LEN和PWD存在时,卡假设旧密码和新密码都被设置在数据结构中。当PWD_LEN和PWD被清除时,卡假设只有新密码被设置在数据结构中。此时,主机不能在数据结构中设置旧密码,否则,将设置一个无法预料的密码。 [] 强制擦除

如果用户忘记了密码(PWD的内容),可以擦除卡中所有的数据内容包括PWD的内容。该操作被称为强制擦除。

  1. 选择一个卡(CMD7),如果之前没有选择。
  2. 定义数据块长度(CMD16)为1字节,只包括8位卡上锁/解锁模式。
  3. 在数据线上发送适当的一字节数据块的卡上锁解锁命令(CMD42),并包含16位CRC。数据块包含了操作模式(ERASE=1),所有其它位为0。
  4. 当ERASE位是数据域中唯一被设置的位时,卡中所有内容将被擦除,包括PWD和PWD_LEN域,同时上锁的卡被解锁。如果有任何其它位不为0,则设置状态寄存器中的LOCK_UNLOCK_FAILED错误位,卡中的数据保持不变,同时卡仍保持上锁状态。

试图对已经解锁的卡执行擦除操作会导致操作失败,并设置卡状态寄存器中的LOCK_UNLOCK_FAILED错误位。

[] 对已上锁卡的强制擦除

下表阐明了强制擦除和写保护之间的关系。强制擦除不擦除安全区。在执行擦除过程中,卡将保持上锁状态,并在所有用户区擦除完成后,变为解锁状态。相 似地,在执行擦除过程中,卡将保持临时和组写保护,并在所有用户区擦除完成后,清除写保护。如果发生了一个擦除错误,并且错误扇区的数据被损坏,卡可以继 续强制擦除。

Table 4-6- Force Erase Function to the Locked Card (Relation to the Write Protects).png

[] ACMD6与上锁/解锁状态之间的关系

ACMD6用于设置总线宽度。当卡被上锁时,ACMD6被拒绝,并且只有当卡被解锁后,才能改变总线宽度。下表列出了ACMD6与上锁/解锁状态之间的关系。

Table 4-7- Relation between ACMD6 and the Lock or Unlock State.png

应用说明: 如果卡是在上电后(1位总线模式下)被上锁,SD模式主机应在1位总线模式下发送CMD42。如果卡是在4位宽总线模式下被上锁,SD模式主机应在4位宽总线模式下发送CMD42。 [] 已上锁的卡能接受的命令

已上锁的卡可以接受的命令如下,并且返回的响应中设置了CARD_IS_LOCKED。

1) Basic class (0) 2) Lock card class (7) 3) CMD16 4) ACMD41 5) ACMD42

所有其他命令,包括安全命令,将被响应为非法命令。

应用说明: 上电后,主机可以通过CMD7和CMD13响应中的CARD_IS_LOCKED位来确认卡的上锁/解锁状态。 [] 两种支持上锁/解锁功能的卡

有两种支持上锁/解锁功能的卡。Type 1 是SD存储卡的早期版本,Type 2 是在物理层规范V1.10及更高版本中定义的。下表列出了这两种卡之间的差异。支持上锁/解锁并遵循V1.01的SD存储卡,既可以作为Type 1 也可以作为Type 2 。支持上锁/解锁并遵循V1.10及更高版本的SD存储卡,只能作为Type 2 。

Table 4-8- Version Difference of Lock or Unlock Functions.png

应用说明: 主机只需考虑以下几点,就可以不检查它们之间的差异而使用这两种卡。 (1) 如果CMD42返回一个错误(见Table 4-5),则主机不能设置CMD42的参数 (For *1) (2) 如果永久写保护被设为1,主机不能发送强制擦除命令。否则Type 1 卡将不能再被使用,即使用户记得密码。 (For *2) (3) 强制擦除后,如果临时写保护未被清除,主机应清除它。 (For *3)

[] 命令

[] 命令类型

定义了四种命令来控制SD存储卡:

  • 广播命令(bc)
没有响应。只有当所有的CMD线和主机连接在一起时,广播功能才有效。如果它们是分开的,那么每个卡将依次单独接收。
  • 带响应的广播命令(bcr)
所有的卡同时响应,因为在SD存储卡中没有开漏模式。因此,只有当所有的CMD线分开时,才使用这类命令,每个卡将单独地接受并响应。
  • 带寻址(点对点)的命令(ac)
DAT线上没有数据传输
  • 带寻址(点对点)的数据传输命令(adtc)
DAT线上有数据传输

SD存储卡的所有命令和响应都是在CMD线上传输的。命令总是从命令字的最高有效位(msb)开始传输。

[] 命令格式

所有命令都有一个固定的48位的编码长度,并且需要一定的传输时间(与时钟频率有关)。

(表)命令格式

Command Format.png

一个命令总是以一个起始位(0)开始,后跟一个传输方向位(主机=1)。接下来6位指示命令索引,该数值被解释为一个二进制编号 (0~63)。有些命令需要一个32位的参数(比如,地址)。上表中,数值'x'表示是一个随命令而变化的变量。所有命令都由CRC7保护。每个命令以一 个结束位(1)结束。

[] 命令类

SD存储卡系统的命令集被分成若干类(见下表)。每个类支持一组卡功能。
CCC (CSD[95:84],12位,Card Command Classes) 的设置决定了卡支持的命令类。如果相应的CCC位为1,则卡支持相应的命令类。
所有的SD存储卡必须支持Class 0, 2, 4, 5, 7 和 8 ,因为它们是强制的。因此CCC中Class 0, 2, 4, 5, 7 和 8 对应的位必须为1。其他类都是可选的,有些具有特定功能的卡可能需要支持这些类。比如,复合卡必须支持CMD5。

(表)卡命令类(CCC)

Card Command Classes (CCCs).png

[] 命令描述

stuff bit:填充位,为了保证固定长的命令和响应帧,没有任何意义。

[] 基本命令 (class 0)

Basic Commands (class 0).png

[] 面向块的读命令 (class 2)

Block-Oriented Read Commands (class 2).png

[] 面向块的写命令 (class 4)

Block-Oriented Write Commands (class 4).png

[] 擦除命令 (class 5)

Erase Commands (class 5).png

[] 卡锁命令 (class 7)

Lock Card (class 7).png

[] 应用特定命令 (class 8)

Application-specific Commands (class 8).png

[] SD存储卡使用/保留的应用特定命令(class 8)

Application Specific Commands used or reserved by SD Memory Card.png

[] 面向块的写保护命令 (class 6)

Block Oriented Write Protection Commands (class 6).png

[] I/O模式命令 (class 9)

IO Mode Commands (class 9).png

[] 转换功能命令 (class 10)

Switch Function Commands (class 10).png

[] 响应

所有的响应都是在命令线CMD上传输的。响应的传输总是从对应响应字的位串的最左面开始,响应字的长度与响应的类型相关。
一个响应总是以一个起始位(始终为0)开始,后随着一个传输方向位(卡=0)。下列表中标示为X的数值表示一个可变的部分。除了R3响应类型,所有的响应都有CRC保护。每一个命令码字都以一个结束位(始终为1)结束。
SD存储卡有5种响应类型,它们的格式定义如下:

[] R1(一般的命令响应)

码长48位。位45:40指示要响应的命令的索引,它的数值介于0至63之间。卡的状态被编码成32位。注意,如果在向卡发送数据时,每一个数据块发送完成后,数据线上可能会出现繁忙信号,因此,在每一个数据块发送完成后,主机应检查卡是否繁忙。

(表) 响应R1

Response R1.png

[] R1b

与R1格式相同,可以有选择地在数据线上发送一个繁忙信号。收到这些命令后,依据收到命令之前的状态,卡可能变为繁忙。主机应当在响应中检查卡是否繁忙。

[] R2(CID,CSD寄存器)

码长136位。CID寄存器的内容将作为CMD2和CMD10的响应发出。CSD寄存器的内容将作为CMD9的响应发出。卡只送出CID和CSD的位[127…1],位0被响应的结束位所取代。

(表) 响应R2

Response R2.png

[] R3(OCR寄存器)

码长48位。OCR寄存器的内容将作为ACMD41的响应发出。

(表) 响应R3

Response R3.png

[] R6(发布RCA响应)

码长48位。位45:40指示要响应的命令的索引,在这种情况下是’000011’(与状态位中的位5表示CMD3)。参数域的高16位是用来存放卡发出的RCA数据。

(表) 响应R6

Response R6.png

[] R7(卡接口操作条件)

码长48位。卡支持的电压信息将作为CMD8的响应发出。位19:16指示卡支持的电压范围。如果卡接受所提供的电压,则返回R7。在响应的参数域中,卡返回供电电压范围和检查类型。

(表) 响应R7

Response R7.png

(表) R7中的Voltage Accepted

Voltage Accepted in R7.png

[] SD存储卡的两种状态信息

SD存储卡有如下两种状态字:
卡状态(Card Status):一条已执行命令的错误和状态信息,包含在响应中
SD状态(SD Status):512位的扩展状态字,用于支持SD存储卡的特殊功能和将来的应用特定功能。

[] 卡状态

响应格式R1包含了一个32位的卡状态字,这个状态字用于向主机发送卡的状态信息(这些信息可能存储在一个本地的状态寄存器中)。除非特别说明,卡返回的状态始终是与之前主机发出的命令相关的。
卡状态信息描述如下表。表中TypeClear Condition的缩写定义如下:
Type:

  • E: 错误位
  • S: 状态位
  • R: 检测位,并依据实际的命令响应而设置
  • X: 检测位,在命令的执行中设置。主机通过发送一条响应格式为R1的命令得到卡状态。

Clear Condition:

  • A: 依据卡的当前状态
  • B: 始终与之前的命令相关。接收到正确的命令即可清除(有一个命令的延迟)。
  • C: 读即可清除
(表) 卡状态

Card Status.png
Card Status2.png

[] SD状态

SD状态包含与SD存储卡特有功能和将来可能使用到的应用特定功能相关的状态位,SD状态的长度是一个512位的数据块。SD状态作为 ACMD13(CMD55后跟CMD13)的响应,通过数据线发送给主机。只有卡处于传输状态时(卡已被选择)才能发送ACMD13命令。
SD状态信息描述如下表。表中TypeClear Condition使用与上面的卡状态相同的缩写。

(表) SD状态

SD Status.png

SIZE_OF_PROTECTED_AREA

标准容量卡和高容量卡设置该域的方式不同。

对于标准容量卡,保护区容量计算如下:

保护区容量 = SIZE_OF_PROTECTED_AREA * MULT * BLOCK_LEN SIZE_OF_PROTECTED_AREA的单位是MULT * BLOCK_LEN。

对于高容量卡,保护区容量计算如下:

保护区容量 = SIZE_OF_PROTECTED_AREA SIZE_OF_PROTECTED_AREA的单位是字节。 SPEED_CLASS

这8位指示速度等级,数值可以通过PW/2(PW是写的性能)计算出来。

(表)速度等级

Speed Class Code Field.png

Class 0:这类卡没有指定性能,包含SD存储卡规范2.0版本之前的所有旧卡
Class 2:性能在2MB/s或以上
Class 4:性能在4MB/s或以上
Class 6:性能在6MB/s或以上

PERFORMANCE_MOVE

这8位指示以1MB/s为单位的移动性能(Pm)。如果卡不用RU(Recording Unit)移动数据,应该认为Pm是无穷大。设置这个域为FFh表示无穷大。

(表) 移动性能

Performance Move Field.png

AU_SIZE

这4位指示AU(Allocation Unit)长度,数值是×16K字节。

(表) AU长度

AU SIZE Field.png

AU长度最大值取决于卡的容量,如下表。卡可以在RU长度和AU长度最大值之间设置任意的AU长度。

(表) AU长度最大值

Maximum AU size.png

ERASE_SIZE

这16位指示NERASE,当NERASE个AU被擦除时,ERASE_TIMEOUT定义了超时时间。主机应在一次擦除操作中确定合适的AU数目,这样主机可以指示擦除操作的进度。如果该域为0,则不支持擦除超时的计算。

(表) 擦除长度

Erase Size Field.png

ERASE_TIMEOUT

这6位指示TERASE,当由ERASE_SIZE指定的多个AU被擦除时,这个数值指示从偏移量(offset)算起的擦除超时。 ERASE_TIMEOUT的范围可以被定义到最多63秒,卡生产商可以根据具体实现选择任一ERASE_SIZE和ERASE_TIMEOUT的组合。 一旦ERASE_TIMEOUT被确定了,ERASE_SIZE也随之被确定了下来。如果ERASE_SIZE被设置为0,则该域将被设置为0。

(表) 擦除超时

Erase Timeout Field.png

ERASE_OFFSET

这2位指示TOFFSET,数值定义如下表。当ERASE_SIZE和ERASE_TIMEOUT同为0时这个数值没有意义。

(表) 擦出偏移

Erase Offset Field.png

擦出超时的计算 (图) 擦除特性曲线 (TOFFSET = 0)

Example Erase Characteristics (Case 1 TOFFSET=0).png

(图) 擦除特性曲线 (TOFFSET = 2)

Example Erase Characteristics (Case 2 TOFFSET=2).png

X个AU的擦除超时Erase Timeout,可以通过下式计算出来:
Erase Timeout = TERASE / NERASE·X + TOEESET
擦除超时是由下面几步决定的:
(1) 按照上式计算出Erase Timeout;
(2) 如果 (1) 的结果小于1s,则Erase Timeout设为1s;
(3) 每部分擦除一个AU,(2) 的结果都要加上250ms。
注:部分擦除AU是指擦除的起始地址或结束地址不是AU的边界地址。

[] 卡寄存器

在卡接口中,定义了6个寄存器:OCR,CID,CSD,RCA,DSR和SCR。这些寄存器只能被相应的命令访问。当RCA和DSR作为存储实际配置参数的配置寄存器时,OCR,CID,CSD和SCR寄存器存储卡/内容特定信息。
寄存器中的保留位是为了以后的扩展,访问时,将返回0。

[] OCR寄存器

32位操作条件寄存器(OCR)存储了卡的VDD电压窗口。
位7是为双电压卡新定义的,默认为0。如果一个双电压卡没有接收到CMD8,该位仍为0,否则,该位被设为1。
另外,该寄存器包含两个状态信息位。
位31:卡电源启动状态位,如果卡电源启动过程已完成,则该位被设为1。
位30:卡容量状态位,如果卡是高容量SD存储卡,则该位被设为1。该位为0,指示卡是标准容量存储卡。卡电源启动状态位被置1后,该位才有效。主机通过读该状态位来识别标准容量和高容量SD存储卡。
(表) OCR寄存器定义
OCR Register Definition.png

支持的电压范围被编码如上表。如果相应位为0,则不支持该电压范围。
当卡繁忙时,位31被设为0。

[] CID寄存器

卡识别(CID)寄存器宽128位,包含了卡识别期间所使用到的卡识别信息。每个单独的R/W卡都有一个唯一的识别号。
(表) CID寄存器定义
CID Register Definition.png

MID

一个8位的二进制数,用于识别卡制造商。为了确保CID寄存器的唯一性,MID号是由SD-3C,LLC控制,定义,并分配给SD存储卡制造商。

OID

一个2字符的ASCII字符串,用于识别卡OEM(原始设备制造商)。为了确保CID寄存器的唯一性,MID号是由SD-3C,LLC控制,定义,并分配给SD存储卡制造商。
注意:SD-3C,LLC是由松下,SanDisk和东芝合作成立的一家有限责任公司,负责向想要制造和出售SD存储卡ROM卡和OTP卡的公司发放许可证。

PNM

一个5字符的ASCII字符串,用于识别产品名称。

PRV

产品修订由两位BCD码组成,表示一个“n.m”修订号。“n”是高四位,“m”是低四位。
例如:产品修订“6.2”对应的二进制数值为:0110 0010b。

PSN

32位二进制序列号。

MDT

生产日期由三位十六进制数组成,高8位表示年(y),低4位表示月(m)。
“m”域[11:8] 是月份编码,1 = January。
“y”域[19:12] 是年份编码,0 = 2000。
例如:生产日期“April 2001”的二进制数值为:00000001 0100b。

CRC

CRC7校验和,由CID内容计算得出。

[] CSD寄存器

卡特定数据(Card-Specific Data,CSD)寄存器提供了访问卡内容的有关信息。CSD定义了数据格式,错误纠正类型,数据访问时间最大值,DSR寄存器是否可用等等。该寄存器中 的可编程部分(由W或E标识)可以被CMD27更改。CSD各域的类型编码如下:R=可读,W(1)=只能写一次,W=可以写多次。

[] CSD结构

根据物理层规范版本和卡容量,CSD寄存器中结构是不同的。
CSD寄存器中的CSD_STRUCTURE域指示CSD寄存器的结构版本。
下表列出了相关的CSD结构的版本号。
(表) CSD寄存器结构版本
CSD Register Structure Version.png

[] CSD Version 1.0

(表) CSD Version 1.0
The CSD Register Definition (CSD Version 1.0).png

[] CSD Version 2.0

(表) CSD Version 2.0
The CSD Register Definition (CSD Version 2.0).png

[] RCA寄存器

可写的16位相对卡地址寄存器包含在卡识别期间由卡发布的卡地址。在卡识别过程后,当主机和卡通信时,该地址被主机用来对卡进行寻址。RCA寄存器的默认值是0x0000。CMD7使用被保留的数值0x0000将所有的卡置于待机状态。

[] DSR寄存器(可选)

16位驱动级寄存器(driver stage register)。它可以被可选地用来为扩展的操作条件(取决于像总线长度,传输速率或卡数目等参数)提高总线性能。CSD寄存器中包含关于DSR寄存器使用的信息。DSR寄存器的默认值是0x404。

[] SCR寄存器

除了CSD寄存器,还有另外一个配置寄存器,SD卡配置寄存器(SD CARD Configuration Register)。该寄存器提供了SD存储卡特殊功能的相关信息,这些特殊功能是已在给定的卡中配置好的。64位的SCR寄存器是由SD存储卡制造商设置的。
下表描述了SCR寄存器的内容

(表) SCR
The SCR Definition.png

(表) SCR寄存器结构版本
SCR Register Structure Version.png

SD_SPEC

描述SD卡支持的物理层规范版本。
(表) 物理层规范版本
Physical Layer Specification Version.png

DATA_STAT_AFTER_ERASE

定义擦出后的数据状态(0或1),由卡供应商确定。

SD_SECURITY

描述SD卡支持的安全规范版本。
SD Supported Security Algorithm.png

一个正规的SD存储卡都支持安全协议。对于ROM(只读)和OTP(一次可编程)类型的SD存储卡,安全特性是可选的。如果是标准容量SD存储卡,该域为2(V1.01);如果是高容量SD存储卡,该域为3(V2.00)。

SD_BUS_WIDTHS 描述卡支持的数据总线宽度。
SD Memory Card Supported Bus Widths.png
由于SD存储卡至少支持两种总线总线模式:1位和4位,因此该域中至少有两位被置1,即SD_BUS_WIDTHS='0101b'。
阅读(3108) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~