006 eMMC Operation Mode

3.4 eMMC Operation Mode

 

① BOOT mode

有三种情况会进入Boot Mode:Power On,HW Reset,SW Reset(CMD0+0XF0F0F0F0),此模式下,eMMC 会将BOOT Data发送给 Host。系统启动代码,Bootloader。

② Device Identification mode

如果Boot Mode完成或不支持Boot Mode,则会进入此模式。eMMC Device 将进行初始化,Host 会为 eMMC Device 设定工作电压、协商寻址模式以及分配 RCA 设备地址。接收到CMD3(SET_RCA)会退出此模式,进入Transfer Mode模式的 Standby State。

③ Data transfer mode

Host在Identification Mode后进入此模式,Host 可以发起数据读写流程。

④ Interrupt mode

进入 Transfer Mode 后,Host可以发起命令,让Device 进入 Interrupt Mode。在此模式下,Device 会等待内部的中断事件。eMMC Device 在收到内部中断事件时,会向 Host 发送 Response,然后切换到 Data Transfer Mode,等待 Host 后续的数据读写命令。

Host 、Device 会同时进入或退出中断模式。中断模式没有数据传输,唯一允许的消息是设备发送给host已经进入中断模式。

⑤ Inactive mode

三种途径进入此模式:电压非法,访问模式非法,通过CMD15(GO_INACTIVE_MODE)

 

 

 

 

 

 

 

 

 

 

 

3.4.1 BOOT Mode

3.4.1.1 Pre-Idle State

三种方式可以进入Pre-idle状态:

(1)Power on 后

(2)WR Reset ---> GO_PRE_IDLE_STATE命令(CMD0 + 0xF0F0F0F0)

(3)HW Reset

 

 

● GO_PRE_IDLE_STATE或HW Reset Assert后,Device端Output Bus 将呈现高组态; Device的初始地址使用0x0001和默认寄存器设置进行初始化。

 

 

 

● Device可以检测到RST_n产生一段脉冲信号,通过上升沿来确定Device是否发生了Reset操作。Device 在Power On后,可能无法检测到RST_n ,因为Device没有完成加载RST_n_ENABLE 注册的控制器中。必须在1S内完成初始化,初始化最长延时为1ms, 即RST后的74个时钟周期或电源上升时间。

 

● 从机识别启动模式正在启动,并开始在内部准备启动数据。在引导操作完成之前,主机必须使用推拉模式结束。启动操作期间不支持HS200和HS400模式。

 

● 启动操作将在所有内容发送到主机时终止。之后启动操作已执行,从机应准备好执行CMD1操作,主机需要启动通过发送CMD1执行正常的eMMC初始化序列。

 

 

 

▲如果确认启动,CMD变低后50ms,则从Device 必须向Host发送确认模式“010”

命令。如果启动确认被禁用,Device将不会发送确认模式“0-1-0”。

▲应在1秒内完成内部初始化序列,CMD信号保持低电平不少于74个时钟周期,会进入Boot State。

 

 

▲ 在74个时钟周期后,在CMD信号首次拉低或者Host发送CMD1之前,Host发送参数为0xFFFFFFFFA的CMD0时,会触发Alternative Boot Operation,进入Boot State。Alternative Boot Operation是另外的触发条件,在Boot State下,如果有配置BOOT_ACK,eMMC会先发送010的ACK包,接着eMMC会将最大的128KB * BOOT_SIZE_MULT 的 Boot Data发送给Host。

 

▲ 在传输过程中,Host可以通过拉高CMD信号(Original Boot中),或者发送Reset命令(Alternative Boot)来中断eMMC的数据发送,完成Boot Data传输。

 

Boot Data根据Extended CSD Register的PARTITION_CONFIG Field的 Bit[5:3],

BOOT_PARTITION_ENABLE的设定,可以通过Boot Area Partition 1&2,User Data Area读出。通常Boot Data 会存储在Boot Area中,这样可以减少意外修改导致系统无法启动,同时避免无法更新系统的情况的出现。

 

 

