SD3.0协议解读二

在阅读本文章之前,请先思考一下什么是总线,总线的作用是什么?相信大家都学过I2C总线,它由SCL和SDA两条线组成,通过这两条线就能完成各种通信。同样地,SD卡通信也需要有自己的总线模式。SD卡还比较牛逼,支持SD总线和SPI总线,老衲接触的比较多的是SD总线,所以这篇文章仅介绍SD总线,对于SPI总线老衲以后有机会再介绍。

SD总线:

大家都知道总线一般支持多种频率,在默认的频率下,SD总线支持一(主)对多(从)的模式,即支持一个HOST对多个SD卡的模式。但是,在高速和UHS-I,SD总线只能支持一对一的模式,即支持一个HOST对一个SD卡的模式。

问:那么对于一对多的模式,总线是如何找到相应的SD卡呢?

答:在SD卡初始化识别模式下,通过发送CMD3来获取RCA,即卡的逻辑地址,如果卡发现跟自己的逻辑地址是一致的,就会通过R6来响应。

SD总线协议:

SD总线是基于命令和数据的,开始于起始位,结束于结束位。Command和Response都是通过CMD线来传输的,Data是通过数据线来传输的。Command都是由主机(HOST)发起,Response都是由卡发出响应的。

数据的传输是以(Block)为单位的,数据块后面带有CRC校验位,图3-4描述了单块和多块的数据传输操作,多块数据传输通过Stop命令来结束数据传输操作。

因为HOST的速度总是比SD的速度要快,假如你往卡里面拼命写数据,这会出现什么问题?问题可大了,假如SD卡第一次都还没成功写完整,你就马上发第二次第三次的数据过来,那必将会造成数据的丢失,对吧。这就引申出了等待机制。HOST必须等待Card写完了,你才能继续发第二次数据传输。

那么,在SD总线的块写操作里,是通过Data0的信号状态指示卡是否Busy还是Ready的。

Command的内部编码格式:

Command命令都是由48bit组成的,每个命令的开始都是以‘0‘开始,以‘1‘结束的。每个命令都包含有CRC校验位,它的作用是,当数据传输发生错误时,可以重新重新发起操作。

Response的内部编码格式:

Response有四种编码模式,这取决于响应内容,长度为48bit或者136bit。由图3-7可知,当Response为R1、R3、R6时,响应长度为48bit,而Response为R2时,响应长度为136bit。并且在CMD线上传输都是先发送MSB,最后发送LSB,由于Command和Response都是在CMD线上传输的,所以它们都必须按照先发送MSB,最后发送LSB。这些规定都会在驱动里面被一个结构体封装掉,你知道是这么一回事就好了,不用特别在意。

SD卡的数据包格式:

1.Usual data (8 bit width):在字节之间先传输低字节后传输高字节,在字节里面先传输高位后传输低位。

2.Wide width data(SD卡寄存器):共有512bit,先传高位后传低位。

相应的数据格式这里就不贴图了,有兴趣的读者请查阅“Part_1_Physical_Layer_Specification_Ver3.00_Final_090416”的P28和P29,OK,这篇文章暂时聊到这里,精彩在后面哦。

SD3.0协议解读二

时间: 2024-09-29 17:24:33

SD3.0协议解读二的相关文章

SD3.0协议解读一

前言: 老衲我近期研究的是SD/MMC卡驱动,研究过的SD/MMC驱动的贫僧们都应该知道SD/MMC协议是必不可少的一部分,除非你不想研究透SD/MMC驱动,那你大可只研究driver/mmc/host目录下的文件即可.说到SD/MMC协议,网上一搜,SD3.0的协议只有英文版的资料,要想真正理解协议,英文水平差的贫僧就可吃力了,老衲英文水平实在是一般,但是网上对SD3.0协议的解读相关的中文资料实在是少的可怜.老衲怒想写写对SD3.0协议的理解,于是这一系列的SD3.0协议解读将会陆续问世..

SD3.0协议解读三

SD卡功能描述 所有主机和SD卡间的通信都是由主机控制的,这和USB是一致的,例如:U盘并没有主动通知USB控制器的能力,USB鼠标也没有主动通知USB控制器的能力,当然,SD卡也是没有主动通知SD控制器的能力的. 主机发送的命令有两种,一种是一对多,另一种自然是一对一了,他们分别是: 1.广播命令:广播命令发送给所有挂在SD总线上的SD卡,有一些广播命令需要SD卡作出响应. 2.寻址(点对点)命令:寻址命令只发送给具有相应地址的卡,并需要找到的那张卡返回一个响应. SD卡有两种模式,一种是卡识

