Can't mount micro SD card

Help!

OK, I'm having trouble with accessing a micro SD card with a ESP-WROOM-32D ("ESP32 DEV Module" in the IDE). There is a chance that I damaged the device as I accidentally had the SPI lines level-shifted to 5 V. Maybe this is the problem?

I've tried all sorts of code, but I can demonstrate the problem with the 'ReadWrite' example code in the Arduino IDE. When I run that sketch I get the following output:

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1100
load:0x40078000,len:9232
load:0x40080400,len:6400
entry 0x400806a8
Initializing SD card...initialization failed!

I have tried:

  • two different micro SD Cards (2 and 16 GBs)
  • formatting them as FAT16 and FAT 32
  • formatting them with Gparted on Linux, as well as the windows native format feature. I have also used the SD formatter program on a windows machine.

Hardware-wise when I power cycle the ESP32:

  • the SPI clock looks good
  • SPI MOSI shows 21 bytes of 0xFF, then 0x40.
  • SPI MISO seems to stay high while the clock is toggling. The trace has some weird transients on it, which is making me think the MISO got zapped by the accidental 5V logic.

I'm waiting on a new ESP-WROOM-32D module to try out. Anything else I might be missing? I've spent way too much time on this already..

Thanks,
Steve

There is only one way to format SD, and that is done by following the first post on thread. Do it that way, and only that way and only on the windows machine, and then start worrying whether you have done any damage.

There shouldn't be any level shifting between an SD card and an ESP32. Both are 3.3V devices. If your SD cards still work in your computer, then one possibility is that the card's CS pin isn't connected to the right ESP32 pin. So the ESP32 thinks it's selecting the card on one pin, but the CS line is actually connected to another pin. That would leave MISO high all the time. So you might look at the SD's CS line to see if there's any activity there during the initialization attempt.