// An example of the SoftSpiDriver template class. // This example is for an old Adafruit Data Logging Shield on a Mega. // Software SPI is required on Mega since this shield connects to pins 10-13. // This example will also run on an Uno and other boards using software SPI. // #include "SdFat.h" #if SPI_DRIVER_SELECT == 2 // Must be set in SdFat/SdFatConfig.h // SD_FAT_TYPE = 0 for SdFat/File as defined in SdFatConfig.h, // 1 for FAT16/FAT32, 2 for exFAT, 3 for FAT16/FAT32 and exFAT. #define SD_FAT_TYPE 0 // // Chip select may be constant or RAM variable. const uint8_t SD_CS_PIN = 10; // // Pin numbers in templates must be constants. const uint8_t SOFT_MISO_PIN = 12; const uint8_t SOFT_MOSI_PIN = 11; const uint8_t SOFT_SCK_PIN = 13; // SdFat software SPI template SoftSpiDriver softSpi; // Speed argument is ignored for software SPI. #define SD_CONFIG SdSpiConfig(SD_CS_PIN, DEDICATED_SPI, SD_SCK_MHZ(0), &softSpi) #if SD_FAT_TYPE == 0 SdFat sd; File file; #elif SD_FAT_TYPE == 1 SdFat32 sd; File32 file; #elif SD_FAT_TYPE == 2 SdExFat sd; ExFile file; #elif SD_FAT_TYPE == 3 SdFs sd; FsFile file; #else // SD_FAT_TYPE #error Invalid SD_FAT_TYPE #endif // SD_FAT_TYPE void setup() { Serial.begin(9600); // Wait for USB Serial while (!Serial) { SysCall::yield(); } Serial.println("Type any character to start"); while (!Serial.available()) { SysCall::yield(); } if (!sd.begin(SD_CONFIG)) { sd.initErrorHalt(); } if (!file.open("SoftSPI.txt", O_RDWR | O_CREAT)) { sd.errorHalt(F("open failed")); } file.println(F("This line was printed using software SPI.")); file.rewind(); while (file.available()) { Serial.write(file.read()); } file.close(); Serial.println(F("Done.")); } //------------------------------------------------------------------------------ void loop() {} #else // SPI_DRIVER_SELECT #error SPI_DRIVER_SELECT must be two in SdFat/SdFatConfig.h #endif //SPI_DRIVER_SELECT