ESP32C3 SD card not being found, but works with NRF52840

I have a project that I am working on where I have a custom board using a XTSDG04GWSIGA SD NAND Flash memory chip.

Recognizing that the XIAO ESP32C3 and the XIAO NRF52840 share a nearly identical footprint for pads, including the battery hookups, I wanted to create a simple breakout board that could be used interchangeably.

Here is my circuit for the SD NAND Flash:

All works fine when I use an NRF52840 and the example SdInfo.ino from SdFat library:

12:16:06.604 -> Assuming the SD chip select pin is: 2
12:16:06.604 -> Edit SD_CS_PIN to change the SD chip select pin.
12:16:06.604 -> 
12:16:06.604 -> type any character to start
12:16:13.369 -> init time: 5 ms
12:16:13.369 -> 
12:16:13.369 -> Card type: SD2
12:16:13.369 -> sdSpecVer: 2.00
12:16:13.369 -> HighSpeedMode: true
12:16:13.369 -> 
12:16:13.369 -> Manufacturer ID: 0XB
12:16:13.369 -> OEM ID: XT
12:16:13.369 -> Product: X1100
12:16:13.369 -> Revision: 0.1
12:16:13.369 -> Serial number: 0XD82A13BA
12:16:13.369 -> Manufacturing date: 11/2024
12:16:13.369 -> 
12:16:13.369 -> cardSize: 507.51 MB (MB = 1,000,000 bytes)
12:16:13.369 -> flashEraseSize: 128 blocks
12:16:13.369 -> eraseSingleBlock: true
12:16:13.369 -> dataAfterErase: ones
12:16:13.369 -> 
12:16:13.369 -> OCR: 0X80FF8000
12:16:13.369 -> 
12:16:13.369 -> SD Partition Table
12:16:13.369 -> part,boot,bgnCHS[3],type,endCHS[3],start,length
12:16:13.369 -> 1,0X0,0X3,0X31,0X0,0X6,0X5,0XF5,0XD7,237,990995
12:16:13.369 -> 2,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0,0
12:16:13.402 -> 3,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0,0
12:16:13.402 -> 4,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0,0
12:16:13.449 -> 
12:16:13.449 -> Scanning FAT, please wait.
12:16:14.762 -> 
12:16:14.762 -> Volume is FAT16
12:16:14.762 -> sectorsPerCluster: 32
12:16:14.800 -> fatStartSector:    238
12:16:14.800 -> dataStartSector:   512
12:16:14.800 -> clusterCount:      30960
12:16:14.800 -> freeClusterCount:  30958

But running the same code with the XIAO ESP32C3 results in this:

12:28:38.877 -> SdFat version: 2.2.2
12:28:38.877 -> 
12:28:38.877 -> Assuming the SD is the only SPI device.
12:28:38.877 -> Edit DISABLE_CS_PIN to disable an SPI device.
12:28:38.877 -> 
12:28:38.877 -> Assuming the SD chip select pin is: 4
12:28:38.877 -> Edit SD_CS_PIN to change the SD chip select pin.
12:28:38.877 -> 
12:28:38.877 -> type any character to start
12:28:44.379 -> 
12:28:44.379 -> SD initialization failed.
12:28:44.379 -> Do not reformat the card!
12:28:44.379 -> Is the card correctly inserted?
12:28:44.379 -> Is there a wiring/soldering problem?
12:28:44.379 -> Is SD_CS_PIN set to the correct value?
12:28:44.379 -> Does another SPI device need to be disabled?
12:28:44.379 -> SD errorCode: SD_CARD_ERROR_CMD0 = 0x1
12:28:44.379 -> SD errorData = 0x3
12:28:44.379 -> 
12:28:44.379 -> type any character to start

To confirm, I am using the Arduino IDE 2.3.6 with the XIAO_NRF52840 or the XIAO_ESP32C3 board configs selected on upload.

Any idea or am I missing something?

Hi there,

And Welcome here.