SD3.0协议解读四

前面的文章提到过SD卡主要分为两个操作模式,一是初始化和识别操作模式,另一种就是这篇文章需要分析的数据传输模式啦. 数据传输模式: 数据传输模式主要有六种状态,分别是Stand-by状态.Transfer状态.Sending-data状态.Receive-data状态.Programming状态.Disconnect状态.这六种状态通过不同的Command就可以切换到某种状态,换句话说,这六种状态贯穿了整个数据传输模式. 要理解数据传输模式的流程,老衲认为除了理解这六种状态,还需要对Comman

OAuth 2.0 / RCF6749 协议解读

OAuth是第三方应用授权的开放标准,目前版本是2.0版,以下将要介绍的内容和概念主要来源于该版本.恐篇幅太长,OAuth 的诞生背景就不在这里赘述了,可参考 RFC 6749 . 四种角色定义: Resource Owner:资源所有者,即终端用户 Resource server:资源服务器,即提供资源存储访问一方 Client:通常指第三方应用 Authorization server:授权服务器 协议端点(URI):OAuth给授权过程定义了Authorization.Token和Redi

IP协议解读(二)

IP协议是TCP协议栈中的核心协议,也是网络编程的基础之一. 我们接着在IP协议解读(一)继续学习 网络层作用 IP分片: IP数据报的长度超过帧的MTU时,将会被分片传输.分片可能发生在发送端,也可能发生在中转路由器上,并且可能在传输过程中被多次分片.最终会在接收器上被IP模块重新组装. 在IP协议解读(一)中讲述了16位数据报标识.3位的标识,13位的片偏移给分片和重组提供了足够的信息.一个IP数据报的每个分片都具有自己的头部.他们具有相同的标识值,但具有不同的片偏移. 以太网的MTU位15

安全系列之二:OAuth2.0协议

本文提取出OAuth2.0规范RFC6749的主要内容,部分内容从文档复制出来,给大家讲讲第三方授权背后的故事. 先是举个知乎的QQ登录授权的例子,然后讲四种授权方式,两种令牌,接着是看看协议流程,分析知乎的QQ登录授权请求响应报文解释OAuth2.0协议,最后简单看看QQ提供第三方授权的API加深理解. 先打个预防针,在讲解四种授权,两种令牌时大家可能会有点不懂,但是跟随着协议流程走就懂了. 如果觉得排版不好,可以访问我的博客.TAT blog.bensonlin.me 如果觉得写得不错,欢迎

网络通信 --> 互联网协议(二)

互联网协议(二) 一.对上一节的总结 我们已经知道,网络通信就是交换数据包.电脑A向电脑B发送一个数据包,后者收到了,回复一个数据包,从而实现两台电脑之间的通信.数据包的结构,基本上是下面这样: 发送这个包,需要知道两个地址: * 对方的MAC地址 * 对方的IP地址 有了这两个地址,数据包才能准确送到接收者手中.但是,前面说过,MAC地址有局限性,如果两台电脑不在同一个子网络,就无法知道对方的MAC地址,必须通过网关(gateway)转发. 上图中,1号电脑要向4号电脑发送一个数据包.它先判断

HTTP协议(二)之HTTP请求

一.HTTP请求的方法 在HTTP/1.1协议中,定义了8种发送HTTP请求的方法,有GET.POST.OPTION.HEAD.PUT.DELETE.TRACE.CONNECT.PACH.根据HTTP协议的解释,不同的方法对资源有不同的操作方式: 1.PUT:增 2.DELETE:删 3.POST:改 4.GET:查 其中最常用的时GET和POST.GET和POST的主要区别在数据的传递上. 1.GET 在URL后面以?的形式跟上发给服务器的参数,多个参数之间用&隔开,比如: http://lo

Swift学习第八枪--协议(二)

协议(二) 这篇紧接着前面的协议(一)继续总结. 1.委托(代理)模式 委托是一种设计模式,它允许 类 或 结构体 将一些需要它们负责的功能 交由(委托) 给其他的类型的实例.委托模式的实现很简单: 定义协议来封装那些需要被委托的函数和方法, 使其 遵循者 拥有这些被委托的 函数和方 法 .委托模式可以用来响应特定的动作或接收外部数据源提供的数据,而无需要知道外部数据源的类型信息. 下面的例子是两个基于骰子游戏的协议: protocol DiceGame { var dice: Dice { g