eMMC应用指南

1. 简介

1.1 定义

  • 单eMMC:eMMC仅作为存储设备,不从该eMMC启动。

  • eMMC启动:系统从eMMC启动(适用于仅外挂eMMC或在PSRAM上启动的方案)。

2. 单eMMC使用教程

适用范围

  • 芯片系列:58系列、52A系列(内置NORFlash)、56系列(外挂NOR/nandFlash,通过SD2接口连接eMMC)。

  • 硬件板子:mod566(sdio-tf接口,SD2,驱动IP为drv_sdio)、mod587(SD1接口,驱动IP为drv_sdhci)、EVB567、EVB587。

示例:以下教程以mod566为例(硬件使用sd1接口,驱动IP为sdhci)。

2.1 pinmux配置

  • 确认eMMC接口与芯片手册中的SD接口对应。

  • SD接口pinmux配置参考:

../../_images/emmc_1.png
  • 上电配置:在对应芯片平台的bsp_power.c文件中添加上电函数:

../../_images/emmc_27.png
  • 上电调用:在芯片平台的bsp_init.c(无此文件则在bsp_io.c)中调用:

../../_images/emmc_28.png

2.3 excel表配置

  • code及root分区放在内部/外挂NOR Flash,eMMC仅作为外部存储。

  • 配置eMMC大小及blk对齐:

../../_images/emmc_5.png
  • 配置文件系统分区及目录:

../../_images/emmc_6.png
  • 更多配置参考《Flash分区应用笔记》。

2.4 启动log

  • eMMC初始化log:

../../_images/emmc_7.png
  • 文件系统挂载log(首次mount会自动格式化):

../../_images/emmc_8.png

2.5 异常排查

2.5.1 初始化失败

  1. 检查eMMC供电是否正常,reset引脚是否为高电平。

  2. 用“LightWork.exe”验证pinmux与芯片引脚功能表一致(以566的PA27-SD1_CMD为例):

../../_images/emmc_9.png
../../_images/emmc_10.png
  1. 确认时钟使能:若“SDEMMC1”为0,需调用HAL_RCC_EnableModule(RCC_MOD_SDMMC1);开启时钟:

../../_images/emmc_11.png
  1. 确认时钟源配置:

../../_images/emmc_12.png
  1. 读写超时:检查访问buff地址(不可在ITCM区域(0x00000000),需在SRAM/PSRAM且4字节对齐)。

2.5.2 mount失败

  1. 文件系统个数不足:增加menuconfig中可挂载分区数。

  2. 无LBR分区信息:首次加载时格式化。

  3. 读写超时:可能因供电不稳、高频走线问题等,可降低频率尝试。

3. eMMC启动教程

适用范围

  • 场景:芯片仅外挂eMMC,或code放eMMC并在PSRAM启动。

  • 芯片:52x、56x、58x(以566外挂eMMC为例)。

3.1 配置步骤

3.1.1 pinmux配置

  • 与“单eMMC使用教程”一致。

3.1.2 menuconfig配置

  • 除单eMMC配置外,需额外设置:

    1. 关闭“OTA_EXT_V3”(仅适用于NOR方案升级):

../../_images/emmc_13.png
  1. 打开“OTA_56X_NAND”(临时解决编译报错):

../../_images/emmc_14.png

3.1.3 excel表配置

  • 关闭其他外部Flash选项,仅开启SD0;双PSRAM需打开PSRAM1和PSRAM2:

../../_images/emmc_15.png
  • 配置code启动地址及分区信息:

../../_images/emmc_16.png
  • 更多配置参考《Flash分区应用笔记》。

3.1.4 启动log

  • 文件系统加载log:

../../_images/emmc_17.png

3.2 异常排查

  • 启动无log(可能因eMMC搬移到PSRAM异常):

    1. 用“SIFLI Butterfli”工具对比eMMC内code与原始code:

../../_images/emmc_18.png
  1. 确认eMMC搬移到PSRAM的地址正确(566需为PSRAM1,XIP地址对应PSRAM1地址)。

  2. 其他初始化异常与“单eMMC”排查方法一致。

4. eMMC低功耗模式

  • eMMC低功耗分两种模式:

    1. 掉电模式(SDIO_POWER_PM_ALL_DOWN)

    2. 不掉电模式(SDIO_POWER_PM_UP)

  • 供电说明:eMMC由VCC(器件电源)和VCCQ(颗粒电源)供电,功耗对应Icc与Iccq(参考规格书)。

4.1 基础配置

  1. 使能standby模式:

../../_images/emmc_21.png
  1. 使能sdio低功耗模式(默认不掉电):

../../_images/emmc_22.png

(注:目前支持standby模式)

4.2 掉电模式(SDIO_POWER_PM_ALL_DOWN)

  • menuconfig配置:

../../_images/emmc_23.png
  • 特点:睡眠唤醒后需重新初始化eMMC,耗时约50ms~60ms。

4.3 不掉电模式(SDIO_POWER_PM_UP)

  • menuconfig配置:

../../_images/emmc_24.png
  • 特点:睡眠唤醒仅恢复HCPU端eMMC寄存器。

5. FAQ

  1. 驱动文件问题:联系FAE人员对齐驱动文件。

  2. eMMC裸读写方式: 初始化完成后调用接口(引用#include "mmcsd_core.h"),addr基地址为0xa0000000:

../../_images/emmc_25.png
  1. buff地址错误: 报错如图时,检查buff地址是否4字节对齐且非0x00000000开头:

../../_images/emmc_26.png
  1. finsh测试指令:

    • 带文件系统:

    fs_read /1.txt 1024  /* 读 / 1.txt,大小 1024K */
    fs_write /1.txt 1024 /* 写 / 1.txt,大小 1024K */
    
    • 裸读写:

    fs_read_code 10 85 1024  /* 读地址 0xa0000000+10,buff 初始数据 85,大小 1024 字节 */
    fs_write_code 10 85 1024 /* 写地址 0xa0000000+10,数据 85,大小 1024 字节 */
    
  2. 其他注意事项:

    • 55X不支持DDR模式。

    • eMMC读写速率低:参考eMMC读写性能文件。

    • 睡眠唤醒方案:参考硬件设计手册。