Won't create 512th file first time

sw_hunt

Well-known member
This has got me puzzled! I'm trying to create 1000 files, but every time I do it the 512th file (number 511) isn't created although the rest are created ok. If I try creation immediately after detecting a file has failed, it is created correctly.

The sketch is for Teensy 4.1 and creates initialised files for an OB6 synthesizer with 1000 patches and each file containing 400 comma-separated initialised values.
The sketch first checks the SD card then creates the directories for the files and then creates the init files. After every file creation attempt, it checks that the file is there. Pch511.dat always fails. If I run the sketch again, the file is always created ok, so it always fails on the first run and always succeeds on the second run, either with a full power down before the second run or simply repeating the creation code and trying immediately.

The SD cards are Kioxia Exceria 16GB but I've tried several different manufacturers and have tried formatting them with Windows 10, a sketch using SD.format(); and have tried a formatting utility I downloaded. No difference.

If I fill each file with commas and no values, it works ok. I've tried adding dalays in various places in case something is trying to go too fast for the card / writer but no change. I've tried using flush() after each attempt but this doesn't help (I think close() does this anyway). If I start my loop at 100 instead of 0 then number 611 fails, so it's obviously a problem with the 512th file.

This is the output:

SD card is present
creating directory OB6/00
About to check OB6 Bank 0
OB6/00/Pch511.dat failed patch file creation - not there!
OB6 checked


What am I doing wrong?
Thanks :)

Code:
#include <SD.h>
#define SD_CS BUILTIN_SDCARD
Sd2Card card;
const char *listOfSynthTypes[] = {"OB6"};
const  int initPatch[400] = {0,1023,512,0,172,403,800,284,535,687, 534,512,512,512,512,512,1023,512,1023,1023, 512,0,0,0,0,0,0,0,0,0, 0,512,512,512,512,512,512,512,512,512, 512,512,512,512,512,512,0,512,0,512, 512,0,512,512,16,0,0,59,0,512, 0,0,8,27,1,0,8,27,1,0, 8,27,1,1,8,27,0,512,512,512, 512,512,512,512,512,512,512,512,512,512, 512,512,1,512,512,512,512,1,9,62,          0,111,0,0,0,127,0,0,127,64,     64,0,0,127,64,0,0,0,24,127,     64,64,24,63,127,64,64,127,64,2,   0,0,63,63,127,0,0,63,127,63, 0,127,63,1,127,127,120,0,0,0,    2048,0,0,0,0,0,0,0,0,0,        0,0,0,0,0,0,0,0,0,0,   0,0,0,0,0,0,0,0,0,0,    0,0,0,0,0,0,0,0,0,0,    0,0,0,0,0,0,0,0,0,0,              0,0,0,0,0,0,0,0,0,0,  512,512,512,512,512,512,512,512,512,512, 512,512,512,512,512,512,512,512,512,512, 1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, 1,3,1,1,1,1,1,1,1,1, 63,63,63,63,63,63,63,63,63,63, 0,0,0,0,0,0,0,0,0,0, 512,512,512,512,88,512,120,0,0,0, 0,0,0,0,0,0,0,0,0,0,  0,0,0,0,0,0,0,0,0,0,      0,0,0,0,0,0,0,0,0,0,  0,0,0,0,0,0,0,0,0,0,    512,512,512,512,512,512,512,512,512,512, 1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, 1,1,1,1,1,1,1,1,1,1, 63,63,63,63,63,63,63,63,63,63, 100,100,100,100,100,50,50,50,50,50, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 512,512,512,512,512,512,512,512,512,512};
int bankNum = 0;
      
void setup() {

  if (!SD.begin(SD_CS)) {
    Serial.println(F("Initialization of SD card failed"));
    } 
  if (!card.init(SPI_HALF_SPEED, SD_CS)) {
    Serial.println(F("Card initialization failed."));  while (true) {}; // freeze
  }
  else {
    Serial.println(F("SD card is present  "));
  }
  createDirectories ();
  createInitFiles ();
}

void createDirectories (){
      char dirName[20];// the 3 allows for a slash and bank number
      snprintf(dirName, 22, "%s/%.2d", listOfSynthTypes[0], bankNum); // the .2 makes banks have leading zero and always use two characters 01 to 10
      if (!SD.exists(dirName)) SD.mkdir(dirName);
      Serial.print("creating directory  ");Serial.println(dirName);
}

