Skip to content

Latest commit

 

History

History
69 lines (40 loc) · 3.36 KB

sdspi_host.rst

File metadata and controls

69 lines (40 loc) · 3.36 KB

SD SPI Host Driver

Overview

The SD SPI host driver allows communicating with one or more SD cards by the SPI Master driver which makes use of the SPI host. Each card is accessed through an SD SPI device represented by an sdspi_dev_handle_t spi_handle returned when attaching the device to an SPI bus by calling sdspi_host_init_device. The bus should be already initialized before (by spi_bus_initialize).

esp32

This driver's naming pattern was adopted from the SDMMC Host <sdmmc_host> driver due to their similarity. Likewise, the APIs of both drivers are also very similar.

SD SPI driver (access the SD card in SPI mode) offers lower throughput but makes pin selection more flexible. With the help of the GPIO matrix, an SPI peripheral's signals can be routed to any {IDF_TARGET_NAME} pin. Otherwise, if SDMMC host driver is used (See SDMMC Host <sdmmc_host>) to access the card in SD 1-bit/4-bit mode, higher throughput can be reached but it requires routing the signals through their dedicated IO_MUX pins only.

With the help of SPI Master driver <spi_master> based on, the SPI bus can be shared among SD cards and other SPI devices. The SPI Master driver will handle exclusive access from different tasks.

The SD SPI driver uses software-controlled CS signal.

How to Use

Firstly, use the macro :cSDSPI_DEVICE_CONFIG_DEFAULT to initialize a structure :cppsdmmc_slot_config_t, which is used to initialize an SD SPI device. This macro will also fill in the default pin mappings, which is same as the pin mappings of SDMMC host driver. Modify the host and pins of the structure to desired value. Then call sdspi_host_init_device to initialize the SD SPI device and attach to its bus.

Then use :cSDSPI_HOST_DEFAULT macro to initialize a :cppsdmmc_host_t structure, which is used to store the state and configurations of upper layer (SD/SDIO/MMC driver). Modify the slot parameter of the structure to the SD SPI device spi_handle just returned from sdspi_host_init_device. Call sdmmc_card_init with the :cppsdmmc_host_t to probe and initialize the SD card.

Now you can use SD/SDIO/MMC driver functions to access your card!

Other Details

Only the following driver's API functions are normally used by most applications:

  • :cppsdspi_host_init
  • :cppsdspi_host_init_device
  • :cppsdspi_host_remove_device
  • :cppsdspi_host_deinit

Other functions are mostly used by the protocol level SD/SDIO/MMC driver via function pointers in the :cppsdmmc_host_t structure. For more details, see the SD/SDIO/MMC Driver <../storage/sdmmc>.

Note

SD over SPI does not support speeds above :cSDMMC_FREQ_DEFAULT due to the limitations of the SPI driver.

Warning

If you want to share the SPI bus among SD card and other SPI devices, there are some restrictions, see sdspi_share.

sdspi_share

API Reference

inc/sdspi_host.inc