【SDIO】SD2.0协议分析总结(二)-- SD卡识别&数据传输过程

相关文章

《【SDIO】SDIO、SD卡、FatFs文件系统相关文章索引》

1. SD卡操作模式

SD 卡系统(包括主机和 SD卡)定义了种操作模式:卡识别模式数据传输模式。在系统复位后,主机处于卡识别模式,寻找总线上可用的 SDIO 设备;同时,SD 卡也处于卡识别模式,直到被主机识别到,即当 SD卡接收到 SEND_RCA(CMD3)命令后,SD卡就会进入数据传输模式,而主机在总线上所有卡被识别后也进入数据传输模式。在每个操作模式下,SD卡都有几种状态,如下图所示,通过命令控制实现卡状态的切换。

操作模式SD 卡状态
无效模式(Inactive) 无效状态(Inactive State)
卡识别模式(Card identification mode) 空闲状态(Idle State)
准备状态(Ready State)
识别状态(Identification State)
数据传输模式(Data transfer mode) 待机状态(Stand-by State)
传输状态(Transfer State)
发送数据状态(Sending-data State)
接收数据状态(Receive-data State)
编程状态(Programming State)
断开连接状态(Disconnect State)

2. SD卡识别模式

当处于卡识别模式时,主机将所有处于卡识别模式的卡重置,验证操作电压范围,识别卡并询问它们发布的Relative Card Address(RCA)。这个操作是在每个卡各自的CMD命令行上分别执行。在卡识别模式下,所有数据通信都只使用CMD命令行。

在SD卡的识别过程中,SD时钟频率在100KHz ~ 400KHz范围内工作。

2.1 SD卡Reset

命令GO_IDLE_STATE (CMD0)是软件复位命令,无论当前卡处于什么状态,它将每个卡都设置为 Idle状态。处于Inactive 状态的卡不受此命令影响。主机上电后,所有卡都处于 Idle状态,包括之前处于Inactive 状态的卡。

上电或CMD0后,所有卡的CMD数据线都处于输入模式,等待接收下一条命令。这些卡被初始化为一个默认的SD卡相对地址(RCA=0x0000),并设置SD卡驱动级寄存器(DSR)默认为最低的速度和最高的驱动能力。

2.2 SD卡操作条件的确认

在主机和SD卡开始通信时,主机可能不知道SD卡支持的电压,SD卡也可能不知道它是否支持当前提供的电压。主机发出一个复位命令(CMD0),同时假定它电压可能被SD卡支持。为了验证电压,在《 Physical Layer Specification Version 2.00》文档中定义了以下新命令(CMD8)。

SEND_IF_COND (CMD8)用于验证SD卡接口操作条件。SD卡通过分析CMD8的参数来检测操作条件的有效性,主机通过分析CMD8响应来检测操作条件的有效性。提供的电压通过命令CMD8的参数VHS域来指定。SD卡以VHS中指定的电压作为当前提供的电压。通过CRCCheck Pattern(‘10101010b’)来检测主机与SD卡之间通信的有效性。

  • 如果SD卡支持在提供的电压上操作,在响应命令的参数中会包含提供的电压Check Pattern(‘10101010b’)
  • 如果SD卡不支持在提供的电压下工作,它没有任何响应返回并保持在Idle状态。为初始化大容量SD存储卡,必须在第一个ACMD41之前发出CMD8(如下图4 - 1)。接收CMD8能被SD卡识别到,需要主机支持《 Physical Layer Specification Version 2.00》和SD卡支持该新功能。

SD_SEND_OP_COND (ACMD41)被设计为为主机提供一种机制来识别拒绝与主机所提供的VDD范围不匹配的卡。不能在指定范围内进行数据传输的SD卡,应放弃总线操作,进入Inactive 状态。OCR寄存器定义了相关的电压等级。

注意:ACMD41是特定应用程序的命令,因此APP_CMD (CMD55)应该始终在ACMD41之前被发送。在idle_state中用于CMD55的RCA将是SD卡的默认值(RCA = 0 x0000)。

在这里插入图片描述
通过在命令ACMD41的参数中将OCR设置为0主机可以查询每个卡并确定公共电压范围,然后再将超出范围的卡发送到 Inactive 状态。ACMD41只是作为查询发出,SD卡不会开始初始化。之后,主机可以选择一个工作电压,并在这种情况下重新发出ACMD41,将不兼容的卡发送到 Inactive 状态。在初始化过程中,主机不允许改变工作电压范围。

2.3 SD卡初始化和识别过程

总线被激活后,主机开始SD卡的初始化和识别过程(参考下图4-2)。初始化过程从SD_SEND_OP_CONDACMD41)开始,通过设置操作条件和OCR(Operation Conditions Register)中的HCS(Host Capacity Support)位。

HCS(Host Capacity Support)位设置为 :

  • 1: 表示主机支持大容量SD存储卡
  • 0: 表示主机支持大容量SD存储卡

