nmvrouwe
Published © GPL3+

Access 2 SD cards with Arduino

Attach 2 SD cards to Arduino and access both of them.

IntermediateProtip6,342
Access 2 SD cards with Arduino

Things used in this project

Hardware components

Arduino Mega 2560
Arduino Mega 2560
×1
Memory Socket, SD Card
Memory Socket, SD Card
×2
Flash Memory Card, MicroSD Card
Flash Memory Card, MicroSD Card
×2
Breadboard (generic)
Breadboard (generic)
×1
Jumper wires (generic)
Jumper wires (generic)
×1

Story

Read more

Schematics

Mega with 2 x SD

Code

Untitled file

Arduino
// script to deminstrate 2 x 16 LCD and 2 x SD card.

#include <SPI.h>                        // required by SD
#include <SD.h>                         // required for SD card

#define SDSS1pin  53                      // on the UNO the Sparkfun SDSS pin is 8 !!!
#define SDSS2pin  13                      // on the UNO the Sparkfun SDSS pin is 8 !!!

File anyFile;                           // for logging day records
File entry;
File root;

String fileName  =  "anyFile.txt";

unsigned long readPosition;
unsigned long byteCount;

byte byteBuffer[4096];

void setup()
{
  pinMode(SDSS1pin, OUTPUT);                  // set SS pin to output (required they say)
  pinMode(SDSS2pin, OUTPUT);                  // set SS pin to output (required they say)
  digitalWrite(SDSS1pin, HIGH);
  digitalWrite(SDSS2pin, HIGH);

  Serial.begin(9600);                         // init seral for serialmonitor
  Serial.println("Starting");


  if (!SD.begin(SDSS1pin))                          // start the SD stuff with 53 as SS pin
  {
    Serial.println("SD.Begin() SD 1 Failed");
    delay(2000);
  }
  Serial.println("\r\nSD1 Begin OK.");
  Serial.println("/r/n Files on SD2 are: ");
  File root = SD.open("/");
  printDirectory(root);                             // list files on SD1
  root.close();
  digitalWrite(SDSS1pin, HIGH);                     // disable SD1

  if (!SD.begin(SDSS2pin))                          // start the SD stuff with 53 as SS pin
  {
    Serial.println("SD.Begin() SD 2 Failed");
    delay(2000);
  }
  Serial.println("\r\nSD2 Begin OK.");
  delay(1000);

  Serial.println("/r/n Files on SD2 are: ");
  root = SD.open("/");
  printDirectory(root);                             // list files on SD2
  SD.remove(fileName);                              // remove the file on SD2 in case it exists
  Serial.println("/r/n Files on SD2 now are: ");
  root = SD.open("/");
  printDirectory(root);                             // list files on SD2 again
  delay(2000);

  Serial.println("\r\n\r\nOpen ANYFILE.TXT on SD1 and copy to SD2");

  digitalWrite(SDSS1pin, HIGH);              //    disable SD1
  digitalWrite(SDSS2pin, HIGH);              //    disable SD2
  readPosition = 0;
};

// ============================================  MAIN LOOP  ====================================
void loop()
{
  if (!SD.begin(SDSS1pin))                          // start the SD stuff with 53 as SS pin
  {
    Serial.println("SD.Begin() SD 1 Failed");
    delay(2000);
  }

  anyFile = SD.open(fileName, FILE_READ);             // Open for read
  while (!anyFile)
  {
    Serial.println("Opening of the sourcefile Failed");
    delay(2000);
  }
  if (readPosition == anyFile.size())
  {
    Serial.print("Copied bytes:    ");
    Serial.println(anyFile.size());
    while (1) delay(10);
  }

  anyFile.seek(readPosition);
  byteCount = 0;
  while (anyFile.available() && byteCount < 4096)
  {
    byteBuffer[byteCount] = anyFile.read();
    byteCount++;
    readPosition++;
  }
  anyFile.close();
  digitalWrite(SDSS1pin, HIGH);              //    disable SD1


  if (!SD.begin(SDSS2pin))                          // start the SD stuff with 53 as SS pin
  {
    Serial.println("SD.Begin() SD 2 Failed");
    delay(2000);
  }

  anyFile = SD.open(fileName, FILE_WRITE);             // Open for write
  anyFile.write(byteBuffer, byteCount);
  anyFile.close();
  digitalWrite(SDSS2pin, HIGH);                     //    disable SD2
};



// ================================ List files and sizes on SD card ==========================
// -------------------------------------------------------------------------------------------
void printDirectory(File dir)               // lists the files and filesize on the SD card (only root)
{
  while (true)
  {
    File entry =  dir.openNextFile();
    if (! entry)                       // no more files
    {
      break;
    }
    Serial.print(entry.name());
    Serial.print("    ");
    Serial.println(entry.size(), DEC);
    entry.close();
  }
};

Credits

nmvrouwe

nmvrouwe

0 projects • 0 followers

Comments