greiman / SdFat

Arduino FAT16/FAT32 exFAT Library
MIT License
1.07k stars 503 forks source link

Did not work at ESP32-CAM #469

Open JoergTiedemann opened 6 months ago

JoergTiedemann commented 6 months ago

Hi I'm using latest version on a ESP-32-CAM board. But i didn't got it to run I use the followingfor initialization: if (!SD.begin(SS, SD_SCK_MHZ(10))) { Serial.println("SD Card Mount Failed"); return; } but everything was i got was SD-card mount failed. SO what is the right configuration for an ESP32-CAM board ?

greiman commented 6 months ago

What happens if you run the QuickStart example?

JoergTiedemann commented 6 months ago

quickstart example did not work:

I got standard SD library running with this parameters:

....
#define SD_MISO 2
#define SD_MOSI 15
#define SD_SCLK 14
#define SD_CS 13
SPIClass sdSPI(VSPI);
sdSPI.begin(SD_SCLK, SD_MISO, SD_MOSI, SD_CS);
if(!SD.begin(SD_CS, sdSPI)){ 
...

So at my ESP32-CAM board the CS Pin is definitly GPIO 13 If I enter 13 in the serial monitor of quickstart example I got the following message:

13
Assuming the SD is the only SPI device.
Edit DISABLE_CHIP_SELECT to disable another device.
SD initialization failed.
Do not reformat the card!
Is the card correctly inserted?
Is chipSelect set to the correct value?
Does another SPI device need to be disabled?
Is there a wiring/soldering problem?
errorCode: 0x1, errorData: 0x0
Restarting
Enter the chip select pin number: 

Because of I got standard SD library running I suppose that something with SPI Interface to access SDFat is going wrong problably you can help me or give me some tips how to get the example working on ESP32-CAM

greiman commented 6 months ago

Try the following.

#define SD_MISO 2
#define SD_MOSI 15
#define SD_SCLK 14
#define SD_CS 13
SPIClass sdSPI(VSPI);
#define SD_CONFIG SdSpiConfig(SD_CS, USER_SPI_BEGIN | SHARED_SPI, SD_SCK_MHZ(10), &sdSPI)

...

  sdSPI.begin(SD_SCLK, SD_MISO, SD_MOSI, SD_CS);
  if (!SD.begin(SD_CONFIG)) { Serial.println("SD Card Mount Failed"); return; }

I don't have your ESP32 board so I can't test it.

greiman commented 6 months ago

I did compile the following. But can't test it.

#include "SdFat.h"
SdFat SD;

#define SD_MISO 2
#define SD_MOSI 15
#define SD_SCLK 14
#define SD_CS 13
SPIClass sdSPI(VSPI);
#define SD_CONFIG SdSpiConfig(SD_CS, USER_SPI_BEGIN | SHARED_SPI, SD_SCK_MHZ(10), &sdSPI)

void setup() {
  Serial.begin(9600);
  while (!Serial) {}
  sdSPI.begin(SD_SCLK, SD_MISO, SD_MOSI, SD_CS);
  if (!SD.begin(SD_CONFIG)) { Serial.println("SD Card Mount Failed"); return; }
}
void loop() {
}
JoergTiedemann commented 6 months ago

this works, thank you for support :-) you should at minimum add an addidional example in your repo please found many posts on google about people with same problem

greiman commented 6 months ago

you should at minimum add an addidional example in your repo please

There is a example of more general way to use non standard SPI.

The arguments for SdSpiConfig are defined in the html documentation.

opt

The problem is that there are now hundreds arduino compatible boards. I can't really even test on very many.

See this.