Цитата(Andrei.... @ Feb 1 2007, 16:19)

1. Что касается команды CMD16, то BLOCKLEN обычно может быть от 1 до 512, карточки с возможной длиной более 512 не встречал.
2. Команду CMD17 подаётся в состоянии tran, вы правильно подаёте её, т.к вы находитесь в этом состоянии (иначе бы команда и CMD16 не работала). Проблема видимо в получении данных по линии DAT0-3(или DAT0 если 1-битный режим). Убедитесь что работает правильно код получения даныых по линии данных.
Согласен с вами полностью, вот только одного не могу понять:
В принципе, если я достаточно внимательно читал мануал,
то CMD17 должна выдать хотя бы R1,
Использую ту же процедуру вызова что и для CMD16
вот только ответа нет.
Может надо выждать какое-то время, я не знаю...
Я уже даже написал цикл, в котором жду какого-либо
ответа, отличного от 0xFF, но программа зацикливается.
Режим у меня действительно однобитный, точнее SPI.
Инициализацию проводил коммандой CMD1,
хотя советуют ACMD41,
CSD тоже считался:
00 5D 01 32 13 59 80 E3 76 D9 CF FF 16 40 00 4F
Вот кусок кода, который у меня шлет комманду (пока ATMEGA128, далее планирую перевести на ARM, его пока только изучаю)
unsigned char MMCCommand(unsigned char command, unsigned long adress)
{
SPI_WRITE(0xFF); //Dummy write
SPI_WAIT();
SPI_WRITE(command);
SPI_WAIT();
SPI_WRITE((unsigned char)(adress>>24)); //MSB of adress
SPI_WAIT();
SPI_WRITE((unsigned char)(adress>>16));
SPI_WAIT();
SPI_WRITE((unsigned char)(adress>>8));
SPI_WAIT();
SPI_WRITE((unsigned char)adress); //LSB of adress
SPI_WAIT();
SPI_WRITE(0xFF); //dummy checksum
SPI_WAIT();
SPI_WRITE(0xFF); //16 bit response
SPI_WAIT();
SPI_WRITE(0xFF);
SPI_WAIT();
}
return SPDR.
Если я правильно понимаю эта процедура должна у меня возвратить R1,
и возвращает на комманды CMD1, CMD9, CMD16.
(для CMD0 не подходит, там надо CRC 0x95).
Что ж такого особенного у комманды CMD17 что она не выдает ответ R1?
Такой же ответ, тоесть никакого (0xFF), я получал от карточки на комманду
CMD17, когда забыл CHIP SELECT подать, но уже исправил.
P.S. Я конечно не исключаю ошибок в своем коде, но может дело
в чем-то другом, о чем я даже не догадываюсь?
может есть какие-то особенности с коммандой чтения блока?