void createInitFiles (){
      char fullPathName[30]; 
      char filename[30];
        Serial.print(F("About to check "));Serial.print(listOfSynthTypes[0]);Serial.print(F(" Bank "));Serial.println(bankNum);
        for (int k = 0; k < 1000; k++) {  // for each patch
          String fname = "Pch" + String(k) + ".dat";
          fname.toCharArray(filename, 13 + 4 + strlen(listOfSynthTypes[0]));
          snprintf(fullPathName, 23, "%s/%.2d/%s", listOfSynthTypes[0], bankNum, filename); // the .2 makes banks have leading zero and always use two characters 01 to 10
          
          if (!SD.exists(fullPathName)) {
            File patchFile = SD.open(fullPathName, FILE_WRITE);
            for (int p = 0; p < 400; p++) {
              patchFile.print(String(initPatch[p]));
              patchFile.print(",");
            }
            patchFile.close();
          }
          
          if (!SD.exists(fullPathName)) {
            Serial.print(fullPathName);Serial.println(F(" failed patch file creation - not there!"));
            }       
      } // patches
    Serial.print(listOfSynthTypes[0]); Serial.println(F(" checked"));    
}

void loop() { 
}

HTML:
C:\Program Files (x86)\Arduino\arduino-builder -dump-prefs -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -hardware F:\Documents\Arduino\hardware -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries F:\Documents\Arduino\libraries -fqbn=teensy:avr:teensy41:usb=serial,speed=600,opt=o2std,keys=en-us -ide-version=10819 -build-path C:\Users\steve\AppData\Local\Temp\arduino_build_546804 -warnings=none -build-cache C:\Users\steve\AppData\Local\Temp\arduino_cache_759753 -verbose F:\Documents\Arduino\LFE\LFE_3.9.15_SDtest1\LFE_3.9.15_SDtest1.ino
C:\Program Files (x86)\Arduino\arduino-builder -compile -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -hardware F:\Documents\Arduino\hardware -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries F:\Documents\Arduino\libraries -fqbn=teensy:avr:teensy41:usb=serial,speed=600,opt=o2std,keys=en-us -ide-version=10819 -build-path C:\Users\steve\AppData\Local\Temp\arduino_build_546804 -warnings=none -build-cache C:\Users\steve\AppData\Local\Temp\arduino_cache_759753 -verbose F:\Documents\Arduino\LFE\LFE_3.9.15_SDtest1\LFE_3.9.15_SDtest1.ino
Using board 'teensy41' from platform in folder: C:\Program Files (x86)\Arduino\hardware\teensy\avr
Using core 'teensy4' from platform in folder: C:\Program Files (x86)\Arduino\hardware\teensy\avr
Detecting libraries used...
"C:\\Program Files (x86)\\Arduino\\hardware\\teensy/../tools/arm/bin/arm-none-eabi-g++" -E -CC -x c++ -w -g -Wall -ffunction-sections -fdata-sections -nostdlib -std=gnu++14 -fno-exceptions -fpermissive -fno-rtti -fno-threadsafe-statics -felide-constructors -Wno-error=narrowing -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 -D__IMXRT1062__ -DTEENSYDUINO=157 -DARDUINO=10819 -DARDUINO_TEENSY41 -DF_CPU=600000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH "-IC:\\Program Files (x86)\\Arduino\\hardware\\teensy\\avr\\cores\\teensy4" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\sketch\\LFE_3.9.15_SDtest1.ino.cpp" -o nul
Alternatives for SD.h: [SD@1.2.4 SD@2.0.0]
ResolveLibrary(SD.h)
  -> candidates: [SD@1.2.4 SD@2.0.0]
