EMMC5.1协议讲解(3功能描述-续)之非常重要

6.7 时钟控制

EMMC总线时钟信号可以由host控制,将EMMC置于节能模式,或者控制总线上的数据流(以避免欠流或过流情况)。host可以降低时钟频率或关闭它。

host必须遵循一些限制规则:

总线频率可以在任何时候更改(在EMMC定义的最大数据传输频率和标准文档定义的区分频率的限制下)。

显然,时钟工作的情况下,EMMC才能输出数据或响应令牌。在最后一个EMMC 总线事务之后,host需要提供 8个时钟周期,EMMC识别到8个时钟周期后完成操作再关闭时钟。各种总线事务分别如下:

  1. 执行一条没有响应的命令。在host命令结束位之后的 8 个时钟周期。

2. 执行一条带响应的命令。在EMMC响应结束位之后的 8 个时钟周期。

3. 执行一次读数据事务。在最后一个数据块的结束位之后的 8 个时钟周期。

4. 执行一次写数据事务。在 CRC 状态令牌之后的 8 个时钟周期。

host可以关闭“忙碌”状态的EMMC的时钟。无论host时钟如何,EMMC都将内部完成编程操作。不过,host必须提供一个时钟边缘,以便EMMC关闭其忙碌信号。如果没有时钟边缘,EMMC(除非之前接收到取消选择命令(CMD7)断开连接)将永远拉低DATA0信号。

6.8 报错情况

6.8.1 CRC 和非法命令

所有命令均由 CRC(循环冗余校验)位保护。如果寻址的EMMC的 CRC 校验失败,则EMMC不会发出响应,并且命令不会被执行;EMMC不会改变其状态,并在状态寄存器中设置 COM_CRC_ERROR 位。

同理,如果EMMC收到了非法命令,不会改变其自身状态,也不会进行响应,并在状态寄存器中设置 ILLEGAL_COMMAND 错误位。状态图中仅显示了非错误状态分支(请参见图 25 到图 27)。表 60包含完整的状态转换描述。

有不同类型的非法命令:

1.属于EMMC不支持的类别的命令(例如只读EMMC中的写命令)。

2.当前状态下不允许接收的命令(例如传输状态下的 CMD2)。

3.未定义的命令(例如 CMD50)。

注意,COM_CRC_ERROR 和 ILLEGAL_COMMAND报错是在命令解释和验证阶段(响应模式)中检测到的。然而,由于EMMC对带有 COM_CRC_ERROR 或 ILLEGAL_COMMAND 错误的命令不进行响应,因此这些错误会在下一个有效命令的响应中显示。

6.8.2 超时条件

读/写/擦除操作超时的时间(与EMMC无关)是下面所示操作的典型访问/编程时间的 10 倍。EMMC必须在此时间段内完成命令,或者放弃并返回错误消息。如果host在规定的超时时间内没有获得响应,则应假定EMMC不会再响应,并尝试进行恢复(例如,重置设备、电源循环、拒绝等)。典型的访问和编程时间定义如下:

· 读取

读取访问时间定义为 CSD 寄存器中的参数 TAAC 和 NSAC(见 6.15)给出的两个时间之和。这些EMMC参数定义了读取命令结束位和数据块开始位之间的典型延迟时间。这个数字是与EMMC相关的。

· 写入

CSD 寄存器中的 R2W_FACTOR 字段用于计算典型块编程时间,该时间通过读取访问时间乘以该因子获得。它适用于所有写入/擦除命令(例如 SET(CLR)_WRITE_PROT、PROGRAM_CSD(CID) 和块写入命令)。

擦除/安全擦除

擦除命令的持续时间将是要擦除的擦除块数量乘以块写入延迟的数量级。如果启用了 ERASE_GROUP_DEF(即ext_csd 寄存器中的第175字节),则应使用 ERASE_TIMEOUT_MULT 来计算操作持续时间。

安全擦除超时是基于擦除超时和额外的 SEC_ERASE_MULT 因子(在ext_csd寄存器的第230字节)计算的。

TRIM/DISCARD/Secure TRIM 修剪/丢弃/安全修剪

TRIM/DISCARD这俩功能的超时时间是根据TRIM_MULT因子(ext_csd寄存器中第232字节)计算的。安全TRIM的超时时间是根据擦除超时和额外的SEC_TRIM_MULT因子(ext_csd寄存器的第229字节)计算的。

force erase 强制擦除

使用CMD42命令进行强制擦除的持续时间被指定为固定的超时时间,为3分钟。

· High-Priority Interrupt (HPI) 高优先级中断

OUT_OF_INTERRUPT_TIME(ext_csd寄存器的第198字节)定义了CMD12/13的结束位到EMMC释放DAT0信号线之间的最大时间。其中CMD12/13的arg[0]=1表示EMMC正在执行一项操作,而DAT0信号线是数据总线上的一个引脚,用于传输数据。

