eMMC总线协议

1.eMMC总线接口

eMMC总线接口定义如下图所示:

各个信号的描述如下:

CLK:

CLK信号用于从Host端输出时钟信号,进行数据传输的同步和设备运作的驱动。在一个时钟周期内,CMD和DAT0-7信号上都可以支持传输1个比特,即SDR(Single Data Rate)模式。此外,DAT0-7信号还支持配置为DDR(Double Data Rate)模式,在一个时钟周期内,可以传输2个比特。

Host可以在通讯过程中动态调整时钟信号的频率(注,频率范围需要满足Spec的定义)。通过调整时钟频率,可以实现省电或者数据流控(避免Over-run或者Under-run)功能。在一些场景中,Host端还可以关闭时钟,例如eMMC处于Busy状态时,或者接收完数据,进入Programming State时。

CMD:

CMD信号主要用于Host向eMMC发送Command和eMMC向Host发送对于的Response。Command和Response的细节会在后续章节中介绍。

DAT0-7:

DAT0-7信号主要用于Host和eMMC之间的数据传输。在eMMC上电或者软复位后,只有DAT0可以进行数据传输,完成初始化后,可配置DAT0-3或者DAT0-7进行数据传输,即数据总线可以配置为4bits或者8bits模式。

Data Strobe:

Data Strobe时钟信号由eMMC发送给Host,频率与CLK信号相同,用于Host端进行数据接收的同步。Data Strobe信号只能在HS400模式下配置启用,启用后可以提高数据传输的稳定性,省去总线tuning过程。

NOTE:Extended CSD byte[183] BUS_WIDTH寄存器用于配置总线宽度和Data Strobe。

2.eMMC总线模型

eMMC总线中,可以有一个Host,多个eMMC Devices。总线上的所有通讯都由Host端以一个Command开发发起,Host一次只能与一个eMMC Device通讯。

系统在上电启动后,Host会为所有eMMC Device逐个分配地址(RCA,Relative device Address)。当Host需要和某一个eMMC Device通讯时,会先根据RCA选中该eMMC Device,只有被选中的eMMC Device才会响应Host的Command。

NOTE:更详细的工作原理请参考eMMC工作模式章节。

2.1.速率模式

随着eMMC协议的版本迭代,eMMC总线的速率越来越高。为了兼容旧版本的eMMC Device,所有Devices在上电启动或者Reset后,都会先进入兼容速率模式(Backward Compatible Mode)。在完成eMMC Devices的初始化后,Host可以通过特定的流程,让Device进入其他高速率模式,目前支持以下的几种速率模式。

NOTE:
Extended CSD byte[185] HS_TIMING寄存器可以配置总线速率模式;
Extended CSD byte[183] BUS_WIDTH寄存器用于配置总线宽度和Data Strobe。

2.2.通信模型

Host与eMMC Device之间的通信都是由Host以一个Command开始发起的,eMMC Device在完成Command所指定的任务后,则返回一个Response。

2.2.1.Read Data

Host从eMMC Device读取数据的流程如上图所示。

如果Host发送的是Single Block Read的Command,那么eMMC Device只会发送一个Block的数据(一个Block的数据的字节数由Host设定或者为eMMC Device的默认值,更多细节请参考eMMC工作模式章节)。

如果Host发送的是Multiple Block Read的Command,那么eMMC Device会持续发送数据,直到Host主动发送Stop Command。

NOTE:从eMMC Device读数据都是按Block读取的。

2.2.2.Write Data

Host向eMMC Device写入数据的流程如上图所示。

如果Host发送的是Single Block Write Command,那么eMMC Device只会将后续第一个Block的数据写入的存储器中。

如果Host发送的是Multiple Block Write Command,那么eMMC Device会持续地将接收到的数据写入到存储器中,直到Host主动发送Stop Command。

eMMC Device在接收到一个Block的数据后,会进行CRC校验,然后将校验结果通过CRC Token发送给Host。

发送完CRC Token后,如果CRC校验成功,eMMC Device会将数据写入到内部存储器时,此时DAT0信号会拉低,作为Busy信号。Host会持续检测DAT0信号,直到为高电平时,才会接着发送下一个Block的数据。如果CRC校验失败,那么eMMC Device不会进行数据写入,此次传输后续的数据都会被忽略。

NOTE:向eMMC Device写数据都是按Block写入的。

2.2.3.No Data

在Host与eMMC Device的通信中,有部分交互是不需要进行数据传输的,还有部分交互甚至不需要eMMC Device的回复Response。

2.2.4.Command

如上图所示,eMMC Command由48Bits组成,各个Bits的解析如下所示:

Start Bit固定为"0",在没有数据传输的情况下,CMD信号保持高电平,当Host将Start Bit发送到总线上时,eMMC Device可以很方便检测到该信号,并开始接收Command。

Transmission Bit固定为"1",指示了该数据包的传输方向为Host发送到eMMC Device。

Command Index和Argument为Command 的具体内容,不同的Command有不同的Index,不同的Command也有各自的Argument。更多的细节,请参考eMMC Commands章节。

CRC7是包含Start Bit、Transmission Bit、Command Index和Argument内容的CRC校验值。

End Bit为结束标志位,固定为"1"。

