The code comes from the example, just a little bit modified, so i am not the author of this sentence in the code, but since it has a "!" symbol, it is not trying to start the SD, just only to check if it is already done. Am i right?
No, I'm sorry, you are not.
The SD.begin() function attempts to initialize the card, and return true if successful, or false, if not.
The ! in front says to negate the logic state returned by the SD.begin() function, for the purposes of the if test.
The code is equivalent to:
boolean openStatus = SD.begin(chipSelect);
if(openStatus == false)
{
Serial.println("Card failed, or not present");
return;
}
Written this way, you can see that the SD.begin() function gets called every time DownloadData() gets called, which is not what you want to do, since SD.begin() WILL fail if called a second time, apparently.
I'd move the Sd.begin() call, and related error handling, to setup().