/*当设备在执行CMD12/13操作时,如果超过了OUT_OF_INTERRUPT_TIME定义的最大时间,那么EMMC可能会被认为已经超时,从而导致操作失败或出现其他问题。因此,确保EMMC能够及时释放DAT0引脚以完成操作至关重要,以避免潜在的问题和故障。*/

· Partition Switch 分区切换

PARTITION_SWITCH_TIME(ext_csd寄存器的第199字节)定义了更改PARTITION_CONFIG字段(ext_csd寄存器的第179字节)中的PARTITION_ACCESS位来切换分区时,从SWITCH命令(host 下发CMD6)的结束位到EMMC释放DAT0的最大时间。

/* 当通过更改PARTITION_ACCESS位来切换分区时,存储设备需要一定的时间来重新配置并切换到新的分区。如果超过了PARTITION_SWITCH_TIME定义的最大时间,那么设备可能会被认为已经超时,从而导致操作失败或出现其他问题。因此,确保设备能够及时释放DAT0引脚以完成操作至关重要,以避免潜在的问题和故障*/

6.8.3 多块读操作的预读取

/* Read ahead in multiple block read operation(多块读操作中的预读取)是指在读取存储设备上的多个数据块时,预先读取一些附加的数据块,以提高读取性能和效率。

在多块读操作中,存储设备通常会预读取一些额外的数据块,并将其缓存到读取缓存器中,以便在下一个读取操作中更快地访问这些数据块。这种预读取技术可以减少读取操作的延迟和等待时间,从而提高存储设备的读取速度和响应能力。

预读取的数据块数量通常由存储设备的控制器决定,并且可以通过控制器的设置进行调整。然而,预读取的数据块数量也会受到存储设备的读取带宽和缓存容量的限制。

需要注意的是,在进行多块读操作时,预读取的数据块可能会消耗存储设备的一部分带宽和资源,因此需要权衡预读取的数量和性能需求之间的关系,以获得最佳的存储性能。

*/

在多块读取操作中,为了避免数据不足或提高读取性能,EMMC可能会提前从存储器阵列中获取数据。在这种情况下,当host正在读取存储器的最后地址时,EMMC会尝试获取超出最后物理存储器地址的数据,并生成ADDRESS_OUT_OF_RANGE错误。因此,即使host在读取最后一个字节数据后立即发送停止传输命令,EMMC可能已经生成了错误,并在停止传输命令的响应中显示。对此情况的错误host 需要忽略掉。

6.9 最低性能要求

一个 EMMC必须满足读写访问性能的要求。

6.9.1 速度等级定义

速度等级定义了指示EMMC的最低性能。这些等级分别是单倍速率操作(普通模式)的150kB/s和双倍速率操作的300kB/s进行定义。EMMC的最低性能可以通过基本值的定义倍数标记,例如,2.4MB/s(SDR)或4.8MB/s(DDR)。只定义了以下速度等级。对于以HS200模式和HS400模式运行的EMMC并没有进行速度等级定义。

注意:EMMC始终包括8位数据总线,下面的类别说明了EMMC的操作配置。

低总线类别等级(26MHz时钟频率,4位数据总线操作):

1)2.4 MB/s (sdr) or 4.8 MB/s (ddr) Class A

2)3.0 MB/s (sdr) or 6.0 MB/s (ddr) Class B

3)4.5 MB/s (sdr) or 9.0 MB/s (ddr) Class C

4) 6.0 MB/s (sdr) or 12.0 MB/s (ddr) Class D

5)9.0 MB/s (sdr) or 18.0 MB/s (ddr) Class E

中等总线类别等级(26MHz时钟频率,8位数据总线或者52MHz时钟频率,4位数据总线操作):

6)12.0 MB/s (sdr) or 24.0 MB/s (ddr) Class F

7)15.0 MB/s (sdr) or 30.0 MB/s (ddr) Class G

8)18.0 MB/s (sdr) or 36.0 MB/s (ddr) Class H

9)21.0MB/s (sdr) or 42.0 MB/s (ddr) Class J

高总线类别等级(52MHz时钟,8位数据总线操作):

10) 24.0 MB/s (sdr) or 48.0 MB/s (ddr) Class K

11) 30.0 MB/s (sdr) or 60.0 MB/s (ddr) Class M

12) 36.0 MB/s (sdr) or 72.0 MB/s (ddr) Class O

13) 42.0 MB/s (sdr) or 84.0 MB/s (ddr) Class R

14) 48.0 MB/s (sdr) or 96.0 MB/s (ddr) Class T