有二个BOOT分区,每个分区大小最小为128KB的倍数,BOOT分区与User Area是分离的,单独编地址。可以使用CMD6来设置BOOT_PARTITION_ENABLE = 1从BOOT Area启动 ,否则从User Area 启动,进入Pre-Boot State,如果BOOT_PARTITION_ENABLE = 0 或不支持BOOT Mode,则直接进入Idle State

 

3.4.1.2 Pre-Boot State

Power-UP 或 Reset后,且发送第一个命令CMD1之前,CMD LINE 要保持至少74个周期的低电平,Device 识别到,进入Boot State 执行初始化,并准备BOOT DATA。

若是CMD Lines 没有保持74个时钟周期的LOW,又若是Host 在初始话过程之前发送任意的正常eMMC 命令的话,Slave 应该没有任何反应且会退出Boot Mode 到 Idle State状态,即Card Identification Mode

 

3.4.1.3 BOOT State

 

● 主要进行BOOT 数据的读操作

Host要读取的Partition,DATA SIZE可以通过Extended CSD 来设置。Host 必须保持CMD信号为Low来读取所有BOOT数据,或发送CMD0 + 0xFFFFFFFFA 来读取BOOT数据。当BOOT 数据读取操作完成后,BOOT操作将会终止

● Host 必须采用PUSH-PULL模式,直到BOOT Mode结束。

● HS200&HS400在BOOT Mode 不支持。Host 可以设置是否从Device接收BOOT Acknowledge。

● 通过拉高CMD Line则会终止BOOT State进入Idle State,从此进入 Identification Mode。从此离开BOOT Mode进入到Card Identification Mode。

● Host 可以采用Single data rate(SDR)或 dual Data rate(DDR)。

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

DDR Mode,数据则会在时钟上升沿或者下降沿同时取样,而且每个data line 有二个CRC内容,在这个模式下,Block Length 总是512 Bytes,而且数据则会以4Bit或8Bit模式交叉出现。奇数Bytes(1,3,5)会被Host在时钟上升沿取样,偶数(2,4,6)则被Host在时钟的下降沿取样,设备会附加二个CRC16到每个有效地址 data line上,若是4bit数据模式,则有4个line 是无效的,一个对应上升沿的奇数Byte,一个对应下降沿的偶数Byte。

所有DATA Line的时序都是应该按照DDR时序来,开始Bit ,结束Bit,还有BOOT Acknowledge 只在时钟上升沿有效,如果这些数据在下降沿则是无效的。

 

 

 

● 进入 BOOT State后:

若是BOOT Acknowledge 被激活,在CMD信号被Low 之后的50 ms 内,Slave 必须发送Acknowledge 内容 “010”到Host。

若是BOOT Acknowledge 没有被激活,Slave 不会发送。

 

● 在CMD Line 变低的 1s 内,Device 必须发出第一个数据给Host。

 

● 当拉高CMD line后需要经过至少56个Clock ,才可以发送CMD1

 

●Host 选择从那个Partition读取BOOT数据是可以被提前设置的EXT_CSD Byte[179],Bits[5:3],Master 可以读取BOOT 数据大小,也可以计算的 128KB * BYTE_SIZE_MULT(EXT_CSD Byte[226])。

 

● Host 可以通过设置EXT_CSD Byte [179],Bit 6 来选择是否从Slave 接收Acknowledge,若是选择接受Host可以通过Acknowledge确认Slave是在BOOT模式中运行。

 

● 在数据传输阶段若是Host把CMD拉高,Slave必须在Nst个时钟周期内终止数据或者Acknowledge 内容传输。Nst 值为一个数据周期和一个结束Bit周期。若是在Block 传输过程中,Master终止了BOOT,则Slave 必须在Nst 个时钟周期内释放DATA Lines。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.4.2 Device Identification Mode

 

 

