zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    别人走的路--2
    win7下80端口被(Pid=4)占用的解决方法
    实习第一天原来是配置环境
    api接口大全
    java计算两个日期之间相隔的天数
    【转】overload与override的区别
    Overload和Override的区别?
    浅析Java中的final关键字
    JAVA中的finalize()方法
    封装
  • 原文地址:https://www.cnblogs.com/caochucheng/p/12262604.html
Copyright © 2011-2022 走看看