前面的文章提到过SD卡主要分为两个操作模式,一是初始化和识别操作模式。还有一种就是这篇文章须要分析的传输数据模式啦。

传输数据模式:

传输数据模式主要有六种状态,各自是Stand-by状态、Transfer状态、Sending-data状态、Receive-data状态、Programming状态、Disconnect状态。这六种状态通过不同的Command就能够切换到某种状态,换句话说,这六种状态贯穿了整个传输数据模式。

要理解传输数据模式的流程,老衲觉得除了理解这六种状态,还须要对Commands有一定的了解。越熟悉越好。当然。这并非叫你去背Commands。好了。我们来看看传输数据模式的流程框图:

老衲我第一次看到这图的时候,简直看晕了,有木有!。太恶心了吧,谁定义的协议。敢不敢再复杂一点?没办法,做IT的就是苦逼,仅仅能慢慢一点点啃,在理解流程之前。我们必须讲协议里的英文翻译一遍,然后结合流程图理解究竟是怎么一回事,最后结合代码来看,这才干真正明确传输数据的过程是怎么一回事,以下是对英文协议里传输数据模式的翻译:

传输数据模式(翻译):

在SD卡识别模式结束之前,控制器使用的时钟频率均为Fod。在传输数据模式,控制器可能会使用Fpp频率。控制器发送一条SSEND_CSD(CMD9)命令来获取SD卡CSD寄存器(Card Specific Data)里面的描写叙述值,譬如,块长度。卡容量信息等。广播命令SET_DSR(CMD4)配置全部识别卡的驱动段。相应于应用总线LayOut(长度)。卡的数量和传输数据频率,这个命令设置DSR寄存器。时钟频率在那个点上也应该从Fod切换Fpp。SET_DSR命令对Host和卡都是可选的。

CMD7 用来选择一个卡并将它置于传输状态(Transfer  state)。在不论什么时间仅仅能有一个卡处于传输状态。 假设已有一个卡处于传输状态, 它和主机的连接将释放,并返回到 Stand-by状态。当 CMD7 以保留相对地址“0x0000”发送时,全部卡将返回到 Stand-by 状态。

这能够用来识别新的卡而不重置其它已注冊的卡。

在这种状态下已有一个 RCA 地址的卡不响应识别命令(ACMD41,CMD2,CMD3)。

传输数据模式下各个状态的转换关系总结例如以下:


·全部的数据读命令都能够被停止命令(CMD12)在随意时刻终止。

传输数据会终止,SD卡返回Transfer状态。

读命令有:块读操作(CMD17)、多块读操作(CMD18)、发送写保护(CMD30)、发送scr(ACMD51)以及读模式下的普通命令(CMD56)。

·全部的数据写命令都能够被停止命令(CMD12)在随意时刻终止。

写命令也会在取消选择命令(CMD7)之前停止。写命令有:块写操作(CMD24,CMD25)、编程命令(CMD27)、锁定/解锁命令(CMD42)以及写模式下的普通命令(CMD56)。

·传输数据一旦完毕,SD卡会退出数据写状态。进入Programming状态(传输成功)或者Transfer状态(传输失败)假设块写操作被叫停。可是写操作包括的终于块其长度和CRC校验是正确的话,数据会被编程到SD卡(从缓存写入到Flash)。

·卡可能提供块写缓冲。 这意味着在前一块数据被操作时。下一块数据能够传送给卡。假设全部卡写缓冲已满, 仅仅要卡在 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)操作。

这可能会破坏卡上的数据内容,须要主机保证避免这种操作。CMD34-37 CMD50,CMD57保留。

看起来是挺晕的对吧,确实挺晕的,最好的办法是将代码相结合,分析的读写过程,井,有机会到后具体分析。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

