mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
47ba4d639a
ACMD41 argument is different between SD mode and SPI mode. In SPI mode, the only non-zero bit may be the HCS bit. Unlike the SD mode, the bits reflecting the host's OCR should be zero. Previously, we used to set these bits the same way as for the SD mode. This has caused certain cards to fail initializing, apparently their controllers have checked the ACMD41 argument more strictly and refused to finish initialization, resulting in an error such as sdmmc_common: sdmmc_init_ocr: send_op_cond (1) returned 0x107 (Note that this error may have other causes than the one fixed in this commit. For example, if the card doesn't have a sufficient and stable power supply, it may also fail to complete the internal initialization process, and will never clear the busy flag in R1 response.) Closes https://github.com/espressif/esp-idf/issues/6686 Closes https://github.com/espressif/esp-idf/issues/10542
SDMMC Protocol Layer Driver
SD Host Side Related Component Architecture
Architecture Graph
┌─────────────────────────────────────────────┐
│ │
│ SD Protocol Layer Driver: components/sdmmc │
│ │
└──────────▲────────────────────▲─────────────┘
│ │
│ │
Implements │ │ Implements
│ │
┌──────────────────────────────────┴─────┐ ┌────┴───────────────────────────────────┐
│ │ │ │
│Host Driver: components/esp_driver_sdmmc│ │Host Driver: components/esp_driver_sdspi│
│ │ │ │
└────────────────────────────────────────┘ └────────────────────────────────────────┘
Components
sdmmc
: SD protocol layer driver, it provides SD protocol related definitions and interfaces. With corresponding implementation drivers,sdmmc
APIs can help you:- send commands to slave devices
- send and receive data
- handle error conditions within the bus
esp_driver_sdmmc
: SDMMC Host driver for ESP SDMMC hardware, it implements thesdmmc
protocol interfaces.esp_driver_sdspi
: SDSPI Host driver for ESP GPSPI hardware, it implements thesdmmc
protocol interfaces.
Dependency
esp_driver_sdmmc
is in driver layer (G2), it relies onsdmmc
esp_driver_sdspi
is in driver layer (G2), it relies onsdmmc
sdmmc
does not and should not rely onesp_driver_sdmmc
oresp_driver_sdspi
. Thoughsdmmc
is independent, it still stays in G2.