使用命令CMD8扩展了ACMD41的功能; 发送命令ACMD41时会带有参数HCSACMD41对应的响应R3(OCR register),包含:VDD电压范围SD卡容量状态CCS(Card Capacity Status)。如果SD卡没有相应CMD8,那么ACMD41参数HCS会被SD卡忽略。但是,如果卡没有返回对CMD8的响应,主机应该将HCS设置为0标准容量的SD卡将忽略HCS。如果HCS设置为0,则大容量SD卡永远不会返回就绪状态(保持Busy Bit为0)。OCR中的Busy Bit被SD卡用来告知主机ACMD41的初始化是否完成。

OCR中的Busy Bit设置为:

  • 0:表示该SD卡仍处于初始化状态
  • 1:表示该SD卡初始化已经完成

主机反复发出ACMD41,直到Busy Bit设置为1SD卡只在第一个ACMD41检查OCR中的Operational ConditionsHCS位。当重复ACMD41时,主机不得发出除CMD0以外的其他命令。

当卡响应CMD8时,ACMD41的响应中包含CCS字段信息。当SD卡返回Ready(Busy Bit设置为1)时,CCS生效。

CCS(Card Capacity Status)设置为:

  • 0: 表示该卡为 Standard Capacity SD Memory Card
  • 1: 表示该卡为 High Capacity SD Memory Card

主机对系统中的所有新卡执行相同的初始化顺序,不兼容的卡将被发送到 Inactive 状态。然后主机向每个卡发出命令ALL_SEND_CID (CMD2),以获得其唯一的卡标识(CID)号。未识别的卡(即处于就绪状态的卡)发送其CID号作为响应(在CMD线上)。在卡发送CID后,它进入识别状态。然后,主机发出CMD3 (SEND_RELATIVE_ADDR)请求卡发布一个新的相对卡地址(RCA),它比CID短,在未来的数据传输模式中用于给卡寻址。一旦接收到RCA,SD卡状态就会变为待机状态。此时,如果主机希望分配另一个RCA号码,它可以通过向卡发送另一个CMD3命令来要求卡发布一个新号码。最后发布的RCA是SD卡的实际RCA号。

在这里插入图片描述

3. SD卡数据传输模式

在SD卡识别模式结束之前,主机应保持在 fOD (400kHz)频率,因为在SD卡识别模式期间,有些SD卡可能有操作频率限制。在数据传输模式下,主机可以在 fPP (25MHz)频率范围内对卡进行操作。主机发出SEND_CSD(CMD9)以获取与SD卡有关的数据(CSD寄存器),例如块长度、卡的储存容量等。

广播命令SET_DSR (CMD4)配置所有识别卡的 Driver Stage Register。它根据应用总线的布局(长度)总线上卡的数量数据传输频率来编程DSR寄存器。时钟速率也从 fOD 切换到 fPPSET_DSR命令是SD卡和主机的一个选项(非必须)

CMD7用于选择一张SD卡并将其置于传输状态,在同一时刻只能有一张卡处于传输状态。如果先前选择的卡处于传输状态,它与主机的连接将被释放,它将返回到 Stand-by 状态。当CMD7以保留的相对卡片地址“0x0000”发出时,所有卡片都被退回到 Stand-by 状态。

注意:主机预留 RCA = 0x0000 用于退出选择。

在这里插入图片描述
这可以在识别新卡之前使用,而不用重置其他已经注册的卡。处于此状态的SD卡已经有一个RCA后,将不响应识别命令(例如:ACMD41, CMD2)。

注意:如果确认的SD卡获取到CMD7不匹配的RCA后,该卡将取消选择。

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

  • 所有数据读取命令都可以在任何时候通过停止命令(CMD12)中止。数据传输将终止,SD卡将返回到 Transfer 状态。读命令包括:块读(CMD17)、多块读(CMD18)、发送写保护(CMD30)、发送scr (ACMD51)和读模式的通用命令(CMD56)。
  • 所有数据写命令都可以在任何时候通过停止命令(CMD12)中止。在CMD7取消对卡的选择之前,应该停止写命令。写入命令包括:块写入(CMD24和CMD25),程序CSD(CMD27),锁定/解锁命令(CMD42)和写入模式下的常规命令(CMD56)。
  • 一旦数据传输完成,SD卡将退出数据写入状态,并移动到 Programming 状态(传输成功) 或 Transfer 状态(传输失败)。
  • 如果一个块写操作被停止,并且最后一个块的块长度和CRC是有效的,数据将被编程。
  • SD卡可以为块写入提供缓冲。这意味着在前一个块被编程时,下一个块可以被发送到SD卡。如果所有写缓冲区都满了,只要SD卡处于 Programming 状态(见SD卡状态图图4-3),DAT0线就会保持低(BUSY)
  • 写CSD、写保护和擦除没有缓冲选项。这意味着当SD卡忙着处理这些命令中的任何一条时,其他的数据传输命令将不会被接受。只要卡忙且处于 Programming 状态,DAT0线就会保持低电平
  • 当卡在编程时,参数设置命令是不允许的。参数设置命令包括:设置块长度(CMD16),擦除块开始(CMD32)和擦除块结束(CMD33)。
  • 当卡在编程时不允许读命令。
  • 将另一张卡从 Stand-by 状态转移到 Transfer 状态(使用CMD7)不会终止擦除和编程操作。卡将切换到 Disconnect 状态,将释放DAT线。
  • Disconnect 状态下,可以使用CMD7重新选择卡。在这种情况下,卡将转移到 Programming 状态并重新激活占线指示。
  • 重置SD卡(使用CMD0或CMD15)将终止任何挂起的或正在进行的编程操作。这可能会破坏卡上的数据内容。防止这种情况发生是主机的责任。
  • CMD34-37、CMD50、CMD57预留用于SD命令系统扩容。这些命令的状态转换在每个命令系统规范中都有定义。

