SparkFun microSD Shield not working

I am trying to use the SparkFun microSD Shield to record sensor data to a .CSV file. I have had a lot of technical issues with getting the microSD Shield to recognize an SD card is present and record to the card. I am using the SparkFun microSD Shield with the Seeeduino v4.2 and Grove Base Shield V2.0.

SparkFun microSD Shield: https://www.sparkfun.com/products/12761

Seeeduino v4.2: https://wiki.seeedstudio.com/Seeeduino_v4.2/

Grove Base Shield V2.0: https://www.seeedstudio.com/Base-Shield-V2.html

I am running the SD examples from the Arduino IDE 1.8.19 and getting inconsistent results.

Setup is the following:

Board: Seeeduino V4(Atmega328P)

Programmer: “AVRISP mkll”

microSD Format:

FAT32, 2048 bytes, Quick Format (off)

I have made sure my code includes the following:

const int chipSelect = 8;

pinMode(10, OUTPUT);

I have tried different variations of different codes using the SD library and have had no consistent results. Sometimes the code works and will print a few lines to a .CSV file, but will ultimately fail after a few prints. The most frequent issue is that the device is unable to detect an SD card is present. Below is an example of one of the simple programs that fails:

/*

created 24 Nov 2010

modified 9 Apr 2012

by Tom Igoe

modified 18 Sep 2014

by Bobby Chan @ SparkFun Electronics Inc.

SD Card Datalogger

This example is based off an example code from Arduino’s site

http://arduino.cc/en/Tutorial/Datalogger and it shows how to

log data from three analog sensors with a timestamp based on when

the Arduino began running the current program to an SD card using

the SD library https://github.com/greiman/SdFat by William

Greiman. This example code also includes an output to the

Serial Monitor for debugging.

The circuit:

  • analog sensors on analog pins 0, 1, and 2

  • SD card attached to SPI bus as follows:

** MOSI - pin 11

** MISO - pin 12

** CLK - pin 13

** CS - pin 4

This example code is in the public domain.

*/

#include <SD.h>

// On the Ethernet Shield, CS is pin 4. Note that even if it’s not

// used as the CS pin, the hardware CS pin (10 on most Arduino boards,

// 53 on the Mega) must be left as an output or the SD library

// functions will not work.

// Chip Select pin is tied to pin 8 on the SparkFun SD Card Shield

const int chipSelect = 8;

void setup()

{

// Open serial communications and wait for port to open:

Serial.begin(9600);

while (!Serial) {

; // wait for serial port to connect. Needed for Leonardo only

}

Serial.print(“Initializing SD card…”);

// make sure that the default chip select pin is set to

// output, even if you don’t use it:

pinMode(10, OUTPUT);

// see if the card is present and can be initialized:

if (!SD.begin(chipSelect)) {

Serial.println(“Card failed, or not present”);

// don’t do anything more:

return;

}

Serial.println(“card initialized.”);

}

void loop()

{

// make a string for assembling the data to log:

String dataString = “”;

// open the file. note that only one file can be open at a time,

// so you have to close this one before opening another.

// this opens the file and appends to the end of file

// if the file does not exist, this will create a new file.

File dataFile = SD.open(“datalog.txt”, FILE_WRITE);

// if the file is available, write to it:

if (dataFile) {

int timeStamp = millis();

//write to uSD card

dataFile.print(timeStamp);

dataFile.print(" ms");

dataFile.print(", ");

//output also on Serial monitor for debugging

Serial.print(timeStamp);

Serial.print(“,”);

dataFile.println(); //create a new row to read data more clearly

dataFile.close(); //close file

Serial.println(); //print to the serial port too:

}

// if the file isn’t open, pop up an error:

else

{

Serial.println(“error opening datalog.txt”);

}

}

Our hookup guide https://learn.sparkfun.com/tutorials/mi … 1643964608 notes that SD card blocks are 512 bytes - try changing the format to 512?

Also, perhaps the card detect on the SD holder is malfunctioning…can you test the CD pins with /without an SD card inserted to see if it’s shorting?