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_cd
和 gpio_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_t
和 sdmmc_slot_config_t
(SDMMC_HOST_DEFAULT
和 SDMMC_SLOT_CONFIG_DEFAULT
)的預設初始化程式,SDMMC 主機驅動程式將嘗試使用該卡支援的最寬匯流排(SD 為 4 行,eMMC 為 8 行)和 20MHz 頻率。
在可以實現 40MHz 頻率通訊的設計中,可以通過更改 sdmmc_host_t
的 max_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上拉要求。