SdFat-beta icon indicating copy to clipboard operation
SdFat-beta copied to clipboard

ESP32 S3 usage of SPI3, how to do?

Open Pepito-design opened this issue 2 years ago • 1 comments

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

Pepito-design avatar Apr 08 '24 12:04 Pepito-design

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() {}

greiman avatar Apr 08 '24 17:04 greiman