I’ve tried Victors updated version of SdFat but it doesn’t seem to work at all for me
The card won’t initialize.
So I”ve gone back to using the standard SD that is part of the IDE install.
However its ultra flakey

I know this is old news… But the SD lib seems to fail to read for no apparent reason, e.g. i call dataFile.read(buff,LEN); and it just returns -1 at random, which means its failed, and if you try to read again without leaving a long time delay e.g. 10ms it just keeps returning -1 
Anyway, in terms of what I was trying to do, I’ve got something that sort of works, but isn’t reliable enough to be used.
It opens and reads a file from SD and plays it as an MP3 though a VS1003
I will repost the code to the VS1003 lib thread in case anyone with the same hardware wants to have a play with it
#include <VS1003_STM.h>
#include <SPI.h>
#include <SD.h>
VS1003 player(PC14, PB10, PA8, PA9, SPIClass(2)); // cs_pin, dcs_pin, dreq_pin, reset_pin
/*
* VS1003 development board connected by it's header pins the following way:
*
* GND - GND -
* XDCS - D6 - PB10
* DREQ - D7 - PA8
* XRES - D8 - PA9
* XCS - D9 - PC14
* SCLK - D13 - PA5
* SI - D11 - PA7
* SO - D12 - PA6
* GND - GND -
* 5V - 5V -
*/
void setup ()
{
Serial.begin(115200);
// while (!Serial.available());/// Wait for key entry.. For debugging
// see if the card is present and can be initialized:
while (!SD.begin(PA4))
{
Serial.println("Card failed, or not present");// don't do anything more:
delay(100);
}
Serial.println("card initialized.");
player.begin();
player.modeSwitch(); //Change mode from MIDI to MP3 decoding (Vassilis Serasidis).
player.setVolume(64);
}
int currentFileNum = 0; // Hack because SD only allows one file handle open at a time :-(
void loop()
{
playFile("music.mp3");// Lets just play the music ;-)
delay(1000);
return;
}
#define BUFF_LEN 128
void playFile(char *fileName)
{
uint8_t buff[BUFF_LEN];
File dataFile;
int bytesRead;
int fileSize;
int totalBytesRead = 0;
dataFile = SD.open(fileName);
if (!dataFile)
{
Serial.println("Error opening file");
return;
}
Serial.print("Playing "); Serial.println(fileName);
fileSize = dataFile.size(); // need to know the size of the file
// loop until end of file
while (totalBytesRead != fileSize)
{
do
{
bytesRead = dataFile.read(buff, BUFF_LEN);// try to read a buffers worth
if (bytesRead == -1) // Oops. SD didnt manage to read anything ....
{
delay(10);// Workaround for problem in SD lib.
}
} while (bytesRead == -1);// loop around if last read failed
player.playChunk(buff, bytesRead);
totalBytesRead += bytesRead;// keep track of how much of the file we've played
}
dataFile.close();
}