ESP32 S3 usage of SPI3, how to do?
Hi, I'm trying to use SPI3 of a ESP32 S3 for a SD-card. How to do that? ( VSC-PlatformIO-Arduino environment ) My main.cpp:
`#include <Arduino.h>
#include <SdFat.h> // #include <SPIFFS.h> // required? // #include <SPI.h> // required?
#include <sdios.h>
SdFat SD;
#define SD_MISO 18 #define SD_MOSI 17 #define SD_SCLK 48 #define SD_CS 47 SPIClass sdSPI(1); // 0 works, 1 works, 2 & 3 doesn't work .... what is correct for SPI3 ? #define SD_CONFIG SdSpiConfig(SD_CS, USER_SPI_BEGIN, SD_SCK_MHZ(39), &sdSPI)
void setup() { Serial.begin(115200); delay(2000); while (!Serial) { ; };
Serial.println("Setup Start");
sdSPI.begin(SD_SCLK, SD_MISO, SD_MOSI, SD_CS);
if (!SD.begin(SD_CONFIG))
{
Serial.println("SD Card Mount Failed");
// return;
}
else
{
Serial.println("SD Card Mount OK");
}
loop ()
{ }
My .platformio.ini[env:esp32-s3-devkitc-1-n16r8v]
platform = espressif32
board = esp32-s3-devkitc-1-n16r8v
framework = arduino
lib_deps = greiman/SdFat@^2.2.2
monitor_speed = 115200
`
Up to now I did not find any information how to address a specific SPI unit ( ESP32 S3 )
Thanks in advance for any useful hint
I have no idea how to use SPI3 on a ESP32 S3 and don't have one so I can't experiment.
I suggest you try this simple program to see if SPI3 passes these tests. If possible look at signals on a scope. This does not test SCK.
// connect MOSI to MISO
// Modify for your configuration.
#include "SPI.h"
#define SD_MISO MISO
#define SD_MOSI MOSI
void setup() {
Serial.begin(9600);
while (!Serial) {}
Serial.println("\nBegin!");
pinMode(SD_MISO, INPUT_PULLUP);
pinMode(SD_MOSI, OUTPUT);
digitalWrite(SD_MOSI, HIGH);
if (!digitalRead(SD_MISO)) {
Serial.println("Error: MISO not HIGH");
return;
}
digitalWrite(SD_MOSI, LOW);
if (digitalRead(SD_MISO)) {
Serial.println("Error: MISO not LOW");
return;
}
pinMode(SD_MISO, INPUT);
pinMode(SD_MOSI, INPUT);
SPI.begin();
// start with a 4 MHz clock
SPI.beginTransaction(SPISettings(4000000, MSBFIRST, SPI_MODE0));
uint8_t rx;
uint8_t tx = 0;
do {
rx = SPI.transfer(tx);
if (tx != rx) {
Serial.print("Error rx: 0x");
Serial.print(rx, HEX);
Serial.print(" != tx: 0x");
Serial.println(tx, HEX);
Serial.println("Is MOSI connected to MISO?");
return;
}
} while (tx++ < 255);
Serial.println("Success!");
}
void loop() {}