So two things, one they share the same footprint but that’s it. Try using the GPIO pin numbers in place of the logical names (d2), (A3) etc.
try that first. Can you post the code you are using and which BSP files for each. They have different SPI interfaces too, Check out Adding an External Flash chip to the Grove Expansion Board Thread on here, there is code there that shows the two differences. I ran into the same thing when adding the Flash chip and the Self test. Look at the demo and code you’ll see what I mean. The BSP you are using can also affect it depending on the LIB’s used.

HTH
GL :slight_smile: PJ :v:

Thanks @PJ_Glasso for the reply!

This is the example SDInfo.ino code from the SfFat library that I used with XIAO_ESP32C3

Note the addition of this:

#define SDCARD_SS_PIN 4

setting to D2 does not change the pin #

and this in setup to deselect SDCard initially (doesn’t change outcome without it):

  pinMode(SDCARD_SS_PIN, OUTPUT);
  digitalWrite(SDCARD_SS_PIN, HIGH);  // deselect the SD card initially

Example ino file:

/*
 * This program attempts to initialize an SD card and analyze its structure.
 */
#include "SdFat.h"
#include "sdios.h"
/*
  Set DISABLE_CS_PIN to disable a second SPI device.
  For example, with the Ethernet shield, set DISABLE_CS_PIN
  to 10 to disable the Ethernet controller.
*/
const int8_t DISABLE_CS_PIN = -1;
/*
  Change the value of SD_CS_PIN if you are using SPI
  and your hardware does not use the default value, SS.
  Common values are:
  Arduino Ethernet shield: pin 4
  Sparkfun SD shield: pin 8
  Adafruit SD shields and modules: pin 10
*/
// SDCARD_SS_PIN is defined for the built-in SD on some boards.
#define SDCARD_SS_PIN 4
#ifndef SDCARD_SS_PIN
const uint8_t SD_CS_PIN = SS;
#else   // SDCARD_SS_PIN
const uint8_t SD_CS_PIN = SDCARD_SS_PIN;
#endif  // SDCARD_SS_PIN

// Try to select the best SD card configuration.
#if HAS_SDIO_CLASS
#define SD_CONFIG SdioConfig(FIFO_SDIO)
#elif ENABLE_DEDICATED_SPI
#define SD_CONFIG SdSpiConfig(SD_CS_PIN, DEDICATED_SPI, SD_SCK_MHZ(16))
#else  // HAS_SDIO_CLASS
#define SD_CONFIG SdSpiConfig(SD_CS_PIN, SHARED_SPI, SD_SCK_MHZ(16))
#endif  // HAS_SDIO_CLASS

