SD Card Module does not recognize partition

Hello! I recently purchased a full-sized SD card reader

Here is my code (Default Cardinfo sketch from SD library)

/*
  SD card test

 This example shows how use the utility libraries on which the'
 SD library is based in order to get info about your SD card.
 Very useful for testing a card when you're not sure whether its working or not.

 The circuit:
  * SD card attached to SPI bus as follows:
 ** MOSI - pin 11 on Arduino Uno/Duemilanove/Diecimila
 ** MISO - pin 12 on Arduino Uno/Duemilanove/Diecimila
 ** CLK - pin 13 on Arduino Uno/Duemilanove/Diecimila
 ** CS - depends on your SD card shield or module.
 		Pin 4 used here for consistency with other Arduino examples


 created  28 Mar 2011
 by Limor Fried
 modified 9 Apr 2012
 by Tom Igoe
 */
// include the SD library:
#include <SPI.h>
#include <SD.h>

// set up variables using the SD utility library functions:
Sd2Card card;
SdVolume volume;
SdFile root;

// change this to match your SD shield or module;
// Arduino Ethernet shield: pin 4
// Adafruit SD shields and modules: pin 10
// Sparkfun SD shield: pin 8
// MKRZero SD: SDCARD_SS_PIN
const int chipSelect = 53;

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }


  Serial.print("\nInitializing SD card...");

  // we'll use the initialization code from the utility libraries
  // since we're just testing if the card is working!
  if (!card.init(SPI_HALF_SPEED, chipSelect)) {
    Serial.println("initialization failed. Things to check:");
    Serial.println("* is a card inserted?");
    Serial.println("* is your wiring correct?");
    Serial.println("* did you change the chipSelect pin to match your shield or module?");
    return;
  } else {
    Serial.println("Wiring is correct and a card is present.");
  }

  // print the type of card
  Serial.print("\nCard type: ");
  switch (card.type()) {
    case SD_CARD_TYPE_SD1:
      Serial.println("SD1");
      break;
    case SD_CARD_TYPE_SD2:
      Serial.println("SD2");
      break;
    case SD_CARD_TYPE_SDHC:
      Serial.println("SDHC");
      break;
    default:
      Serial.println("Unknown");
  }

  // Now we will try to open the 'volume'/'partition' - it should be FAT16 or FAT32
  if (!volume.init(card)) {
    Serial.println("Could not find FAT16/FAT32 partition.\nMake sure you've formatted the card");
    return;
  }


  // print the type and size of the first FAT-type volume
  uint32_t volumesize;
  Serial.print("\nVolume type is FAT");
  Serial.println(volume.fatType(), DEC);
  Serial.println();

  volumesize = volume.blocksPerCluster();    // clusters are collections of blocks
  volumesize *= volume.clusterCount();       // we'll have a lot of clusters
  volumesize *= 512;                            // SD card blocks are always 512 bytes
  Serial.print("Volume size (bytes): ");
  Serial.println(volumesize);
  Serial.print("Volume size (Kbytes): ");
  volumesize /= 1024;
  Serial.println(volumesize);
  Serial.print("Volume size (Mbytes): ");
  volumesize /= 1024;
  Serial.println(volumesize);


  Serial.println("\nFiles found on the card (name, date and size in bytes): ");
  root.openRoot(volume);

  // list all files in the card with date and size
  root.ls(LS_R | LS_DATE | LS_SIZE);
}


void loop(void) {

}

When I run the code, I get the following error message:

Initializing SD card...Wiring is correct and a card is present.

Card type: SD1
Could not find FAT16/FAT32 partition.
Make sure you've formatted the card

I have formatted the card using the windows formatter utility, and the SD Formatter on Mac. What is wrong???
Any help would be super! :slight_smile: :slight_smile: :slight_smile: :slight_smile:

stupid-questions:
What is wrong???

When connecting this module to an Arduino board with 5V operating voltage, then the voltage for input/output is wrong.

