enjoynering
Well-known member
Как мы знаем у ESP32-S3 три SPI шины. К первой подключена флешка и не доступна для пользователя. Вторая FSPI имеет независимый DMA. В Arduino используется по умолчанию и висит на GPIO 10, 11, 12, 13. Третья HSPI тоже имеет DMA, который совместно используется другими перифериями. Может быть проброшена к любыми GPIO через "GPIO Matrix". Теперь к сути...
На FSPI у меня экран, который раз в секунду обновляет время. Чтобы ему не мешать, хочу повесить SD карточку на HSPI. Код компилируется, но SD карточка не стартует - "SD.begin()" постоянно возвращает false. Что я делаю не так?
Весь код не выкладываю. Вот основные моменты:
На FSPI у меня экран, который раз в секунду обновляет время. Чтобы ему не мешать, хочу повесить SD карточку на HSPI. Код компилируется, но SD карточка не стартует - "SD.begin()" постоянно возвращает false. Что я делаю не так?
Весь код не выкладываю. Вот основные моменты:
Код:
#include <Arduino.h>
#include <SD.h>
#include <FS.h>
#include <SPI.h>
#define AUDIO_SPI_SD_CS 39 //GPIO5 for ESP32
#define AUDIO_SPI_SCK 40 //GPIO18 for ESP32
#define AUDIO_SPI_MOSI 41 //GPIO23 for ESP32
#define AUDIO_SPI_MISO 42 //GPIO19 for ESP32
SPIClass sdSPI(HSPI); //FSPI, HSPI
void setup()
{
pinMode(AUDIO_SPI_SD_CS, OUTPUT);
digitalWrite(AUDIO_SPI_SD_CS, HIGH); //disables SPI interface for SD card
sdSPI.begin(AUDIO_SPI_SCK, AUDIO_SPI_MISO, AUDIO_SPI_MOSI); //start SPI bus
if (SD.begin(AUDIO_SPI_SD_CS, sdSPI, 4000000) != true) //start SD card, SPI3(HSPI), 10MHz (default 4MHz)
{
Serial.printf_P(PSTR("Oops! unable to set SPI3(HSPI) GPIO%u -> CS, GPIO%u -> SCK, GPIO%u -> MOSI, GPIO%u -> MISO\n"), AUDIO_SPI_SD_CS, AUDIO_SPI_SCK, AUDIO_SPI_MOSI, AUDIO_SPI_MISO);
}
}
void loop()
{
vTaskDelay(1); //non-blocking delay allowing other threads to continue running
}