ESP32 学习笔记(十七)SDMMC Host Driver

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_27114397/article/details/84107441

概述

在 ESP32 上,SDMMC 主机外设有两个插槽:

  • 插槽 0(SDMMC_HOST_SLOT_0)是一个 8 位插槽。它使用 PIN MUX 中的 HS1_ * 信号。
  • 插槽 1(SDMMC_HOST_SLOT_1)是一个 4 位插槽。它使用 PIN MUX 中的 HS2_ * 信号。

这些插槽的引脚映射如下表所示:

Signal Slot 0 Slot 1
CMD GPIO11 GPIO15
CLK GPIO6 GPIO14
D0 GPIO7 GPIO2
D1 GPIO8 GPIO4
D2 GPIO9 GPIO12
D3 GPIO10 GPIO13
D4 GPIO16
D5 GPIO17
D6 GPIO5
D7 GPIO18
CD any input via GPIO matrix any input via GPIO matrix
WP any input via GPIO matrix any input via GPIO matrix

可以使用 GPIO 矩阵将卡检测和写保护信号路由到任意引脚。要使用这些引脚,请在调用 sdmmc_host_init_slot() 之前设置 sdmmc_slot_config_t 结构的 gpio_cdgpio_wp 成员。请注意,在使用 SDIO 卡时,建议不要指定卡检测引脚,因为在 ESP32 卡检测信号中也可以触发 SDIO 从机中断。

插槽0(HS1_ *)使用的引脚也用于连接 ESP-WROOM32 和 ESP32-WROVER 模块中的 SPI 闪存芯片。这些引脚不能在 SD 卡和 SPI 闪存之间共享。如果需要使用 Slot 0,请将 SPI flash连接到不同的引脚并相应地设置 Efuses。

支持的速度模式

SDMMC 主机驱动程序支持以下速度模式:

  • 默认速度(20MHz),4 线/1 线(带 SD 卡)和8 线(带 3.3V eMMC)。
  • 高速(40MHz),4 线/1 线(带 SD 卡)和8 线(带 3.3V eMMC)
  • 高速DDR(40MHz),4 线(带 3.3V eMMC)

目前不支持的是:

  • 高速 DDR 模式,8 线 eMMC
  • UHS-I 1.8V 模式,4 线 SD 卡

使用SDMMC主机驱动程序

在下面列出的所有功能中,大多数应用程序将直接使用 sdmmc_host_init()sdmmc_host_init_slot()sdmmc_host_deinit()

其他函数,例如 sdmmc_host_set_bus_width()sdmmc_host_set_card_clk()sdmmc_host_do_transaction() 将由 SD/MMC 协议层通过 sdmmc_host_t 结构中的函数指针调用。

配置总线宽度和频率

使用 sdmmc_host_tsdmmc_slot_config_t(SDMMC_HOST_DEFAULTSDMMC_SLOT_CONFIG_DEFAULT)的默认初始化程序,SDMMC 主机驱动程序将尝试使用该卡支持的最宽总线(SD 为 4 行,eMMC 为 8 行)和 20MHz 频率。

在可以实现 40MHz 频率通信的设计中,可以通过更改 sdmmc_host_tmax_freq_khz 字段来增加总线频率:

sdmmc_host_t host = SDMMC_HOST_DEFAULT();
host.max_freq_khz = SDMMC_FREQ_HIGHSPEED;

要配置总线宽度,请设置 sdmmc_slot_config_t 的宽度字段。例如,要设置 1 位模式:

sdmmc_slot_config_t slot = SDMMC_SLOT_CONFIG_DEFAULT();
slot.width = 1;

更多

有关实现协议层的更高级别驱动程序,请参阅 SD/SDIO/MMC驱动程序

有关使用 SPI 控制器的类似驱动程序,请参阅 SD SPI主机驱动程序,并且仅限于 SD 协议的 SPI 模式。

有关上拉支持以及有关模块和设备的兼容性,请参阅 SD上拉要求

猜你喜欢

转载自blog.csdn.net/qq_27114397/article/details/84107441