"C:\\Program Files (x86)\\Arduino\\hardware\\teensy/../tools/arm/bin/arm-none-eabi-g++" -E -CC -x c++ -w -g -Wall -ffunction-sections -fdata-sections -nostdlib -std=gnu++14 -fno-exceptions -fpermissive -fno-rtti -fno-threadsafe-statics -felide-constructors -Wno-error=narrowing -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 -D__IMXRT1062__ -DTEENSYDUINO=157 -DARDUINO=10819 -DARDUINO_TEENSY41 -DF_CPU=600000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH "-IC:\\Program Files (x86)\\Arduino\\hardware\\teensy\\avr\\cores\\teensy4" "-IC:\\Program Files (x86)\\Arduino\\hardware\\teensy\\avr\\libraries\\SD\\src" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\sketch\\LFE_3.9.15_SDtest1.ino.cpp" -o nul
Alternatives for SdFat.h: [SdFat@2.1.2]
ResolveLibrary(SdFat.h)
  -> candidates: [SdFat@2.1.2]
"C:\\Program Files (x86)\\Arduino\\hardware\\teensy/../tools/arm/bin/arm-none-eabi-g++" -E -CC -x c++ -w -g -Wall -ffunction-sections -fdata-sections -nostdlib -std=gnu++14 -fno-exceptions -fpermissive -fno-rtti -fno-threadsafe-statics -felide-constructors -Wno-error=narrowing -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 -D__IMXRT1062__ -DTEENSYDUINO=157 -DARDUINO=10819 -DARDUINO_TEENSY41 -DF_CPU=600000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH "-IC:\\Program Files (x86)\\Arduino\\hardware\\teensy\\avr\\cores\\teensy4" "-IC:\\Program Files (x86)\\Arduino\\hardware\\teensy\\avr\\libraries\\SD\\src" "-IC:\\Program Files (x86)\\Arduino\\hardware\\teensy\\avr\\libraries\\SdFat\\src" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\sketch\\LFE_3.9.15_SDtest1.ino.cpp" -o nul
Alternatives for SPI.h: [SPI@1.0]
ResolveLibrary(SPI.h)
  -> candidates: [SPI@1.0]
