Adafruit Data Logging Shield with Arduino Uno R3

Hi there,



This is the code I am using (CardInfo):

/*
  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 = 10;

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...");
/********************* Added Two Lines **********************/
pinMode(10, OUTPUT); 
digitalWrite(10, HIGH); 
/***************************************************************/
  // we'll use the initialization code from the utility libraries
  // since we're just testing if the card is working!
  if (!card.init(SPI_QUARTER_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.");
  }

  // print the type of card
  Serial.println();
  Serial.print("Card 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");
    while (1);
  }*/

  Serial.print("Clusters:          ");
  Serial.println(volume.clusterCount());
  Serial.print("Blocks x Cluster:  ");
  Serial.println(volume.blocksPerCluster());

  Serial.print("Total Blocks:      ");
  Serial.println(volume.blocksPerCluster() * volume.clusterCount());
  Serial.println();

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

  volumesize = volume.blocksPerCluster();    // clusters are collections of blocks
  volumesize *= volume.clusterCount();       // we'll have a lot of clusters
  volumesize /= 2;                           // SD card blocks are always 512 bytes (2 blocks are 1KB)
  Serial.print("Volume size (Kb):  ");
  Serial.println(volumesize);
  Serial.print("Volume size (Mb):  ");
  volumesize /= 1024;
  Serial.println(volumesize);
  Serial.print("Volume size (Gb):  ");
  Serial.println((float)volumesize / 1024.0);

  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) {
}

I had a couple issues with the ADA1141 – Adafruit Assembled Data Logging Shield for Arduino. It seems to be powering up fine (via USB) and connected to the Arduino Uno R3 but when I run an example sketch from the IDE, CardInfo, it does not seem to be reading the SD card properly. It sometimes initializes the card but when it does it reads that the card type is SD1 when in fact it is a SDHC (CE04628 – MicroSD Memory Card – 16gb Class 10 is the memory card I am using).

I have also formatted the SD card using sdcard.org formatted to FAT32 and I am able to read/write the SD card when it is inserted to my laptop.

Any help will be appreciated :blush:.

1 Like

Hi Martin,

Thanks for posting on the forum :partying_face:

That demo code doesn’t seem to have any issues from a read through, can you please send a screenshot of the partitions on that SD (please crop out the rest of the image) when viewed using the Disk Partitioning Tool so we can see whether there may be any issues with the partitions on that drive and whether there may be any fragmentation that could be tripping it up?

2 Likes

Hi Bryce,

Thanks for the reply!

Here is before formatting the SD card using SD Memory Card Formatter 5.0.2 (sdcard.org):

and here it is after:

Is this what you were looking for?

Interesting, once the card is recognized (albeit with the wrong card type) is all of the Volume information correct?

I’m wondering whether it may just be that the enumeration in the public library (I’m not sure which version of it you’d have downloaded, but it’d probably be the latest) may be incorrect or the SD is not returning that value correctly. Also, have you tried using this with any other formatted cards?

Yes, all the volume information is correct.

I’m using the SD library included with the IDE and I have updated the library to the most current version as well.

I have tried using another SD Card from Lexar (FAT32, 32gB Class 10) and it formatted okay too but once I input the SD card into the Adafruit Data logging shield it seems to not read it as well. Same output in the serial monitor as shown above :frowning:

Hi, have you tried with any other SD card?

Hi there,

Yes I have used a different SD card and formatted it correctly.

Hi Martin,

Sounds like it may be a faulty board, unfortunately defects and component failures do pop-up sometimes. If you reply to your order confirmation email that’ll get in touch with the Core Electronics support team who can help organise get the project back on track for you.

Hi, did you get a replacement finally?

I couldn’t help making a comment here after the trauma I have been thru with one of these Adafruit data logging shields, getting the RTC going, then progressing to having the same problems you are experiencing here Martin, had a look back at your photos and see you hadn’t (at least as at the last post) fitted the 2X3 headers that connect the shield up to the ICSP pins on the UNO !
I did the same thing, cut to the chase, as soon as I connected the 2X3 headers the SD miraculously fired up a treat… the problem that followed was the DFRobot DFR0009 RGB display sitting atop now doesn’t work, iff it’s not one thing it’s another…
Regards
Darryl

2 Likes

Can be some faults in soldering the connector with the shield.

Hi Darryl,

Thanks for coming in with a solution for this one! I can’t say I see why the ICSP pins are needed for this shield to work but that may be the problem plaguing other makers. I’m not too familiar with its use after being a serial input.

I’ve made a note to have that bit of wisdom added to the store page to help others who bump into this issue. If you want some help with that display feel free to make a post and we can have a look!

Hi Jack
It looks to me that the SD card initiation is a problem all over the forum with no definite solutions other than try this, try that which isn’t at all helpful…
Okay, it appears I now have the data logging shield running with the RTC and now it recognizes that an SD card is on board, we’ve covered that BUT so far doesn’t explain why it is absolutely necessary to have to fit the 2X3 ICSP headers to actually make that part work when having done the headers, the DFRobot screen doesn’t work when, other than pin 10, there does not appear to be any conflict…
Take pin 10 a step further, the data sheet in fact implies that the pin 10 trace can be cut and re-assigned which also goes un explained. I cut the trace and still the screen will not function as it had done before the SD was initiated using the ICSP header was fitted.
There is something dark about the shield that it is doing to block the functionality of the DFR0009 screen…
Back to you,
Regards
Darryl

Hi Jack
Further to above, further investigation has revealed that now that I have cut the trace on pin 10, the SD card won’t now initialize… apparently I need to “re-assign” the pin but the Adafruit data sheet doesn’t tell me how to do that !
Given pin 10 carries thru to the DFR0009 LCD display for backlight control, I now assume that we need to initialize the SD thru a different pin, no idea how that is possible given the shield is a printed circuit board !
Can you tell me what needs to be done to re-assign pin 9 on the shield and any command instructions required to do so please
Thanks
Darryl

Hi Darryl,

This sounds like a really annoying issue to have. Unfortunately with shields like this, there is no easy way to move around pins as you seem to have already experienced. It may be something you could do with some soldering expertise and a change to the code on the Arduino’s end to assign another pin to get this to work but this happens to fall a bit outside of the use case of these devices.

If someone else wants to weigh in with suggestions or instructions it would be appreciated.