Atmega328 based boards like UNO use 5V operating voltage and I/O voltage in most cases.

But SD cards use 3.3V as operating and I/O voltage.

While your SD module provides a voltage regulator which can control the operating voltage from 5V down to 3.3V, it has NO I/O voltage level shifter

Please look out for a different SD card adapter WITH I/O level shifter!

Or use proper resistors as voltage dividers with your module!

jurs:
When connecting this module to an Arduino board with 5V operating voltage, then the voltage for input/output is wrong.

Atmega328 based boards like UNO use 5V operating voltage and I/O voltage in most cases.

But SD cards use 3.3V as operating and I/O voltage.

While your SD module provides a voltage regulator which can control the operating voltage from 5V down to 3.3V, it has NO I/O voltage level shifter

Please look out for a different SD card adapter WITH I/O level shifter!

Or use proper resistors as voltage dividers with your module!

By doing it wrong all this time, did I break it? Will I need to purchase a new one?
Also, the error message I'm getting says that the card is detected - and that the wiring is correct. So if it is a voltage issue then wouldn't the card not be detected?

stupid-questions:
So if it is a voltage issue then wouldn't the card not be detected?

You are right.
If nothing would be working at all, then you should see output from these lines of code:
Serial.println("initialization failed. Things to check:");
Serial.println("* is a card inserted?");
Serial.println("* is your wiring correct?");

But maybe the SD card is working for a couple of microseconds with your circuit, before I/O failure happens.
So initialization passes initially, before failure occurs some microseconds later, maybe.

Wrong I/O voltage is wrong I/O voltage.
SD card controllers need 3.3V I/O voltage levels, from microcontrollers with 3.3V operating voltage.
Or they need level shifting from 5V to 3.3V
Or they need some resistors as voltage dividers with those I/O lines, which originate from the microcontroller with 5V output, leading to the SD card controller input which needs 3.3V input signals.

jurs:
Wrong I/O voltage is wrong I/O voltage.
SD card controllers need 3.3V I/O voltage levels, from microcontrollers with 3.3V operating voltage.
Or they need level shifting from 5V to 3.3V
Or they need some resistors as voltage dividers with those I/O lines, which originate from the microcontroller with 5V output, leading to the SD card controller input which needs 3.3V input signals.

So... what should I do to stop this from happening? How could I level shift the 5V to 3.3V. Or, if I were to use resistors, what resistors would I use and where would I place them?

stupid-questions:
if I were to use resistors, what resistors would I use and where would I place them?

Here is a schematics how to useArduino UNO and LCStudio SD card module w/o voltage level shifter and 6 resistors as voltage dividers instead. The three lines on the SD module hich need level adjustment are:

MOSI (SPI In

  • SCK (sPI clocking)
  • CS (Cable Select)

I'm going to send it back and order this:

That one SEEMS to have a level converter, correct? So this one should work "plug 'n play" and nothing extra will be needed. Right?

stupid-questions:
I'm going to send it back and order this:
https://www.amazon.com/gp/product/B01JYNEX56/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1

That one SEEMS to have a level converter, correct? So this one should work "plug 'n play" and nothing extra will be needed. Right?

Yes, that's correct. That one is containing a level shifter, as the description says:
Level conversion circuit board that can interface level is 5V or 3.3V

Yes, this SD card module may be connected directly to a 5V UNO or other Arduino boards with a 5V operating voltage and should work out of the box, without interfacing swith additional resistors as voltage dividers required.

jurs:
Here is a schematics how to useArduino UNO and LCStudio SD card module w/o voltage level shifter and 6 resistors as voltage dividers instead. The three lines on the SD module hich need level adjustment are:

MOSI (SPI In

  • SCK (sPI clocking)
  • CS (Cable Select)

Thanks, that solved my problem too.

Note however that the original module was standard size SD, while the replacement with the level translator chip is microSD. If you need full size, this one should work with 5V Arduinos:

I don't know of an Amazon or Ebay source for this.