NOTE:CRC校验简单来说,是发送方将需要传输的数据"除于"(模2除)一个约定的数,并将得到的余数附在数据上一并发送出去。接收方收到数据后,再做同样的“除法”,然后校验得到余数是否与接收的余数相同。如果不相同,那么意味着数据在传输过程中发生了改变。更多的细节不在本文展开描述,感兴趣的读者可以参考CRC wiki中的介绍。

2.2.5.Response

eMMC Response有两种长度的数据包,分别为48Bits和136Bits。

Start Bit与Command一样,固定为"0",在没有数据传输的情况下,CMD信号保持高电平,当eMMC Device将Start Bit发送到总线上时,Host可以很方便检测到该信号,并开始接收Response。

Transmission Bit固定为"0",指示了该数据包的传输方向为eMMC Device发送到Host。

Content为Response的具体内容,不同的Command会有不同的Content。更多的细节,请参考eMMC Responses章节。

CRC7是包含Start Bit、Transmission Bit和Content内容的CRC校验值。

End Bit为结束标志位,固定为"1"。

2.2.6.Data Block

Data Block由Start Bit、Data、CRC16和End Bit组成。以下是不同总线宽度和Data Rate下,Data Block详细格式。

1 Bit Bus SDR

CRC为Data的16bit CRC校验值,不包含Start Bit。

4 Bits Bus SDR

各个Data Line上的CRC为对应Data Line的Data的16bit CRC校验值。

8 Bits Bus SDR

各个Data Line上的CRC为对应Data Line的Data的16bit CRC校验值。

4 Bits Bus DDR

8 Bits Bus DDR

在DDR模式下,Data Line在时钟的上升沿和下降沿都会传输数据,其中上升沿传输数据的奇数字节(Byte 1,3,5 ...),下降沿则传输数据的偶数字节(Byte 2,4,6 ...)。

此外,在DDR模式下,1个Data Line上有两个相互交织的CRC16,上升沿的CRC比特组成odd CRC16,下降沿的CRC比特组成even CRC16。odd CRC16用于校验该Data Line上所有上升沿比特组成的数据,even CRC16则用于校验该Data Line上所有下降沿比特组成的数据。

NOTE:DDR模式下使用两个CRC16作为校验,可能是为了更可靠的校验,选用CRC16而非CRC32则可能是出于兼容性设计的考虑。

2.2.7.CRC Status Token

在写数据传输中,eMMC Device接收到Host发送的一个Data Block后,会进行CRC校验,如果校验成功,eMMC会在对应的Data Line上向Host发回一个Positive CRC status token(010),如果校验失败,则会在对应的Data Line上发送一个Negative CRC status token(101)。

NOTE:读数据时,Host接收到eMMC Device发送的Data Block后,也会进行CRC校验,但是不管校验成功或者失败,都不会向eMMC Device发送CRC Status Token。

详细格式如下图所示:

Positive CRC status token:

Negative CRC status token:

3.eMMC总线测试过程

当eMMC Device处于SDR模式时,Host可以发送CMD19命令,触发总线测试过程(Bus testing procedure),测试总线硬件上的连通性。如果eMMC Device支持总线测试,那么eMMC Device在接收到CMD19后,会发回对应的Response,接着eMMC Device会发送一组固定的测试数据给Host。Host接收到数据后,检查数据正确与否,即可得知总线是否正确连通。

NOTE:如果eMMC Device不支持总线测试,那么接收到CMD19时,不会发回Response。总线测试不支持在DDR模式下进行。

测试数据如下所示:

NOTE:总线宽度为1时,只发送DAT0上的数据,总线宽度为4时,则只发送DAT0-3上的数据。

4.eMMC总线Sampling Tuning

由于芯片制造工艺、PCB走线、电压、温度等因素的影响,数据信号从eMMC Device到达Host端的时间是存在差异的,Host接收数据时采样的时间点也需要相应的进行调整。而Host端最佳采样时间点,则是通过Sampling Tuning流程得到。

NOTE:不同eMMC Device最佳的采样点可能不同,同一eMMC Device在不同的环境下运作时的最佳采样点也可能不同。在eMMC标准中,定义了在HS200模式下可以进行Sampling Tuning。

4.1.Sampling Tuning流程

Sampling Tuning是用于计算Host最佳采样时间点的流程,大致的流程如下:

  1. Host将采样时间点重置为默认值;
  2. Host向eMMC Device发送Send Tuning Block命令;
  3. eMMC Device向Host发送固定的Tuning Block数据;
  4. Host接收到Tuning Block并进行校验;
  5. Host修改采样时点,重新从第2步开始执行,直到Host获取到一个有效采样时间点区间;
  6. Host取有效采样时间点区间的中间值作为采样时间点,并推出Tuning流程。

NOTE:上述流程仅仅是一个示例。Tuning流程执行的时机、频率和具体的步骤是由Host端的eMMC Controller具体实现而定的。

4.2.Tuning Block数据

Tuning Block是专门为了Tuning而设计的一组特殊数据。相对于普通的数据,这组特殊数据在传输过程中,会更高概率的出现high SSO noise、deterministic jitter、ISI、timing errors等问题。这组数据的具体内容如下所示:

NOTE:总线宽度为1时,只发送DAT0上的数据,总线宽度为4时,则只发送DAT0-3上的数据。

5.参考资料

1.Embedded Multi-Media Card (e•MMC) Electrical Standard (5.1) [PDF]
2.SD/MMC Controller, Hard Processor System (HPS) Technical Reference Manual (TRM) [PDF]
3.CRC wiki [WEB]

本文转自:蜗窝科技

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值