● Device Identification Mode,本模式下所有数据通信都会在CMD Line上完成,

(1)Host Reset Device

(2)检查操作电压范围和访问方式

(3)识别电压

(4)指定Bus上Device RCA( Relative Device Address)

 

● 四种情况会进入Idle State

① 完成BOOT Mode 操作

② BOOT Mode下CMD line保持电平时间少于74个时钟

③ Power-ON 后,如果不支持BOOT 启动;

④ 直接发送CMD0 + 0x00000000 均将进入Idle State,此会进入Device Identification Mode

 

● 进入Idle state

① 输出总线将保持高阻状态

② Device 的RCA 地址会被初始化为0x0001

③ 驱动能力设置为默认值

④ Host提供Clock时钟,此时时钟Identification Clock Rate

 

3.4.2.1 Host Reset Device

● 除了Inactive State,CMD0 + 0x00000000 在state下都是有效的,可以将Device Reset到Idle state。为了兼容,除了Inactive State,任何状态下若果收到CMD0 且参数不是0xFFFFFFA 或者0XF0F0F0F0, Device都会执行Reset到Idle State。

● Host 在除了Inactive 和 Pre-BOOT 状态之外使用CMD0 + 0xFFFFFFA 命令,设备会认为重启命令且变为Idle状态

3.4.2.2 访问模式

● SEND_OP_COND (CMD1)命令和OCR寄存器包含二个位来指明Memory 所支持的访问模式。

● CMD1的二个位表明Host是否有能力处理Sector寻址,而OCR 寄存器内的二个位表明了设备是否支持Sector寻址。

● OCR寄存器的二个位只有在CMD1 命令的最后一个,Response 中有效,也就是设备进入Ready状态后才有效,若是Host 没有指明是否有处理Sector 寻址的能力话,大约2GB的Memory会把状态切换为Inactive 从OCR register的二位中,Host 可以把设备从其他Byte寻址的设备中区分开来。

● Host, 0x00FF8080(容量小于2GB)或者0x40FF8080(容量大于2GB),且不会变化到Inactive state,此时Host 必须重复发送CMD1 直到Busy bit被清除

● 若设备在进入Ready state时,表明CMD1 执行完毕,Device应该给主机回应 0x80FF8080(容量小于2GB)或0xC0FF8080(容量大于2GB)来表明大小

 

3.4.2.4 工作电压

● Host 可能会改变设备电压,若是Host 把设备的电压范围设置到一个新的范围,设备应该完全的关闭且以新的电压范围重启。若是电压范围1.95V -2.7V被使用,双电压设备可能会失败

● 初始化过程中不允许改变电压范围,如果确实需要改变电压范围,Host必须要Reset Device 通过CMD0 + 0x00000000,然后重新执行初始化进程

● 如果要访问处于Inactive state 的Device ,必须执行硬件Reset ,掉电然后上电

 

 

3.4.2.5 设备识别过程

From Net

 

有多个Device,且向前兼容,开始执行Device Identification 过程时,Host必须处于 Open-Drain模式下,CMD Line为 Open-Drian  则允许在设备识别阶段多个设备并行操作,Identification Clock 为FOD

(1)Device 被激活后,Bus 一般进入Idle state,host发送CMD1请求device 发送它的有效操作电压范围,若果不兼容的设备将进入Inactive state,如果兼容设备将发送回应给Host告知其他电压操作条件

(2)Host 发送CMD2 ,要求所有device回复它的CID,任何未识别设备,处于ready state一个一个发送CID 给Host

(3)若是有些设备发送的CID和他们标示的CID不符合,则立即停止发送停止发送CID且必须等待下一个识别周期,保持在Ready状态,因为CID是每个设备唯一识别码,应只有一个设备成功的发送起具全部CID数字到Host。此设备随即进入到Identification 状态、

(4)此后Host发送CMD3(SET_RELATIVE_ADDR)命令,来指定此设备一个RCA(Relative Device Address),此RCA 比CID码短会在将来Data transfer mode,一般Clock 会高于FOD中用于寻址设备。