"C:\\Program Files (x86)\\Arduino\\hardware\\teensy/../tools/arm/bin/arm-none-eabi-g++" -E -CC -x c++ -w -g -Wall -ffunction-sections -fdata-sections -nostdlib -std=gnu++14 -fno-exceptions -fpermissive -fno-rtti -fno-threadsafe-statics -felide-constructors -Wno-error=narrowing -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 -D__IMXRT1062__ -DTEENSYDUINO=157 -DARDUINO=10819 -DARDUINO_TEENSY41 -DF_CPU=600000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH "-IC:\\Program Files (x86)\\Arduino\\hardware\\teensy\\avr\\cores\\teensy4" "-IC:\\Program Files (x86)\\Arduino\\hardware\\teensy\\avr\\libraries\\SD\\src" "-IC:\\Program Files (x86)\\Arduino\\hardware\\teensy\\avr\\libraries\\SdFat\\src" "-IC:\\Program Files (x86)\\Arduino\\hardware\\teensy\\avr\\libraries\\SPI" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\sketch\\LFE_3.9.15_SDtest1.ino.cpp" -o nul
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SD\src\SD.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\ExFatLib\ExFatDbg.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\ExFatLib\ExFatFile.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\ExFatLib\ExFatFilePrint.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\ExFatLib\ExFatFileWrite.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\ExFatLib\ExFatFormatter.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\ExFatLib\ExFatName.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\ExFatLib\ExFatPartition.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\ExFatLib\ExFatVolume.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\ExFatLib\upcase.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\FatLib\FatDbg.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\FatLib\FatFile.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\FatLib\FatFileLFN.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\FatLib\FatFilePrint.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\FatLib\FatFileSFN.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\FatLib\FatFormatter.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\FatLib\FatName.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\FatLib\FatPartition.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\FatLib\FatVolume.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\FreeStack.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\FsLib\FsFile.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\FsLib\FsNew.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\FsLib\FsVolume.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\MinimumSerial.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\SdCard\SdCardInfo.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\SdCard\SdSpiCard.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\SdCard\SdioTeensy.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\SpiDriver\SdSpiArtemis.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\SpiDriver\SdSpiChipSelect.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\SpiDriver\SdSpiDue.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\SpiDriver\SdSpiESP.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\SpiDriver\SdSpiParticle.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\SpiDriver\SdSpiSTM32.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\SpiDriver\SdSpiSTM32Core.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\SpiDriver\SdSpiTeensy3.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\common\FmtNumber.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\common\FsCache.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\common\FsDateTime.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\common\FsGetPartitionInfo.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\common\FsName.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\common\FsStructs.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\common\FsUtf.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\common\PrintBasic.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\common\upcase.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\iostream\StdioStream.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\iostream\StreamBaseClass.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\iostream\istream.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat\src\iostream\ostream.cpp
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SPI\SPI.cpp
Generating function prototypes...
"C:\\Program Files (x86)\\Arduino\\hardware\\teensy/../tools/arm/bin/arm-none-eabi-g++" -E -CC -x c++ -w -g -Wall -ffunction-sections -fdata-sections -nostdlib -std=gnu++14 -fno-exceptions -fpermissive -fno-rtti -fno-threadsafe-statics -felide-constructors -Wno-error=narrowing -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 -D__IMXRT1062__ -DTEENSYDUINO=157 -DARDUINO=10819 -DARDUINO_TEENSY41 -DF_CPU=600000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH "-IC:\\Program Files (x86)\\Arduino\\hardware\\teensy\\avr\\cores\\teensy4" "-IC:\\Program Files (x86)\\Arduino\\hardware\\teensy\\avr\\libraries\\SD\\src" "-IC:\\Program Files (x86)\\Arduino\\hardware\\teensy\\avr\\libraries\\SdFat\\src" "-IC:\\Program Files (x86)\\Arduino\\hardware\\teensy\\avr\\libraries\\SPI" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\sketch\\LFE_3.9.15_SDtest1.ino.cpp" -o "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\preproc\\ctags_target_for_gcc_minus_e.cpp"
"C:\\Program Files (x86)\\Arduino\\tools-builder\\ctags\\5.8-arduino11/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\preproc\\ctags_target_for_gcc_minus_e.cpp"
Compiling sketch...
"C:\\Program Files (x86)\\Arduino\\hardware\\teensy/../tools/precompile_helper" "C:\\Program Files (x86)\\Arduino\\hardware\\teensy\\avr/cores/teensy4" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804" "C:\\Program Files (x86)\\Arduino\\hardware\\teensy/../tools/arm/bin/arm-none-eabi-g++" -x c++-header -O2 -g -Wall -ffunction-sections -fdata-sections -nostdlib -MMD -std=gnu++14 -fno-exceptions -fpermissive -fno-rtti -fno-threadsafe-statics -felide-constructors -Wno-error=narrowing -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 -D__IMXRT1062__ -DTEENSYDUINO=157 -DARDUINO=10819 -DARDUINO_TEENSY41 -DF_CPU=600000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH "-IC:\\Program Files (x86)\\Arduino\\hardware\\teensy\\avr/cores/teensy4" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804/pch/Arduino.h" -o "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804/pch/Arduino.h.gch"
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\pch\Arduino.h.gch
"C:\\Program Files (x86)\\Arduino\\hardware\\teensy/../tools/arm/bin/arm-none-eabi-g++" -c -O2 -g -Wall -ffunction-sections -fdata-sections -nostdlib -MMD -std=gnu++14 -fno-exceptions -fpermissive -fno-rtti -fno-threadsafe-statics -felide-constructors -Wno-error=narrowing -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 -D__IMXRT1062__ -DTEENSYDUINO=157 -DARDUINO=10819 -DARDUINO_TEENSY41 -DF_CPU=600000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH "-IC:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804/pch" "-IC:\\Program Files (x86)\\Arduino\\hardware\\teensy\\avr\\cores\\teensy4" "-IC:\\Program Files (x86)\\Arduino\\hardware\\teensy\\avr\\libraries\\SD\\src" "-IC:\\Program Files (x86)\\Arduino\\hardware\\teensy\\avr\\libraries\\SdFat\\src" "-IC:\\Program Files (x86)\\Arduino\\hardware\\teensy\\avr\\libraries\\SPI" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\sketch\\LFE_3.9.15_SDtest1.ino.cpp" -o "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\sketch\\LFE_3.9.15_SDtest1.ino.cpp.o"
Compiling libraries...
Compiling library "SD"
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SD\SD.cpp.o
Compiling library "SdFat"
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\FreeStack.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\MinimumSerial.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\ExFatLib\upcase.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\ExFatLib\ExFatFilePrint.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\ExFatLib\ExFatPartition.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\ExFatLib\ExFatFileWrite.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\ExFatLib\ExFatDbg.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\ExFatLib\ExFatFile.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\ExFatLib\ExFatName.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\ExFatLib\ExFatVolume.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\ExFatLib\ExFatFormatter.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\FatLib\FatDbg.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\FatLib\FatFile.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\FatLib\FatFormatter.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\FatLib\FatFileLFN.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\FatLib\FatVolume.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\FatLib\FatPartition.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\FatLib\FatFileSFN.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\FatLib\FatFilePrint.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\FatLib\FatName.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\FsLib\FsNew.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\FsLib\FsVolume.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\FsLib\FsFile.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\SdCard\SdCardInfo.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\SdCard\SdioTeensy.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\SdCard\SdSpiCard.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\SpiDriver\SdSpiDue.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\SpiDriver\SdSpiChipSelect.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\SpiDriver\SdSpiSTM32.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\SpiDriver\SdSpiParticle.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\SpiDriver\SdSpiESP.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\SpiDriver\SdSpiArtemis.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\SpiDriver\SdSpiSTM32Core.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\SpiDriver\SdSpiTeensy3.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\common\FsUtf.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\common\upcase.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\common\FmtNumber.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\common\FsGetPartitionInfo.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\common\FsDateTime.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\common\FsStructs.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\common\FsName.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\common\PrintBasic.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\common\FsCache.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\iostream\ostream.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\iostream\StdioStream.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\iostream\istream.cpp.o
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SdFat\iostream\StreamBaseClass.cpp.o
Compiling library "SPI"
Using previously compiled file: C:\Users\steve\AppData\Local\Temp\arduino_build_546804\libraries\SPI\SPI.cpp.o
Compiling core...
Using precompiled core: C:\Users\steve\AppData\Local\Temp\arduino_cache_759753\core\core_e612ed3a92f8769e6d06d6bf8e29c1af.a
Linking everything together...
"C:\\Program Files (x86)\\Arduino\\hardware\\teensy/../tools/arm/bin/arm-none-eabi-gcc" -O2 -Wl,--gc-sections,--relax "-TC:\\Program Files (x86)\\Arduino\\hardware\\teensy\\avr\\cores\\teensy4/imxrt1062_t41.ld" -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 -o "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804/LFE_3.9.15_SDtest1.ino.elf" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\sketch\\LFE_3.9.15_SDtest1.ino.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SD\\SD.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\FreeStack.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\MinimumSerial.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\ExFatLib\\ExFatDbg.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\ExFatLib\\ExFatFile.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\ExFatLib\\ExFatFilePrint.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\ExFatLib\\ExFatFileWrite.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\ExFatLib\\ExFatFormatter.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\ExFatLib\\ExFatName.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\ExFatLib\\ExFatPartition.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\ExFatLib\\ExFatVolume.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\ExFatLib\\upcase.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\FatLib\\FatDbg.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\FatLib\\FatFile.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\FatLib\\FatFileLFN.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\FatLib\\FatFilePrint.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\FatLib\\FatFileSFN.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\FatLib\\FatFormatter.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\FatLib\\FatName.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\FatLib\\FatPartition.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\FatLib\\FatVolume.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\FsLib\\FsFile.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\FsLib\\FsNew.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\FsLib\\FsVolume.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\SdCard\\SdCardInfo.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\SdCard\\SdSpiCard.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\SdCard\\SdioTeensy.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\SpiDriver\\SdSpiArtemis.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\SpiDriver\\SdSpiChipSelect.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\SpiDriver\\SdSpiDue.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\SpiDriver\\SdSpiESP.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\SpiDriver\\SdSpiParticle.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\SpiDriver\\SdSpiSTM32.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\SpiDriver\\SdSpiSTM32Core.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\SpiDriver\\SdSpiTeensy3.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\common\\FmtNumber.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\common\\FsCache.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\common\\FsDateTime.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\common\\FsGetPartitionInfo.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\common\\FsName.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\common\\FsStructs.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\common\\FsUtf.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\common\\PrintBasic.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\common\\upcase.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\iostream\\StdioStream.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\iostream\\StreamBaseClass.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\iostream\\istream.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SdFat\\iostream\\ostream.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804\\libraries\\SPI\\SPI.cpp.o" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804/..\\arduino_cache_759753\\core\\core_e612ed3a92f8769e6d06d6bf8e29c1af.a" "-LC:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804" -larm_cortexM7lfsp_math -lm -lstdc++
"C:\\Program Files (x86)\\Arduino\\hardware\\teensy/../tools/arm/bin/arm-none-eabi-objcopy" -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804/LFE_3.9.15_SDtest1.ino.elf" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804/LFE_3.9.15_SDtest1.ino.eep"
"C:\\Program Files (x86)\\Arduino\\hardware\\teensy/../tools/arm/bin/arm-none-eabi-objcopy" -O ihex -R .eeprom "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804/LFE_3.9.15_SDtest1.ino.elf" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804/LFE_3.9.15_SDtest1.ino.hex"
"C:\\Program Files (x86)\\Arduino\\hardware\\teensy/../tools/teensy_secure" encrypthex TEENSY41 "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804/LFE_3.9.15_SDtest1.ino.hex"
No key .pem file found, skipping .ehex encryption
"C:\\Program Files (x86)\\Arduino\\hardware\\teensy/../tools/teensy_post_compile" -file=LFE_3.9.15_SDtest1.ino "-path=C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804" "-tools=C:\\Program Files (x86)\\Arduino\\hardware\\teensy/../tools/" -board=TEENSY41
"C:\\Program Files (x86)\\Arduino\\hardware\\teensy/../tools/stdout_redirect" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804/LFE_3.9.15_SDtest1.ino.sym" "C:\\Program Files (x86)\\Arduino\\hardware\\teensy/../tools/arm/bin/arm-none-eabi-objdump" -t -C "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804/LFE_3.9.15_SDtest1.ino.elf"
"C:\\Program Files (x86)\\Arduino\\hardware\\teensy/../tools/teensy_size" "C:\\Users\\steve\\AppData\\Local\\Temp\\arduino_build_546804/LFE_3.9.15_SDtest1.ino.elf"
Memory Usage on Teensy 4.1:
  FLASH: code:62616, data:24472, headers:9164   free for files:8030212
   RAM1: variables:26400, code:59944, padding:5592   free for local variables:432352
   RAM2: variables:12384  free for malloc/new:511904