//------------------------------------------------------------------------------
SdFs sd;
cid_t cid;
csd_t csd;
scr_t scr;
uint8_t cmd6Data[64];
uint32_t eraseSize;
uint32_t ocr;
static ArduinoOutStream cout(Serial);
//------------------------------------------------------------------------------
void cidDmp() {
  cout << F("\nManufacturer ID: ");
  cout << uppercase << showbase << hex << int(cid.mid) << dec << endl;
  cout << F("OEM ID: ") << cid.oid[0] << cid.oid[1] << endl;
  cout << F("Product: ");
  for (uint8_t i = 0; i < 5; i++) {
    cout << cid.pnm[i];
  }
  cout << F("\nRevision: ") << cid.prvN() << '.' << cid.prvM() << endl;
  cout << F("Serial number: ") << hex << cid.psn() << dec << endl;
  cout << F("Manufacturing date: ");
  cout << cid.mdtMonth() << '/' << cid.mdtYear() << endl;
  cout << endl;
}
//------------------------------------------------------------------------------
void clearSerialInput() {
  uint32_t m = micros();
  do {
    if (Serial.read() >= 0) {
      m = micros();
    }
  } while (micros() - m < 10000);
}
//------------------------------------------------------------------------------
void csdDmp() {
  eraseSize = csd.eraseSize();
  cout << F("cardSize: ") << 0.000512 * csd.capacity();
  cout << F(" MB (MB = 1,000,000 bytes)\n");

  cout << F("flashEraseSize: ") << int(eraseSize) << F(" blocks\n");
  cout << F("eraseSingleBlock: ");
  if (csd.eraseSingleBlock()) {
    cout << F("true\n");
  } else {
    cout << F("false\n");
  }
  cout << F("dataAfterErase: ");
  if (scr.dataAfterErase()) {
    cout << F("ones\n");
  } else {
    cout << F("zeros\n");
  }
}
//------------------------------------------------------------------------------
void errorPrint() {
  if (sd.sdErrorCode()) {
    cout << F("SD errorCode: ") << hex << showbase;
    printSdErrorSymbol(&Serial, sd.sdErrorCode());
    cout << F(" = ") << int(sd.sdErrorCode()) << endl;
    cout << F("SD errorData = ") << int(sd.sdErrorData()) << dec << endl;
  }
}
//------------------------------------------------------------------------------
bool mbrDmp() {
  MbrSector_t mbr;
  bool valid = true;
  if (!sd.card()->readSector(0, (uint8_t *)&mbr)) {
    cout << F("\nread MBR failed.\n");
    errorPrint();
    return false;
  }
  cout << F("\nSD Partition Table\n");
  cout << F("part,boot,bgnCHS[3],type,endCHS[3],start,length\n");
  for (uint8_t ip = 1; ip < 5; ip++) {
    MbrPart_t *pt = &mbr.part[ip - 1];
    if ((pt->boot != 0 && pt->boot != 0X80) ||
        getLe32(pt->relativeSectors) > csd.capacity()) {
      valid = false;
    }
    cout << int(ip) << ',' << uppercase << showbase << hex;
    cout << int(pt->boot) << ',';
    for (int i = 0; i < 3; i++) {
      cout << int(pt->beginCHS[i]) << ',';
    }
    cout << int(pt->type) << ',';
    for (int i = 0; i < 3; i++) {
      cout << int(pt->endCHS[i]) << ',';
    }
    cout << dec << getLe32(pt->relativeSectors) << ',';
    cout << getLe32(pt->totalSectors) << endl;
  }
  if (!valid) {
    cout << F("\nMBR not valid, assuming Super Floppy format.\n");
  }
  return true;
}
//------------------------------------------------------------------------------
void dmpVol() {
  cout << F("\nScanning FAT, please wait.\n");
  int32_t freeClusterCount = sd.freeClusterCount();
  if (sd.fatType() <= 32) {
    cout << F("\nVolume is FAT") << int(sd.fatType()) << endl;
  } else {
    cout << F("\nVolume is exFAT\n");
  }
  cout << F("sectorsPerCluster: ") << sd.sectorsPerCluster() << endl;
  cout << F("fatStartSector:    ") << sd.fatStartSector() << endl;
  cout << F("dataStartSector:   ") << sd.dataStartSector() << endl;
  cout << F("clusterCount:      ") << sd.clusterCount() << endl;
  cout << F("freeClusterCount:  ");
  if (freeClusterCount >= 0) {
    cout << freeClusterCount << endl;
  } else {
    cout << F("failed\n");
    errorPrint();
  }
}
//------------------------------------------------------------------------------
void printCardType() {
  cout << F("\nCard type: ");

  switch (sd.card()->type()) {
    case SD_CARD_TYPE_SD1:
      cout << F("SD1\n");
      break;

    case SD_CARD_TYPE_SD2:
      cout << F("SD2\n");
      break;

    case SD_CARD_TYPE_SDHC:
      if (csd.capacity() < 70000000) {
        cout << F("SDHC\n");
      } else {
        cout << F("SDXC\n");
      }
      break;

    default:
      cout << F("Unknown\n");
  }
}
//------------------------------------------------------------------------------
void printConfig(SdSpiConfig config) {
  if (DISABLE_CS_PIN < 0) {
    cout << F(
        "\nAssuming the SD is the only SPI device.\n"
        "Edit DISABLE_CS_PIN to disable an SPI device.\n");
  } else {
    cout << F("\nDisabling SPI device on pin ");
    cout << int(DISABLE_CS_PIN) << endl;
    pinMode(DISABLE_CS_PIN, OUTPUT);
    digitalWrite(DISABLE_CS_PIN, HIGH);
  }
  cout << F("\nAssuming the SD chip select pin is: ") << int(config.csPin);
  cout << F("\nEdit SD_CS_PIN to change the SD chip select pin.\n");
}
//------------------------------------------------------------------------------
void printConfig(SdioConfig config) {
  (void)config;
  cout << F("Assuming an SDIO interface.\n");
}
//-----------------------------------------------------------------------------
void setup() {
  Serial.begin(9600);
  // Wait for USB Serial
  while (!Serial) {
    yield();
  }
  cout << F("SdFat version: ") << SD_FAT_VERSION_STR << endl;
  printConfig(SD_CONFIG);
  pinMode(SDCARD_SS_PIN, OUTPUT);
  digitalWrite(SDCARD_SS_PIN, HIGH);  // deselect the SD card initially
}
//------------------------------------------------------------------------------
void loop() {
  // Read any existing Serial data.
  clearSerialInput();

  // F stores strings in flash to save RAM
  cout << F("\ntype any character to start\n");
  while (!Serial.available()) {
    yield();
  }
  uint32_t t = millis();
  if (!sd.cardBegin(SD_CONFIG)) {
    cout << F(
        "\nSD initialization failed.\n"
        "Do not reformat the card!\n"
        "Is the card correctly inserted?\n"
        "Is there a wiring/soldering problem?\n");
    if (isSpi(SD_CONFIG)) {
      cout << F(
          "Is SD_CS_PIN set to the correct value?\n"
          "Does another SPI device need to be disabled?\n");
    }
    errorPrint();
    return;
  }
  t = millis() - t;
  cout << F("init time: ") << dec << t << " ms" << endl;

  if (!sd.card()->readCID(&cid) || !sd.card()->readCSD(&csd) ||
      !sd.card()->readOCR(&ocr) || !sd.card()->readSCR(&scr)) {
    cout << F("readInfo failed\n");
    errorPrint();
    return;
  }
  printCardType();
  cout << F("sdSpecVer: ") << 0.01 * scr.sdSpecVer() << endl;
  cout << F("HighSpeedMode: ");
  if (scr.sdSpecVer() && sd.card()->cardCMD6(0X00FFFFFF, cmd6Data) &&
      (2 & cmd6Data[13])) {
    cout << F("true\n");
  } else {
    cout << F("false\n");
  }
  cidDmp();
  csdDmp();
  cout << F("\nOCR: ") << uppercase << showbase;
  cout << hex << ocr << dec << endl;
  if (!mbrDmp()) {
    return;
  }
  if (!sd.volumeBegin()) {
    cout << F("\nvolumeBegin failed. Is the card formatted?\n");
    errorPrint();
    return;
  }
  dmpVol();
}