写入和读取访问的性能值被存储在ext_csd寄存器中,读取方式见7.4章节。只允许使用定义的值和类别。

6.9.2 性能测试

在测试之前,内存的初始状态是:填充的是随机数据。测试通过向/从EMMC的随机逻辑地址(对齐到物理块边界)写入/读取64kB数据块来执行。

使用预定义的多块写入/读取,块计数为128(使用512B块的64 kB)(128*512B = 64 KB=64*1024B)。性能计算为多个64kB访问的平均值。使用以下所有适用的时钟频率和总线宽度选项进行相同的测试:

1) 52 MHz, 8bit bus in the dual data mode (if 52 MHz clock frequency and dual data mode is supported by the Device)

2)52 MHz, 8bit bus (if 52 MHz clock frequency is supported by the Device)

3) 52 MHz, 4bit bus (if 52 MHz clock frequency is supported by the Device)

4)26 MHz, 8bit bus

5)26 MHz, 4bit bus

如果EMMC的最低性能超过了上述任一选项的物理限制要求,则EMMC还必须相应地满足MIN_PERF_a_b_ff中定义的性能标准。

6.10 命令

6.10.1  命令类型

标准中定义了四种命令来控制EMMC:

1)广播命令(bc),无响应,

2)带响应的广播命令(bcr),

3)定址(点对点)命令(ac),在DAT信号线上没有数据传输,

4)定址(点对点)数据传输命令(adtc),在DAT线线上可以进行数据传输。

所有命令和响应都通过EMMC总线的CMD线发送。命令传输始终从对应于命令码字的位串的左侧位开始。

6.10.2 Command format 命令格式

所有命令的固定码长度为48位,52MHz时钟频率下传输需要0.92us的时间。

table47 命令格式

需注意: 在命令格式中的左侧为最高位,右侧为最低位

一个命令总是以起始位(始终为“0”)开始,接着表示传输方向的位(host=“1”)。接下来的6位表示命令的索引值,该值被解释为二进制编码的数字(介于0和63之间)。一些命令需要带有参数(例如地址),由32位编码构成。

在表47中用“x”表示的值表示此变量取决于命令。所有命令都受CRC的保护(有关CRC7定义的详细信息,请参见0)。每个命令码字都以结束位(始终为“1”)结束。所有命令及其参数均列在表48到表58中。

6.10.3 命令的种类

EMMC系统的命令集被分成多个类别。(见表48)每个类别都支持一部分EMMC的功能。

类别0是强制性的,所有EMMC都必须支持。其他类别仅对特定设备类型强制要求或是可选的(详见第11条,以获取EMMC类型作为功能所支持的命令类别的详细描述)。

通过使用不同的类别,可以选择多种配置(例如可写块设备)。

支持的EMMC命令类别(CCC)为每个EMMC的特定数据(CSD)寄存器中的参数进行编码,为host提供访问EMMC的信息。

表48 EMMC支持的命令种类

接表48 EMMC支持的命令种类

注1:mandatory :仅对支持HS200模式的EMMC强制要求。

注2:obsolete 表示已过时。

6.10.4 对命令进一步解释

表49到表59详细定义了所有EMMC总线命令。响应R1-R5在6.12章节中定义。

CID、CSD、EXT_CSD和DSR寄存器在第7条中描述。

表49 第0类和第1类的基本命令描述

表50 以块为单位的命令读取的第二类命令

表51 第3类命令

表52 块导向的写入命令(class 4)

表53 块导向的写保护命令(class 6)

表54 擦除命令(class 5)

表55 I/O模式命令 (calss 9)

表56 EMMC上锁命令(class 7)

表57 特殊应用命令 (class 8)

表58 安全协议(class 10)

表59 命令队列 class11

6.11 EMMC状态切换表

表60定义了根据接收到的命令而发生的设备状态转换关系。

表60 设备状态切换

表61 EMMC 状态切换

表62 EMMC 状态切换

6.12 响应

所有响应都通过命令线CMD发送。响应传输总是从响应码字对应的比特字符串的左侧比特开始。代码长度取决于响应类型。响应总是以起始位(始终为“0”)开始,后面跟着表示传输方向的比特(EMMC=“0”)。表63到表67中表示为“x”的值表示变量条目。除了R3响应类型之外,所有响应都受到CRC的保护(有关CRC7定义,请参见0)。每个命令码字都以结束位(始终为“1”)终止。

响应总共有五种类型。对应的格式定义分别如下:

R1(正常响应命令):代码长度为48位。位45:40表示要响应的命令的索引,该值被解释为二进制编码数字(介于0和63之间)。EMMC的状态以32位进行编码。EMMC状态在6.13章节中进行了定义。

表63 R1 响应

R1b 与R1的区别在于数据线DAT0上传输可选的忙信号。EMMC在接收这些命令之前其自身状态可能保持busy状态。详见6.15章节中的详细描述和时序图。

