eMMC操作模式-Boot mode

协议定义了五种操作模式:

Boot mode,device 在 power on、接收到参数为 0xF0F0F0F0的 CMD0或者是硬件重置后会进入 Boot mode。

Device identification mode,在 Boot mode完成后或者 host与 device不支持 Boot mode,则 device会进入 Device identification mode。device会一直处于该状态,直到收到 SET_RCA(CMD3)命令。

Interrupt mode,host与 device进入或者退出 Interrupt mode是同步的,在 interrupt mode不会有数据传输,唯一允许的是消息是来自 device或者是 host的中断服务请求。

Data transfer mode,分配 RCA后,device会进入 Data transfer mode。host会在识别总线上的 device后进入 Data transfer mode。

Inactive mode,如果 device的工作电压范围或是访问模式无效(OCR相关),那 device将会进入 Inactive mode。或者给 device发送 GO_INACTIVE_STATE(CMD15)命令,device将会重置,进行 power cycle到 Pre-idle状态。

下图是 Device state、Operation mode和 CMD line mode之间的关系。

dependencies

本文主要介绍 Boot mode。

Boot mode

device在 boot mode有两种状态,Pre-Idle State和 Pre-Idle State,状态机中还有 Boot State。

Pre-Idle State,device有三种方式进入 Pre-Idle State。(1) power on后;(2) host发送 GO_PRE_IDLE_STATE(CMD0 with 0xF0F0F0F0)命令对 device进行软件重置;(3) 有效的硬件重置(RST_n上升沿触发),具体信号波形查看 Figure 65 — H/W reset waveform。在 power on场景,device内部可能还处于初始化阶段,无法检测到 RST_n信号,但 power on流程已经保证 device内部会进行初始化,而且 device需要在 1s内完成初始化。在这种场景,初始化延时应最长为 1ms或 RST_n完成后 74 clock cycle或是电源上升时间中的最大者。RST_n信号是否有效需要从 EXT_CSD [162],RST_n_FUNCTION确认。

Pre-Boot State,device进入 Pre-Idle State后,如果 BOOT_PARTITION_ENABLE为1,则进入 Pre-Boot State。

Boot State,host将 CMD线拉低至少 74 clock cycles则 device从 Pre-Boot State进入 Boot state,处于 Original Boot Mode(常用);host发送参数为 0xFFFFFFFA的 CMD0,device也会从 Pre-Boot State进入 Boot state,但处于 Alternative Boot Mode。

Boot operation,进入 Boot State后,host就可以从 device读取 boot data。

根据 EXT_CSD [179],BOOT_PARTITION_ENABLE的 bit [5:3]的设置,boot data可以来自 boot area或是 user area,bit [6]则可要求 device在接收到 boot ack并在 CMD线拉低 50ms内发送 ack pattern 010。

PARTITON_CONFIG

boot data的大小由 128KB乘于 BOOT_SIZE_MULT (EXT_CSD byte [226]计算得出,该 byte是只读的。

BOOT_SIZE_MULT

在 CMD线拉低最多 1秒后,device将开始向 host发送 boot data,host必须持续拉低 CMD线,DATA线需要保持 push-pull模式,直到 boot操作结束。下图是 boot mode时序图和 boot mode状态机。

boot mode时序图

boot mode状态机

host可以通过 EXT_CSD [177],BOOT_BUS_CONDITIONS的 bit [4:3] 选择通信速率,最高支持 High Speed。是否支持 High Speed需要查看 EXT_CSD [177],BOOT_INFO的 bit [2],是否支持 DDR则需要查看 bit [1],支持 DDR的 device必须支持 High Speed。

BOOT_BUS_CONDITIONS

boot mode因为协议简单,实现的代码量少,多实现在 bootrom( SOC片内 ROM的 BootLoader),用于读取emmc内的 u-boot。但也有很多 SOC因为业务场景需要,会从走 Data transfer mode,可以加快启动流程,实现复杂业务等。因为 bootrom固化在 SOC内,从稳定性和兼容性考虑,一般会使用 backward compatible(DS)模式和 400k的时钟。

更多 boot mode信息见 6.3 Boot operation mode。

参考链接:

https://blog.csdn.net/Reborn_Lee/article/details/88736274

https://www.cnblogs.com/smartjourneys/p/6663561.html


eMMC操作模式-Boot mode
http://xxxdk.xyz/xxx/2021/02/eMMC操作模式-Boot-mode/
作者
sni
发布于
2021年2月9日
许可协议