Hi NRav90,
This is the result of running your sketch on ESP32C3.
#define SDCARD_SS_PIN 4, so the SD card chip select pin is connected to pin D2(GPIO4) of XIAO ESP32C3.

18:24:27.355 -> Assuming the SD is the only SPI device.
18:24:27.355 -> Edit DISABLE_CS_PIN to disable an SPI device.
18:24:27.355 -> 
18:24:27.355 -> Assuming the SD chip select pin is: 4
18:24:27.355 -> Edit SD_CS_PIN to change the SD chip select pin.
18:24:27.355 -> 
18:24:27.355 -> type any character to start
18:24:35.074 -> init time: 3 ms
18:24:35.074 -> 
18:24:35.074 -> Card type: SDHC
18:24:35.074 -> sdSpecVer: 6.00
18:24:35.074 -> HighSpeedMode: true
18:24:35.074 -> 
18:24:35.074 -> Manufacturer ID: 0X2
18:24:35.074 -> OEM ID: TM
18:24:35.074 -> Product: SA32G
18:24:35.074 -> Revision: 7.0
18:24:35.074 -> Serial number: 0X2B427EED
18:24:35.074 -> Manufacturing date: 2/2023
18:24:35.074 -> 
18:24:35.074 -> cardSize: 30979.13 MB (MB = 1,000,000 bytes)
18:24:35.074 -> flashEraseSize: 128 blocks
18:24:35.074 -> eraseSingleBlock: true
18:24:35.074 -> dataAfterErase: zeros
18:24:35.074 -> 
18:24:35.074 -> OCR: 0XC0FF8000
18:24:35.074 -> 
18:24:35.074 -> SD Partition Table
18:24:35.074 -> part,boot,bgnCHS[3],type,endCHS[3],start,length
18:24:35.074 -> 1,0X0,0X82,0X3,0X0,0XC,0XFE,0XFF,0XFF,8192,60497920
18:24:35.074 -> 2,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0,0
18:24:35.074 -> 3,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0,0
18:24:35.074 -> 4,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0,0
18:24:35.074 -> 
18:24:35.074 -> Scanning FAT, please wait.
18:24:37.372 -> 
18:24:37.372 -> Volume is FAT32
18:24:37.372 -> sectorsPerCluster: 64
18:24:37.372 -> fatStartSector:    9808
18:24:37.372 -> dataStartSector:   24576
18:24:37.372 -> clusterCount:      945024
18:24:37.372 -> freeClusterCount:  941674
18:24:37.404 -> 
18:24:37.404 -> type any character to start