R2(包括CID、CSD寄存器参数)编码长度为136位。其中

CID寄存器的值作为对命令CMD2和CMD10的响应发送。

CSD寄存器的内容作为对CMD9的响应发送。

只传输CID和CSD的位[127:1],这些寄存器的保留位[0]被响应的结束位替换掉。

R3(包括OCR寄存器)编码长度为48位。OCR寄存器的内容是对CMD1的响应。级别编码如下:受限电压窗口=LOW,设备繁忙=LOW。

restricted voltage windows 应该指的是供电电压处于正常的电压范围时,用低电平信号表示正常,

R4(快速I/O)编码长度为48位。参数字段包含了被寻址设备的RCA、要读取或写入的寄存器地址及其内容。如果操作成功,则参数中的状态位会被设置。

R5(中断请求):编码长度为48位。如果该响应是通过host发出的,则参数中的RCA字段应为0x0。

6.13 设备EMMC自身状态

响应格式R1中包含了一个名为“设备状态”的32位字段。该字段旨在传输EMMC的状态信息。每个设备的状态位都与2个不同的属性相关联

1.位类型。定义了两种设备状态位类型:

1) 错误位。指示设备检测到了错误条件。这些位在响应(报告错误)发送出去后立即清除。清除条件 B。

2) 状态位。这些位仅作为信息字段,不会影响正在响应的命令的执行。这些位是持久的;它们根据设备状

态设置和清除。清除条件 A。

表格68中的“类型”字段定义了设备状态寄存器中每个位的类型。符号“E”用于表示错误位,而符号“S”用于表示状态位。

2. 错误位的检测模式。

EMMC 在命令解释和验证阶段(响应模式)或命令执行阶段(执行模式)期间检测到异常。响应模式异常在响应引发异常的命令时报告。执行模式异常在使用STOP_TRANSMISSION命令终止操作或在操作正在进行或完成后发出SEND_STATUS命令的响应中报告。表格68中的“Det Mode”字段定义了设备状态寄存器中每个位的检测模式。符号“R”用于表示响应模式检测,而符号“X”用于表示执行模式检测。

当在“R”模式下检测到错误位时,EMMC将在响应引发异常的命令中报告错误。该命令不会被执行,相关的状态转换也不会发生。当在“X”模式下检测到错误时,执行将被终止。下一个命令的响应中将报告错误。

ADDRESS_OUT_OF_RANGE和ADDRESS_MISALIGN异常可能在响应和执行模式下都检测到。每个模式的条件在表68中明确定义。

当启用命令队列特性(CMDQ_MODE_EN = xxxxxxx1b)并返回R1响应以响应带有SQS = 1的CMD13命令时,R1响应格式定义为QSR。

表格69定义了每个由R1响应响应的命令在状态字段中影响的位。 “R”或“X”表示错误/状态位可能会受到相应命令的影响(分别使用R或X检测机制)。状态位在任何R1响应中都是有效的,并标有“S”。

并非所有设备状态位在任何时候都具有意义。根据EMMC支持的类别,可以确定相关位。如果EMMC不支持影响状态位或错误位的所有类别,则该位不相关,host可以忽略它。

6.14 存储器阵列分区

向/从EMMC传输的基本数据单元是一个字节。所有需要块大小的数据传输操作始终将块长度定义为字节的整数倍。一些特殊功能需要其他分区细分。

对于面向块的命令,使用以下定义:

块:与面向块的读写命令相关的单位。它的大小一般指的是当host发送一个块命令时将传输的字节数。块的大小可以是可编程的或固定的。关于允许的块大小和可编程性的信息存储在CSD寄存器中。

定义了特殊的擦除和写保护命令:

. 可擦除单元的粒度是擦除组(Erase Group):可以被擦除的最小连续写入块数。擦除组的大小是设备特定的,并在禁用ERASE_GROUP_DEF时存储在CSD中,在启用ERASE_GROUP_DEF时存储在EXT_CSD中。

. 写保护单元的粒度是WP-组(WP-Group):可以单独进行写保护的最小单位。其大小以擦除组为单位定义。WP-组的大小是EMMC特定的,并在禁用ERASE_GROUP_DEF的信息保存在CSD寄存器中,在启用ERASE_GROUP_DEF时存储在ext_csd寄存器中。

6.15时序

所有的时序图均使用以下术语:

P位和Z位的区别是 P位由EMMC或host的输出驱动器驱动到高电平,而Z位由上拉电阻Rcmd或Rdat主动驱动为高电平(或保持高电平)。主动驱动的P位对噪声的敏感性较低。

表71 定义了所有的时序值

6.15.1  命令和响应