(5)一旦Device收到RCA , Device 将会进入stand by state,且设备不会对未来的识别周期做出任何反应

(6)Device 将Open-drain 调整为PUSH-PULL

(7)Host 重复其识别过程,即CMD2 和CMD3命令,如果没有设备响应这个命令(通过识别超时),则会认为所有Device 识别结束。识别超时是发送CMD2 之后超时Nid 时钟周期之后没有Device 回应Start位,则判定为识别超时。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.4.3 Interrupt Mode

 

Interrupt mode:有效的保证了从Host到Device的同步传输。这种模式减少了Polling 导致的系统负载和系统功耗,从而保证Host对Device请求的服务做出及时的响应。无论对于Host还是Device ,Interrupt Mode 都是可选的。

(1)Host 在向Device 发送CMD40(GO_IRQ_STATE)之前,必须保证Device 在 Stand-by Mode.在等待Device 给出中断回应的时候,Host 必须保证Clock 信号有效,可以根据响应时间来调节Clock Rate

(2)Host 使用CMD40(GO_IRQ_STATE),让Device 进入wait -IRQ state,一旦Device进入wait -IRQ State,它会等待Device 内部的IRQ 事件到来,一旦IRQ 内部事件到来,Device 会通过回应发送给Host,响应是以open-drain 模式发送,并回到stand-by state .

(3)在等待内部中断事件的时候,Device也在等待Command line 上start bit,在没有中断事件时,一旦检测到command line的 start bit, Device 将终止中断模式并转换到 stand-by state.

(4)在CMD40回应期间,无论是否拥有总线控制权,设备会切换到stand -by 模式

(5)Host 收到中断回应后,Host回到标准数据传输阶段

(6)若是Host 想在中断回收之前终止中断模式,可以选择自己造一个CMD40回应(Device bit = 0),且使用保留的RCA地址0x0000; 这会Device 从Wait -IRQ STATE 进入Stand-by state. 现在Host 可以恢复到标准数据传输阶段了。

 

 

 

 

 

 

3.4.4 DATA Transfer Mode

 

 

 

3.4.4.1  DATA Transfer Mode 概述

  1. Data Transfer mode 下的所有的数据通信都是Host和选中的Device之间点对点的,所有带有RCA参数的命令都会在CMD Line上获得回应。

 

  1. 当Device 被指定RCA后,它将不再响应Identification Mode的命令:CMD1,CMD2,CMD3。CMD3 SET_RELATIVE_ADDR 用来给设置设备的relative device address(RCA),设备收到CMD3后,会立刻从identification mode进入Stand-by State,并且不会再响应任何identification。

 

 

  1. 重启设备CMD0,CMD1 或者硬件重启,或者停电会终止任何将要发送或者正在写入的操作,这会引起一些或者全部被寻址的数据进入一个未知状态,除非使用Reliable Write 来保证写入的可靠性。Host 有职责来防止这种情况发生。
  2.  命令在配置为DDR传输模式时是不被允许的,且会被作为无效命令,Bus Testing (CMD19 和 CMD14 ),Lock -Unlock (CMD 42)和 set block length(CMD16)

 

 

 

 

 

 

3.4.4.2 Data Transfer Mode 状态转换说明

● Stand-by State

① 当Device 回到Stand-by的时候,通过Command line 和 Data line 通信时是工作在Push-pull模式。

② 在Host 读取全部CSD寄存器之前,FPP时钟必须维持在FOD。Host发生SEND_CSD(CMD9)命令来得到Device Specific Data CSD,即Block length,设备存储大小,最大时钟频率等内容。 

③ 广播命令SET_DSR(CMD4)会配置Device 的驱动能力,此命令会根据应用的总线布局和数据传输速率来编辑其DSR。时钟由FOD切换成FPP。

④ Stand-By state下,Host通过发送命令CMD7将对应RCA的Device 设为Transfer