Thanks for testing the code - this is what I expect as my circuit is identical for both nrf52840 and the esp32c3. I have tested on 2 boards with the esp32c3, each have the same behaviour, and all other pins are working fine.

This brings me to conclude there is likely a circuit issue that effects the esp32c3 but not the nrf52840 version?

All I have are pull ups on MISO, MOSI, and the CS lines.

My next thoughts are something about the strapping pin (GPIO9)? Which shares MISO of the SPI. I have an external pullup (4.7k). Does that pin also have an internal pull up? Could that be the issue here?

It works fine regardless of whether there is external pull-up resistors or not.
When #define SDCARD_SS_PIN 4,which pin on the XIAO is the chip select pin connected to? Is it the D2(GPIO4) pin?

It is connected to D2 (GPIO4). I’ve soldered the esp32c3 or nrf52840 xiao boards to the same custom PCB. All other pins work as expected. Only problem is the D2, D8, D9, D10 for the SD card/nand flash chip.

And I’m confused why… circuit is exactly the same. I have tested two boards with two separate esp32c3, same issue.

The test was conducted using the ExpansionBoard linked below, with nRF52840 and ESP32C3.
The schematic is available on the Wiki. Please compare it with your circuit.

Have you tried the sketches in ESP32C3 Examples?

Please let us know where you obtained the SdFat.h and sketch you are trying.

I used the example sketch for the ESP32C3 exactly as coded here on the XIAO website.

And still get initialization failed:

09:41:55.671 -> Initializing SD card...initialization failed!

Could it be the library being used? Evidently I have multiple SD libraries… see below:

Multiple libraries were found for "SD.h"
  Used: C:\Users\REDACTED\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.2.0\libraries\SD
  Not used: C:\Users\REDACTED\AppData\Local\Arduino15\libraries\SD
  Not used: C:\Users\REDACTED\OneDrive\Documents\Arduino\libraries\SD
Using library SPI at version 3.2.0 in folder: C:\Users\REDACTED\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.2.0\libraries\SPI 
Using library SD at version 3.2.0 in folder: C:\Users\REDACTED\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.2.0\libraries\SD 
Using library FS at version 3.2.0 in folder: C:\Users\REDACTED\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.2.0\libraries\FS 
"C:\\Users\\REDACTED\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp-rv32\\2411/bin/riscv32-esp-elf-size" -A "C:\\Users\\REDACTED\\AppData\\Local\\arduino\\sketches\\9F0D0B24F14FDEDA34C167C0D265AEBD/sketch_jun26a.ino.elf"

I wasn’t really aware of it, but it seems that SdFat.h is being used.

Using library SdFat - Adafruit Fork at version 2.2.54 in folder: C:\Users\msfujino\Documents\Arduino\libraries\SdFat_-_Adafruit_Fork

After checking the operation of C3 in detail, the loop runs only once and then hangs while waiting for input from the keyboard.

Why not try the example sketch specifically for ESP32C3?