在单倍速率模式或双倍速率模式下,host命令和EMMC的响应都会在host端 的时钟上升沿传输。

. 设备标识和设备运行条件定时

EMMC识别命令(CMD2)和EMMC的操作条件命令(CMD1)的时序采用开漏模式。EMMC响应host命令的时刻恰好在经过Nid个时钟周期后正式开始。

图36 识别时序(设备识别模式)

. 分配设备相对地址

SET_RCA (CMD 3) 命令也采用开漏模式处理。host命令和EMMC响应之间的最小延迟为Ncr个时钟周期。

图37 设置设备相对地址的时序(设备识别模式)

. 数据传输模式

EMMC接收到其RCA后,会将自身切换到数据传输模式。此时,CMD信号线由推挽驱动器驱动。命令后跟随两个Z位的时间(允许总线方向切换),然后由EMMC响应并推送到P位。此时序图适用于除CMD1、2和3之外的所有响应host的命令:

图38 命令响应时序(数据传输模式)

. R1b 响应

一些如CMD6的命令,可能会断言busy信号并进行R1响应。如果断言了忙信号,则在命令的结束位之后需要两个时钟周期。此时DAT0信号线被拉低,DAT1-DAT7信号线由EMMC进行驱动,尽管它们的值不相关。

. 最后一个EMMC响应和下一个host命令的时序

在接收到最后一个EMMC响应后,host可以在至少经过Nrc个时钟周期后开始传输下一个命令。任何host命令时序都是如此的。

. 最后一个host命令和下一个host命令的时序

在最后一个命令被发送后,host可以在至少Ncc个时钟周期后继续发送下一条命令。

如果host发送了ALL_SEND_CID的命令之后,经过Nid + 1个时钟周期后没有得到EMMC的响应,host可以认为总线上没有EMMC存在。

6.15.2  数据读取

在单倍速率模式或双倍速率模式下均可以读取数据。

单数据速率模式下,EMMC通过时钟的上升沿将数据输出,并由host在时钟的上升沿进行采样,每个数据线上只有一个CRC校验。

双数据速率模式下,数据通过时钟的上升沿和下降沿进行输出,每个数据线上附加两个CRC校验。在这种模式下,块长度始终为512字节,字节以4位或8位宽度的交错配置进行。奇数字节(1、3、5、...、511)应由host在时钟上升沿进行采样,偶数字节(2、4、6、...、512)应由host在时钟下降沿进行采样。EMMC将为每个有效数据线附加两个CRC16,一个CRC16 对应于256个奇数字节的位,在host上升沿进行采样,另一个CRC16对应于块中剩余256个偶数字节的位,在host下降沿进行采样。

备注:只有数据块和两个CRC使用时钟的上升沿和下降沿。起始和结束位仅在时钟上升沿上有效。时钟下降沿上的值不能保证。

. 单块读取

host通过下发CMD7命令选择一个EMMC进行数据读取操作,并通过下发CMD16设置块定向数据传输的有效块长度(CMD16仅适用于单倍数据速率传输模式)。读取操作的基本总线时序如图42所示。序列以单块读取命令(CMD17)开始,该命令在参数字段中指定起始地址。响应通常通过CMD线发送到host。

EMMC从读取命令的结束位开始,经过访问时间延迟Nac后开始数据传输。传输的最后一个数据位后,会附加CRC校验位,以便host检查传输错误。

由于之前标准版本的歧义,起始位和结束位可能对上升沿和下降沿都有效,也可能仅对上升沿有效。为了确保向后兼容性,标准允许两种解释均存在,并不强制要求下降沿上的值。

. 多块读取

即在多块读取模式下,EMMC在接收到初始化时host读取命令后发送连续的数据块流。数据流通过停止传输命令(CMD12)终止。图43描述了数据块的时序,图44描述了停止命令的响应。数据传输在停止命令的结束位之后两个时钟周期停止。

6.15.3  数据写入

在单倍速率数据传输模式和双倍速率数据传输模式下,均可以执行数据传输

在单数据速率模式下,数据由host通过时钟的上升沿输出,并由EMMC在时钟的上升沿进行采样,每个数据线上只有一个CRC进行校验。

在双数据速率模式下,数据通过时钟的上升沿和下降沿进行输出,每个数据线上附加两个CRC。在这种模式下,块长度始终为512字节,字节以4位或8位宽度的交错配置进行。奇数字节(1、3、5、...、511)应由EMMC在时钟上升沿进行采样,偶数字节(2、4、6、...、512)应由EMMC在时钟下降沿进行采样。host将为每个有效数据线附加两个CRC16,一个对应于256个奇数字节的位,在EMMC上升沿进行采样,另一个对应于块中剩余256个偶数字节的位,在EMMC下降沿进行采样。

