I am getting question marks on serial while trying to read SD card
It sounds like your terminal is set to only display the standard set of ascii characters from decimal 32 through to decimal 127: -



And, if a character outside this range comes along, a question mark (ascii 63d) replaces it. A simple reason could be that every byte recieved has its MSB set.

You need to find a way of showing all characters like this: -