Add SDIO interface as second sdcard interface to save on pins

Signed-off-by: Mimoja <git@mimoja.de>
This commit is contained in:
Mimoja
2023-07-05 17:14:38 +02:00
parent 88c5ee76be
commit 815e5593f6
3 changed files with 34 additions and 9 deletions

View File

@@ -21,6 +21,10 @@
#endif #endif
#endif #endif
#ifdef HAS_SDIOCARD
#define HAS_SDCARD
#endif
class DynStorage { class DynStorage {
public: public:
DynStorage(); DynStorage();

View File

@@ -755,7 +755,7 @@ void APTask(void* parameter) {
#endif #endif
Serial.println("Please verify your wiring and try again!"); Serial.println("Please verify your wiring and try again!");
} }
#ifdef HAS_SDCARD #if defined(HAS_SDCARD) && ! defined(HAS_SDIOCARD)
if (SD_CARD_CLK == FLASHER_AP_CLK || if (SD_CARD_CLK == FLASHER_AP_CLK ||
SD_CARD_MISO == FLASHER_AP_MISO || SD_CARD_MISO == FLASHER_AP_MISO ||
SD_CARD_MOSI == FLASHER_AP_MOSI) { SD_CARD_MOSI == FLASHER_AP_MOSI) {

View File

@@ -1,9 +1,20 @@
#include "storage.h" #include "storage.h"
#ifdef HAS_SDCARD #ifdef HAS_SDIOCARD
#define HAS_SDCARD
#define BOARD_HAS_1BIT_SDMMC
#define SD SD_MMC
#include "SD_MMC.h"
#elif HAS_SDCARD
#include "FS.h" #include "FS.h"
#include "SD.h" #include "SD.h"
#include "SPI.h" #include "SPI.h"
static SPIClass* spi;
#endif #endif
#include "LittleFS.h" #include "LittleFS.h"
@@ -16,31 +27,40 @@ static void initLittleFS() {
} }
#ifdef HAS_SDCARD #ifdef HAS_SDCARD
static SPIClass* spi;
static void initSDCard() { static bool initSDCard() {
#ifdef HAS_SDIOCARD
// TODO call SD_MMC.set
//SD_MMC.setPins(int clk, int cmd, int d0)
bool res = SD_MMC.begin(); if (!res) {
Serial.println("Card Mount Failed");
return false;
}
#else
// SD.begin and spi.begin are allocating memory so we dont want to do that
uint8_t spi_bus = VSPI; uint8_t spi_bus = VSPI;
// SD.begin and spi.begin are allocating memory so we dont want to do that if(!spi) {
if(!spi) {
spi = new SPIClass(spi_bus); spi = new SPIClass(spi_bus);
spi->begin(SD_CARD_CLK, SD_CARD_MISO, SD_CARD_MOSI, SD_CARD_SS); spi->begin(SD_CARD_CLK, SD_CARD_MISO, SD_CARD_MOSI, SD_CARD_SS);
bool res = SD.begin(SD_CARD_SS, *spi, 40000000); bool res = SD.begin(SD_CARD_SS, *spi, 40000000);
if (!res) { if (!res) {
Serial.println("Card Mount Failed"); Serial.println("Card Mount Failed");
return; return false;
} }
} }
#endif
uint8_t cardType = SD.cardType(); uint8_t cardType = SD.cardType();
if (cardType == CARD_NONE) { if (cardType == CARD_NONE) {
Serial.println("No SD card attached"); Serial.println("No SD card attached");
return; return false;
} }
contentFS = &SD; contentFS = &SD;
return true;
} }
uint8_t DynStorage::cardType() { uint8_t DynStorage::cardType() {
@@ -266,7 +286,8 @@ void DynStorage::begin() {
} }
void DynStorage::end() { void DynStorage::end() {
#ifdef HAS_SDCARD // SDIO does not use the SPI interface and will therefore not occupy the SPI capability
#if defined(HAS_SDCARD) && ! defined(HAS_SDIOCARD)
initLittleFS(); initLittleFS();
if (SD_CARD_CLK == FLASHER_AP_CLK || if (SD_CARD_CLK == FLASHER_AP_CLK ||
SD_CARD_MISO == FLASHER_AP_MISO || SD_CARD_MISO == FLASHER_AP_MISO ||