Is there something erasing my setup header (ID, Voltage, Current) in the CSV file? No biggy with a couple data points, but helpful when you have more. Serial monitor confirms it wrote it, but when I view the file its not there...

String dataString = String(id) + ", " + String(timestamp) + ", " + String(voltage_reading) + ", " + String(current_reading);A colossal waste of resources. The File::println() function could be replaced with several calls to File::print() and one call to File::println() to print the individual variables, with no need to have the String class make the same unformatted conversion to a string. Concatenating is most certainly not required. After this line of code, several calls to the String class' destructor are going to be made, any one of which, when calling the defective free() function, can corrupt your memory.

Avoid that potential problem by ditching the String class.

Quote

I have no delay and can only get about 3 data points per second (float math?).

No. It is more likely that opening and closing the file for each record added is what is slowing you down. That, and all the constructor and destructor calls and copying memory locations that the String class has to do.