eMMC响应的格式和类型

描述

eMMC响应

eMMC响应有两种长度的数据包,分别为48 Bits和136 Bits,eMMC响应的格式如下图所示:

Linux

Snipaste_2023-10-12_21-32-24

eMMC的响应由48 bits或者136 bits组成,所有的eMMC响应都以00开始,以1结尾。所有的eMMC响应都是在CMD线上进行传输的,eMMC设备发送响应时先发送响应的起始位(Start bit),最后发送响应的结束位(End bit)。

Start Bit:起始位,固定为0,在没有响应传输的情况下,CMD线上的信号保持高电平,当eMMC设备将Start Bit发送到总线上时,Host可以很方便检测到响应的Start Bit(CMD线上的信号由高电平变为低电平),并开始接收响应。

Transmission Bit:传输位,固定为0,该位指示CMD线上数据的传输方向,该位为0,表示CMD线上数据的传输方向为从eMMC设备到Host。

Content:响应的具体内容,不同的响应Content不同。

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

End Bit:结束位,固定为1。

eMMC有5种类型的响应,包括:R1,R2,R3,R4和R5。

R1

R1响应的数据长度为48 bits,其中[45:40]数据位域表示的是该响应对应命令的编号。[39:8]是一个32位大小的位域,主要用于反应设备的状态信息,具体的设备状态信息内容可以参考eMMC 5.1 spec的6.13 Device status章节。

Linux

Snipaste_2023-10-12_21-49-14

R1b和R1完全相同,只是R1b会在数据线DAT0上传输一个可选的busy信号。基于eMMC设备在接收命令之前的状态,eMMC设备在接收到一些命令之后可能会变得繁忙。

R2

R2响应的数据长度为136 bits。[127:1]是一个127位大小的位域,该位域将CID寄存器的值作为CMD2和CMD10的响应内容。[127:1]位域也可以将CSD寄存器的值作为CMD9的响应内容。CID和CSD寄存器的[127:1]位作为R2响应内容被传输,CID和CSD寄存器的保留位[0]由于该位的值总是1,因此保留位[0]被R2响应的End bit替换。

Linux

Snipaste_2023-10-13_19-50-41

R3

R3响应的数据长度为48 bits。[39:8]是一个32位大小的位域,该位域将OCR寄存器的值作为CMD1的响应内容。

Linux

Snipaste_2023-10-13_20-14-36

R4

R4响应的数据长度为48 bits。[39:8]是参数域,该位域包含寻址设备的RCA,要进行读写操作的寄存器地址以及寄存器内容。如果操作成功,参数域中的状态位将被置1。R4响应只作为对CMD39的响应。

Linux

Snipaste_2023-10-13_20-23-39

R5

R5响应的数据长度为48 bits。如果该响应由Host产生,那么RCA[31:16]位域的值应该为0。R5响应只作为对CMD40的响应。

Linux

Snipaste_2023-10-13_20-26-42

eMMC数据块

eMMC数据块由Start bit、Data、CRC和End bit组成。下面对不同总线宽度和数据速率(Date Rate)下,各个数据块的格式进行一个简单的说明。

1位总线宽度 SDR模式

Linux

Snipaste_2023-10-13_21-07-10

CRC为Data的16 bitCRC校验值,不包含起始位。

4位总线宽度 SDR模式

Linux

Snipaste_2023-10-13_21-17-13

各个数据线上的CRC为对应数据线的Data的16 bit CRC校验值。

8位总线宽度 SDR模式

Linux

Snipaste_2023-10-13_21-21-31

各个数据线上的CRC为对应数据线的Data的16 bit CRC校验值。

4位总线宽度 DDR模式

Linux

Snipaste_2023-10-13_21-23-47

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

在DDR模式下,每个数据线上有两个相互交织的CRC16,时钟上升沿的CRC比特组成odd CRC16,时钟下降沿的CRC比特组成even CRC16。odd CRC16用于校验该数据线上所有上升沿比特组成的数据,even CRC16用于校验该数据线上所有下降沿比特组成的数据。

8位总线宽度 DDR模式

Linux

Snipaste_2023-10-13_21-25-27

eMMC CRC status token

在Host向eMMC设备写数据过程中,eMMC设备接收到Host发送的一个数据块之后,会进行CRC校验,如果校验成功,eMMC设备会在对应的数据线上向Host回复一个Positive CRC status token("010"),如果校验失败,eMMC设备会在对应的数据线上向Host回复一个Negative CRC status token("101")。

在Host从eMMC设备读取数据的过程中,Host接收到eMMC设备发送的一个数据块之后,也会进行CRC校验,但是不论校验成功还是校验失败,Host都不会向eMMC设备回复CRC status token。

Positive CRC status token

Linux

Snipaste_2023-10-13_21-56-11

Negative CRC status token

Linux

Snipaste_2023-10-13_21-57-10

eMMC寄存器

eMMC 5.1协议定义了7个寄存器:OCR,CID,CSD,EXT_CSD,RCA,DSR和QSR,下面简单的列举常用的6个寄存器。

名称 宽度(字节) 说明 实现
OCR 4 操作条件寄存器(Operation conditions register)。通过广播命令获取寄存器信息,包含设备的供电类型和寻址模式。 必须
CID 16 卡识别寄存器(Card IDentification)。包含识别设备的唯一码。 必须
CSD 16 卡特定数据寄存器(Card Specific Data)。包含卡操作状态的具体信息。 必须
Extended CSD 512 扩展卡特定数据寄存器(Extended  Card Specific Data)。包含设备的容量和当前模式信息。 必须
RCA 2 相对地址寄存器(Relative card address)。在初始化过程中,由主机控制器动态分配的地址。 必须
DSR 2 驱动等级寄存器(Driver Stage Register)。配置设备的输出驱动。 可选

eMMC总线测试过程

在SDR模式下,Host通过发送CMD19和CMD14可以进行eMMC总线测试过程(Bus testing procedure),测试eMMC接口的硬件引脚连接性。在DDR模式下,不支持总线测试,CMD19和CMD14被认为是非法命令。

在SDR模式下进行eMMC总线测试时,首先Host发送CMD19给eMMC设备,接着Host在每根数据线上发送特定格式的数据给eMMC。然后,Host发送CMD14给eMMC设备,请求eMMC设备回复翻转的数据。Host可以通过对接收到的翻转数据进行比较,就能知道eMMC接口的引脚引脚连接情况。

1bit总线宽度时,eMMC总线测试的数据格式如下图所示:

Linux

Snipaste_2023-10-13_22-22-42

4bit总线宽度时,eMMC总线测试的数据格式如下图所示:

Linux

Snipaste_2023-10-13_22-23-58

8bit总线宽度时,eMMC总线测试的数据格式如下图所示:

Linux

  审核编辑:汤梓红
 
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分