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]

本文转自:蜗窝科技

<think>嗯,用户想了解eMMC总线,首先得明确eMMC是什么。eMMC全称是嵌入式多媒体卡,主要用于移动设备的存储。总线部分可能涉及接口类型、通信协议这些。 我记得eMMC内部结构包括控制器、闪存和标准接口。总线应该负责控制器和闪存之间的数据传输,还有主机和eMMC之间的通信。需要确认eMMC使用的总线标准,比如是不是基于MMC架构的,可能涉及时钟、数据线数量等。 接下来,总线的物理层特性,比如引脚定义,可能包括CLK、CMD、DATA线。eMMC版本不同,总线速度也不同,比如4.5版本可能支持HS400模式,数据速率更高。需要查证不同版本的总线速度差异。 然后是协议层,总线通信的指令和响应机制。eMMC使用命令帧结构,主机发送命令,设备响应。可能涉及CMD线和DAT线的分工,数据传输时的块大小、错误校验等。 还要考虑总线对性能的影响,比如并行数据线的数量,8位总线比4位或1位更快。总线模式如SDR、DDR、HS200、HS400的区别,各自的数据传输速率。 另外,总线的电源管理,是否有低功耗模式,如何通过总线控制设备的电源状态。错误处理和重传机制也是总线协议的一部分,确保数据可靠性。 可能用户还关心应用场景,比如手机、平板为什么选用eMMC,与其他接口如UFS的比较。需要简要说明eMMC总线的优缺点,比如成本低但速度不如UFS。 需要确保回答结构清晰,分物理层、协议层、性能等部分,举例说明总线参数,同时对比不同版本的变化。避免技术错误,比如确认eMMC确实使用并行数据线,不同版本的最高速度数值准确。</think>好的,我将逐步介绍eMMC总线的关键信息: ### 一、eMMC总线的基本定义 eMMC(embedded MultiMediaCard)总线是连接主机处理器与eMMC存储芯片的通信通道,遵循JEDEC制定的MMC协议标准。它整合了以下三部分: 1. **NAND Flash存储器**:存储数据的核心介质 2. **Flash控制器**:负责执行协议和存储管理 3. **标准接口**:通过11个信号引脚实现通信 总线拓扑示意图: $$ \begin{array}{ccc} \text{主机(CPU)} & \leftrightarrow & \text{eMMC控制器} \\ & \text{通过总线} & \downarrow \\ & & \text{NAND Flash阵列} \end{array} $$ ### 二、总线物理层特性 1. **信号线组成**(共11线): - CLK(时钟线):频率范围0-200MHz(版本5.1) - CMD(命令线):双向传输控制指令 - DAT0-DAT7(数据线):双向数据传输 - VCC/VSS(电源/地) 2. **传输模式演进**: - 默认模式:20MHz,单数据速率(SDR) - HS200模式:200MHz,双数据速率(DDR) - HS400模式:200MHz,差分时钟,8位数据总线 ### 三、协议层关键机制 1. **命令帧结构**: - 48位固定长度 - 包含起始位、传输方向、命令索引、参数、CRC校验 - 示例命令格式: $$ \text{CMD}[47:0] = \underbrace{0}_{\text{起始位}} \parallel \underbrace{1}_{\text{传输方向}} \parallel \underbrace{6\text{bit索引}}_{\text{命令类型}} \parallel \underbrace{32\text{bit参数}}_{\text{地址/数据}} \parallel \underbrace{7\text{bit CRC}}_{\text{校验}} \parallel \underbrace{1}_{\text{结束位}} $$ 2. **数据传输类型**: - 单块传输:默认512字节/块 - 多块传输:连续读写多个数据块 - 交错传输:混合命令与数据 ### 四、性能参数对比 | 版本 | 总线模式 | 最大速率 | 数据线宽度 | |---------|------------|----------|------------| | 4.41 | HS200 | 200MB/s | 8-bit | | 5.1 | HS400 | 400MB/s | 8-bit | | 5.1A | HS400ES | 600MB/s | 8-bit | ### 五、实际应用特点 **优势**: - 集成化设计减少PCB面积(相比分立式设计节省30%空间) - 自动坏块管理和磨损均衡 - 兼容性强(向下兼容旧版本协议) **局限性**: - 半双工通信限制并发操作 - 延迟较高(典型读写延迟约50μs) - 逐渐被UFS接口取代(UFS支持全双工) ### 六、调试要点 1. 信号完整性: - 时钟抖动需<0.15UI(单位间隔) - 数据线建立/保持时间需满足时序裕量 2. 电源管理: - 支持1.8V/3.3V双电压操作 - 睡眠模式功耗<100μA 需要更深入了解某个具体方向(如时序分析、错误处理机制等),可以继续提问。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值