реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> SD карта не просыпается
svchost
сообщение Jun 1 2009, 11:42
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 31-05-09
Пользователь №: 49 779



Добрый день!
Есть связка mega32+SD карта 128M (питание 3,3в)+ программная реализация SPI.
Воспроизводит WAV файлы 8бит 11025Гц.
Установил карту 1G. Не просыпается по CMD1 (в ответ получаю 01).
Подавал связку CMD55 (в ответ получаю 01)+CMD41, CMD8 на обе команды ответ 05 (не существующая команда).
Все команды подаю с правильным CRC. В кардридере все работает. Купил флешку на 2G тоже самое.
Может кто сталкивался, подскажите пожалуйста в чем трабл?

Спасибо.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 1 2009, 11:56
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Cначала нужно дать минимум 74 клока, затем CMD0, затем ACMD41.
Go to the top of the page
 
+Quote Post
svchost
сообщение Jun 1 2009, 13:01
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 31-05-09
Пользователь №: 49 779



Цитата(aaarrr @ Jun 1 2009, 15:56) *
Cначала нужно дать минимум 74 клока, затем CMD0, затем ACMD41.




все это соблюдается...
у меня работают флешки 32М. 64М, 128М
проблема с 1 и 2G
Go to the top of the page
 
+Quote Post
etoja
сообщение Jun 1 2009, 13:24
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 121
Регистрация: 14-01-05
Из: Москва
Пользователь №: 1 952



Цитата(svchost @ Jun 1 2009, 17:01) *
все это соблюдается...
у меня работают флешки 32М. 64М, 128М
проблема с 1 и 2G



У них в кластере не два, а четыре сектора.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 1 2009, 13:31
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(svchost @ Jun 1 2009, 17:01) *
все это соблюдается...
у меня работают флешки 32М. 64М, 128М
проблема с 1 и 2G

Значит что-то все-таки не соблюдается - инициализация у всех одинаковая. Большего размера карты могут ощутимо дольше инициализироваться, точно ждете 1 секунду?

Цитата(etoja @ Jun 1 2009, 17:24) *
У них в кластере не два, а четыре сектора.

Да можно и шестнадцать сделать, только при чем тут это?
Go to the top of the page
 
+Quote Post
svchost
сообщение Jun 1 2009, 13:39
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 31-05-09
Пользователь №: 49 779



Цитата(aaarrr @ Jun 1 2009, 17:31) *
Значит что-то все-таки не соблюдается - инициализация у всех одинаковая. Большего размера карты могут ощутимо дольше инициализироваться, точно ждете 1 секунду?


Да можно и шестнадцать сделать, только при чем тут это?



подаю CMD0 в ответ получаю 01
подаю CMD1 в ответ получаю 01, повторяю команду до 32 раз в ответ 01
ожидаю 1 сек
повторяю CMD1 в ответ 01...

не могу понять в чем дело...
грешил на карту, купил сегодня новую...все один к одному
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 1 2009, 13:44
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



CMD1 или ACMD41? CMD1 использовать не рекомендуется.
Go to the top of the page
 
+Quote Post
woroba
сообщение Jun 1 2009, 13:55
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 18-07-05
Пользователь №: 6 871



Цитата(svchost @ Jun 1 2009, 17:42) *
Добрый день!
Есть связка mega32+SD карта 128M (питание 3,3в)+ программная реализация SPI.
Воспроизводит WAV файлы 8бит 11025Гц.
Установил карту 1G. Не просыпается по CMD1 (в ответ получаю 01).
Подавал связку CMD55 (в ответ получаю 01)+CMD41, CMD8 на обе команды ответ 05 (не существующая команда).
Все команды подаю с правильным CRC. В кардридере все работает. Купил флешку на 2G тоже самое.
Может кто сталкивался, подскажите пожалуйста в чем трабл?

Спасибо.


У меня вот это работает с 1G.
Посмотрите может поможет.

unsigned char MMC_Init(void)
{
unsigned char i=0,b=0;
SPICS=1; // disable MMC
for(i=0; i < 10; i++) SPI(0xFF);
SPICS=0; // enable MMC
b=Command(0x40,0,0x95);
i=0;
while (b!=1)
{
i++;
b=SPI(0xFF);
if (i==0) return 1;
}
delay_ms(2000);
b=Command(0x41,0,0xFF);
i=0;
//buf2[i]=b;
while (b!=1)//!=0)
{
i++;
b=SPI(0xFF);
//buf2[i]=b;
if (i==0) return 2;
}
return 0;
}
Go to the top of the page
 
