Функция библиотеки SD не работает при использовании второго порта SPI с ESP32

esp32 spi sd

Я работаю над групповым проектом на ESP32. У нас есть ЖК-дисплей и SD-карта, подключенные через два порта SPI ESP32.

Карта без проблем инициализируется с помощью этого кода:

 bool EKG_recording::initialisation_sd() {

  SPIClass * hspi = new SPIClass(HSPI);

  if (!SD.begin(CS_Pin, *hspi))
  {
    Serial.println("No valid SD card!");
    return 0;
  }

  else if (SD.begin(CS_Pin, *hspi))
  {
    Serial.println("SD card initialized!");
    return 1;
  }
  else return 0;
}

Одна функция, с которой у меня возникла проблема, используется для подсчета каждого файла на SD-карте, достаточно просто, верно?

unsigned short EKG_recording::count_files_from_SD(File dir) {
  while (true)
  {
    File entry = dir.openNextFile();
    if (!entry)
    {
      // Serial.println("Anzahl der Daten");
      return counter;
    }
    counter++;
    entry.close();
  }
}

Однажды он работал без проблем, затем мы интегрировали два порта SPI, и теперь я не могу понять, почему он не работает. Эта часть: Файловая запись = dir.openNextFile(); возвращает false при первом вызове, хотя я на 100% уверен, что на SD-карте есть 3 файла.

Я вызываю функцию следующим образом:

Корень файла = SD.open("/"); ЭКГ_запись_1.count_files_from_SD (корень);

Но почему? Любая помощь очень ценится.

Это начальная функция дисплея. Поскольку я этого не писал, я почти ничего о нем не знаю.

    void EKG_display_control::begin()
{
  // Фоновая подсветка выключена
  pinMode(TFT_LED, OUTPUT);
  disable_display_backlight();

  // Инициализировать дисплей
  tft.begin(40000000);
  touch.begin();
  tft.setRotation(ROTATION);

  layout_start_screen();
}

РАСПОРКА:

Адаптер MC+SD

, 👍0

Обсуждение

использую sd переходник, подключал проводами к пинам ESP32, так же добавил распиновку, @Xenoshell

Это просто SD-адаптер, который вы также можете подключить к ПК или ноутбуку. Я припаял к нему несколько контактов и соединил их с контактами ESP32., @Xenoshell

Я также отредактировал функцию начала отображения в основной пост., @Xenoshell

хорошо. как инициализируется SPI для дисплея? Я предполагаю, что он использует объект SPI по умолчанию. так что все выглядит нормально., @Juraj

Я спросил члена моей команды, и она сказала, что дисплей использует SPI по умолчанию., @Xenoshell

@Juraj Я добавил картинку, чтобы показать, как подключен SD-адаптер. Ваша помощь очень ценится, @Xenoshell


1 ответ


Лучший ответ:

1

Хорошо, я нашел решение. Это было не слишком сложно. Я просто предположил, что проблема была в коде. Это работает достаточно хорошо (не спрашивайте меня о счетчике--)

  unsigned short EKG_recording::count_files_from_SD() {

  root = SD.open("/");
  root.rewindDirectory(); //Устанавливает в начало каталога


  while (true)
  {
    File entry = root.openNextFile();

    if(!entry){
      Serial.println("Anzahl der Daten");
      counter--;
      return counter;
    }
    counter++;
    entry.close();
  }
}

Это было просто потому, что я всегда использовал SD.open() внутри функций класса, поэтому каждый корень файла был привязан к классу.

,