| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 | 
							- /*
 
-  * Warning This example requires extra RAM and may crash on Uno.
 
-  * Example use of two SD cards.
 
-  */
 
- #include <SPI.h>
 
- #include "SdFat.h"
 
- #include "FreeStack.h"
 
- SdFat sd1;
 
- const uint8_t SD1_CS = 10;  // chip select for sd1
 
- SdFat sd2;
 
- const uint8_t SD2_CS = 4;   // chip select for sd2
 
- const uint8_t BUF_DIM = 100;
 
- uint8_t buf[BUF_DIM];
 
- const uint32_t FILE_SIZE = 1000000;
 
- const uint32_t NWRITE = FILE_SIZE/BUF_DIM;
 
- //------------------------------------------------------------------------------
 
- // print error msg, any SD error codes, and halt.
 
- // store messages in flash
 
- #define errorExit(msg) errorHalt(F(msg))
 
- #define initError(msg) initErrorHalt(F(msg))
 
- //------------------------------------------------------------------------------
 
- void setup() {
 
-   Serial.begin(9600);
 
-   // Wait for USB Serial
 
-   while (!Serial) {
 
-     yield();
 
-   }
 
-   Serial.print(F("FreeStack: "));
 
-   Serial.println(FreeStack());
 
-   // fill buffer with known data
 
-   for (size_t i = 0; i < sizeof(buf); i++) {
 
-     buf[i] = i;
 
-   }
 
-   Serial.println(F("type any character to start"));
 
-   while (!Serial.available()) {
 
-     yield();
 
-   }
 
-   // disable sd2 while initializing sd1
 
-   pinMode(SD2_CS, OUTPUT);
 
-   digitalWrite(SD2_CS, HIGH);
 
-   // initialize the first card
 
-   if (!sd1.begin(SD1_CS)) {
 
-     sd1.initError("sd1:");
 
-   }
 
-   // create Dir1 on sd1 if it does not exist
 
-   if (!sd1.exists("/Dir1")) {
 
-     if (!sd1.mkdir("/Dir1")) {
 
-       sd1.errorExit("sd1.mkdir");
 
-     }
 
-   }
 
-   // initialize the second card
 
-   if (!sd2.begin(SD2_CS)) {
 
-     sd2.initError("sd2:");
 
-   }
 
- // create Dir2 on sd2 if it does not exist
 
-   if (!sd2.exists("/Dir2")) {
 
-     if (!sd2.mkdir("/Dir2")) {
 
-       sd2.errorExit("sd2.mkdir");
 
-     }
 
-   }
 
-   // list root directory on both cards
 
-   Serial.println(F("------sd1 root-------"));
 
-   sd1.ls();
 
-   Serial.println(F("------sd2 root-------"));
 
-   sd2.ls();
 
-   // make /Dir1 the default directory for sd1
 
-   if (!sd1.chdir("/Dir1")) {
 
-     sd1.errorExit("sd1.chdir");
 
-   }
 
-   // make /Dir2 the default directory for sd2
 
-   if (!sd2.chdir("/Dir2")) {
 
-     sd2.errorExit("sd2.chdir");
 
-   }
 
-   // list current directory on both cards
 
-   Serial.println(F("------sd1 Dir1-------"));
 
-   sd1.ls();
 
-   Serial.println(F("------sd2 Dir2-------"));
 
-   sd2.ls();
 
-   Serial.println(F("---------------------"));
 
-   // remove rename.bin from /Dir2 directory of sd2
 
-   if (sd2.exists("rename.bin")) {
 
-     if (!sd2.remove("rename.bin")) {
 
-       sd2.errorExit("remove rename.bin");
 
-     }
 
-   }
 
-   // set the current working directory for open() to sd1
 
-   sd1.chvol();
 
-   // create or open /Dir1/test.bin and truncate it to zero length
 
-   SdFile file1;
 
-   if (!file1.open("test.bin", O_RDWR | O_CREAT | O_TRUNC)) {
 
-     sd1.errorExit("file1");
 
-   }
 
-   Serial.println(F("Writing test.bin to sd1"));
 
-   // write data to /Dir1/test.bin on sd1
 
-   for (uint32_t i = 0; i < NWRITE; i++) {
 
-     if (file1.write(buf, sizeof(buf)) != sizeof(buf)) {
 
-       sd1.errorExit("sd1.write");
 
-     }
 
-   }
 
-   // set the current working directory for open() to sd2
 
-   sd2.chvol();
 
-   // create or open /Dir2/copy.bin and truncate it to zero length
 
-   SdFile file2;
 
-   if (!file2.open("copy.bin", O_WRONLY | O_CREAT | O_TRUNC)) {
 
-     sd2.errorExit("file2");
 
-   }
 
-   Serial.println(F("Copying test.bin to copy.bin"));
 
-   // copy file1 to file2
 
-   file1.rewind();
 
-   uint32_t t = millis();
 
-   while (1) {
 
-     int n = file1.read(buf, sizeof(buf));
 
-     if (n < 0) {
 
-       sd1.errorExit("read1");
 
-     }
 
-     if (n == 0) {
 
-       break;
 
-     }
 
-     if ((int)file2.write(buf, n) != n) {
 
-       sd2.errorExit("write2");
 
-     }
 
-   }
 
-   t = millis() - t;
 
-   Serial.print(F("File size: "));
 
-   Serial.println(file2.fileSize());
 
-   Serial.print(F("Copy time: "));
 
-   Serial.print(t);
 
-   Serial.println(F(" millis"));
 
-   // close test.bin
 
-   file1.close();
 
-   file2.close();
 
-   // list current directory on both cards
 
-   Serial.println(F("------sd1 -------"));
 
-   sd1.ls("/", LS_R | LS_DATE | LS_SIZE);
 
-   Serial.println(F("------sd2 -------"));
 
-   sd2.ls("/", LS_R | LS_DATE | LS_SIZE);
 
-   Serial.println(F("---------------------"));
 
-   Serial.println(F("Renaming copy.bin"));
 
-   // rename the copy
 
-   if (!sd2.rename("copy.bin", "rename.bin")) {
 
-     sd2.errorExit("sd2.rename");
 
-   }
 
-   // list current directory on both cards
 
-   Serial.println(F("------sd1 -------"));
 
-   sd1.ls("/", LS_R | LS_DATE | LS_SIZE);
 
-   Serial.println(F("------sd2 -------"));
 
-   sd2.ls("/", LS_R | LS_DATE | LS_SIZE);
 
-   Serial.println(F("---------------------"));
 
-   Serial.println(F("Done"));
 
- }
 
- //------------------------------------------------------------------------------
 
- void loop() {}
 
 
  |