Вот такой у меня вопрос возник: данные о файлах внутри tzx имеют выравнивание, или же отделяются маркерами?
Это я к тому, что у тебя при чтении, после посыла STOP_TRANS идет retry на 255 байт, а если, например сектор считан от начала всего на 10 байт, а потом ты шлешь STOP_TRANS, после чего пытаешься дождаться в течении 255 байт респонза, то его не получишь, в результате все остальные команды будут игнорироваться. Попробуй после посыла CMD12 дочитать текущий сектор до конца (+2 байта CRC), и лишь потом войти в цикл ожидания респонза. Респонз должен прийти через 1 байт.