EMMC启动流程

EMMC是一种嵌入式非易失性存储器系统,集成Nandflash控制器,负责协议、坏块管理等。文章详细介绍了EMMC的内部寄存器、通信协议,如CLK、CMD、DAT线的工作方式,以及初始化流程、数据读写、擦除、速度测试和稳定性测试。此外,还讨论了固件升级方案和EMMC对外提供的fat32接口。
摘要由CSDN通过智能技术生成

EMMC 简介

EMMC:全称为 embedded MultiMedia Card,是一种嵌入式非易失性存储器系统,由Nand flash和Nand flash控制器组成。EMMC 则在其内部集成了Flash Controller,包括了协议、擦除均衡、坏块管理、ECC校验、电源管理、时钟管理、数据存取等功能。
在这里插入图片描述

EMMC 内部寄存器

EMMC里面的几个主要寄存器,如下表所示:
表1. EMMC寄存器

EMMC 通信协议

  1. CLK:这是设备的输入时钟,由主机提供的信号,在时钟到来的时候才可以发送接收命令和数据。在SDR模式下,一个时钟周期可以传输1位的信号。在DDR模式下,可以在一个时钟周期传输2位的信号。CLK的频率在0到最大的频率之间。
  2. CMD:它是双向传输的命令线,用于主机和设备的数据通信。它有开漏和推挽两种模式,分别用来应对初始化和应对快速的命令传输。它能够双向传输,当主机发送命令之后,设备会给主机应答,通过CMD线可以返回给主机。
  3. Reset:单向的复位信号线,是用主机发送的。
  4. DAT0~DAT7:EMMC的双向数据总线,用于主机和设备之间的数据通信。它工作在应对快速的命令传输的推挽模式。DAT线在某一时刻只能支持单向传输,只能被设备或EMMC HOST一方控制。默认下,当用户上电或者复位的时候,仅能用DAT0一根线传输数据。同时,用户可以自己配置想要使用的DAT线的数量,也可以选择4根或者8根。当用户选择4根时,EMMC设备会断DAT1-3的内部上拉,如果用户选择的是8根,那么同理会断开DAT1-7的上拉。
    一般SD卡在接收到命令行,都会有一个应答(CMD0例外),这个应答我们也称之为响应。STM32的SDIO接口,支持2种响应类型:短响应(48位)和长响应(136位)。SD卡总共有6类响应(R1、R1b、R2、R3、R6、R7),我们这里以R1为例简单介绍一下。R1(普通响应命令)响应属于短响应,其长度为48位,如下表所示。在收到R1响应后,我们可以从SDIO_RESPCMD寄存器和SDIO_RESP1寄存器分别读出命令索引和卡状态信息。
    短响应格式
    EMMC 使用的是SDIO接口,SDIO总线上都是HOST端发起请求,然后DEVICE端回应请求,其中请求和回应中会包含数据信息:
  5. Command:用于开始传输的命令,是由HOST端发往DEVICE端的,其中命令是通过CMD信号线传送的;
  6. Response:回应是DEVICE返回的HOST命令作为Command 的回应。也是通过CMD线传送的;
  7. Data:数据是双向传输的。可以设置为1线模式,也可以设置为4线模式或者8线模式。数据是通过DAT0~DAT7信号线传输的。
    对于读命令,首先HOST会向DEVICE发送命令,紧接着DEVICE会返回一个握手信号,此时当HOST收到回应的握手信号后,会将数据放在4位的数据线上,在传送数据的同时会跟随着CRC校验码,CRC校验由硬件自动处理。单个数据块读的时候,在收到1个数据块以后即可以停止了,不需要发送停止命令(CMD12)。但是多块数据读的时候,EMMC卡将一直发送数据给主机,直到接到主机发送的STOP命令(CMD12)。

读时序
数据块写操作同数据块读操作基本类似,只是数据块写的时候,多了一个繁忙判断,新的数据块必须在SD卡非繁忙的时候发送。这里的繁忙信号由SD卡拉低SDIO_D0,以表示繁忙,SDIO硬件自动控制,不需要我们软件处理。
写时序
EMMC可供选择的速率模式:
速率模式

EMMC接线

EMMC接线图

工作流程

初始化

1、 初始化EMMC管脚,按照默认参数设置SDIO,然后再用命令设置EMMC,再次设置SDIO(按照要求的规格设置)。EMMC支持的频率区间是 375000 ~ 96000000,刚开始使用375000HZ,设置1bit 访问EMMC。Muses 中EMMC 大小是4G,频率48MHZ。
a. 设置总线电压为1.8V
b. 设置48MHZ
c. 设置4bit的带宽
d. 设置SDR50模式
初始化时序

  1. MMC_CMD_GO_IDLE_STATE(0) 设置EMMC为空闲状态。
  2. MMC_CMD_SEND_OP_COND(1) 配置电源寄存器,查询EMMC Device 是否已经完成初始化,同时进行工作电压和寻址模式协商(是块操作还是字节操作)。
  3. MMC_CMD_ALL_SEND_CID(2) 获取CID寄存器,128位的设备识别寄存器,包括一个特有的设备识别号码,可以通过这个寄存器区分是哪家厂商的芯片。
  4. MMC_CMD_SET_RELATIVE_ADDR(3) 设置EMMC的地址,如果总线上挂在多个EMMC,就通过这个地址区分操作哪个设备。
  5. MMC_CMD_SEND_CSD(9) 获取 CSD寄存器。
  6. MMC_CMD_SELECT_CARD(7) 选择刚才设置的地址。
  7. MMC_CMD_SEND_TUNING_BLOCK(19) 测试写操作,写512字节。
  8. MMC_CMD_READ_TUNING_BLOCK(14) 测试读操作。
  9. MMC_CMD_SEND_EXT_CSD(8) 读取 EXT_CSD寄存器。
  10. MMC_CMD_SWITCH(6) 打开cache缓存。

EMMC读取数据

读写数据

EMMC 写数据

在这里插入图片描述

数据擦除

擦除数据

读写速度测试

在这里插入图片描述

读写稳定性测试

在这里插入图片描述

固件升级方案

在这里插入图片描述

EMMC对外接口

EMMC 给fat32提供的接口在ff_gen_drv.c、ff_gen_drc.h中。
对外提供EMMC_Initialize、EMMC_Status、EMMC_Read、EMMC_Write、EMMC_loctl这5个接口。通过FATFS_LinkDriver这个函数把文件系统和驱动联系到一起。
MC_S32 FATFS_LinkDriver(const DiskioDrvTypeDef *drv,MC_U8 partNum)
参数1 drv 是所有操作接口;
参数2 partNum表示第几个分区。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值