Who knows where the error occured. You must check each call for error returns.
Did you check sd.begin()
what about open?
Did seek work?
Mixing the constant 80 and framesize is poor practice. How do we know framesize contains 80? It appears that read returns -1 so read failed but who knows what failed before the read().
int dataread = program.read(buf, 80);
if(dataread != framesize)
Is the error code 0X11 or 0X0B ?
computer.print(F("SD error code: "));
computer.print(sd.card()->errorCode(), HEX); //prints "11"
If it prints "11" then the error code is 0X11.
/** timeout while waiting for start of read data */
uint8_t const SD_CARD_ERROR_READ_TIMEOUT = 0X11;
Once again this may not be meaningful if another call failed before the read().