Не, не работаетSD вообще не инитит - даже плеить не пытается. А я правильно понял, что MMC и SD подключаются 1 к 1?
Не, не работаетSD вообще не инитит - даже плеить не пытается. А я правильно понял, что MMC и SD подключаются 1 к 1?
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Да. Только у SD контактов 9. Восьмой тонкий очень близко к седьмому. А девятый на скосе, с противоположной стороны, и находится на большем расстоянии от края, чем остальные. Эти контакты в SPI не задействованы 100%
Есть смутное подозрение на инициализацию сдвигового регистра SPI, но код я не видел, могу ошибаться.
Только что подключил АЛС318 - теперь могу читать сообщения целиком (сначала поставил 321 на 1 цифру). И вот что заметил: после инита (----) "F -1" минус первый файл ??? Card error = "C 0" Может прошива собрана неправильно ?
Ещё такой вопрос: fuses как выставлять? У меня: CKOPT, BOOTSZ1, BOOTSZ0, BOOTRST=0, остальные - по умолчанию.
Залил прошивку от mega162 - ведет себя так же![]()
Последний раз редактировалось skyther; 02.06.2006 в 20:27.
Итак, проясним всё по порядку:
1) "----" - означает начало инициализации
2) F -1 - это значит, что из EEPROM прочиталось 0xFFFF (чистая она), после первой же попытки воспроизвести/записать какой-либо реальный файл, его номер будет записан в EEPROM и при следуещем включении будет выводиться он.
3) Если нажать кнопку воспроизведение при правильно выбраном файле и появляется "C_er" значит не прошла инициализация карты, т.е. нет отклика.
Процедура инициализации наипростейшая и её должны проходить все правильно подключенные карты.
Ближе к вечеру смогу в прямом эфире (через ICQ) пообщаться. И фьюзы считаю (BOOTSZ1,0 BOOTRST - не трогать, CKOPT - посмотрю).
Для ATMega162:Сообщение от skyther
По умолчанию CKSEL3..0 выставлен в состояние 0010 и CKDIV8 = 0.
Это задает работу от внутреннего RC генератор на 8 Мгц c делителем на 8.
В результате контроллер работает на частоте 1 МГц
Для работы с внешним кварцем необходимо CKSEL3..0 выставить в состояние 1110 или 1111.
Для ATMega16:
По умолчанию CKSEL3..0 выставлен в состояние 0001.
Это задает работу кристалла от RC генератора на частоте 1 МГц.
То же самое, что и для ATMega162 надо выставить CKSEL3..0 в состояние 1111.
CKOPT лучше оставить незапрограммированным (=1).
PS. 1 означает незапрограммированное состояние бита.
Последний раз редактировалось caro; 03.06.2006 в 09:56.
Ой, извиняйте, я имел в виду не "по умолчанию", а не запрограммированы (=1)
С аськой облом - я в деревню уехал, а инет здесь...
Такой вопрос: покопал прошивку и увидел обработчик INT0 - это я что-то путаю или так надо, нога ведь в воздухе висит ?
Последний раз редактировалось skyther; 03.06.2006 в 11:34.
Добавил распознавание 0 сектора. Это дало возможность работать с картами отформатированными под FAT16 и содержащими либо несодержащими таблицу разделов.
Протестировал с двумя MMC картами, проблем не выявил.
Остаются открытыми два вопроса:
1) Работоспособность SD карт
2) Работоспособность прошивки под ATMega16
По 1-му: на SD карте Panasonic 8Mb успешно включается режим SPI, но карта не выводиться из Idle режима. Пробовал команды CMD1, CMD5, ACMD41. Буду копать дальше.
По второму вопросу пока ничего, практически не проверял, но теоретически всё в норме.
Попробовал другие кварцы (14.000, 8.000), как и предпологал ничего не дало
Состояния с картой/без карты отличаются, но вместо "C_er" пишет "C 0" и счетчик на 0 сбрасывает, потом "b 0" и ждет в этом положении. Если снова жмешь play - "b_er"
DVS, может вставишь в прошивку выдачу отладки на RS232?
алгоритм инициализации (проверен на нескольких картах):Сообщение от DVS
CS=1,
выдем 10 байт #0FFh в карту,
(далее как для каждой команды)
CS=1
выдем синхро-байт #0FFh
CS=0
выдем синхро-байт #0FFh
выдаем #040h (CMD0, "go idle")
выдаем четыре #000h (параметры)
выдаем #095h (CRC7 для CMD0, можно не менять для остальных команд)
(далее опять только для инициализации)
выдаем #0FFh, при этом одновременно читается отклик,
если отклик равен #0FFh, то опять читаем отклик
если полученный отклик не равен #001h, то ошибка (входим в ступор или на начало)
(теперь выводим карту из IDLE)
CS=1
выдем синхро-байт #0FFh
CS=0
выдем синхро-байт #0FFh
выдаем #041h (CMD1, "card init")
выдаем четыре #000h (параметры)
выдаем #095h (CRC7 для CMD0, для остальных CMD это неверно, но игнорируется картой...)
(ждем готовности карты)
выдаем #0FFh, при этом одновременно читается отклик,
если отклик равен #0FFh, то опять читаем отклик
если полученный отклик не равен #000h, то продолжаем читать отклик "до победного".
при отклике =0 в данной точке можно считать карту инициализированной, и далее работать с ней без заморочек.
PS: Надеюсь, кому-нибудь пригодится![]()
2 jdigreze
Всё аналогично, но в pdf для SD с сайта www.sandisk.com написано, что CMD1 для SD
"не катит" и нужно пользоваться ACMD41, я пробовал выдавать 40h+41dec и просто 41h (CMD1), дык в обоих случаях в response R1 взведён бит 0 (карта в idle) и бит 2 (недопустимая команда). Может нужно в этом случае CRC правильный слать?
Не пойму пока в чем фишка... А ты на SD пробовал этот алгоритм?
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)