[元带你学: eMMC协议详解 11] Data transfer mode 数据传输模式

依JEDEC eMMC 5.1及经验辛苦整理,付费内容,禁止转载

所在专栏 《元带你学: eMMC协议详解

全文2300 字, 主要介绍数据传输模式,本节数据传输模式图非常重要。数据传输模式图可以说是我查对过最频繁的图之一了。eMMC 限定了这么多State, 什么命令要在什么State 下? 下了什么命令后又变成什么State? 都是严格规定的。很多时候命令出现异常应首先排查这里。


当设备处于待机状态时,通过CMD和DAT线的通信将以推拉模式进行。主机发出SEND_CSD (CMD9)来获取设备特定数据(CSD寄存器),例如块长度、设备存储容量、最大时钟速率等。

 图 eMMC state 图(data transfer mode)

这张图可以说是我查对过最频繁的图之一了,eMMC 要说一点也不简单,就这个图, 搞了五六年也不一定全记得全, 关键时刻还是要对照图看看。

吐槽一下

eMMC 限定了这么多State, 什么命令要在什么State 下? 下了什么命令后又变成什么State? 都是严格规定的。有点自缚, 限制了自己。无论是主机端和设备端, 都被这个束缚住, 但又不能不遵守。又一步不对就是踩到红线了。

为什么要遵守协议?

协议就是行业里的规范,商业合同一般都会写上,如果有品质问题, 以协议为标准, 谁没有遵照协议谁就赔钱。就好比A 家生产螺丝钉, B 家生产螺帽, 如果有一家不遵照螺丝行业协议, 螺丝钉就套不进螺帽。

怎么保证是在正确的 State 发送的命令呢?

发生命令前, 先发送 CMD13 查询下当前的状态是什么? 基本上CMD13 在很多状态下都可以下的, 它可以返回当前eMMC 在什么State。 如果当前State 不满足,就一直发生 CMD13 查询。

再比如eMMC 现在在收发数据, 如果不想要它执行这笔任务了,想让它提前终止回到传输模式, 主机可以下CMD12 来Stop. 这样即可快速回到 transfer state, 继而可以发送下一个命令。

在prg状态下,busy (会把DAT0 拉low)一直处于active状态。由于遗留原因,在prg状态(忙时为活动状态)期间,设备可能仍然将CMD24/25视为合法或非法命令。当设备处于prg状态和busy时,主机不应该发送CMD24/25。

当设备处于待机状态时,CMD7通过设备的相对地址来选择设备并将其置于传输状态。如果设备之前被选中并且处于传输状态,那么它与主机的连接将被释放,并且当CMD7使用不等于设备自己的相对地址的地址, 取消选择设备时,它将移回备用状态(Stby)。当CMD7带地址“0x0000”(保留的相对设备地址)时,设备被放回到待机状态。

在设备被分配RCA后,它将不再响应识别命令——CMD1、CMD2或CMD3。当设备处于断开状态时,CMD7通过在参数中包含设备的相对地址来选择设备并将其置于编程(Program)状态。如果设备先前被选中并处于编程状态,则其与主机的连接将被释放。数据传输模式下的所有数据通信都是在主机和所选设备之间进行点对点通信(使用寻址命令)。所有寻址的命令都在CMD线上得到响应。总结了各种数据传输方式之间的关系。所有的数据读取命令都可以在任何时候通过stop命令(CMD12)终止。数据传输将终止,设备将返回到传输状态。

读命令包括:块读(CMD17)、多块读(CMD18)、发送调优(CMD21)和发送写保护(CMD30)。所有的数据写命令都可以在任何时候通过stop命令(CMD12)终止。在通过CMD7取消选择设备之前,必须停止写命令。

写命令包括:块写(CMD24和CMD25)、CID写(CMD26) 和 CSD写(CMD27)。一旦数据传输完成,设备将退出数据写入状态,并进入编程状态(传输成功)或传输状态(传输失败)。如果停止块写操作,并且最后一块的块长度和CRC有效,则将对数据进行编程。设备可以为块写入提供缓冲。这意味着下一个块可以在前一个块被编程时发送到设备。对于写CSD、写CID、写保护和擦除,没有缓冲选项。这意味着,当设备忙于处理这些命令中的任何一个时,将不接受其他数据传输命令。只要设备处于繁忙和编程状态,DAT0线就会保持低电平。当设备正在编程时,不允许使用参数集命令。

参数设置命令有:设置块长度(CMD16)和擦除组选择(CMD35-36)。

设备正在编程时不允许使用读命令。

CMD7将另一个设备从待机状态移动到传输状态,不会终止编程操作。设备将切换到断开状态,并将释放DAT0线。

在断开连接状态下,可以使用CMD7重新选择设备。在这种情况下,设备将移动到编程状态并重新激活忙指示。

如果主机只连接一个eMMC 设备, 基本上很少用到CMD7。 因为就一个设备,又没有别的选择,就一直选择它好了。如果连接了多个eMMC 设备, 在多个eMMC 之间频繁切换, 发生读写任务,切换的时候就要取消选中当前eMMC, 选中下一个eMMC. 

狡兔三窟, 才会费脑子想晚上睡哪个洞府呢。

咱刚需就一套房子, 还用想晚上睡哪套房子吗?

Reset重置设备(使用CMD0、CMD15或e-MMC硬件重置)或电源故障将终止任何未决或正在进行的编程操作。这可能会使操作所寻址的部分或全部数据处于未知状态,除非启用了可靠写入。主机有责任防止这种情况发生。

免责声明

本文根据公开信息整理,旨在介绍更多的存储知识,所载文章仅为作者观点,不构成投资或商用建议。本文仅用于学习交流, 不允许商用。若有疑问或有侵权行为请联系作者处理。

猜你喜欢

转载自blog.csdn.net/vagrant0407/article/details/130914606