备注:与数据读取类似,只有数据块和两个CRC使用时钟的上升沿和下降沿。起始、结束和3位CRC令牌状态位仅在时钟上升沿有效。时钟下降沿上的值不能保证是否有效(注意:由于之前版本标准的歧义,起始位和结束位可能对上升沿和下降沿都有效,也可能仅对上升沿有效。为了确保向后兼容性,标准允许这两种解释,并不强制规定下降沿上的值。)

. 单个块写入

host通过CMD7选择EMMC进行数据写入操作。host通过CMD16设置块定向数据传输的有效块长度(CMD16仅适用于单数据速率模式)。

写操作的基本总线时序如图45所示。一个单块写入命令(host 下发CMD24)开始,该命令在参数字段中确定起始地址。EMMC像往常一样在CMD信号线上响应。host从EMMC响应接收后的NWR时钟周期开始数据传输。数据后缀带有CRC检查位,以允许EMMC检查传输错误。EMMC将CRC检查结果作为CRC状态令牌发送到DAT0信号线。

如果在任何活动数据线上发生传输错误,EMMC将在DAT0上发送负CRC状态(“101”)。在成功传输的情况下,EMMC将在所有活动数据线上发送正CRC状态(“010”)到DAT0,并开始数据编程过程。

图45 块写入命令的时序图

NCRC是HS200和HS400定义的一个时序参数。使用HS200和HS400模式的EMMC应支持NCRC参数。NCRC指定了从写操作中数据块的结束位到CRC状态的起始位的时间。

对于HS400模式,在CRC状态响应后,EMMC会在从CLK上升沿开始的tPH_DATASTROBE + tPERIOD + tRQ的时间后,在DAT0上输出busy信号,这是结束位的参考时间。在此时间之后,host可以安全地开始采样BUSY信号。

图47 在CRC状态响应之后的busy信号

EMMC在编程时通过拉低DAT0线来指示忙状态。这个忙状态直接与编程状态相关。EMMC一旦完成编程,就会释放DATA0信号线。

. 多个块写入

在多块写入模式下,EMMC期望在初始主机写入命令发送后有连续流动的数据块。数据流通过停止传输命令(host 下发CMD12)终止。图48描述了EMMC存在和不存在忙信号的数据块的时序。

图48 多个块写入时序

停止传输命令的工作方式与读模式类似。图49到图52描述了不同设备状态下停止命令的时序。

图49 在传输模式下,通过host 下发的停止传输命令时序

只有当数据块的CRC数据经过验证并且CRC状态令牌被发送回host时,EMMC才会将数据块视为已成功接收,并且接下来准备好进行编程。

0是一个由host发送停止命令中断的(尝试传输CRC状态块)例子。该序列与所有其他停止传输过程相同。在host命令的结束位后,数据线上跟随着一个数据位、一个结束位和两个Z时钟以切换总线方向(在HS200和HS400中,Z时钟的数量可能从2到4不等,如6.15.8.1章节所述)。在这种情况下,接收到的数据块被视为是不完整的,并且不会被纳入编程。

图50 在EMMC的CRC校验传输期间发送停止传输命令

注1:CRC状态校验响应将被host打断

在之前所有的示例中都处理了host在活动数据传输期间停止数据传输的情况。以下两个图分别描述了在数据块之间接收停止传输命令的情况。

在第一个示例中,EMMC正在编程最后一个块,而在第二个示例中,EMMC处于空闲状态。

然而,输入缓冲区中仍然有未编程的数据块。当EMMC收到停止传输命令并且自身激活忙信号,这些块就会被编程。

图51 52 分别表示不同状态下接收到host发出停止传输命令的情况

在开放式多块写入模式下,数据块之间的忙碌信号应被识别为缓冲区忙碌信号。只要没有可用的数据缓冲区,EMMC就会通过拉低DAT0线来指示这一点。当EMMC释放了DAT0线,只要至少有一个接收缓冲区可用于定义的数据传输块长度。在EMMC接收到停止命令(CMD12)后,以下忙碌指示应被视为编程忙碌标志,并直接与编程状态相关。一旦EMMC完成编程,它停止拉低DAT0线。这意味着在数据传输过程中,如果DAT0线被拉低,表示EMMC正忙,无法接收更多数据,直到缓冲区变得可用。一旦EMMC完成编程,它将停止拉低DAT0线。

在预定义的多块写入情况下,数据块之间的忙碌信号应被认为是类似于开放式多块情况下的缓冲区忙碌信号。在EMMC接收到最后一个数据块后,以下忙碌指示应被视为编程忙碌,并直接与编程状态相关。当状态从接收(rcv)变为编程(prg)时,忙碌信号的含义(从缓冲区忙碌到编程忙碌)发生变化。在整个过程中,EMMC不会在rcv到prg状态之间释放忙碌信号,该信号始终保持“低”状态。一旦EMMC完成编程,它将停止拉低DAT0线。

