emmc启动过程--基于spec

本文以JEDEC eMMC 5.0为标准。

在上电或者reset操作之后(通过CMD0发送0xF0F0F0F0或者硬件重启),在发送第一个命令之前,若是CMD信号保持74个或以上的clock cycles的LOW状态,slave开始执行boot模式初始化,且在内部开始准备boot数据。

Master选择从哪个partition读取boot数据是可以被提前设置的(EXT_CSD byte[179], bits[5:3]). Master可以读取的boot数据大小也是可以计算的(128KB x BYTE_SIZE_MULT (EXT_CSD byte[226])). 在CMD信号变LOW的1秒内,slave开始在DAT信号上发送第一个boot数据。 Master必须保持CMD信号为LOW来读取所有的boot数据。在boot操作结束前,master必须使用push-pull模式。(74个时钟周期应该就是用来保证读取所有的boot数据而使用的)

Master可以选择使用SDR(Single Data Rate)模式来兼容之前的eMMC时序。高速SDR或者DDR(Dual Data Rate)可以通过设置EXT_CSD byte[177]bits[4:3]来决定。而EXT_CSD byte[228],bit 2则告诉master设备是否支持高速模式。

Master也可以选择如下表的DDR模式--在boot过程中设置EXT_CSD byte[177],bits[4:3]为"10"。 EXT_CSD byte[228],bit 1则告诉master设备是否支持在boot中使用DDR模式。
emmc启动过程--基于spec_第1张图片

在boot操作中 HS200&HS400模式是不支持的。

Master可以通过设置EXT_CSD byte[179],bit 6来选择是否从slave接受acknowledge,若是选择接受则master可以通过acknowledge确认slave是在boot模式中运行。

若是boot acknowledge被激活,在CMD信号变LOW之后的50ms之内,slave必须发送acknowledge内容"010"到master。若是boot acknowledge没被激活,slave不会发送内容"010"。

在SDR模式中,数据由设备发出的时钟控制而host则在时钟上升沿取样。而且每一个data line都有一个单独的CRC内容。

在DDR模式中,数据则会在时钟的上升和下降沿同时取样,而且每一个data line有两个CRC内容。在这个模式下,block长度总是为512 bytes,而且数据会以4bit或者8bit模式交叉出现。奇数bytes(1,3,5……511)会被host在时钟上升沿取样,而偶数bytes(2,4,6……512)则被host在时钟的下降沿取样。设备会附加两个CRC16到每个有效地data line上(若是4bit数据模式,则有4个line是无效的),一个对应上升沿的奇数bytes,一个对应下降沿的偶数bytes。

所有DAT lines的时序都应该按照DDR时序来。开始bit,结束bit 还有boot acknowledge只在时钟的上升沿有效。下降沿的内容是没用的。

Master可以把CMD信号变HIGH来终止boot 模式。在数据传输阶段若是master把CMD拉高,slave必须在Nst个时钟周期内中终止数据或者acknowledge内容的传输。Nst值为一个数据周期和一个结束bit周期。若是在block传输过程中,master终止了boot模式,则slave必须在Nst个时钟周期内释放data lines。

当所有的boot数据传输到master之后,boot操作则会终止。在boot操作结束之后,slave应该准备好了来接受CMD1命令,而此时master也应该开始发送CMD1来开始一个正常的MMC初始化过程。

emmc启动过程--基于spec_第2张图片
从图上可以看出在boot操作结束之后最少需要 8 clocks+48 clocks = 56 clocks来保持CMD为HIGH来接受下一个eMMC命令。在上电之后,发送CMD1命令之前,若是CMD lines没有保持74个时钟周期的LOW,又若是master在初始话过程之前发送任意的正常eMMC命令的话,slave应该没有任何的反应且被排除到boot模式到Idle State状态。

当BOOT_PARTITION_ENABLE bits为1且master发送CMD1命令(SEND_OP_COND), slave必须进入设备识别模式(Identification Mode)且对CMD1做出回应。若是slave不支持boot操作模式(4.2之前的版本),又或者 BOOT_PARTITION_ENABLE bits为0,slave则自动再上电后进入Idle State。

以上为通用的boot方式,若是4.4版本的eMMC则有一个另外的启动方式。
emmc启动过程--基于spec_第3张图片
可以看出和通用启动的不同在于一开始发送的内容为0xFFFFFFFA 的CMD0命令,而不是拉低CMD lines为LOW,而和通用启动方式相同的是同样可以选择哪个partition启动,是否使用acknowledge,还有数据的传输和取样方式等等。若是master发送的是CMD0(Reset)则boot模式可以被终止。

下图则为boot模式的概念图:
emmc启动过程--基于spec_第4张图片

原文地址:http://blog.sina.com.cn/s/blog_6cb8cdbd0102vno5.html

你可能感兴趣的:(emmc驱动)