State。

⑤ Host 通过发送命令CMD7 (0x0000),则Device 回到 Stand-by state

 

● Transfer State

① 如果向前已经在transfer state,host通过发送命令CMD7 (参数为任何不等于RCA的值),则Device将离开transfer state回到 stand-by。

② 如果向前已经在 transfer state,Host通过发送命令CMD7(参数为当前Device的RCA),则Device 将忽略此命令,且可能会被认为是非法命令。

③ 所有的数据读取命令可以用停止命令CMD12,在任何时候终止。数据传输会终止且设备会返回到transfer state。数据读取命令包括:block读取CMD17,Multiple Block(CMD18),send tuning Block(CMD21)和 Send write protect(CMD30),这些命令会让Device 从transfer state切换到 Send data state。

④ 所有写数据命令可以用停止命令(CMD12)在任何时候终止,写命令必须在使用CMD7命令反选Device 之前被停止掉。写数据命令包括了:Block Write(CMD24和CMD25),Write CID(CMD 26),Write CSD (CSD27 ),这些命令会让transfer state 切换到 Receive -Data state。

⑤ 设备可以为Block write 提供 Buffering 功能,这意味着之前Block 在写入的时候,下一个Block 的可以被送到设备里。

⑥ 对于Write CSD ,Write CID ,write protection and erase 是没有Buffering 功能的,这意味着Device为上述某个命令工作的时候,其他的数据传输命令是不会被接收的。Device是 Busy 且处于Programming 状态时,DATA0 Line 会保持 Low

 

● Receive data state

① 当数据传输结束时,Device 会退出写数据状态且移动到Programming state(传输成功)或Transfer state(传输失败)。

② 若写一个Block操作被停止,但最后一个Block的CRC和length 都有效,则数据会被写入。

● Disconnect state

① 当设备处于Disconnect state,CMD7(参数为当前Device 的RCA)用于选择设备并转换为Programming state

② 在Disconnect state 的Device 可以重新选择CMD7.此情况下Device 会移动到 Programming 状态且重新激活Busy 标示

● Programming state

① 如果先前已经在programming state,Host 通过发送命令CMD7 (参数为任何不等于RCA的地址值),则Device 将离开Programming state回到Disconnect state。

② 如果向前已经在 transfer state,Host通过发送命令CMD7(参数为当前Device的RCA),则Device 将忽略此命令,且可能会被认为是非法命令。

③ Device 在被写入的时候Parameter设置命令是不允许被接受的,Parameter设置命令包括了:set Block length (CMD16), Erase Group Selection(CMD 35-36)

④ 把另外一个Device 从stand-by 转换到Transfer (CMD7)是不会终止写入操作的,此设备转换为Disconnect 状态且释放DATA0 的控制权

● Bus Test State

在执行Bus testing阶段之前(CMD19 CMD14),建议设置数据传输的时钟频率,这样的话Bus Test给出一个真实的数据。若是测试的时钟频率小于实际数据传输频率则测试结果是错误的

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.4.5 Inactive State

在data transfer mode 下。除Sleep State外,其他任何状态下发送CMD15 可在需要的时候,让Device 进入Inactive State

 

 

 

3.4.6小结:关键状态转换

INIT状态转换:

---> Power on

---> CMD0 (IDLE state)

---> CMD1 ---> Ready state

---> CMD2 ---> Identification state

---> CMD3 ---> stand-by

---> CMD7 ---> Transfer state

 

 

Read Data 状态转换

---> Transfer state

---> CMD 8 ---> Sending data state

---> CMD12 ---> Operating Complete

---> Transfer state

 

Write Data 状态转换

 

---> Transfer state

---> CMD4 --->Receive data state

---> Transfer Complete ---> Programming State

---> Operation Complete ---> Transfer state

 

 -==================================================================-

 

posted @ 2020-02-05 10:02  楚格  阅读(707)  评论(0编辑  收藏  举报