That is exactly what I did.

My response above is specific to the esp32c3 sketch being used on an esp32c3 with the appropriate pinout and circuit connections, which are identical in footprint to the nrf52840.

The SdFat library is used for the nrf52840 chip example, the SD library is used for the esp32c3

In my environment, even when I select ESP32C3 and compile, SD is not used, and SdFat is used instead.

How about deleting libraries that may be conflicting,
or trying an example sketch specifically for ESP32C3?

Is your issue that the SD card does not work with C3, or that C3 does not work with the same sketch as nRF52?

The issue is the former. Despite having the same circuit, the SD card chip does not work with the ESP32C3, but works fine with the nrf52480.

My question is whether the reason why the SD card does not work with C3 is not a hardware problem, but rather because you are trying to run the same sketch as nRF52.
I think you need to try running the SD card with C3 without sticking to the same sketch as nRF52 to determine whether there is a hardware problem.

File/Examples/Examples for XIAO_ ESP32C3/SD/SD_Test

Does the SD card work?

to confirm - I am NOT running the same sketch as the NRF52. I am running the XIAO ESP32C3 example on a XIAO ESP32C3.

To review:

  • I am using a custom PCB. same PCB (different units from same batch) for all tests.
  • D2 , D8, D9, and D10 for SD card connection.
  • I have one PCB with the XIAO NRF52840, another with the XIAO ESP32C3, castellated soldering.
  • The NRF52840 version recognizes the SD NAND flash using the XIAO nRF52840 SD card example sketch
  • The ESP32C3 version does not recognize the same NAND flash using the XIAO ESP32C3 SD card example sketch
  • I have attempted a different PCB from the same batch, with a different XIAO ESP32C3, using the XIAO ESP32C3 SD card example sketch, and still do not detect the SD NAND Flash

Can you show me a sketch where SD doesn’t work on C3? I’d like to try it here.
So far, no matter what sketch you try, SD doesn’t work on C3, right?

There seems to be a conflict with the SD library. Have you tried it in an environment where only the C3 library can be used?

What I want to know is whether there is a hardware issue or a conflict with the SD library.

I just tested @PJ_Glasso code without modification (uses D2 for CS) which he shared here.

And here is my serial printout:

17:35:37.200 -> Power ON 
17:35:37.200 ->  
17:35:37.200 -> Test program compiled on Jun 26 2025 at 17:35:23
17:35:37.200 -> 
17:35:37.200 -> Processor came out of reset.
17:35:37.200 -> 
17:35:37.200 -> --------------
17:35:37.200 -> 4
17:35:37.200 -> 10
17:35:37.200 -> 9
17:35:37.200 -> 8
17:35:37.200 -> --------------
17:35:37.200 -> Card Mount Failed

And here is my compiler:

