• Linux MMC子系统 - 5.eMMC 5.1工作模式-引导模式


    By: Ailson Jack
    Date: 2023.11.19
    个人博客:http://www.only2fire.com/
    本文在我博客的地址是:http://www.only2fire.com/archives/164.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。

    微信公众号:嵌入式那些事

    综述

    Host和eMMC设备之间的所有通信都由Host控制。总线上的所有通信都是以Host发送一个Command给eMMC开始的,eMMC对于收到的不同Command会做出不同的response,当然了eMMC对于收到的部分Command可以不做response。

    eMMC总线协议定义了5种操作工作模式,包括:引导模式(Boot mode),设备识别模式(Device identification mode),数据传输模式(Data transfer mode),中断模式(Interrupt mode),非活动模式(Inactive mode)。各个模式的描述如下:

    • 引导模式(Boot mode):当eMMC设备在上电后或者eMMC设备接收到命令参数为0xF0F0F0F0的CMD0命令或者eMMC设备检测到复位信号时,eMMC设备将处于引导模式(Boot mode)。在引导模式(Boot mode)下,eMMC设备会将boot data发送给Host,boot data的内容通常情况下是系统的引导程序。
    • 设备识别模式(Device identification mode):在boot mode工作模式完成或者eMMC设备不支持boot mode工作模式时,eMMC设备将处于设备识别模式(Device identification mode)。在设备识别模式下,Host会对eMMC设备做一些初始化的工作,比如设置eMMC设备的工作电压,配置eMMC设备的寻址模式,给eMMC设备分配RCA地址等。eMMC设备将一直处于设备识别模式,直到eMMC设备收到SET_RELATIVE_ADDR(CMD3)命令。
    • 数据传输模式(Data transfer mode):一旦eMMC设备的RCA地址被分配之后,eMMC设备就会进入数据传输模式(Data transfer mode),也就是说设备识别模式(Device identification mode)结束之后eMMC设备就直接进入数据传输模式(Data transfer mode)。当Host识别到eMMC总线上的eMMC设备之后,Host也将进入数据传输模式(data transfer mode)。
    • 中断模式(Interrupt mode):Host和eMMC设备同时进入或者退出中断模式(Interrupt mode)。在中断模式下,不会有数据传输。在中断模式下,唯一允许的消息是来自Host或者eMMC设备的中断服务请求。
    • 非活动模式(Inactive mode):当eMMC设备在操作电压范围或者访问的模式无效时,eMMC设备将进入非活动模式(Inactive mode)。Host使用GO_INACTIVE_STATE(CMD15)命令也可以让eMMC设备进入非活动模式(Inactive mode)。eMMC设备在上电后将进入到pre-idle状态。

    下图显示了总线模式,操作模式和设备状态之间的关系。每个eMMC设备状态都与一个总线模式和一个操作模式相关联的。

    在这里插入图片描述

    引导模式(Boot mode)

    在引导模式下,Host可以从eMMC设备读取boot data,在Host发送CMD1之前,通过保持CMD线为低或者发送参数为0xFFFFFFFA的CMD0命令。boot data可以从boot area或者user area读取,这取决于寄存器的设置。

    引导模式包含3个状态,分别是pre-idle状态,pre-boot状态和boot状态。

    引导分区(Boot partition)

    eMMC设备存在两个引导分区。引导分区的最小容量为128KB。引导分区的容量计算如下:

    Maximum boot partition size = 128KB x BOOT_SIZE_MULT

    BOOT_SIZE_MULT是EXT_CSD寄存器的[226]字节的内容。

    引导分区和用户区域是分开的,如下图所示:

    在这里插入图片描述
    Host可以通过SWITCH(CMD6)命令设置EXT_CSD寄存器的[179]字节(PARTITION_CONFIG域)来选择引导分区。eMMC设备可以被配置为从用户区域引导,通过设置EXT_CSD寄存器[179]字节的BOOT_PARTITION_ENABLE位域的值为111b。EXT_CSD寄存器[179]字节的内容如下:

    在这里插入图片描述

    引导总线宽度和数据访问配置

    Host可以通过配置EXT_CSD寄存器的[177]字节(BOOT_BUS_CONDITIONS域)来设置引导模式下的速率模式和总线宽度。BOOT_BUS_CONDITIONS域的内容如下:

    在这里插入图片描述
    在这里插入图片描述
    在引导模式下,Host通过对BOOT_BUS_CONDITIONS域的配置,可以设置3种速率模式。在引导模式下,eMMC总线支持的速率模式如下:

    Mode NameData RateBus WidthFrequencyMax Data Transfer
    (implies x8 bus width)
    Backwards
    Compatibility with
    legacy MMC card
    Single1, 4, 80-26 MHz26 MB/s
    High Speed SDRSingle1, 4, 80-52 MHz52 MB/s
    High Speed DDRDual4, 80-52 MHz104 MB/s

    HS200 and HS400 is not supported during BOOT operation.

    在引导模式下,Host可以通过对BOOT_BUS_CONDITIONS域的RESET_BOOT_BUS_CONDITIONS位域配置,来选择在退出引导模式后,是复位还是保留当前总线的配置。如果RESET_BOOT_BUS_CONDITIONS的值为0,表示退出引导模式后会复位总线的设置,退出引导模式后总线会被复位为兼容模式(单速率,1bit总线宽度)。如果RESET_BOOT_BUS_CONDITIONS的值为1,表示退出引导模式后会保留引导模式的总线配置。

    Host通过配置EXT_CSD寄存器的[177]字节(BOOT_BUS_CONDITIONS域)来设置引导模式的总线配置,Host通过配置EXT_CSD寄存器的[185]字节(HS_TIMING域)和EXT_CSD寄存器的[183]字节(BUS_WIDTH域)来设置其他模式的总线配置。

    EXT_CSD寄存器的[177]字节(BOOT_BUS_CONDITIONS域)是非易失性的,掉电之后配置不会丢失。

    EXT_CSD寄存器的[185]字节(HS_TIMING域)和EXT_CSD寄存器的[183]字节(BUS_WIDTH域)是易失性的,掉电之后配置会丢失。

    引导操作(Boot operation)

    在引导模式下,Host有两种方式可以让eMMC设备进入boot state,这两种方式分别定义为Original Boot和Alternative Boot,描述如下:

    • Original Boot:拉低CMD信号并保持至少74个时钟周期。

    • Alternative Boot:拉高CMD信号并保持至少74个时钟周期后,发送参数为0xFFFFFFFA的CMD0命令。

    Host可以通过SWITCH(CMD6)命令设置EXT_CSD寄存器的[179]字节(PARTITION_CONFIG域)的BOOT_ACK位段来选择是否eMMC设备发送boot acknowledge给Host。eMMC设备发送boot acknowledge以便于Host能够识别到eMMC设备处于引导模式。

    EXT_CSD寄存器[179]字节的内容如下:

    在这里插入图片描述
    对于Original Boot,如果EXT_CSD寄存器[179]字节的BOOT_ACK设置为1,eMMC设备要在Host触发eMMC设备进入引导模式的50ms内,在DAT[0]数据线上发送"010"格式的boot acknowledge给Host。Original Boot的时序图如下所示:

    在这里插入图片描述
    在引导模式下,拉低CMD信号并保持至少74个时钟周期,eMMC设备会进入boot state。在Host将CMD信号线变为高电平并准备发送下一个命令之前,至少需要56个时钟(8 clocks + 48 clocks)周期间隔。

    对于Alternative Boot,如果EXT_CSD寄存器[179]字节的BOOT_ACK设置为1,eMMC设备要在接收到参数为0xFFFFFFFA的CMD0命令的50ms内,在DAT[0]数据线上发送"010"格式的boot acknowledge给Host。Alternative Boot的时序图如下所示:

    在这里插入图片描述
    对于Original Boot或者Alternative Boot,在eMMC设备发送boot acknowledge给Host之后,eMMC设备就会发送boot data给Host。

    引导模式下的状态图如下图所示:

    在这里插入图片描述
    从引导模式下的状态图可知:

    1、在eMMC设备传输boot data给Host的过程中,Host可以打断数据的传输,提前结束boot state,具体方法如下:

    • Original Boot:boot data传输过程中,Host拉高CMD信号;

    • Alternative Boot:boot data传输过程中,Host发送参数为0x00000000的CMD0命令;

    2、在eMMC设备上电之后,会进入pre-idle状态:

    • 当EXT_CSD寄存器的[179]字节(PARTITION_CONFIG域)的BOOT_PARTITION_ENABLE位段的值为0,表示eMMC设备不使能引导功能,此时eMMC设备会直接从引导模式的pre-idle状态进入到设备识别模式的idle状态。
    • 当EXT_CSD寄存器的[179]字节(PARTITION_CONFIG域)的BOOT_PARTITION_ENABLE位段的值选择了引导分区,表示eMMC设备使能引导功能,eMMC设备会从引导模式的pre-idle状态进入到引导模式的pre-boot状态。

    欢迎关注博主的公众号(微信搜索公众号:嵌入式那些事),可以扫描下面的公众号二维码:

    在这里插入图片描述
    如果文中有什么问题欢迎指正,毕竟博主的水平有限。

    如果这篇文章对你有帮助,记得点赞和关注博主就行了^_^。

    排版更好的内容见我博客的地址:http://www.only2fire.com/archives/164.html

    注:转载请注明出处,谢谢!^_^

  • 相关阅读:
    语法基础(数组)
    JavaScript -- 03. 运算符介绍
    编辑器实现思路
    AT89S51编辑和烧录软件过程
    浅谈排序算法(冒泡,插入,归并)
    华为GAUSSDB集成
    分布式系列之分布式计算框架Flink深度解析
    从零开始学习typescript系列2: typescript配置文件ts.config.js之详细解释
    也谈谈SDP零信任和传统公司接入的区别
    华清远见-html-js-jquery学习总结
  • 原文地址:https://blog.csdn.net/jackailson/article/details/134488079