1)擦除、设置和清除写保护的时序

host必须首先使用擦除开始和结束命令(CMD35,CMD36)选择要擦除的擦除组。一旦发出擦除命令(host 下发CMD38),将擦除所有选定的擦除组。类似地,设置和清除写保护命令也会启动编程操作。EMMC将在擦除或编程操作期间发出“忙”信号(通过拉低DAT0线)。总线事务时序与图52中描述的停止传输的变化相同。

2)重新选择一个忙碌的EMMC

当一个当前处于断开状态且忙碌的EMMC被重新选择时,它将在数据线DAT0上重新启用其忙碌信号。此命令/响应/忙碌事务的时序图如图52所示。

6.15.4 总线测试程序时序

在单数据速率模式下,host可以到达 Tran-state 后启动总线测试程序。总线测试程序在双数据速率模式下无效。如果host发送的 CMD19 没有响应,则host应使用 CMD13 来读取EMMC中的状态。如果没有响应 CMD19的话,host会认为该EMMC不支持此功能。

图53 总线测试过程的时序图

6.15.5 引导操作

图54 在连续数据块之间的引导操作和终止操作

图55 传输过程中的引导操作和终止操作

注意:Ncd 处的时序可以参考图56

图56 总线模式的时序切换过程(推挽模式切换到开漏模式)

6.15.6 备用引导操作

图57 连续数据块状态下的备选引导操作和终止操作

图58 传输状态下的备选引导操作和终止操作过程

6.15.7 时序参数值

表71 时序参数值

6.15.8 高速200模式到高速400模式的时序切换

6.15.8.1  时序参数值

表72描述了与表71中关于时序参数的区别和附加参数项。Nst和Nsb之间的差异是由HS200中定义为tPH(0-2 UI)的CLK信号和DAT信号之间的相位变化产生的。CLK和Data Strobe之间的相位变化在HS400中定义为tPH_DATASTROBE(0-4 UI)。

表72 HS200 和HS400模式下的参数值

6.15.8.2 读取块的间隙时间

host可以通过停止CLK信号来暂停从EMMC读取数据进行传输,并通过恢复CLK信号来恢复数据传输。在HS200和HS400中,tPH参数变化要求将DAT [7:0]视为与CLK异步传输。因为数据线上需要同步,所以停止CLK后需要几个时钟周期完成数据线的同步,进而检测数据块的结束位。

host应在数据块之间而不是在数据块内停止CLK信号两个连续块之间的最小间隙(NAC)定义为8,所以这一段时间是给host让EMMC开始传输下一个数据块之前停止掉CLK信号。

图59描述了在读取块间隙处停止CLK的示例。在这种情况下,tPH超过1UI。时钟位置0是一个触发点,它作为输出数据块的结束位。EMMC从时钟位置0开始基于CLK周期计算Nac。上面CLK上标的数字是计数器的参数值。EMMC必须等待至少9个时钟后才能输出下一个数据块。接着host需要在第9个时钟周期之前停止CLK。Nac(min,最小值)= 8为host提供足够的时间来停止CLK。

实现指南:

如果主机在读取数据块传输期间停止时钟,时钟暂停期间发生了采样时序漂移的情况时,则host应该识别正确传输的数据位数。

6.15.8.3 写操作期间的CMD12 命令更改时序

在HS200和HS400模式下,从EMMC到host之间发生的输出延迟可能会超过1个时钟周期。host需要特别注意CMD和Data之间的关系。这主要指的是CMD12(STOP_TRANSMISSION)与数据CRC状态响应之间的关系。

为了确保多块写操作中的最后一个数据块被成功写入,host不应在EMMC发送数据的CRC状态响应时中断它。所以需要host在接收到EMMC的数据CRC响应的结束位之后输出CMD12命令作为数据传输的结束位。

如果EMMC在输出CRC状态响应的结束位之前检测到CMD12命令的结束位,则不能完全保证最后一个数据块被写入EMMC中。图60描述了保证写入块数据成功写入的边界时序。host需要在接收到CRC状态的结束位后输出CMD12的结束位。将CMD12的结束位调整为CRC状态却需要通过特定的硬件电路实现。或者host可以采用更简单的方法,比如在接收到最后一个数据块的CRC状态后开始发出CMD12。

图60 写操作中,使用CMD12 命令的边界时序

6.15.8.4 读操作的CMD12 命令时序操作

