1. 程式人生 > >ESP32 學習筆記(十七)SDMMC Host Driver

ESP32 學習筆記(十七)SDMMC Host Driver

SDMMC Host Driver

概述

在 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上拉要求