Не поможет ли кто разобраться?
У меня версия FATFS R0.09 24 Jan 2013.
Не инициализируется карта (Ппоцедура disk_initialize (0)).
Прописал физическое соединение в модуле mmcbb.c.
Обмен по SPI идёт - посылается 80 тактов при CS=1, затем CS=0.
Посылается команда CMD0 с параметром 0x0, ответ 1.
Посылается команда CMD8 с параметром 0x01AA, ответ 0x000001AA.
Далее, карта не выходит из Iddle состояния, в ответ на циклически посылаемую команду ACMD41 с аргументом 1UL << 30 получаю 01, а не 0.
Менял скорость обмена. Менял карты. Форматировал карты на PC. Тот же эффект.
Стал ковыряться в исходниках FATFS и спецификации на SD.
Как то странно в FATFS выглядит функция посылки команды, точнее её часть, относящаяся к приёму ответа:
Код
/* Receive command response */
if (cmd == CMD12) rcvr_mmc(&d, 1); /* Skip a stuff byte when stop reading */
n = 10; /* Wait for a valid response in timeout of 10 attempts */
do
rcvr_mmc(&d, 1);
while ((d & 0x80) && --n);
return d; /* Return with the response value */
if (cmd == CMD12) rcvr_mmc(&d, 1); /* Skip a stuff byte when stop reading */
n = 10; /* Wait for a valid response in timeout of 10 attempts */
do
rcvr_mmc(&d, 1);
while ((d & 0x80) && --n);
return d; /* Return with the response value */
по спецификации на команду ACMD41 должен быть 6-байтный ответ. Бит окончания инициализации - старший во втором байте. А приведённый код, насколько я понимаю, вернёт последний из 6 байт.
Вопроса у меня два:
1. В чём причина того, что нет имнициализации карты?
2. Не даст ли кто ссылку на последнюю версию спецификации на SD?