图61描述了读操作中CMD12的边界时序。最小的读取块间隙长度Nac为8个时钟。为了允许EMMC成功输出整个数据中的最后一个读取数据块,CMD12的结束位(图中的时钟#1)不早于最后一个数据块的结束位(时钟#3)之前2个时钟到达如果CMD12在此时序之前发出,则可能会将读取的最后一个数据块误识别(例如,未指示数据块的结束位)。

为避免在host读取的最后一个数据块之后传输以下数据块,或者在host读取的最后一个块位于分区边沿的最后一个逻辑块时出现了“超出范围”错误发生,CMD12的结束位需要在host读取的最后一个数据块结束后的NAC时钟结束前3个时钟周期内下发如果CMD12的结束位在该时钟周期之后到达,则EMMC可以开始传输下一个数据块。以上才能确保host有足够的时间接收CMD12的结束位,并正确地向EMMC发出数据传输完成的信号。

调整CMD12的结束位以读取数据块需要特定的硬件电路实现。host可以采用其他方法停止多块读取操作,例如在接收到最后一个数据块后发出CMD12命令。不过使用该方法时,下一个数据块可能会开始输出就被CMD12中止掉,导致最后读取的块表示超出范围错误。

图61 读操作下发CMD12的边界时序

6.15.8.5 R1b响应的时序

在执行R1b响应命令期间需要拉低DAT0线发出“忙”信号的时序见图39中描述的总线时序。在除HS200或HS400模式之外的所有传统模式下,R1b忙需要从命令的结束位后2个时钟周期开始。在HS200和HS400模式下,R1b忙指示从命令的结束位后2到4个时钟周期开始。

6.15.8.6  重新选择一个忙设备

当前处于断开状态的忙的EMMC被重新选择时,它将在DAT0上恢复其忙信号。重新选择EMMC的总线时序与图51所示的相同。

在 非 HS200或HS400模式下,所选EMMC在CMD7的结束位后2个时钟周期开始声明忙信号。在HS200和HS400模式下,所选EMMC在CMD7的结束位后的2到4个时钟周期开始声明忙信号。

6.15.9  HS400 模式下的增强选通时序

EMMC如果支持增强型选通模式的话,可以在ext_csd寄存器的第184字节STROBE_SUPPORT进行设置,如下对增强型闪光模式进行了说明。

在HS400模式下,EMMC向host提供STROBE信号。STROBE信号打开的时间比较短暂。在HS400模式下,ext_csd寄存器的第183字节中对增强选通信号的时间进行了定义。

如图62,当增强型选通位设置为“0”时,会在在数据输出和CRC响应时间段打开STROBE功能,紧接着数据输出以及CRC校验与STROBE时钟信号会同步。

当增强型闪光位设置为“1”时,在数据输出、CRC响应和CMD响应期间打开STROBE功能。

图62 读操作期间,增强选通信号对CMD 响应和数据输出过程生效

图63 写操作期间,增强选通信号对CMD 响应和CRC校验过程生效

图64 - 带增强型闪光的HS400模式变化

在增强型选通模式下,数据输出、CRC响应和CMD响应都与STROBE时钟同步。CMD响应输出信号与STROBE时钟之间的时序关系与数据输出到STROBE时钟的定义过程相同。请见HS400时序图(图62)。有关详细的tRPRE和tRPST时序,请参考10.10.3中的表218。

6.15.10 硬件复位操作

图65 硬件复位波形图

图73 硬件复位时序参数

6.15.11  用于硬件复位操作的滤波电路时序图

图66 硬件复位时滤波时序图

由于受到噪声的影响,EMMC不能认为检测到5ns或更短的正脉冲或负脉冲作为复位信号。规定EMMC必须检测到1us或大于1us的正脉冲或负脉冲作为复位信号的波形。

6.15.12 HS400模式下的其他操作的时序变化

6.15.12.1  写操作时序

在HS400模式下,默认的起始位位置在上升沿时有效。

由于host能在数据块之间或数据块内停止CLK时钟信号,所以数据选通信号仅用于读取操作生效。

除了在CRC状态响应期间外 ,写操作中默认拉低数据选通信号或者始终为高阻态(由EMMC本身未驱动并由RDS拉低)。

图67 数据块容量为512byte下的HS400 写操作时序

6.15.12.2 读操作时序

数据选通信号仅在数据有效期(包括起始位、数据、CRC16、结束位、CRC状态标记)内切换。在HS400模式下,起始位位置在上升沿和下降沿都有效。而且,host可以在数据块之间停止CLK,不能在传输的数据块内停止时钟信号。

当时钟信号到来时,host需要在时钟信号的上升沿以后,拉低数据选通信号直到经过时钟下降沿的持续时间为tRPRE,接着拉高数据选通信号进行读数据操作,并在读取数据结束后拉低数据选通信号直到经过时钟下降沿的持续时间为tRPST。

图68 数据块容量为512byte下的HS400 读操作时序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SUNtao99

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值