Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

7.2 eMMC驱动

eMMC 设备原理

eMMC(embedded Multi-Media Card)是一种嵌入式多媒体卡标准,专为移动设备和嵌入式系统设计,集成 NAND 闪存和控制器于单一芯片中。eMMC 原理基于主机-从机模型,主机(如处理器)通过命令、数据和响应线控制从机(eMMC 卡)。它遵循 JEDEC 标准,支持 1/4/8 位数据总线,速率从 HS200(200 MB/s)到 HS400(400 MB/s)。eMMC 工作流程包括初始化(CMD0 复位, CMD1 OCR 查询, CMD2 CID 获取, CMD3 RCA 分配, CMD7 选择卡, CMD6 切换模式)、数据传输(CMD17/18 单/多块读, CMD24/25 单/多块写)和错误处理(CRC 校验, 重试机制)。控制器内部处理闪存管理(如磨损均衡、坏块处理、ECC 纠错),主机通过 SDMMC 控制器访问 eMMC,文件系统通常为 FAT32 或 ext4。eMMC 与 SD 卡的区别在于集成控制器和固定封装,支持 Boot Partition 用于启动镜像加载。

  • 关键特性:
    • 容量:eMMC 5.1 支持 4GB~1TB,分为用户区和引导区。
    • 接口:8 位数据线(DAT0~7)、命令线(CMD)、时钟线(CLK)、电源(VCC/VSS)。
    • 模式:默认模式 (25 MHz), 高速模式 (HS200/HS400), DDR 模式 (双边沿采样)。
    • 电源管理:支持低功耗睡眠模式和快速唤醒。

eMMC 的优势在于高集成度、低功耗和可靠性,适用于飞腾派等嵌入式板卡的启动和存储,传输块大小固定 512 字节,支持多分区。


飞腾派 eMMC 设备

飞腾派(Phytium Pi)开发板的 eMMC 设备集成在 D2000 处理器中,支持 eMMC 5.1 规范,提供 onboard eMMC 存储(8/16/32GB 选项)用于操作系统安装和数据持久化。设备控制器基址为 0x28008000,支持 1/4/8 位总线宽度,最大速率 50 MHz (SDR25 模式),带宽 25 MB/s。飞腾派 eMMC 设备通过 MMC 控制器实现,支持 HS200 模式和 Boot Partition,用于加载 ArceOS 镜像(如 arceos.img)。设备树(phytium_pi.dts)定义 emmc 节点,配置文件(aarch64-phytium-pi.toml)包含 MMIO 区域 [0x28008000, 0x1000]。驱动在 ArceOS 中通过 axdriver_mmc 模块实现,支持初始化命令(如 CMD0/CMD8)和数据块传输,适用于 SD 卡/eMMC boot。

  • 硬件特性:
    • 接口:onboard eMMC 芯片,支持热插拔 SD 卡槽扩展。
    • 中断:IRQ 24,通过 GIC 路由 SPI,用于传输完成和错误。
    • 时钟:50 MHz (MMC_CLK),支持 DDR 模式。
    • 扩展:支持 SDIO 设备(如 WiFi 模块)。

飞腾派的 eMMC 设备通过 PAD (0x32B30000) 配置引脚(如 DAT0~7, CMD, CLK),MIO (0x2801_4000~0x2803_2000) 选择功能,适用于启动和存储场景。


飞腾派 eMMC 设备时序图

飞腾派 eMMC 设备时序以单块读操作(CMD17)为例,涉及 MMC 控制器(基址 0x28008000)、eMMC 芯片和数据总线(DAT0~7)。主机发送 CMD17(读地址),eMMC 返回 R1 响应(状态),然后传输数据块(512 字节 + CRC),结束后触发中断(IRQ 24)通知 CPU。总延迟约 1~10 ms(50 MHz 时钟),依赖总线宽度(1/4/8 位)。

sequenceDiagram
    participant Host as MMC 控制器 (0x28008000)
    participant eMMC as eMMC 芯片
    participant Bus as 数据总线 (DAT0-7)

    Host->>eMMC: 发送 CMD17 (读命令, 地址)
    eMMC->>Host: 返回 R1 响应 (状态, bit 0-7)
    eMMC->>Bus: 传输数据块 (512 字节 + CRC)
    Bus->>Host: 数据到达 FIFO
    Host->>Host: 触发中断 (IRQ 24, GIC SPI)
    Host->>eMMC: 等待结束位

时序分析

命令阶段:CMD 线传输 48 位命令(CRC7 校验),响应延迟 <1 ms。数据阶段:DAT 线传输块数据,8 位宽度下速率 50 MB/s,CRC16 校验完整性。中断阶段:传输完成后控制器触发 IRQ 24,GIC 路由到 CPU 0。


相关寄存器信息、位域及基地址

飞腾派 eMMC 设备寄存器基于 MMC 控制器(基址 0x28008000),支持命令、数据和中断配置。以下是关键寄存器、位域和基地址信息。

  • 基址:MMC 控制器基址 0x28008000。

  • 寄存器表:

    寄存器偏移功能关键位域
    MMC_CMD0x00命令寄存器CMD_IDX (bit 0-5: 命令索引,如 CMD17=17), CMD_RESP (bit 6-7: 响应类型)
    MMC_ARG0x04命令参数寄存器ARG (bit 0-31: 命令参数,如读地址)
    MMC_RESP00x08响应寄存器 0RESP (bit 0-31: R1/R3/R4/R5 响应)
    MMC_DATA_CTRL0x0C数据控制寄存器BLOCK_SIZE (bit 0-11: 512=0x200), DMA_EN (bit 0), DIR (bit 1: 0=写, 1=读)
    MMC_INTR_EN0x10中断使能寄存器TX_COMPLETE_EN (bit 0), RX_COMPLETE_EN (bit 1), ERR_INTR_EN (bit 2)
    MMC_INTR_STATUS0x14中断状态寄存器TX_INTR (bit 0), RX_INTR (bit 1)
    MMC_CLK_DIV0x18时钟分频寄存器DIV (bit 0-7: 分频值,50 MHz / DIV)

MMC_CMD 寄存器位域:

  • CMD_IDX (bit 0-5):命令索引,如 CMD0=0 (复位), CMD17=17 (单块读)。
  • CMD_RESP (bit 6-7):响应类型,00=无响应, 01=R1/R3/R4/R5, 10=R2。
  • CMD_DATA (bit 8):1=有数据传输。

MMC_DATA_CTRL 寄存器位域:

  • BLOCK_SIZE (bit 0-11):数据块大小(512 字节=0x200)。
  • DMA_EN (bit 0):1=使能 DMA 传输。
  • DIR (bit 1):0=主机到卡(写),1=卡到主机(读)。

MMC_INTR_EN 寄存器位域:

  • TX_COMPLETE_EN (bit 0):使能发送完成中断。
  • RX_COMPLETE_EN (bit 1):使能接收完成中断。
  • ERR_INTR_EN (bit 2):使能错误中断(如 CRC 错误)。