SD3.0四个协议解读的更多相关文章

  1. fast协议解读

    目录 背景 fast协议特征 fast协议解读 背景 股票行情一般传输的数据类型为: int / long / float /double / string 来表示行情价格成交量之类的数据. 正常传输 ...

  2. IP协议解读(二)

    IP协议是TCP协议栈中的核心协议,也是网络编程的基础之中的一个. 我们接着在IP协议解读(一)继续学习 网络层作用 IP分片: IP数据报的长度超过帧的MTU时,将会被分片传输. 分片可能发生在发送 ...

  3. RTSP、HTTP、HTTPS、SDP四种协议详解

    我们将主要讲解RTSP,HTTP,HTTPS, SDP四种协议.  一:RTSP协议简介 实时流协议RTSP是一个应用层协议,用于控制具有实时特性的数据(例如多媒体流)的传送. RTSP协议一般与RT ...

  4. IdentityServer4实现Oauth2.0四种模式之隐藏模式

      接上一篇:IdentityServer4实现OAuth2.0四种模式之密码模式,密码模式将用户的密码暴露给了客户端,这无疑是不安全的,隐藏模式可以解决这个问题,由用户自己在IdentityServ ...

  5. IdentityServer4实现OAuth2.0四种模式之授权码模式

    接上一篇:IdentityServer4实现OAuth2.0四种模式之隐藏模式 授权码模式隐藏码模式最大不同是授权码模式不直接返回token,而是先返回一个授权码,然后再根据这个授权码去请求token ...

  6. 硕盟 type-c转接头转接口(HDMI+VGA+USB3.0+PD3.0)四合一拓展坞

    硕盟SM-T54是一款 TYPE C转HDMI+VGA+USB3.0+PD3.0四合一多功能扩展坞,支持四口同时使用,您可以将含有USB 3.1协议的电脑主机,通过此产品连接到具有HDMI或VGA的显 ...

  7. 硕盟SM-T54| TYPE C转HDMI+VGA+USB3.0+PD3.0四合一多功能扩展坞

    硕盟SM-T54是一款 TYPE C转HDMI+VGA+USB3.0+PD3.0四合一多功能扩展坞,支持四口同时使用,您可以将含有USB 3.1协议的电脑主机,通过此产品连接到具有HDMI或VGA的显 ...

  8. 硕盟SM-T54|type-c转接头HDMI+VGA+USB3.0+PD3.0四合一多功能扩展坞接口功能说明

    硕盟SM-T54是一款 TYPE C转HDMI+VGA+USB3.0+PD3.0四合一多功能扩展坞,支持四口同时使用,您可以将含有USB 3.1协议的电脑主机,通过此产品连接到具有HDMI或VGA的显 ...

  9. 硕盟type-c转接头HDMI+VGA+USB3.0+PD3.0四合一多功能扩展坞

    硕盟SM-T54是一款 TYPE C转HDMI+VGA+USB3.0+PD3.0四合一多功能扩展坞,支持四口同时使用,您可以将含有USB 3.1协议的电脑主机,通过此产品连接到具有HDMI或VGA的显 ...

随机推荐

  1. 解决iOS app集成共享QQ场地,微信的朋友,朋友等功能圈,不能采用苹果公司的审计问题

    最近提交的应用程序App Store时刻,由于App综合QQ登录.份额QQ场地.微信等功能.被拒绝.很郁闷:在最佳.想想办法,这个问题是可以解决. 当共享平台列表显示.根据推断当前设备被安装在一节Ap ...

  2. CAS实现SSO单点登录原理(转)

    1.      CAS 简介 1.1.  What is CAS ? CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨 ...

  3. hdu1506——Largest Rectangle in a Histogram

    Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  4. 理解JavaScript的闭包

    在JS这块,免不了被问什么是闭包. 从一个常见的循环问题说起. 有一个ul列表, 里面有5个li标签,我希望点击每个li标签的时候,弹出每个li标签对应的索引值(第一个弹出0,第二个弹出1...). ...

  5. [LeetCode234]Palindrome Linked List

    题目: Given a singly linked list, determine if it is a palindrome. 判断一个单链表是不是回文 思路: 1.遍历整个链表,将链表每个节点的值 ...

  6. Git显示漂亮日志的小技巧

    Git的传统log如下所示,你喜欢吗? 看看下面这个你喜不喜欢?(点击图片看大图) 要做到这样,命令行如下: 1 git log --graph --pretty=format:'%Cred%h%Cr ...

  7. 用DOS命令获取文件列表

    其实就是两个命令:dir 跟 tree 在C:盘根目录下生成了一个名为“filelist.txt”的文本文件,该文件中即包含D:盘的文件夹列表. dir d:\ >c:\filelist.txt ...

  8. hibernate它5.many2one单向

    关系数据库表之间的关系: 1 正确 1 1 正确 许多 许多 正确 许多 表间关系设计 基于主键关联 基于外键关联 基于中间表 1 对 1关系实现: 基于主键关联 基于外键关联 基于中间表 1 对 多 ...

  9. NYOJ 372 巧克力的

    巧克力 时间限制:4000 ms  |  内存限制:65535 KB 难度:2 描写叙述 布欧能够把人变成巧克力吃了来添加他的能量,也有可能降低. 如今布欧变了n*m个巧克力,并把巧克力排成一个n*m ...

  10. C#内存分配学习

    CLR内存分配分三大块区域:栈.GC堆.大对象堆. 一.线程堆栈(栈) 用于分配值类型实例.栈由操作系统进行管理,不受GC管理,当值类型不在其作用域(主要是指其所在函数内)时,其所占栈空间自动释放.栈 ...