#if !defined(CONFIG_IDF_TARGET_ESP32)
#define VSPI FSPI
#endif
#define PIN_MOSI 20
#define PIN_MISO 21
#define PIN_SCK 47
#define PIN_CS 48
static const int spiClk = 80000000;
SPIClass vspi = SPIClass(VSPI);
void initSD(void)
{
  vspi.begin(PIN_SCK, PIN_MISO, PIN_MOSI, PIN_CS);
  pinMode(vspi.pinSS(), OUTPUT);
  digitalWrite(vspi.pinSS(), HIGH);
  digitalWrite(vspi.pinSS(), LOW);
  if (!SD.begin(PIN_CS, vspi, spiClk)) {
    Serial.println(F("SD CARD FAILED, OR NOT PRESENT!")); // don't do anything more:
  }
  Serial.println(F("SD CARD INITIALIZED."));
  uint8_t cardType = SD.cardType();
  if(cardType == CARD_NONE){
      Serial.println("No SD card attached");
      return;
  }
  Serial.print("SD Card Type: ");
  if(cardType == CARD_MMC){
      Serial.println("MMC");
  } else if(cardType == CARD_SD){
      Serial.println("SDSC");
  } else if(cardType == CARD_SDHC){
      Serial.println("SDHC");
  } else {
      Serial.println("UNKNOWN");
  }
  uint64_t cardSize = SD.cardSize() / (1024 * 1024);
  Serial.printf("SD Card Size: %lluMB\n", cardSize);
  digitalWrite(vspi.pinSS(), HIGH);
}
void readFile(fs::FS &fs, const char * path){
  Serial.printf("Reading file: %s\n", path);
  File file = fs.open(path);
  if(!file){
      Serial.println("Failed to open file for reading");
      return;
  }
  Serial.print("Read from file: ");
  while(file.available()){
      Serial.write(file.read());
  }
  file.close();
}
void sd_test_read(void)
{
  digitalWrite(vspi.pinSS(), LOW);
  readFile(SD, "/test.txt");
  digitalWrite(vspi.pinSS(), HIGH);
}
void setup(void)
{
  Serial.begin(115200);
  initSD();
  sd_test_read();
}