zoukankan      html  css  js  c++  java
  • SD3.0四个协议解读

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

    传输数据模式:

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

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


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


    传输数据模式(翻译):

      SD卡识别模式结束之前,控制器使用的时钟频率均为Fod。在传输数据模式,控制器可能会使用Fpp频率。控制器发送一条SSEND_CSDCMD9)命令来获取SDCSD寄存器(Card Specific Data)里面的描写叙述值,譬如,块长度。卡容量信息等。广播命令SET_DSRCMD4)配置全部识别卡的驱动段。相应于应用总线LayOut(长度)。卡的数量和传输数据频率,这个命令设置DSR寄存器。时钟频率在那个点上也应该从Fod切换FppSET_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保留。


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

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

  • 相关阅读:
    VS2008编写MFC程序--使用opencv2.4()
    November 02nd, 2017 Week 44th Thursday
    November 01st, 2017 Week 44th Wednesday
    October 31st, 2017 Week 44th Tuesday
    October 30th, 2017 Week 44th Monday
    October 29th, 2017 Week 44th Sunday
    October 28th, 2017 Week 43rd Saturday
    October 27th, 2017 Week 43rd Friday
    October 26th, 2017 Week 43rd Thursday
    October 25th, 2017 Week 43rd Wednesday
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4750011.html
Copyright © 2011-2022 走看看