Multiple libraries were found for "SD.h"
 Used: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SD
 Not used: C:\Program Files (x86)\Arduino\libraries\SD
Using library SD at version 2.0.0 in folder: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SD 
Using library SdFat at version 2.1.2 in folder: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SdFat 
Using library SPI at version 1.0 in folder: C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\SPI
 
Like this? No change. SD.flush() won't compile and it seems to need patchFile.flush();

if (!SD.exists(fullPathName)) {
File patchFile = SD.open(fullPathName, FILE_WRITE);
for (int p = 0; p < 400; p++) {
patchFile.print(String(initPatch[p]));
patchFile.print(",");
}
patchFile.close();
patchFile.flush();
}
 
When I tried this a few weeks ago, using commas and no values worked ok but now it doesn't. Not sure what else I was doing differently. So even this has the same fault:
if (!SD.exists(fullPathName)) {
File patchFile = SD.open(fullPathName, FILE_WRITE);
patchFile.close();
}
 
It's something to do with the Upper case letter in the String
String fname = "pch" + String(k) + ".dat"; works but
String fname = "Pch" + String(k) + ".dat"; doesn't
 
Code:
if (!SD.exists(fullPathName)) {
	File patchFile = SD.open(fullPathName, FILE_WRITE);
	for (int p = 0; p < 400; p++) {
		patchFile.print(String(initPatch[p]));
		patchFile.print(",");
	}
	patchFile.close();
	patchFile.flush();
}
Can I request that in future when posting code, that you put it between CODE tags using the # button on the reply form.
It makes it so much easier to read and makes people more likely to be able to help you.
 
