Функция библиотеки SD не работает при использовании второго порта SPI с ESP32
Я работаю над групповым проектом на 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();
}
@Xenoshell, 👍0
Обсуждение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() внутри функций класса, поэтому каждый корень файла был привязан к классу.
- Цифровой потенциометр SPI не работает на ESP32
- Лучшая практика буферизации для непрерывной записи на SD-карту
- Считыватель Rfid и экран SD-карты не работают вместе
- Импульсы SCLK не видны при использовании SPI на ESP32
- ESP32: spi_master: check_trans_valid(801) при использовании SPI
- Библиотека esp32 spi, как читать регистр mcp23s08
- Проблема с SPI-коммуникациями с использованием NodeMCU v 3, Nano и SD
- Не удалось установить SD-карту с Waveshare ESP32 с использованием Arduino IDE
использую sd переходник, подключал проводами к пинам ESP32, так же добавил распиновку, @Xenoshell
Это просто SD-адаптер, который вы также можете подключить к ПК или ноутбуку. Я припаял к нему несколько контактов и соединил их с контактами ESP32., @Xenoshell
Я также отредактировал функцию начала отображения в основной пост., @Xenoshell
хорошо. как инициализируется SPI для дисплея? Я предполагаю, что он использует объект SPI по умолчанию. так что все выглядит нормально., @Juraj
Я спросил члена моей команды, и она сказала, что дисплей использует SPI по умолчанию., @Xenoshell
@Juraj Я добавил картинку, чтобы показать, как подключен SD-адаптер. Ваша помощь очень ценится, @Xenoshell