Data Logger Shield SD card not working

Hello Everyone :slight_smile: .

I got myself a couple of Data Logger Shields for a small project i need. (picture attached) The RTC on the shield works perfectly with no problems at all, but the SD function does not work. i have spent two days now trying to figure out what the problem is and tried all available SD libraries i can find with no luck getting the SD card to work.

I have tried multiple shields because i have a couple of them at my desk, and i have also tried different SD cards and also tried different UNO boards.

farthest way i could go was getting this message on the serial monitor:
"
Initializing SD card...initialization failed. Things to check:

  • is a card inserted?
  • is your wiring correct?
  • did you change the chipSelect pin to match your shield or module?
    "

I've set Chip Select to 10.

and sometimes i get the following:
"
Card type: SD2
Could not find FAT16/FAT32 partition.
Make sure you've formatted the card
"
All SD cards i have tried has been formatted using the SD formatting tool.

i don't know what else to try beyond this.

would appreciate your guys help.

Thanks

Marvin

I have no experience with this shield, but if you occasionally get the message about being unable to find the partition, then that at least means you have the correct CS pin. It also suggests that there might be something flaky about the connections, or about your power supply. SD cards can draw a lot of current. Sorry I can't give you any specific suggestions, but perhaps someone who has used this shield can be more helpful.

Hi Everyone,

I am new to Arduino and am having the same problem. Specifically, I get the message:

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

when I run Cardinfo.

I have formatted my SD using both the windows and SD association formatter but it hasn't helped.

I have tried using the SdFat library rather the standard one an that hasn't helped either.

I have tried multiple versions of both libraries.

I am wondering if maybe I am using an SD that is too big? It's 32GB. Maybe I should try something like a 4GB. But this is just a guess.

Thanks

I've got 2 of those Data Logger shields. The bottom silkscreen print on both of mine say they are from Deek Robot and the board model is "Data Logging Shield v1.0".

I've just put an 8Gb Sandisk Micro-SD card into an adapter and plugged it into my Windows 10 PC. I then formatted the SD card using SDFormatter v5.0.1 which I got from here.

I then put the MicroSD card in it's adapter and plugged it into the shield.

THE CODE: I'm not sure if this is something I've downloaded this or if it comes with the Arduino IDE (I'm running v1.8.12), but I then went to File->Examples. In the big list that appears, I have a section called "Examples for any board". It appears just below the "Built-in Examples" section for me.

There's an entry there called SD. Against SD there is a code example called CardInfo. I loaded this onto my Arduino UNO R3 clone. The only change I had to make to the code was to tell it that "chipSelect = 10".

Once the code runs, I get the following output:

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

Card type:         SDHC
Clusters:          242304
Blocks x Cluster:  64
Total Blocks:      15507456

Volume type is:    FAT32
Volume size (Kb):  7753728
Volume size (Mb):  7572
Volume size (Gb):  7.39

Files found on the card (name, date and size in bytes): 
SYSTEM~1/     2020-06-27 14:38:06
  INDEXE~1      2020-06-27 14:38:06 76

I may have something else for you to try but I need to check something out first.

If you are using the CardInfo example that I described above, then you can try adding in the following function after the loop function:

void getCardID( void ) {
  cid_t   myCardData;
  uint8_t csdResult;

  csdResult = card.readCID( &myCardData );
  Serial.print("CSD Result = "); Serial.println( csdResult );
  if (csdResult == 1) {
    Serial.print("MID = "); Serial.println( myCardData.mid, HEX );
    Serial.print("PROD = "); Serial.print( myCardData.pnm[0] );
    Serial.print( myCardData.pnm[1] ); Serial.print( myCardData.pnm[2] );
    Serial.print( myCardData.pnm[3] ); Serial.println( myCardData.pnm[4] );
  }
}

The add a call to the function getCardID() after the card has been initialised as in this code snippet:

  // 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?");
    while (1);
  } else {
    Serial.println("Wiring is correct and a card is present.");
  }

  getCardID();              // <--- ADD THIS CALL
  
  // print the type of card
  Serial.println();
  Serial.print("Card type:         ");

What this will do is read the Card Identification Register on your card. It should print out the code for the manufacturer (MID) which you can look up here. It also prints out the product name from the card. If that works, then you can correctly read and write the card registers, so your SPI communications are working and as said previously, you've got your CS line correct.

That leaves either a power supply issue, a card formatting issue or some other problem that escapes me at the moment.

The board takes its power from the Arduino +5V line and uses its own onboard 5V to 3V3 regulator, so there shouldn't be a power problem, especially if all you are doing is reading from the card.