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.1 Micro SD驱动

SD 卡设备原理

SD 卡(Secure Digital Card)是一种非易失性存储设备,广泛用于嵌入式系统的数据存储和传输。SD 卡原理基于闪存芯片和控制器架构,控制器处理命令和数据,通过 SPI 或 SD 模式与主机通信。SD 模式支持 1~4 位数据总线,速率从默认 25 MHz 到 UHS-II 的 208 MHz,提供 12.5 MB/s 到 624 MB/s 带宽。SD 卡协议包括初始化、命令/响应和数据传输阶段:主机发送 CMD 命令(如 CMD0 复位,CMD8 接口条件),SD 卡返回响应(R1/R3/R7),数据块以 512 字节为单位传输,支持 CRC 校验和错误重试。SD 卡类型包括 SDSC(标准容量,≤2GB)、SDHC(高容量,4~32GB)和 SDXC(扩展容量,64GB~2TB),文件系统通常为 FAT32 或 exFAT。控制器内部闪存阵列通过 NAND 闪存实现,支持磨损均衡和错误纠正(ECC),电源管理包括低功耗模式和热插拔。

  • 命令类型:

    • 基本命令:CMD0(复位)、CMD1(初始化 OCR)。
    • 读写命令:CMD17(单块读)、CMD24(单块写)、CMD18/25(多块读写)。
    • 响应格式:R1(正常响应,bit 0-7 状态)、R2(CID/CSD 寄存器)、R3(OCR 寄存器)。
  • 数据传输:块模式(512 字节),总线宽度 1/4 位,CRC16 校验数据完整性。

SD 卡支持电压切换(3.3V 到 1.8V),UHS-I/II 模式提升速率,适用于飞腾派等嵌入式板卡的 boot 和存储。

飞腾派 SD 卡设备

飞腾派(Phytium Pi)开发板的 SD 卡设备集成在 D2000 处理器中,支持 SD 3.0 规范,提供 eMMC/SD 接口,用于启动和数据存储。设备控制器基址为 0x28008000,支持 1/4 位总线宽度,最大速率 50 MHz(SDR25 模式),带宽 25 MB/s。飞腾派 SD 卡设备通过 MMC 控制器实现,支持 SDHC/SDXC 卡(容量 >2GB),文件系统为 FAT32。设备树(phytium_pi.dts)定义 mmc 节点:

mmc@28008000 {
    compatible = "phytium,mmc";
    reg = <0x0 0x28008000 0x0 0x1000>;
    clocks = <&clk MMC_CLK>;
    interrupts = <0 24 4>; // IRQ 24
};

配置文件(aarch64-phytium-pi.toml)包含 MMIO 区域 [0x28008000, 0x1000]。驱动在 ArceOS 中通过 axhal 实现,支持初始化命令(如 CMD0/CMD8)和数据块传输,适用于 SD 卡 boot(arceos.img)。

  • 硬件特性:

    • 接口:microSD 卡槽,支持热插拔。
    • 中断:IRQ 24,通过 GIC 路由 SPI。
    • 时钟:50 MHz(MMC_CLK),支持 DDR 模式。
    • 扩展:支持 SDIO 设备(如 WiFi 模块)。
  • 驱动支持:ArceOS 的 axdriver_mmc 模块(假设),初始化控制器,配置 CMD/DAT 引脚,通过 PAD (0x32B30000)。


飞腾派 SD 卡设备时序图

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

sequenceDiagram
    participant Host as MMC 控制器 (0x28008000)
    participant SD as SD 卡
    participant Bus as 数据总线 (DAT0-3)

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

时序分析

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

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

飞腾派 SD 卡设备寄存器基于 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 响应)
    MMC_DATA_CTRL0x0C数据控制寄存器BLOCK_SIZE (bit 0-11: 512 字节), DMA_EN (bit 0)
    MMC_INTR_EN0x10中断使能寄存器TX_COMPLETE (bit 0), RX_COMPLETE (bit 1), ERR_INTR (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 错误)。