Может не правильно инициализируешь карточку?
Вот вариант инициализации и работы с карточкой:
1. Настраиваем контроллер SPI
2. Устанавливаем CS=1 и передаем восемь байт 0xFF
3. Устанавливаем CS=0 и передаем CMD0 c аргументом 0 и CRC=0x95
4. Ждем ответа от карточки (посылаем в карточку 0xFF, пока не получим байт не равный 0xFF)
5. Если таймаут, увеличиваем счетчик попыток и если он меньше 3,
переходим к п.2. Если счетчик попыток = 3, вываливаемся с ошибкой.
6. Устанавливаем CS=0 и передаем CMD1 c аргументом 0 и CRC=0
7. Ждем ответа от карточки (посылаем в карточку 0xFF, пока не получим байт не равный 0xFF)
8. Устанавливаем CS=1
9. Если таймаут или ответ <> 0, увеличиваем счетчик попыток и если он меньше 3,
переходим к п.6. Если было три попытки выходим по ошибке. Если ответ = 0, карточка готова к работе
Читаем CSD
10. Устанавливаем CS=0 и передаем CMD9 c аргументом 0 и CRC=0
11. Ждем ответа от карточки (посылаем в карточку 0xFF, пока не получим байт не равный 0xFF)
12. При таймауте или при ответе <> 0, уст. CS=1 и переходим на обработку ошибки (п. 6)
13. Ждем от карточки токена SINGLE_BLOCK_READ (0xFE) (посылаем в карточку 0xFF, пока не получим байт не равный 0xFE)
14. При таймауте уст. CS=1 и переходим на обработку ошибки (п. 6)
15. Принимаем 16 байт CSD
16. Принимаем CRC (даже если не анализируем, т.к. карточка ждет 16 тактовых импульсов)
17. Устанавливаем CS=1 и выполняем анализ CSD.
Чтение блока данных
18. Устанавливаем CS=0 и передаем CMD17 c адресом блока данных (адрес должен быть кратен 512) и CRC=0
19. Ждем ответа от карточки (посылаем в карточку 0xFF, пока не получим байт не равный 0xFF)
20. При таймауте или при ответе <> 0, уст. CS=1 и переходим на обработку ошибки (п. 6)
21. Ждем от карточки токена SINGLE_BLOCK_READ (0xFE) (посылаем в карточку 0xFF, пока не получим байт не равный 0xFE)
22. При таймауте или получении ответа <> 0xFE, уст. CS=1 и переходим на обработку ошибки (п. 6)
23. Принимаем 512 байт данных
24. Принимаем CRC (даже если не анализируем, т.к. карточка ждет 16 тактовых импульсов)
25. Устанавливаем CS=1 и разбираемся с прочитанными данными
Скорость обмена и длительность таймаутов определяется значениями в CSD, пока он не прочитан, можно установитьс запасом - 200мс. Скорость обмена должна быть в начале работы не более 400 кбит.
В интернет доступны примеры для AVR, например
http://hubbard.engr.scu.edu/embedded/avr/avrlib
www.ghielectronics.com