Code:
patchFile.close();
patchFile.flush();
flush() should go before close()

[edit] But I don't think it'll make any difference. I'm pretty sure that close() implicitly does a flush() anyway.

Pete
 
Thanks el_supremo, just tried that and no better. Is it something to do with my String / toCharArray / snprintf formatting as the file name with no upper case P works?!
 
Code:
          String fname = "Pch" + String(k) + ".dat";
          fname.toCharArray(filename, 13 + 4 + strlen(listOfSynthTypes[0]));
          snprintf(fullPathName, 23, "%s/%.2d/%s", listOfSynthTypes[0], bankNum, filename); // the .2 makes banks have leading zero and always use two characters 01 to 10
Seems a bit redundant to use a String, then convert it to a C string and then use snprintf.
Replace those three statements with this:
Code:
          snprintf(fullPathName, 23, "%s/%02d/Pch%03d.dat", listOfSynthTypes[0], bankNum,k);

I changed %.2d to %02d which is the correct way to specify a two digit integer padded with leading zeroes if necessary.

Pete
P.S. Change the %.2d in createDirectories to %02d too.
 
Hmmm. The only thing I can think of is that it's something to do with the SD file system not liking 512 files in a directory, but AFAIK it can take a lot more than that as long as they aren't in the root directory.

