usb_send_info ожидает символ *, указывающий на SRAM, а не на FLASH (PROGMEM).
usb_send_info((pgm_read_byte(data++)));
pgm_read_byte считывает один байт / символ с заданного адреса PROGMEM.Он не возвращает указатель.Так что этот вызов функции не имеет смысла.
Если вы измените usb_send_info следующим образом, он должен работать:
void usb_send_info(char data) {
serial_comm_write((uint8_t *)&data, 1);
}