4. 参考资料

SDIO参考的资料如下:
在这里插入图片描述
下载地址如下:
https://download.csdn.net/download/ZHONGCAI0901/14975835

  • 7
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SDIO2.0(Secure Digital Input/Output)是一种用于在嵌入式系统中实现数据读写和通信的接口协议SDIO2.0协议定义了设备之间的时序,主要包括传感器、存储设备和其他外设设备之间的通信流程。 SDIO2.0协议时序的主要流程如下: 1. 主机发起命令:主机向设备发送命令,包括命令类型、读写操作、寄存器地址等信息。 2. 设备响应:设备接收到命令后,根据命令的类型和参数执行相应的操作,并将响应反馈给主机。设备的响应可能包括操作成功/失败、数据传输准备就绪等状态。 3. 数据传输:如果命令需要传输数据,主机会在设备准备好数据后发起数据传输请求。设备将数据按照指定的格式(如字节、块等)发送给主机。 4. 结束命令:主机在完成操作后,发送结束命令给设备,告知设备当前操作已经结束。 5. 设备确认:设备接收到结束命令后,发送确认信号给主机,表示设备已经收到结束命令并确认操作已完成。 6. 设备复位:在一些情况下,主机可以向设备发送复位信号,重新初始化设备的状态。 需要注意的是,SDIO2.0协议通过时钟信号和数据信号完成设备之间的通信,时钟信号用于同步数据传输,数据信号用于传输命令和数据。时序的严格控制保证了设备之间的数据传输的准确性和可靠性。 总之,SDIO2.0协议时序是设备之间进行数据读写和通信的具体流程,通过发送命令、设备响应、数据传输和结束命令等步骤完成数据的传输和操作。 ### 回答2: SDIO2.0协议是用于在SDIO总线上实现高速数据传输的一种协议。它定义了数据传输的时序和规范,确保数据能够准确、快速地从SDIO设备传输到主机或从主机传输到SDIO设备。 SDIO2.0协议的时序包括以下几个方面: 1. 主机发送命令:主机通过CMD线发送命令到SDIO设备。主机先发送命令的索引和参数,然后SDIO设备会返回一个响应。 2. 主机发送数据:主机发送数据到SDIO设备的时序包括以下几个步骤:主机发送数据块的大小、主机等待ACK响应、主机发送数据块的起始地址和实际数据。 3. SDIO设备回应:SDIO设备会根据主机发送的命令或数据给出相应的回应。回应类型有响应响应(R1响应)、响应响应加数据块(R1b响应)、响应加数据(R2响应)和无响应(R3和R4响应)。 4. 数据传输结束:主机在某个时刻结束数据传输,即发送结束标志。 总的来说,SDIO2.0协议的时序是通过主机发送命令和数据,SDIO设备根据主机的指令进行操作并给出相应的响应,最后主机结束数据传输。保证了数据的准确和高效传输。以上是对SDIO2.0协议时序的简要回答。 ### 回答3: SDIO2.0(Secure Digital Input/Output)是一种用于连接外部设备的接口协议,该协议可以让主机设备(如智能手机、平板电脑等)与外部设备(如Wi-Fi模块、蓝牙模块等)进行数据传输和通信。 SDIO2.0协议时序指的是在SDIO接口下,各个信号线的时钟和数据传输顺序。具体来说,SDIO2.0协议时序有以下几个关键步骤: 1. 初始化步骤:在通信开始前,主机设备要向外部设备发送初始化命令,以确保通信正常开始。 2. 时钟同步:主机设备会发送一个时钟信号给外部设备,用于同步数据传输的时钟。 3. 命令传输:主机设备发送指令给外部设备,包括读写操作和其他控制命令。这些命令通过命令线传输。 4. 数据传输:在命令传输完成后,主机设备通过数据线发送数据给外部设备或从外部设备接收数据。数据传输的顺序可以是单字节传输或者多字节传输。 5. 响应传输:外部设备在接收到命令后,会返回一个响应给主机设备,表示命令的执行结果。响应传输的方式可以是使用命令线来传输响应码。 需要注意的是,SDIO2.0协议时序非常重要,若时序不正确,会导致数据传输错误或通信失败。所以在设计和实现SDIO2.0接口时,需要根据协议规范精确控制时钟和数据传输的顺序,以确保稳定可靠的数据传输和通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值