Pete
 
Yeah... weird that it likes pch511.dat but not Pch511.dat or pCh511.dat or pch511.daT
The problem doesn't occur at multiples of 511, so for example 1022 is fine.
 
Wondering if others are seeing this same issue. Here is a modified version of it that I just ran on a 64gb card (Assume ExFat) and on an 4GB card that is Fat32
Note I am running on IDE2...

Code:
#include <SD.h>
#define SD_CS BUILTIN_SDCARD
Sd2Card card;
const char *listOfSynthTypes[] = { "OB6" };
const int initPatch[400] = { 0, 1023, 512, 0, 172, 403, 800, 284, 535, 687, 534, 512, 512, 512, 512, 512, 1023, 512, 1023, 1023, 512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 0, 512, 0, 512, 512, 0, 512, 512, 16, 0, 0, 59, 0, 512, 0, 0, 8, 27, 1, 0, 8, 27, 1, 0, 8, 27, 1, 1, 8, 27, 0, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 1, 512, 512, 512, 512, 1, 9, 62, 0, 111, 0, 0, 0, 127, 0, 0, 127, 64, 64, 0, 0, 127, 64, 0, 0, 0, 24, 127, 64, 64, 24, 63, 127, 64, 64, 127, 64, 2, 0, 0, 63, 63, 127, 0, 0, 63, 127, 63, 0, 127, 63, 1, 127, 127, 120, 0, 0, 0, 2048, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, 512, 512, 512, 88, 512, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 100, 100, 100, 100, 100, 50, 50, 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512 };
int bankNum = 0;

void setup() {

  while (!Serial && millis() < 5000) ; 
  
  if (!SD.begin(SD_CS)) {
    Serial.println(F("Initialization of SD card failed"));
  }
  if (!card.init(SPI_HALF_SPEED, SD_CS)) {
    Serial.println(F("Card initialization failed."));
    while (true) {};  // freeze
  } else {
    Serial.println(F("SD card is present  "));
  }
  createDirectories();
  createInitFiles();
}

void createDirectories() {
  char dirName[20];                                                // the 3 allows for a slash and bank number
  snprintf(dirName, 22, "%s/%02d", listOfSynthTypes[0], bankNum);  // the .2 makes banks have leading zero and always use two characters 01 to 10
  if (!SD.exists(dirName)) SD.mkdir(dirName);
  Serial.print("creating directory  ");
  Serial.println(dirName);
}