esptool.py v4.8.1
Creating esp32c3 image...
Merged 2 ELF sections
Successfully created esp32c3 image.
"C:\\Users\\REDACTED\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.3.0-alpha1\\tools\\gen_esp32part.exe" -q "C:\\Users\\REDACTED\\AppData\\Local\\arduino\\sketches\\0AA4C491AED495659B5991D90DEFD879/partitions.csv" "C:\\Users\\REDACTED\\AppData\\Local\\arduino\\sketches\\0AA4C491AED495659B5991D90DEFD879/sketch_jun26a.ino.partitions.bin"
cmd /c if exist "C:\\Users\\REDACTED\\AppData\\Local\\arduino\\sketches\\0AA4C491AED495659B5991D90DEFD879\\libraries\\Insights" "C:\\Users\\REDACTED\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.3.0-alpha1\\tools\\gen_insights_package.exe" "C:\\Users\\REDACTED\\AppData\\Local\\arduino\\sketches\\0AA4C491AED495659B5991D90DEFD879" sketch_jun26a.ino "C:\\Users\\REDACTED\\AppData\\Local\\Temp\\.arduinoIDE-unsaved2025526-10356-1cr0d20.55qp\\sketch_jun26a"
cmd /c if exist "C:\\Users\\REDACTED\\AppData\\Local\\arduino\\sketches\\0AA4C491AED495659B5991D90DEFD879\\libraries\\ESP_SR" if exist "C:\\Users\\REDACTED\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-arduino-libs\\idf-master-d930a386-v1\\esp32c3\\esp_sr\\srmodels.bin" COPY /y "C:\\Users\\REDACTED\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-arduino-libs\\idf-master-d930a386-v1\\esp32c3\\esp_sr\\srmodels.bin" "C:\\Users\\REDACTED\\AppData\\Local\\arduino\\sketches\\0AA4C491AED495659B5991D90DEFD879\\srmodels.bin"
"C:\\Users\\REDACTED\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esptool_py\\4.9.dev3/esptool.exe" --chip esp32c3 merge_bin -o "C:\\Users\\REDACTED\\AppData\\Local\\arduino\\sketches\\0AA4C491AED495659B5991D90DEFD879/sketch_jun26a.ino.merged.bin" --fill-flash-size 4MB --flash_mode keep --flash_freq keep --flash_size keep 0x0 "C:\\Users\\REDACTED\\AppData\\Local\\arduino\\sketches\\0AA4C491AED495659B5991D90DEFD879/sketch_jun26a.ino.bootloader.bin" 0x8000 "C:\\Users\\REDACTED\\AppData\\Local\\arduino\\sketches\\0AA4C491AED495659B5991D90DEFD879/sketch_jun26a.ino.partitions.bin" 0xe000 "C:\\Users\\REDACTED\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.3.0-alpha1/tools/partitions/boot_app0.bin" 0x10000 "C:\\Users\\REDACTED\\AppData\\Local\\arduino\\sketches\\0AA4C491AED495659B5991D90DEFD879/sketch_jun26a.ino.bin"
esptool.py v4.8.1
Wrote 0x400000 bytes to file C:\Users\REDACTED\AppData\Local\arduino\sketches\0AA4C491AED495659B5991D90DEFD879/sketch_jun26a.ino.merged.bin, ready to flash to offset 0x0
Using library FS at version 3.3.0 in folder: C:\Users\REDACTED\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.3.0-alpha1\libraries\FS 
Using library SD at version 3.3.0 in folder: C:\Users\REDACTED\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.3.0-alpha1\libraries\SD 
Using library SPI at version 3.3.0 in folder: C:\Users\REDACTED\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.3.0-alpha1\libraries\SPI 
"C:\\Users\\REDACTED\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp-rv32\\2411/bin/riscv32-esp-elf-size" -A "C:\\Users\\REDACTED\\AppData\\Local\\arduino\\sketches\\0AA4C491AED495659B5991D90DEFD879/sketch_jun26a.ino.elf"
Sketch uses 357998 bytes (27%) of program storage space. Maximum is 1310720 bytes.
Global variables use 12476 bytes (3%) of dynamic memory, leaving 315204 bytes for local variables. Maximum is 327680 bytes.
esptool.py v4.8.1
Serial port COM19
Connecting...
Chip is ESP32-C3 (QFN32) (revision v0.4)
Features: WiFi, BLE, Embedded Flash 4MB (XMC)
Crystal is 40MHz
MAC: 58:8c:81:a3:3d:ec

Edit/Update: Even downgrading my esp32 board version to V2.0.10 to match @PJ_Glasso’s attempt did not change printout.

PJ’s sketch works fine with BSP3.2.0 and 2.0.17, regardless of whether there is a pull-up resistor or not.
There seems to be a problem with the hardware or connection.

Is there a problem with the connection?
What is “castellated soldering”?
Are the soldering methods for nRF52 and C3 different?

1 Like

Hi there,

SO I would have to agree, seems like a hardware issue or perhaps the Soldering heat is too high and cause a problem. Can you post a picture , maybe 2 eyes can see more than two?

Should work ,appears you have done everything correctly , SMH?

HTH
GL :slight_smile: PJ :v:

Here’s a photo of all 3 custom pcbs that I’ve tried an XIAO ESP32C3 on that have not worked to find the SD card… I’ve tested the pins on the sd nand flash chip and it’s receiving power and is grounded.