精华内容
下载资源
问答
  • SD卡2.0协议.pdf

    2020-01-02 11:27:48
    SD卡2.0协议.pdf SD卡协议,相关的命令,命令应答,初始化流程。 参考博客:https://blog.csdn.net/weixin_42653531/article/details/103745344
  • SD\MMC\SDIO\TF的读写协议资料,SD 系统是一个新的大容量存储系统,基于半导体技术的变革。 它的出现,提供了一个便宜的、结实的卡片式的存储媒介,为了消费多媒体应用。 SD 可以设计出便宜的播放器和驱动器而...
  • sd卡最新协议规范

    2019-02-14 11:57:31
    sd卡最新协议规范 高速版本,支持400MB/S,最新的、SD卡控制必备
  • SD卡协议详解

    千次阅读 2021-02-18 17:47:01
    学习SD卡协议,可以让我们更好的了解SD卡的运作机制。在最开始学习SD卡的时候,我们只需要对SD卡的协议有个大概了解,能基本满足我们看懂SD卡驱动代码就行。如果之后在阅读SD卡驱动代码有不理解的地方,可

    Overview

    深入理解SD卡系列文章将介绍SD卡,涉及SD卡的协议及驱动代码。我们学习SD卡目的是为了理解SD卡的驱动代码,修改它,最终解决工作中遇到的SD卡相关的问题。本系列文章的目标是理解SD,包括协议和驱动代码。在学习任何设备驱动时,有个东西我们是无法绕过的,那就是协议,本文讲的就是SD卡的协议。

    学习SD卡协议,可以让我们更好的了解SD卡的运作机制。在最开始学习SD卡的时候,我们只需要对SD卡的协议有个大概了解,能基本满足我们看懂SD卡驱动代码就行。如果之后在阅读SD卡驱动代码有不理解的地方,可以回过头来翻翻SD协议文档。建议在读SD驱动源码和学习SD卡协议之间交替进行,互相验证。

    关于SD卡,有个叫SD卡协会的组织,这个组织规定了各种涉及SD卡的协议,并发布协议文档。这些SD卡协议文档,最重要的有两种文档:SD Specifications Part 1 Physical Layer Simplified Specification 和SD Specifications Part A2 SD Host Controller Simplified Specification。

    个人理解,定协议的目的就是为了使某个事物标准化,标准化后,可以方便大家协作,简化工作量,提高效率,避免重复工作导致的浪费。Physical Layer Simplified Specification(以下简称:卡协议)规定了SD卡的物理规格和SD卡使用的命令协议,像Sandisk、Kingston这类SD卡制造商必须遵守该协议。假设Sandisk开发了一款SD卡没有遵循该协议,而是自己内部新搞了一套协议,这样市面上就没有设备能使用该款SD卡。除非有人专门开发一个驱动去适配该款SD卡,但是这样很浪费人力。如果每个SD卡厂商都使用自己的协议,那么每支持一款SD卡,都需要重新写一套代码去适配它,那这工作量就很恐怖了。

    类似的,SD Host Controller Simplified Specification(以下简称:主机协议)用来标准化SD主机控制器,针对的是SD卡主机控制器厂商。这个协议不是强制的,在我们阅读SD驱动代码的时候,如果涉及到SD卡主机控制的代码,我们可能需要翻一下这篇文档,或者查阅SD卡主机控制器厂商提供给我们的文档(一般都是各大cpu芯片厂商提供给我们开发者文档)。

    本文的讲解的是卡协议,接下来,会有一些的英文夹杂在中文里面,因为有些名词,还是原汁原味的好,我翻译出来,没了那种韵味,水平有限,望大家谅解。

    System Features

    本大章节讲解SD的一些基本特征,包括SD卡的物理规格、容量、速度等方面。

    Form-factor

    目前市面上按物理规格来看,常见的SD卡有三种:

    • 标准的SD卡,这种卡比较大,在有些相机或者PC电脑上会使用;
    • 第二种是miniSD,这种卡我没怎么使用,不作详述;
    • 最后一种是叫TF卡,也称mirco SD,这种卡比较小,是我们最常接触的,像我们的手机里面使用的就是这种卡。很多人基本上都管我们手机使用的那种卡叫SD卡,这样的叫法实际上不够准确,更准确应该是叫TF卡,但是不管怎样,都没人会去计较,能理解就行。

    本文中,如果我说SD卡,都是泛指这三类SD卡,除非特意说明。并且如果特指,我会使用标准SD卡或者TF卡等名称代替。

    Capacity of Memory

    SD卡按容量(Capacity)分类,可以分为标准容量卡、高容量卡,扩展容量卡,详细如下:

    1. Standard Capacity SD Memory Card (SDSC): 这种卡容量小于等于2GB
    2. High Capacity SD Memory Card (SDHC): 这种卡容量大于2GB,小于等于32GB
    3. Extended Capacity SD Memory Card (SDXC):这种卡容量大于32GB, 小于等于2TB

    如果你买了一张16G或者32G的SD卡,你会发现SD卡上面印有"HC"字样,代表该卡是SDHC卡,同理,64G的SD卡上面印着"XC",表示SDXC卡。

    Voltage range

    SD卡按供电范围划分,分两种:

    1. High Voltage SD Memory Card: 操作的电压范围在2.7-3.6V
    2. UHS-II SD Memory Card: 操作的电压范围VDD1: 2.7-3.6V, VDD2: 1.70-1.95V

    UHS-II类型的卡参考协议文档: SD Specifications Part 1 UHS-II Simplified Addendum

    Bus Speed Mode (using 4 parallel data lines)

    SD卡按总线速度模式来分,有下面几种:

    1. Default Speed mode: 3.3V供电模式,频率上限25MHz,速度上限 12.5MB/sec
    2. High Speed mode: 3.3V供电模式,频率上限50MHz,速度上限 25MB/sec
    3. SDR12: UHS-I卡, 1.8V供电模式,频率上限25MHz,速度上限 12.5MB/sec
    4. SDR25: UHS-I卡, 1.8V供电模式,频率上限50MHz,速度上限 25MB/sec
    5. SDR50: UHS-I卡, 1.8V供电模式,频率上限100MHz,速度上限 50MB/sec
    6. SDR104: UHS-I卡, 1.8V供电模式,频率上限208MHz,速度上限 104MB/sec
    7. DDR50: UHS-I卡, 1.8V供电模式,频率上限50MHz,性能上限 50MB/sec
    8. UHS156: UHS-II RCLK Frequency Range 26MHz - 52MHz, up to 1.56Gbps per lane.

    SDR(Single Date Rate), 一个周期只能采集一次数据,即一个bit,由于SD卡是4条数据线并行传输,所以一个周期能传输4bit,如果频率是50MHz(即1秒传输次数为50 000 000),那么1秒能传输的数据量为25MB(这里1MB为1 000 000 Byte)。所以这就是为什么各种SDR模式里面,频率上限是速度上限的两倍。而对于DDR(Double Data Rate),在时钟上升沿和下降沿都可以采集数据,也就是单一周期内可读取或写入2次,因此4条并行数据线在一个周期内能传输8bit。

    Speed Class

    SD卡按照读写性能划分,有5种规格,每种规格后面的数字象征最小的读写速度:

    • Class 0 - 这种卡没有性能要求
    • Class 2 - 要求在 Default Speed mode 下,性能至少要达到(大于等于) 2MB/sec
    • Class 4 - 要求在 Default Speed mode 下,性能至少要达到 4MB/sec
    • Class 6 - 要求在 Default Speed mode 下,性能至少要达到 6MB/sec
    • Class 10 - 要求在 High Speed mode 下,性能至少要达到 10MB/sec

    厂商卖的SD卡上面基本上都会印着一个用圆圈包围起来的数字10,表示该卡是Class 10 类型的卡。

    Bus Protocol

    在SD Bus上,有三种transaction:

    • Command: 一个命令代表着将开始一个操作。命令通过CMD线传输,方向从host到card。
    • Response: 响应是card对前一次host发送的命令的执行情况的反馈。也是通过CMD线传输,方向从card到host。
    • Data: 数据是通过4条data线传输的,方向可以从card到host,也可以从host到card。

    不管Command,还是Response或者Data,都开始于一个start bit (bit值0),结束于一个end bit(bit值1)。

    关于这块的内容不做过多解释了,详情自行阅读"Physical Layer Simplified Specification Version 4.10"文档 "3.6 Bus Protocl" 章节的内容。

    Registers

    下图是SD卡的体系架构,可以看到内部包含了一系列的寄存器:

    <div style="text-align:center" markdown="1">


    SD Memory Card Architecture

    </div>

    各个寄存器的详细信息如下:

    SD Memory Card Registers

    OCR register

    OCR寄存器保存着SD卡的工作电压范围。如果OCR寄存器的某位为1,表示卡支持该位对应的电压。最后一位表示卡上电后的状态(是否处于”忙状态”),如果该位为0,表示忙,如果为1,表示处于空闲状态。

    OCR Register Definition

    CID register

    CID是一个128 bits的寄存器,该寄存器包含一个卡的标识信息。

    The CID Fields

    CSD Register

    卡的描述数据寄存器(CSD)包含了访问该卡数据时的必要配置信息,比如the data format, error correction type, maximum data access time, device size 等等。

    The CSD Register Fields (CSD Version 2.0)

    RCA register

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

    SCR register

    SD配置寄存器提供SD卡的特殊特性信息,其大小为64位。该寄存器由厂商编程,主机不能对它进行编程。

    The SCR Fields

    UHS

    UHS(Ultra High Speed)是与SDXC同时推出的SD卡总线标准。此标准适用于SDHC和SDXC。

    UHS-I最高传输速度(理论值)为104MB/s。英文字母I代表该设备(SD卡或读卡器)支持UHS-I接口。英文字母U,包含数目字1,代表该设备读写速度达U1。

    UHS-II最高传输速度达312MB/s,是UHS-I的三倍。

    设备(如智能手机)必须支持UHS,才能保证达到U1或U3最低写入速度。

    下面介绍UHS-I初始化的命令序列流程。

    Command Sequence to Use UHS-I
    • 上电后,卡会处于3.3V signaling模式下。第一个CMD0命令会选择bus模式:SD模式或者SPI模式。只有在SD模式下,才能进入1.8V signaling模式。一旦卡进入1.8V signal模式,卡不能切换到SPI模式或者3.3V signal模式,除非重新上电。
    • 收到CMD0命令后,卡将进入空闲状态(Idle state),但是仍然工作在SDR12时序下。UHS-I只提供了SD模式,没有提供SPI模式。
    • 由于更高的总线速度需要低水平的signaling,对SDR50、DDR50和SDR104模式,UHS-I提供的signaling为1.8V。host会给卡提供3.3V的电压,并且提供1.8V signaling水平的电压给SDCLK、CMD和DAT[3:0]线,这几个都是从3.3V的电源线转换过来的。为了避免主机与卡之间的电压不匹配,signaling水平在初始化时的电压转换序列中就已经被改变了。主机和卡通过ACMD41命令来确认双方是否支持1.8V signaling模式。如果主机和卡都支持1.8V signaling模式,这就意味着UHS-I卡可用。
    • UHS-I只能使用4-bit的bus模式,CMD42是个例外。如果卡被锁住了,就需要通过发送CMD42命令(1-bit模式)解锁,然后发送ACMD6命令将bus模式切换到4-bit。
    • 在卡解锁的情况下,CMD19命令执行在1.8V signaling的传输状态。其他情况,CMD19都会被当做非法命令。

    SD Memory Card Functional Description

    对SD卡与主机(host)来说,有两种操作模式:

    • Card identification mode: 对卡reset重置后,主机进入卡识别模式,对卡来说,在reset后,除非收到CMD3命令,否则卡一直处于该模式下。
    • Data transfer mode: 当卡第一次发布它的RCA后,该卡将处于数据传输模式。而对主机来说,在它识别了bus线上的所有卡后,进入该模式。

    Card identification mode

    Operating Condition Validation

    SD卡识别模式流程图如下:

    SD Memory Card State Diagram (card identification mode)
    1. 在主机与卡通信之前,主机不清楚卡支持的电压范围,并且卡也不知道是否支持主机提供的供电电压。主机会以默认电压发送一个reset指令(CMD0),并且主机默认卡能支持该命令。然后,为了确认电压,主机接下来会发送一个CMD8命令。

    2. 为了验证SD卡接口的操作条件,主机通过发送SEND_IF_COND (CMD8)命令,去获取SD卡支持的工作电压范围。SD卡通过检测CMD8的参数部分来检查主机使用的工作电压,主机通过分析卡CMD8的response参数来确认SD卡是否可以在所给电压下工作,如果SD卡可以在指定电压下工作,则它的response里面会包含cmd8参数里面提供的电压 。如果不支持所给电压,则SD卡不会给出任何响应信息,并继续处于IDLE状态。如果要初始化SDHC和SDXC,在第一次发送ACMD41命令前,必须先发送CMD8。

    3. SD_SEND_OP_COND (ACMD41)命令来识别或者拒绝不匹配host主机供电电压范围的卡。如果SD卡在主机规定的电压范围内不能实现数据传输,卡将放弃下一步的总线操作而进入不活动状态(Inactive State)。

    4. 主机发送ACMD41命令时,可以通过将该命令所带的OCR参数设置为0,用来查询卡支持的工作电压范围。当ACMD41被用于查询时,卡将忽略掉ACMD41里面的HCS参数。主机在查询到卡的工作电压后,也许会将该电压作为接下来发送的ACMD41命令的参数。

    5. 在整个初始化过程中,主机不允许改变正在操作的电压范围。

    Card Initialization and Identification Process

    Card Initialization and Identification Flow (SD mode)
    1. 当总线被激合后,主机就开始处理卡的初始化和识别。在主机发送SD_SEND_OP_COND(ACMD41)命令开始处理SD卡初始化时,主机会在ACMD41的参数中设置它的操作条件和设置OCR中的HCS位。HCS位被设置为1表示主机支持SDHC或者SDXC。HCS被设置为0表示主机不支持SDHC和SDXC。

    2. 卡利用OCR里面的busy位来通知主机ACMD41的初始化已经完成。如果busy位为0,表示卡还在初始化,如果busy位为1,说明初始化已经完成。主机会在1s的时间内,重复不断地发送ACMD41命令,直到busy位被置1为止。卡只有在第一次收到设置电压的ACMD41命令时,才会去检查操作条件和OCR中的HCS位。并且在重复发送ACMD41命令的这段时间里,主机不应该发送任何命令,除了CMD0。

    3. 如果卡能正确响应CMD8,之后,卡对ACMD41命令的响应会包含一个CCS字段,CCS在卡返回ready时(busy位置1)有效。CCS=0表示卡是SDSC,CCS=1表示卡是SDHC或者SDXC。

    4. 在ACMD41之后,主机会发送 ALL_SEND_CID (CMD2),获取卡的CID。在卡发送它的CID之后,卡进入识别状态(Identification State)。

    5. 接着,主机发送CMD3 (SEND_RELATIVE_ADDR),请求卡发布卡的RCA。RCA是一个比CID短的,并且将来在数据传输模式中使用的地址。

    Data Transfer Mode

    因为一些卡在识别模式(Identification Mode)下,对操作频率有限制,所以在识别模式结束前,主机的频率需要一直保持在 fOD。在数据传输模式(Data Transfer Mode),主机频率在fpp范围内是可执行的。

    主机必须发送SEND_CSD(CMD9)来获得卡规格数据寄存器(CSD)内容,获取像块大小、卡容量这类信息。

    SET_DSR(CMD4)广播命令配置所有识别到的卡的驱动阶段。它对DSR寄存器进行编程以适应应用的总线布局(长度)、总线上卡的数目和数据传输频率。clock rate也是在这个时候从fOD切到fpp。对卡和主机来说,SET_DSR(CMD4)命令是个可选。

    CMD7用于选择卡,并且将卡带入传输状态(Transfer State)。在同一个时间内,只有一张卡能进入传输状态。当发送的CMD7的RCA地址参数为"0x0000",所有卡将跳回到准备状态(Stand-by State )。

    SD卡数据传输模式的流程图如下:

    SD Memory Card State Diagram (data transfer mode)

    对已经拥有RCA的卡来说,对它发送identification commands(比如ACMD41、CMD2),它将不会有任何回应。在数据传输模式下,主机与被选中的卡(使用定向命令)之间的数据传输都是点对点的。通过cmd线,所有定向命令(addressed commands)都会收到一个用于确认的response。

    下面是数据传输模式下关于数据传输的一些总结:

    • 在任何时候,所有的读命令集在执行过程中都可以被stop command (CMD12)打断。cmd12命令将会使数据传输终止,并且使卡退回到传输状态(Transfer State)。读命令集包括:block read(CMD17), multiple block read(CMD18), send write protect(CMD30), send SCR(ACMD51) 和 general command in read mode (CMD56)。
    • 在任何时候,所有的写命令集在执行过程中都可以被stop command (CMD12)打断。写命令集包括: block write(CMD24 and CMD25), program CSD(CMD27), lock/unlock command(CMD42)和general command in write mode(CMD56)。
    • 一旦数据传输完成,卡就会退出数据写状态,并且进入正在编程状态(Programming State)(传输成功),或者进入传输状态(传输失败)。
    • 如果一个块写操作被打断,但是最后一个block的块长度和CRC有效的话,这块数据也将会被编程到卡里。
    • 卡也许会对块写操作提供缓存,这意味着,在一个block还在被编程的情况下,下一个block可以被发送这个卡里面。如果所有的写缓存都已经满了的话,只要卡还在正在编程状态,DAT0线就会一直保持在拉低状态。
    • 对写CSD、写保护和擦除操作来说,卡不会提供缓存。这意味着,在卡正忙于处理这其中任何一个命令时,卡不会接收任何发送到卡的数据。只要卡还在忙,DAT0线就会拉低,并且处于正在编程状态(Programming State)。
    • 当卡正在编程时,不允许任何一个参数设置命令集(Parameter set commands)。参数设置命令集包括: set block length(CMD16), erase block start(CMD32)和erase block end(CMD33)。
    • 当卡正在编程时,不允许任何一个读命令集。
    • 当将其他的卡从准备状态(Stand-by)切换到传输状态(使用CMD7),不会中断当前卡的擦除或者编程操作。当前卡将会切换到断开状态(Disconnect State),并且释放数据线。
    • 当卡正在编程或者待编程时,对其重置(发送CMD0或者CMD15),将会导致操作终止,并且可能会导致卡内的数据内容被破坏。因此主机有责任去禁止这样的操作。

    至此,本文关于SD卡协议的内容就介绍到这里。通过本文,可以对SD卡有个大概的了解,尤其是关于SD卡初始化这段内容。就SD卡协议这方面来说,了解一些基本的东西就行。在我们今后在遇到SD问题时需要时,可以翻出来看一下。水平有限,有些地方可能会出现错误,望各位能指出来,希望能和各位共同探讨技术方面的内容。

    展开全文
  • sd卡协议(中文)

    2015-04-01 08:52:39
    sd卡协议(中文)
  • 电子-sd卡协议中文.pdf

    2019-09-05 13:33:43
    电子-sd卡协议中文.pdf,单片机/嵌入式STM32-F0/F1/F2
  • sd卡协议(sdio协议)

    sd卡协议(sdio协议)

    展开全文
  • SD卡协议

    千次阅读 2018-09-30 19:17:33
    Overview 深入理解SD卡系列文章将介绍SD卡,涉及SD卡的协议及驱动代码。我们学习SD卡目的是为了理解SD卡的驱动代码,修改它...学习SD卡协议,可以让我们更好的了解SD卡的运作机制。在最开始学习SD卡的时候,我们只...

    Overview

    深入理解SD卡系列文章将介绍SD卡,涉及SD卡的协议及驱动代码。我们学习SD卡目的是为了理解SD卡的驱动代码,修改它,最终解决工作中遇到的SD卡相关的问题。本系列文章的目标是理解SD,包括协议和驱动代码。在学习任何设备驱动时,有个东西我们是无法绕过的,那就是协议,本文讲的就是SD卡的协议。

    学习SD卡协议,可以让我们更好的了解SD卡的运作机制。在最开始学习SD卡的时候,我们只需要对SD卡的协议有个大概了解,能基本满足我们看懂SD卡驱动代码就行。如果之后在阅读SD卡驱动代码有不理解的地方,可以回过头来翻翻SD协议文档。建议在读SD驱动源码和学习SD卡协议之间交替进行,互相验证。

    关于SD卡,有个叫SD卡协会的组织,这个组织规定了各种涉及SD卡的协议,并发布协议文档。这些SD卡协议文档,最重要的有两种文档:SD Specifications Part 1 Physical Layer Simplified Specification 和SD Specifications Part A2 SD Host Controller Simplified Specification。

    个人理解,定协议的目的就是为了使某个事物标准化,标准化后,可以方便大家协作,简化工作量,提高效率,避免重复工作导致的浪费。Physical Layer Simplified Specification(以下简称:卡协议)规定了SD卡的物理规格和SD卡使用的命令协议,像Sandisk、Kingston这类SD卡制造商必须遵守该协议。假设Sandisk开发了一款SD卡没有遵循该协议,而是自己内部新搞了一套协议,这样市面上就没有设备能使用该款SD卡。除非有人专门开发一个驱动去适配该款SD卡,但是这样很浪费人力。如果每个SD卡厂商都使用自己的协议,那么每支持一款SD卡,都需要重新写一套代码去适配它,那这工作量就很恐怖了。

    类似的,SD Host Controller Simplified Specification(以下简称:主机协议)用来标准化SD主机控制器,针对的是SD卡主机控制器厂商。这个协议不是强制的,在我们阅读SD驱动代码的时候,如果涉及到SD卡主机控制的代码,我们可能需要翻一下这篇文档,或者查阅SD卡主机控制器厂商提供给我们的文档(一般都是各大cpu芯片厂商提供给我们开发者文档)。

    本文的讲解的是卡协议,接下来,会有一些的英文夹杂在中文里面,因为有些名词,还是原汁原味的好,我翻译出来,没了那种韵味,水平有限,望大家谅解。

    System Features

    本大章节讲解SD的一些基本特征,包括SD卡的物理规格、容量、速度等方面。

    Form-factor

    目前市面上按物理规格来看,常见的SD卡有三种:

    • 标准的SD卡,这种卡比较大,在有些相机或者PC电脑上会使用;
    • 第二种是miniSD,这种卡我没怎么使用,不作详述;
    • 最后一种是叫TF卡,也称mirco SD,这种卡比较小,是我们最常接触的,像我们的手机里面使用的就是这种卡。很多人基本上都管我们手机使用的那种卡叫SD卡,这样的叫法实际上不够准确,更准确应该是叫TF卡,但是不管怎样,都没人会去计较,能理解就行。

    本文中,如果我说SD卡,都是泛指这三类SD卡,除非特意说明。并且如果特指,我会使用标准SD卡或者TF卡等名称代替。

    Capacity of Memory

    SD卡按容量(Capacity)分类,可以分为标准容量卡、高容量卡,扩展容量卡,详细如下:

    1. Standard Capacity SD Memory Card (SDSC): 这种卡容量小于等于2GB
    2. High Capacity SD Memory Card (SDHC): 这种卡容量大于2GB,小于等于32GB
    3. Extended Capacity SD Memory Card (SDXC):这种卡容量大于32GB, 小于等于2TB

    如果你买了一张16G或者32G的SD卡,你会发现SD卡上面印有"HC"字样,代表该卡是SDHC卡,同理,64G的SD卡上面印着"XC",表示SDXC卡。

    Voltage range

    SD卡按供电范围划分,分两种:

    1. High Voltage SD Memory Card: 操作的电压范围在2.7-3.6V
    2. UHS-II SD Memory Card: 操作的电压范围VDD1: 2.7-3.6V, VDD2: 1.70-1.95V

    UHS-II类型的卡参考协议文档: SD Specifications Part 1 UHS-II Simplified Addendum

    Bus Speed Mode (using 4 parallel data lines)

    SD卡按总线速度模式来分,有下面几种:

    1. Default Speed mode: 3.3V供电模式,频率上限25MHz,速度上限 12.5MB/sec
    2. High Speed mode: 3.3V供电模式,频率上限50MHz,速度上限 25MB/sec
    3. SDR12: UHS-I卡, 1.8V供电模式,频率上限25MHz,速度上限 12.5MB/sec
    4. SDR25: UHS-I卡, 1.8V供电模式,频率上限50MHz,速度上限 25MB/sec
    5. SDR50: UHS-I卡, 1.8V供电模式,频率上限100MHz,速度上限 50MB/sec
    6. SDR104: UHS-I卡, 1.8V供电模式,频率上限208MHz,速度上限 104MB/sec
    7. DDR50: UHS-I卡, 1.8V供电模式,频率上限50MHz,性能上限 50MB/sec
    8. UHS156: UHS-II RCLK Frequency Range 26MHz - 52MHz, up to 1.56Gbps per lane.

    SDR(Single Date Rate), 一个周期只能采集一次数据,即一个bit,由于SD卡是4条数据线并行传输,所以一个周期能传输4bit,如果频率是50MHz(即1秒传输次数为50 000 000),那么1秒能传输的数据量为25MB(这里1MB为1 000 000 Byte)。所以这就是为什么各种SDR模式里面,频率上限是速度上限的两倍。而对于DDR(Double Data Rate),在时钟上升沿和下降沿都可以采集数据,也就是单一周期内可读取或写入2次,因此4条并行数据线在一个周期内能传输8bit。

    Speed Class

    SD卡按照读写性能划分,有5种规格,每种规格后面的数字象征最小的读写速度:

    • Class 0 - 这种卡没有性能要求
    • Class 2 - 要求在 Default Speed mode 下,性能至少要达到(大于等于) 2MB/sec
    • Class 4 - 要求在 Default Speed mode 下,性能至少要达到 4MB/sec
    • Class 6 - 要求在 Default Speed mode 下,性能至少要达到 6MB/sec
    • Class 10 - 要求在 High Speed mode 下,性能至少要达到 10MB/sec

    厂商卖的SD卡上面基本上都会印着一个用圆圈包围起来的数字10,表示该卡是Class 10 类型的卡。

    Bus Protocol

    在SD Bus上,有三种transaction:

    • Command: 一个命令代表着将开始一个操作。命令通过CMD线传输,方向从host到card。
    • Response: 响应是card对前一次host发送的命令的执行情况的反馈。也是通过CMD线传输,方向从card到host。
    • Data: 数据是通过4条data线传输的,方向可以从card到host,也可以从host到card。

    不管Command,还是Response或者Data,都开始于一个start bit (bit值0),结束于一个end bit(bit值1)。

    关于这块的内容不做过多解释了,详情自行阅读"Physical Layer Simplified Specification Version 4.10"文档 "3.6 Bus Protocl" 章节的内容。

    Registers

    下图是SD卡的体系架构,可以看到内部包含了一系列的寄存器:

     

    SD Memory Card Architecture

     

    </div>

    各个寄存器的详细信息如下:

    SD Memory Card Registers

    OCR register

    OCR寄存器保存着SD卡的工作电压范围。如果OCR寄存器的某位为1,表示卡支持该位对应的电压。最后一位表示卡上电后的状态(是否处于”忙状态”),如果该位为0,表示忙,如果为1,表示处于空闲状态。

    OCR Register Definition

    CID register

    CID是一个128 bits的寄存器,该寄存器包含一个卡的标识信息。

    The CID Fields

    CSD Register

    卡的描述数据寄存器(CSD)包含了访问该卡数据时的必要配置信息,比如the data format, error correction type, maximum data access time, device size 等等。

    The CSD Register Fields (CSD Version 2.0)

    RCA register

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

    SCR register

    SD配置寄存器提供SD卡的特殊特性信息,其大小为64位。该寄存器由厂商编程,主机不能对它进行编程。

    The SCR Fields

    UHS

    UHS(Ultra High Speed)是与SDXC同时推出的SD卡总线标准。此标准适用于SDHC和SDXC。

    UHS-I最高传输速度(理论值)为104MB/s。英文字母I代表该设备(SD卡或读卡器)支持UHS-I接口。英文字母U,包含数目字1,代表该设备读写速度达U1。

    UHS-II最高传输速度达312MB/s,是UHS-I的三倍。

    设备(如智能手机)必须支持UHS,才能保证达到U1或U3最低写入速度。

    下面介绍UHS-I初始化的命令序列流程。

    Command Sequence to Use UHS-I

    • 上电后,卡会处于3.3V signaling模式下。第一个CMD0命令会选择bus模式:SD模式或者SPI模式。只有在SD模式下,才能进入1.8V signaling模式。一旦卡进入1.8V signal模式,卡不能切换到SPI模式或者3.3V signal模式,除非重新上电。
    • 收到CMD0命令后,卡将进入空闲状态(Idle state),但是仍然工作在SDR12时序下。UHS-I只提供了SD模式,没有提供SPI模式。
    • 由于更高的总线速度需要低水平的signaling,对SDR50、DDR50和SDR104模式,UHS-I提供的signaling为1.8V。host会给卡提供3.3V的电压,并且提供1.8V signaling水平的电压给SDCLK、CMD和DAT[3:0]线,这几个都是从3.3V的电源线转换过来的。为了避免主机与卡之间的电压不匹配,signaling水平在初始化时的电压转换序列中就已经被改变了。主机和卡通过ACMD41命令来确认双方是否支持1.8V signaling模式。如果主机和卡都支持1.8V signaling模式,这就意味着UHS-I卡可用。
    • UHS-I只能使用4-bit的bus模式,CMD42是个例外。如果卡被锁住了,就需要通过发送CMD42命令(1-bit模式)解锁,然后发送ACMD6命令将bus模式切换到4-bit。
    • 在卡解锁的情况下,CMD19命令执行在1.8V signaling的传输状态。其他情况,CMD19都会被当做非法命令。

    SD Memory Card Functional Description

    对SD卡与主机(host)来说,有两种操作模式:

    • Card identification mode: 对卡reset重置后,主机进入卡识别模式,对卡来说,在reset后,除非收到CMD3命令,否则卡一直处于该模式下。
    • Data transfer mode: 当卡第一次发布它的RCA后,该卡将处于数据传输模式。而对主机来说,在它识别了bus线上的所有卡后,进入该模式。

    Card identification mode

    Operating Condition Validation

    SD卡识别模式流程图如下:

    SD Memory Card State Diagram (card identification mode)

    1. 在主机与卡通信之前,主机不清楚卡支持的电压范围,并且卡也不知道是否支持主机提供的供电电压。主机会以默认电压发送一个reset指令(CMD0),并且主机默认卡能支持该命令。然后,为了确认电压,主机接下来会发送一个CMD8命令。

    2. 为了验证SD卡接口的操作条件,主机通过发送SEND_IF_COND (CMD8)命令,去获取SD卡支持的工作电压范围。SD卡通过检测CMD8的参数部分来检查主机使用的工作电压,主机通过分析卡CMD8的response参数来确认SD卡是否可以在所给电压下工作,如果SD卡可以在指定电压下工作,则它的response里面会包含cmd8参数里面提供的电压 。如果不支持所给电压,则SD卡不会给出任何响应信息,并继续处于IDLE状态。如果要初始化SDHC和SDXC,在第一次发送ACMD41命令前,必须先发送CMD8。

    3. SD_SEND_OP_COND (ACMD41)命令来识别或者拒绝不匹配host主机供电电压范围的卡。如果SD卡在主机规定的电压范围内不能实现数据传输,卡将放弃下一步的总线操作而进入不活动状态(Inactive State)。

    4. 主机发送ACMD41命令时,可以通过将该命令所带的OCR参数设置为0,用来查询卡支持的工作电压范围。当ACMD41被用于查询时,卡将忽略掉ACMD41里面的HCS参数。主机在查询到卡的工作电压后,也许会将该电压作为接下来发送的ACMD41命令的参数。

    5. 在整个初始化过程中,主机不允许改变正在操作的电压范围。

    Card Initialization and Identification Process

    Card Initialization and Identification Flow (SD mode)

    1. 当总线被激合后,主机就开始处理卡的初始化和识别。在主机发送SD_SEND_OP_COND(ACMD41)命令开始处理SD卡初始化时,主机会在ACMD41的参数中设置它的操作条件和设置OCR中的HCS位。HCS位被设置为1表示主机支持SDHC或者SDXC。HCS被设置为0表示主机不支持SDHC和SDXC。

    2. 卡利用OCR里面的busy位来通知主机ACMD41的初始化已经完成。如果busy位为0,表示卡还在初始化,如果busy位为1,说明初始化已经完成。主机会在1s的时间内,重复不断地发送ACMD41命令,直到busy位被置1为止。卡只有在第一次收到设置电压的ACMD41命令时,才会去检查操作条件和OCR中的HCS位。并且在重复发送ACMD41命令的这段时间里,主机不应该发送任何命令,除了CMD0。

    3. 如果卡能正确响应CMD8,之后,卡对ACMD41命令的响应会包含一个CCS字段,CCS在卡返回ready时(busy位置1)有效。CCS=0表示卡是SDSC,CCS=1表示卡是SDHC或者SDXC。

    4. 在ACMD41之后,主机会发送 ALL_SEND_CID (CMD2),获取卡的CID。在卡发送它的CID之后,卡进入识别状态(Identification State)。

    5. 接着,主机发送CMD3 (SEND_RELATIVE_ADDR),请求卡发布卡的RCA。RCA是一个比CID短的,并且将来在数据传输模式中使用的地址。

    Data Transfer Mode

    因为一些卡在识别模式(Identification Mode)下,对操作频率有限制,所以在识别模式结束前,主机的频率需要一直保持在 fOD。在数据传输模式(Data Transfer Mode),主机频率在fpp范围内是可执行的。

    主机必须发送SEND_CSD(CMD9)来获得卡规格数据寄存器(CSD)内容,获取像块大小、卡容量这类信息。

    SET_DSR(CMD4)广播命令配置所有识别到的卡的驱动阶段。它对DSR寄存器进行编程以适应应用的总线布局(长度)、总线上卡的数目和数据传输频率。clock rate也是在这个时候从fOD切到fpp。对卡和主机来说,SET_DSR(CMD4)命令是个可选。

    CMD7用于选择卡,并且将卡带入传输状态(Transfer State)。在同一个时间内,只有一张卡能进入传输状态。当发送的CMD7的RCA地址参数为"0x0000",所有卡将跳回到准备状态(Stand-by State )。

    SD卡数据传输模式的流程图如下:

    SD Memory Card State Diagram (data transfer mode)

    对已经拥有RCA的卡来说,对它发送identification commands(比如ACMD41、CMD2),它将不会有任何回应。在数据传输模式下,主机与被选中的卡(使用定向命令)之间的数据传输都是点对点的。通过cmd线,所有定向命令(addressed commands)都会收到一个用于确认的response。

    下面是数据传输模式下关于数据传输的一些总结:

    • 在任何时候,所有的读命令集在执行过程中都可以被stop command (CMD12)打断。cmd12命令将会使数据传输终止,并且使卡退回到传输状态(Transfer State)。读命令集包括:block read(CMD17), multiple block read(CMD18), send write protect(CMD30), send SCR(ACMD51) 和 general command in read mode (CMD56)。
    • 在任何时候,所有的写命令集在执行过程中都可以被stop command (CMD12)打断。写命令集包括: block write(CMD24 and CMD25), program CSD(CMD27), lock/unlock command(CMD42)和general command in write mode(CMD56)。
    • 一旦数据传输完成,卡就会退出数据写状态,并且进入正在编程状态(Programming State)(传输成功),或者进入传输状态(传输失败)。
    • 如果一个块写操作被打断,但是最后一个block的块长度和CRC有效的话,这块数据也将会被编程到卡里。
    • 卡也许会对块写操作提供缓存,这意味着,在一个block还在被编程的情况下,下一个block可以被发送这个卡里面。如果所有的写缓存都已经满了的话,只要卡还在正在编程状态,DAT0线就会一直保持在拉低状态。
    • 对写CSD、写保护和擦除操作来说,卡不会提供缓存。这意味着,在卡正忙于处理这其中任何一个命令时,卡不会接收任何发送到卡的数据。只要卡还在忙,DAT0线就会拉低,并且处于正在编程状态(Programming State)。
    • 当卡正在编程时,不允许任何一个参数设置命令集(Parameter set commands)。参数设置命令集包括: set block length(CMD16), erase block start(CMD32)和erase block end(CMD33)。
    • 当卡正在编程时,不允许任何一个读命令集。
    • 当将其他的卡从准备状态(Stand-by)切换到传输状态(使用CMD7),不会中断当前卡的擦除或者编程操作。当前卡将会切换到断开状态(Disconnect State),并且释放数据线。
    • 当卡正在编程或者待编程时,对其重置(发送CMD0或者CMD15),将会导致操作终止,并且可能会导致卡内的数据内容被破坏。因此主机有责任去禁止这样的操作。

    至此,本文关于SD卡协议的内容就介绍到这里。通过本文,可以对SD卡有个大概的了解,尤其是关于SD卡初始化这段内容。就SD卡协议这方面来说,了解一些基本的东西就行。在我们今后在遇到SD问题时需要时,可以翻出来看一下。水平有限,有些地方可能会出现错误,望各位能指出来,希望能和各位共同探讨技术方面的内容。


    链接:https://www.jianshu.com/p/6272e4cb1eeb
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    展开全文
  • SD卡协议规范V2.0_V3.01

    热门讨论 2011-11-17 23:42:51
    有V2.0版本并包涵了最新的V3.01版本,添加了SDXC的部分,需要的同事们猛击下载啊~
  • Part1_Physical_Layer_Simplified_Specification_Ver6.00-目录
  • SD卡协议简介

    2021-12-16 22:47:53
    本文章内容来自 野火STM32F103教学视频 的 SD卡 篇。 SDIO协议简介 SD卡(Secure Digital Memory Card)在我们的生活中已经非常普遍了,控制器对SD卡进行读写通信操作一般有两种通信接口可选,一种是 SPI接口,...

    本文章内容来自 野火STM32F103教学视频 的 SD卡 篇。

    SDIO协议简介

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

    参考资料:

    • 多媒体卡协会网站 www.mmca.org 中提供了有MMCA技术委员会发布的多媒体卡系统规范。
    • SD卡协会网站 www.sdcard.org 中提供了SD存储卡和SDIO卡系统规范。
    • CE-ATA工作组网站 www.ce-ata.org 中提供了CE_ATA系统规范。

    SDIO设备分类

            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是专为轻薄笔记本硬盘设计的硬盘高速通讯接口。

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

    SD卡物理结构

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

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

    SD卡总共有8个寄存器,用于设定或表示SD卡信息。

    这些寄存器只能通过对应的命令访问,SDIO定义64个命令,每个命令都有特殊意义,可以实现某一特定功能,SD卡接收到命令后,根据命令要求对SD卡内部寄存器进行修改,程序控制中只需要发送组合命令就可以实现SD卡的控制以及读写操作。

    SD卡寄存器列表:

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

                      每个寄存器位的含义可以参考SD简易规格文件《Physical Layer Simplified Specification V2.0》第5章内容。

    SDIO总线拓扑

            SD卡一般都支持 SDIO 和 SPI 这两种接口,本章内容只介绍 SDIO 接口方式,SD 卡与 SDIO 接口示意图如下:

             虽然可以共用总线,但不推荐多卡槽共用总线信号,要求一个单独 SD 总线应该连接一个单独的 SD 卡。

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

    • CLK:时钟线,由 SDIO 主机产生,即由 STM32 控制器输出;
    • CMD:命令控制线,SDIO 主机通过该线发送命令控制SD卡,如果命令要求 SD 卡提供应答,SD 卡也是通过该线传输应答信息;
    • D0-3:数据线,传输读写数据;SD 卡可将 D0 拉低表示忙状态;
    • VDD、Vss1、Vss2:电源和地信号。

    SDIO总线:

            SDIO的通信时序的物理逻辑非常简单,SDIO不管是从主机控制器向SD卡传输,还是SD卡向主机控制器传输都只以CLK时钟线的上升沿为有效。SD卡操作过程会使用两种不同频率的时钟同步数据,一个是识别卡阶段时钟频率FOD,最高为400kHz;另外一个是数据传输模式下时钟频率FPP,默认最高为25MHz,如果通过相关寄存器配置使SDIO工作在高速模式,此时数据传输模式最高频率为50MHz。

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

    命令与响应交互:

            SD 数据是以块 (Black) 形式传输的,SDHC 卡数据块长度一般为 512 字节,数据可以从主机到卡,也可以是从卡到主机。数据块需要 CRC 位来保证数据传输成功。CRC 位由SD卡系统硬件生成。STM32控制器可以控制使用单线或4线传输,本开发板使用4线传输。

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

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

             使用4数据线传输时,每次传输 4bit 数据,每根数据线都必须有起始位、终止位以及 CRC 位,CRC 位每根数据线都要分别检查,并把检查结果汇总然后在数据传输完后通过 D0 线反馈给主机。

            SD卡数据包有两种格式,一种是常规数据 (8bit宽),它先发低字节再发高字节,而每个字节则是先发高位再发低位,4线传输示意如下图:

     

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

     

    展开全文
  • 中文版SD卡协议,很详细的

    热门讨论 2008-10-14 10:56:57
    自己很辛苦翻译的,中文版SD卡协议,如果能给大家帮助,很感到很荣幸。
  • sd卡协议,很详细

    2013-01-13 22:44:25
    SD 卡协议,详解命令,操作方法。适合裸机开发的同学们。
  • 非常适合各位做嵌入式的工程师参考!SD和microSD卡各版本英文协议
  • SD卡协议学习点滴(完整版本),对使用SD卡很有帮助
  • 在网上找的最新的SD卡协议,欢迎硬件开发的人下载,希望对你有帮助
  • SD卡协议V2.0响应中文版

    千次阅读 2020-04-10 15:39:22
    注意,如果涉及到上的数据传输,则数据线上可能出现占线信号在每个数据块传输之后后。数据块传输后,主机应检查是否忙。 位号 47 46 [45:40] [39:8] ...
  • SD卡协议 规范

    2011-09-08 10:34:48
    SD卡规范,其中包括1.00,2.00.3.00,英文的,2011年最新规范
  • SD卡协议第二部分

    2015-07-30 09:27:49
    SD卡开发必备的协议文档,详细描述了协议细节!
  • SD卡协议 2.2版本

    2010-10-21 13:44:48
    Revision History • Revision 1.0 dated 6/2001−initial release. • Revision 1.1 dated 11/2001−minor editorial and technical changes. • Revision 1.2 dated 6/2002−minor editorial and technical ...
  • SD卡协议3.0

    2011-12-19 17:52:18
    SD卡协议3.0,还可以。仅请参考,SD卡协议3.0,还可以。仅请参考
  • SD协议中文版

    2019-01-06 13:17:36
    SD卡读写通讯协议中文翻译版,介绍很详细。
  • SD卡协议学习(一)

    千次阅读 2016-10-09 23:19:01
    SD卡协议学习   SD卡操作模式 每种操作模式具体对应一种或多种状态,主机通过发送命令可以使SD卡在不同的状态间转换,SD卡接受命令,并根据自己现在所处状态做出不同的响应。   1. Inactive 2. Card ...
  • 深入理解SD卡:协议

    万次阅读 2019-05-17 13:24:16
    深入理解SD卡系列文章将介绍SD卡,涉及SD卡协议及驱动代码。我们学习SD卡目的是为了理解SD卡的驱动代码,修改它,最终解决工作中遇到的SD卡相关的问题。本系列文章的目标是理解SD,包括协议和驱动代码。在学习任何...
  • 电子-sd卡协议中文.zip

    2019-09-05 13:33:44
    电子-sd卡协议中文.zip,单片机/嵌入式STM32-F0/F1/F2
  • MMCSDTimming.pdf,SDSDv17.pdf,SD卡规范.pdf,SD卡使用手册.pdf,SD卡指命集.pdf,利用SD存储介质扩展MAXQ2000的非易失性数据存储空间.pdf
  • SD卡协议完整版,全英文。包括物理层协议,链路层协议等~~
  • 有关SD卡协议以及2410 SDI控制器的绝好资料
  • SD卡协议(中文版)

    2009-05-26 13:36:59
    详细介绍了SD卡的通信协议, 对命令响应过程,数据传输过程进行了详细说明。 希望对各位有用

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 134,227
精华内容 53,690
关键字:

sd卡协议