void createInitFiles() {
  char fullPathName[30];
  char filename[30];
  Serial.print(F("About to check "));
  Serial.print(listOfSynthTypes[0]);
  Serial.print(F(" Bank "));
  Serial.println(bankNum);
  for (int k = 0; k < 1000; k++) {  // for each patch
    String fname = "Pch" + String(k) + ".dat";
    fname.toCharArray(filename, 13 + 4 + strlen(listOfSynthTypes[0]));
    snprintf(fullPathName, 23, "%s/%02d/%s", listOfSynthTypes[0], bankNum, filename);  // the .2 makes banks have leading zero and always use two characters 01 to 10

    if (!SD.exists(fullPathName)) {
      File patchFile = SD.open(fullPathName, FILE_WRITE);
      if (patchFile) {
        for (int p = 0; p < 400; p++) {
          patchFile.print(String(initPatch[p]));
          patchFile.print(",");
        }
        patchFile.close();
      } else {
        int code = SD.sdfs.sdErrorCode();
        Serial.printf("File %s did not open code: %d ", fullPathName, code);
        printSdErrorSymbol(&Serial, code);
        Serial.println();
      }
    }

    if (!SD.exists(fullPathName)) {
      Serial.print(fullPathName);
      Serial.println(F(" failed patch file creation - not there!"));
    }
    Serial.print(".");
    if ((k & 0x3f) == 0x3f) Serial.println();
  }  // patches
  Serial.print(listOfSynthTypes[0]);
  Serial.println(F(" checked"));
}

void loop() {
}

I added code to check to see if the file opened or not. And if not tried to get error code.
Also printed dots so I know it was going through the stuff...
Code:
SD card is present  
creating directory  OB6/00
About to check OB6 Bank 0
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
........................................OB6 checked
 
Thanks Kurt

I added this to ensure my card was formatted before each test:

Code:
    SD.format();
    Serial.println(F("SD card formatted"));

I get this - so it still fails for me. I'm using Arduino 1.8.19 and Teensyduino 1.57

Code:
SD card is present  
Writing FAT ................................
Format Done
SD card formatted
creating directory  OB6/00
About to check OB6 Bank 0
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
...............................................................File OB6/00/Pch511.dat did not open code: 0 SD_CARD_ERROR_NONE
OB6/00/Pch511.dat failed patch file creation - not there!
.
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
........................................OB6 checked
 
Please note that it only fails the first time a file creation is attempted. If I run the sketch again, the file will always be created. So I have to run SD.format() every time or else everything appears to work after the first attempt! Did yours work correctly the first time it was run on a new card, as I would expect it to run correctly on subsequent runs?
 
Running @KurtE p13 code on T_4.1 on a 64GB SanDisk Ultra A1 card:
Results agree as posted there
Code:
C:\T_Drive\tCode\FORUM\SDcreate512\SDcreate512.ino Nov 14 2022 11:44:47
SD card is present  
creating directory  OB6/00
About to check OB6 Bank 0
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
........................................OB6 checked

Running from TSET cmdline where it is using the IDE 2 installed TD 1.57 sources:
Code:
...
"C:\\Users\\Tim\\AppData\\Local\\Arduino15\\packages\\teensy\\tools\\teensy-tools\\1.57.1/teensy_size" "R:\\temp\\arduino_build_SDcreate512.ino/SDcreate512.ino.elf"
teensy_size: Memory Usage on Teensy 4.1:
teensy_size:   FLASH: code:64264, data:11160, headers:8540   free for files:8042500
teensy_size:    RAM1: variables:13088, code:61592, padding:3944   free for local variables:445664
teensy_size:    RAM2: variables:12384  free for malloc/new:511904
Multiple libraries were found for "SD.h"
 Used: C:\Users\Tim\AppData\Local\Arduino15\packages\teensy\hardware\avr\1.57.1\libraries\SD
 Not used: C:\T_Drive\Arduino-1.8.19\libraries\SD
Using library SD at version 2.0.0 in folder: C:\Users\Tim\AppData\Local\Arduino15\packages\teensy\hardware\avr\1.57.1\libraries\SD 
Using library SdFat at version 2.1.2 in folder: C:\Users\Tim\AppData\Local\Arduino15\packages\teensy\hardware\avr\1.57.1\libraries\SdFat 
Using library SPI at version 1.0 in folder: C:\Users\Tim\AppData\Local\Arduino15\packages\teensy\hardware\avr\1.57.1\libraries\SPI 
No board available
 
I am wondering if this is something you should create an issue against the SDFat library.

It may be some specific condition, where this shows it up on FAT32 on 16GB SDs, where who knows maybe on that specific file creation, it needed to allocate new cluster for directory, and maybe clusters for the file name or the like.

There may also be a slight chance that this is something that is already known about and/or better yet there was a fix for it.
 
Back
Top