Маялся недавно с такой же проблемой. Вроде все хорошо а в ответ только $FF. Оказалось все просто:
1 - Перестал пользоваться командой 17 до лучших времен, начал использовать команду 18
2 - Послал команду 18 с адресом $00000000, читаю карту пока не придет в ответе $FE.
3 - Только после этого ответа карта начинает передавать данные
4 - Важно! Адрес $00000000 - это физический 0, как правило здесь начинаются скрытые сектора.
5 - Чтобы найти логический 0 - с которого и начинают располагаться Boot Sector, FAT1-FAT...n, Root Directory и т.д. Я считываю по одному байту с каждого сектора, пока не получу $EB. Это и есть Boot Sector. Далее используешь это смещение для вычисления всех адресов
Не уточнил - это все при условии нормального сброса и инициализации, но я думаю это и так понятно