Про СДкарточки
|
|
lvd | Дата: Вторник, 2008-06-10, 01:02:06 | Сообщение # 1 |
 Retry, Abort, Ignore?
Группа: Человеки
Сообщений: 2528
Статус: Offline
| Короче, поипавшись, как водится, с СДкарточкой, нащупал алго инициализации. Послать команду, далее ждать, пока неФФ ответит. И СЧИТАТЬ ПОЛНОСТЬЮ ВСЕ 6 байт ответа (включая и этот неФФ). Пока это не сделал - ничего не работало или глючило, или ругалось инвалидной командой, или просто из слипа не выходило по CMD1. Все вокруг (смотрел пару сорцов) все 6 байт не читают... А у Савелия вообще ахтунг - если ACMD41 не ответил нулём с первого же байта, то вся команда заново перепосылается... Вон пусть независимое лицо (например, Романыч) подтвердит или опровергнет.
Многого нет здесь: http://lvd.nedopc.com
Сообщение отредактировал lvd - Вторник, 2008-06-10, 01:02:26 |
|
| |
Romanich | Дата: Вторник, 2008-06-10, 02:54:35 | Сообщение # 2 |
 Младший одепт
Группа: Человеки
Сообщений: 578
Статус: Offline
| моё рабочее (проверял на ММС): Code #define MMC_Slow SPI_CSR1=0x00004B02; //@400 kHz #define MMC_Fast SPI_CSR1=0x00000202; //@15 MHz
#define MMC_CS(mmc_cs) \ { \ A_ODSR=(A_ODSR&0xFFFFFFEF)|(mmc_cs<<4); \ PIOA_ODSR=A_ODSR; \ }
u32 A_ODSR=0x00000038;
u8 MMCBuffer[512]; //Буфер MMC-карточки
s8 DetectMMC(void) //Наличие MMC { if(PIOA_PDSR&0x00000100) return -1; return 0; }
u8 IO(u8 io) { SPI_TDR=io|0x00010000; while((SPI_SR&3)!=3); return SPI_RDR; }
s8 PrepareMMC(void) //Подготовка MMC к работе { u8 b; MMC_Slow MMC_CS(1) for(b=0;b<10;b++) IO(0xFF); SimpleDelay(1000); MMC_CS(0) IO(0x40); IO(0); IO(0); IO(0); IO(0); b=IO(0x95); while(b==0xFF) b=IO(0xFF); if(b!=0x01) { MMC_CS(1) return -1; } CMD1: IO(0x41); IO(0); IO(0); IO(0); IO(0); b=IO(0xFF); while(b==0xFF) b=IO(0xFF); if(b!=0x00) goto CMD1; MMC_CS(1) MMC_Fast return 0; }
s8 InMMC(u32 Sector) //Чтение сектора MMC { u8 b; u16 i; Sector<<=9; MMC_CS(0) IO(0x51); IO(Sector>>24); IO(Sector>>16); IO(Sector>> 8); IO(Sector ); b=IO(0xFF); while(b==0xFF) b=IO(0xFF); if(b) { MMC_CS(1) return -1; } while(b!=0xFE) b=IO(0xFF); for(i=0;i<512;i++) MMCBuffer[i]=IO(0xFF); IO(0xFF); IO(0xFF); MMC_CS(1) return 0; }
Живу схемами, питаюсь концепциями :) http://emu-apparatchik.narod.ru
|
|
| |
lvd | Дата: Вторник, 2008-06-10, 09:27:53 | Сообщение # 3 |
 Retry, Abort, Ignore?
Группа: Человеки
Сообщений: 2528
Статус: Offline
| Вот именно - первый неФФ в ответе и всё. А так у меня не работает, надо весь ответ 6байтовый читать. Какая частота клока?
Многого нет здесь: http://lvd.nedopc.com
|
|
| |
Romanich | Дата: Вторник, 2008-06-10, 10:04:06 | Сообщение # 4 |
 Младший одепт