+Quote Post
svchost
сообщение Jun 1 2009, 13:56
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 31-05-09
Пользователь №: 49 779



Цитата(aaarrr @ Jun 1 2009, 17:44) *
CMD1 или ACMD41? CMD1 использовать не рекомендуется.




ACMD41 не воспринимает
CMD55 (ответ 01)+CMD41(ответ 05 -несуществующая команда)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 1 2009, 18:39
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(svchost @ Jun 1 2009, 17:56) *
ACMD41 не воспринимает

Так, а карта не SDHC случаем?

Последовательность инициализации такая:

1. 74 или больше "пустых" клоков.
2. CMD0
3. CMD8. Если есть ответ, значит имеем дело с SD 2.0
4. ACMD41. Если нет ответа, значит имеем дело с MMC
5. Читаем OCR, проверяем на предмет Standard или High Capacity.
Go to the top of the page
 
+Quote Post
svchost
сообщение Jun 1 2009, 20:03
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 31-05-09
Пользователь №: 49 779



Цитата(aaarrr @ Jun 1 2009, 22:39) *
Так, а карта не SDHC случаем?

Последовательность инициализации такая:

1. 74 или больше "пустых" клоков.
2. CMD0
3. CMD8. Если есть ответ, значит имеем дело с SD 2.0
4. ACMD41. Если нет ответа, значит имеем дело с MMC
5. Читаем OCR, проверяем на предмет Standard или High Capacity.



Проблема решена!

1. 74 или больше "пустых" клоков.
2. CMD0 (ответ 01)
3. CMD8 (ответ 05) Если есть ответ, значит имеем дело с SD 2.0 и для инициализации используем ACMD41
(Этот пункт можно пропустить, если предполагается использование только 1.0)
4. СMD1 (ответ 01) Ответа не было в п3.
5. Читаем 255 байт с карты (не принципиально! от числа будет зависит количество циклов) анализируем, на всякий случай,
должно быть FF иначе какая то ошибка.
6. Повторяем п.4, число повторений зависит от карты и НЕ прямопропорционально емкости, как логично было бы
предположить (для 1G около 20, 2G -всего 5, 512M -8).

Думаю можно сделать вывод:
для выполнения инициализации некоторые карты требуется тактировать!


Для эксперимента подавал CMD1 (ответ 01), не выполняя чтения между командами, около 10000 раз
карту не смог инициализировать.

Пока разбирался с инициализации написал подсчет CRC7 на ASM (могу поделиться)

Спасибо.

Сообщение отредактировал svchost - Jun 1 2009, 20:06
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 1 2009, 20:16
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Для инициализации SD всегда нужно использовать ACMD41, иначе от MMC не отличите. Карты не требуют тактирования, судя по всему, Вы просто не выдерживаете Nrc между командами.
Go to the top of the page
 
+Quote Post
svchost
сообщение Jun 1 2009, 20:29
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 31-05-09
Пользователь №: 49 779



Цитата(aaarrr @ Jun 2 2009, 00:16) *
Для инициализации SD всегда нужно использовать ACMD41, иначе от MMC не отличите. Карты не требуют тактирования, судя по всему, Вы просто не выдерживаете Nrc между командами.


Тактировать я имел ввиду для выполнения инициализации.
В моем случае ACMD41 не воспринимается CMD55 (ответ 01)+CMD41(ответ 05 -несуществующая команда)
Сколько циклов должно быть Ncr?

Сколько должно быть циклов между CMD55 и CMD41?

Сообщение отредактировал svchost - Jun 1 2009, 20:33
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 1 2009, 20:51
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(svchost @ Jun 2 2009, 00:29) *
Сколько циклов должно быть Ncr?

Сколько должно быть циклов между CMD55 и CMD41?

Время Nrc - 8 тактов, между ответом на CMD55 и CMD41 как раз и должно быть Nrc.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jun 2 2009, 04:02
Сообщение #15


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Ncr может быть от 0 до 8 байт.

Что характерно, действительно после любой команды нужно подавать 1 байт холостого чтения, иначе карта не будет нормально воспринимать следующую команду...
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 19:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.015 секунд с 7
ELECTRONIX ©2004-2016