Группа: Человеки
Сообщений: 578
Статус: Offline
| SPI Clock 15 MHz (написано в комменте сорца)
Живу схемами, питаюсь концепциями :) http://emu-apparatchik.narod.ru
|
|
| |
lvd | Дата: Вторник, 2008-06-10, 10:21:22 | Сообщение # 5 |
 Retry, Abort, Ignore?
Группа: Человеки
Сообщений: 2528
Статус: Offline
| Quote (Romanich) SPI Clock 15 MHz (написано в комменте сорца) Ога, а когда иниты шлёшь, что-то на 400кгц переключаешь... Видимо, на 15мгц не работало Попробуй, если не влом, читать по 6 байт начиная с неФФ в инитах, мож на 15 проканает? Хотя 6 байт - это в СД, в ммц не знаю как.
Многого нет здесь: http://lvd.nedopc.com
|
|
| |
Romanich | Дата: Вторник, 2008-06-10, 10:53:41 | Сообщение # 6 |
 Младший одепт
Группа: Человеки
Сообщений: 578
Статус: Offline
| > Ога, а когда иниты шлёшь, что-то на 400кгц переключаешь вся инициализация на частоте 400 кГц далее после инициализации работаем (читаем/пишем) на 15 МГц (хотя до 24 МГц можно, просто делитель от MCK=60 МГц не позволяет)
Живу схемами, питаюсь концепциями :) http://emu-apparatchik.narod.ru
|
|
| |
lvd | Дата: Вторник, 2008-06-10, 12:49:44 | Сообщение # 7 |
 Retry, Abort, Ignore?
Группа: Человеки
Сообщений: 2528
Статус: Offline
| Вот я и удивляюсь, почему это на 400 кгц ) Чай не i2c
Многого нет здесь: http://lvd.nedopc.com
|
|
| |
savelij | Дата: Вторник, 2008-06-10, 19:33:43 | Сообщение # 8 |
Активист
Группа: Человеки
Сообщений: 158
Статус: Offline
| Quote (lvd) А у Савелия вообще ахтунг - если ACMD41 не ответил нулём с первого же байта, то вся команда заново перепосылается... А на эту команду и будет сразу ответа, надо подавать команду пока не появится 0 вместо 1. Про это в спецификации нацарапано.
|
|
| |
lvd | Дата: Вторник, 2008-06-10, 19:53:17 | Сообщение # 9 |
 Retry, Abort, Ignore?
Группа: Человеки
Сообщений: 2528
Статус: Offline
| Quote (savelij) А на эту команду и будет сразу ответа, надо подавать команду пока не появится 0 вместо 1. Про это в спецификации нацарапано. Речь об чём: 1. на команды отвечает не сразу, перед ответом идут $FF. Потом уже ответ - с 0 или с 1. Вот, если ФФ, то не надо переподавать команду. 2. ответ на команду кмд1 (ну и акмд41, если не глючу) - 6 байт. Надо их все считать.
Многого нет здесь: http://lvd.nedopc.com
|
|
| |
savelij | Дата: Вторник, 2008-06-10, 20:03:00 | Сообщение # 10 |
Активист
Группа: Человеки
Сообщений: 158
Статус: Offline
| Quote (lvd) Речь об чём: 1. на команды отвечает не сразу, перед ответом идут $FF. Потом уже ответ - с 0 или с 1. Вот, если ФФ, то не надо переподавать команду. 2. ответ на команду кмд1 (ну и акмд41, если не глючу) - 6 байт. Надо их все считать. 1. Вообще-то FF насколько я понимаю это исполнение команды и зачем их учитывать? 2. Откуда в ответ 6 байт, если код ответа из группы R1 и равен 1 байту. Спецификация нужна, там все расписано/разрисовано.
Сообщение отредактировал savelij - Вторник, 2008-06-10, 20:03:55 |
|
| |
lvd | Дата: Вторник, 2008-06-10, 20:21:49 | Сообщение # 11 |
 Retry, Abort, Ignore?
Группа: Человеки
Сообщений: 2528
Статус: Offline
| 1. Я смотрю в исходки того, что в НедоПц5 послано: там и на кмд0, и на акмд41 логика работы такова, что если первый байт ответа не тот, что нужно (в том числе ФФ), то команда перепосылается. Я же утверждаю, что ответ на команду приходит не сразу, а после нескольких ФФ, которые обозначают, что ответа пока нет. Получается, что ты не дожидаешься ответа, а пинаешь карточку до упаду =) Такое может прокатить, если карточку пинать медленно (как например у Романыча, или со спектрума). А если быстро (как у меня выходит: зетник на 12 мгц и частота СПИ-клока 6 мгц) - то не проканывает. 2. насколько я помню, ответ на кмд1 - R3, то есть 6 байт. Насчёт акмд41 не помню, не смотрел.
Многого нет здесь: http://lvd.nedopc.com
|
|
| |
savelij | Дата: Вторник, 2008-06-10, 20:30:30 | Сообщение # 12 |
Активист
Группа: Человеки
Сообщений: 158
Статус: Offline
| Quote (lvd) 1. Я смотрю в исходки того, что в НедоПц5 послано: там и на кмд0, и на акмд41 логика работы такова, что если первый байт ответа не тот, что нужно (в том числе ФФ), то команда перепосылается. Я же утверждаю, что ответ на команду приходит не сразу, а после нескольких ФФ, которые обозначают, что ответа пока нет. Получается, что ты не дожидаешься ответа, а пинаешь карточку до упаду =) Такое может прокатить, если карточку пинать медленно (как например у Романыча, или со спектрума). А если быстро (как у меня выходит: зетник на 12 мгц и частота СПИ-клока 6 мгц) - то не проканывает. Ну на Z-контроллере инициализация на полной скорости происходит без переключений частоты (на какой частоте у КОЕ надо спросить). А карту пинать это не мой произвол.Quote (lvd) 2. насколько я помню, ответ на кмд1 - R3, то есть 6 байт. Насчёт акмд41 не помню, не смотрел. Да нет, как раз у обоих команд ответ R1 = 1 байт
|
|
| |
KOE | Дата: Вторник, 2008-06-10, 23:52:18 | Сообщение # 13 |
 Retry, Abort, Ignore?
Группа: Человеки
Сообщений: 2318
Статус: Offline
| Quote (savelij) Ну на Z-контроллере инициализация на полной скорости происходит без переключений частоты (на какой частоте у КОЕ надо спросить). 8 МГц. Quote (savelij) А карту пинать это не мой произвол. Угу, почти во всех открытых исходниках так. А иначе половина карт разных производителей не рабртает, похоже.
Мы рождены, чтоб сказку сделать былью "Кто не обломался, тем еще предстоит"
|
|
| |
lvd | Дата: Среда, 2008-06-11, 01:54:31 | Сообщение # 14 |
 Retry, Abort, Ignore?
Группа: Человеки
Сообщений: 2528
Статус: Offline
| Ага, напутал. Точно, везде 1 байт ответа. Но вот страница 88 (по нумерации ридера) файла sdcard_full.pdf длиной 1174524 байтов, там про то, что после конца любой транзакции надо 8 клоков прохреначить. Наверное поэтому у меня так и вылечилось. а на странице 99 там же нарисовано, что перед респонсом карточка может срать ФФами.
Многого нет здесь: http://lvd.nedopc.com
|
|
| |
Romanich | Дата: Среда, 2008-06-11, 03:22:30 | Сообщение # 15 |
 Младший одепт
Группа: Человеки
Сообщений: 578
Статус: Offline
| Quote (lvd) Я смотрю в исходки того, что в НедоПц5 послано... Киньте в личку если не жалко, линк на недопц5
Живу схемами, питаюсь концепциями :) http://emu-apparatchik.narod.ru
Сообщение отредактировал Romanich - Среда, 2008-06-11, 03:23:11 |
|
| |
|
|