Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
25.08.2012, 22:57
|
|
Частый гость
Регистрация: 25.08.2012
Сообщений: 11
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
SD
Доброго времени! Знакомлюсь с работой SD. За основу взял для начала, вот эту статью http://avrlab.com/node/156
МК и карта питаются от 3.25В. Программа зашита таже с той страницы. При включение в терминале видно из отчёта три строчки, что карта инициализирована, записана и прочитана далее из массива только три последовательности правильные 0123456789, а остальное в разброс подряд тройки пятёрки, всякие знаки. При просмотре содержимого карты через WinHex этого массива нет. Укажите куда копать, что может быть не так. Снижал скорость до 9600 то же самое. Карта 1Гб, с 4Гб инициализация не проходит, пишит CMD1 fail.
выводы назначены вот так:
Код:
#define DI 5
#define DO 6
#define CLK 7
#define CS 3
#define INS 0
#define WP 1
PB0 и PB1 посажены на общую шину
|
|
|
Сказали "Спасибо" Forusfut
|
|
|
26.08.2012, 01:44
|
|
Частый гость
Регистрация: 25.08.2012
Сообщений: 11
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: Mega32+SD
Что-то в этот winhex и други файлов не видно, нет карты в Physical Media, только в логическом, тогда как посмотреть, физическую память карты?
|
|
|
Сказали "Спасибо" Forusfut
|
|
|
26.08.2012, 01:51
|
|
Прописка
Регистрация: 14.06.2012
Сообщений: 263
Сказал спасибо: 2
Сказали Спасибо 129 раз(а) в 103 сообщении(ях)
|
Re: Mega32+SD
Начни лучше с вот этого мануальчика:
там есть всё, что тебе нужно знать о работе с SD картой.
Сообщение от Forusfut
|
тройки пятёрки, всякие знаки
|
ну, "тройки, пятерки" - это понятно, а что такое "всякие знаки"? Ты что, таблизу ANSI-символов смотришь чтоль?
Последний раз редактировалось Алекс Василич; 26.08.2012 в 01:55.
|
|
|
Сказали "Спасибо" Алекс Василич
|
|
|
26.08.2012, 02:03
|
|
Частый гость
Регистрация: 25.08.2012
Сообщений: 11
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: Mega32+SD
Благодарю, но это на будущие, пока же даже не читает\пишит. С winhex разобрался эт он какой-то глючный был, другой показывает содержимое карты, но записи пока нет.
П.С. Да знаки типа !? и подобный мусор.
|
|
|
Сказали "Спасибо" Forusfut
|
|
|
26.08.2012, 02:17
|
|
Прописка
Регистрация: 14.06.2012
Сообщений: 263
Сказал спасибо: 2
Сказали Спасибо 129 раз(а) в 103 сообщении(ях)
|
Re: Mega32+SD
Нет, вот как раз с того мануала и надо бы начинать, хотя бы в ознакомительных целях.
Не читает? А какие ответы приходят? байты Response? Там зашифрованы ошибки.
Нет записи? Во-первых, правильно ли ты записываешь? Целыми или неполными блоками? Карта может писать неполными блоками и без выравнивания по секторам? Это можно узнать, прочитав CSD регистр.
Во-вторых, не включена ли защита от записи? Механическая, программная?
Цитата:
|
инициализация не проходит, пишит CMD1 fail
|
Начиная со 113 страницы юзер-мануала: Порядок инициализации в SPI режиме. Команда CMD1 не рекомендуется для SD карт, поскольку данные могуть быть повреждены из-за неверной интерпретации регистров CSD и CID. Скорее всего, у тебя именно этот случай.
Видимо, автор той статьи, по которой ты начал изучать, об этом не знал.
Последний раз редактировалось Алекс Василич; 26.08.2012 в 02:58.
|
|
|
Сказали "Спасибо" Алекс Василич
|
|
|
26.08.2012, 22:20
|
|
Частый гость
Регистрация: 25.08.2012
Сообщений: 11
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: Mega32+SD
Какой-то косяк на косяке, при инициализации на команду CMD0 приходит ответ 0 хотя алгоритм автора говорит, что всё нормуль и инициализация прошла. При отладке процедуры spi_transmit выкидывает на main а не на место вызова, что это среда или у меня руки корявые?
|
|
|
Сказали "Спасибо" Forusfut
|
|
|
27.08.2012, 00:08
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Mega32+SD
Forusfut,
Вопрос, Вы хотите разобраться, как работают SD/MMC, или просто рабочий кусок программы?
Василич правильное направление указал - читайте спецификацию.
стр.115 - Figure 7-2: SPI Mode Initialization Flow
стр.129 - 7.3.2 Responses.
Поиск по форуму...
Последний раз редактировалось AJScorp; 27.08.2012 в 00:10.
|
|
|
Сказали "Спасибо" AJScorp
|
|
|
27.08.2012, 00:50
|
|
Частый гость
Регистрация: 25.08.2012
Сообщений: 11
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: Mega32+SD
Само собой разобраться, но пока что-то туго, теория теорией, а практика как всегда. Вроде куда проще, отослал команду, получил ответ, послал данные, но нет. Выше описание читал и описание автора читал, чувствую опять придётся на ассемблере пилить.
|
|
|
Сказали "Спасибо" Forusfut
|
|
|
27.08.2012, 05:50
|
|
Прописка
Регистрация: 14.06.2012
Сообщений: 263
Сказал спасибо: 2
Сказали Спасибо 129 раз(а) в 103 сообщении(ях)
|
Re: Mega32+SD
Эмм, если на команду CMD0 приходит ответ 0х00 - значит, карта занята (Bussy). Тайминги команд нужно выдерживать. Первые импульсы должны подаваться не ранее 250 мс после подачи питания на карту. Первые импульсы CLK должни выдаваться на низкой частоте, чтобы время прохождения 74 импульсов было не менее 1 мс. Затем можно CS=0 и выдать 0х40 00 00 00 00 95 FF FF... (FF выдавать до приема байта, отличного от 0хFF).
Это, конечно, при условии, что SPI работает в правильном режиме - SPI 0. Неактивный уровень CKL - низкий. Сдвиг информации из контроллера происходит при переходе CKL из высокого в низкий, а защелкивание в карте - при переходе CKL из низкого в высокий. Контроллер должен выставить на выход первый передаваемый бит сразу же, до начала тактирования.
Карта передает информацию в контроллер наоборот. Защелкивание бита в контроллере должно происходить в моменты отрицательного фронта CKL.
В контроллере есть аппаратный SPI, зачем себе жизнь усложнять программной эмуляцией, как делал автор той статьи?
|
|
|
Сказали "Спасибо" Алекс Василич
|
|
|
27.08.2012, 09:42
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Mega32+SD
Еще карта может "подвиснуть", если всякий мусор в нее гнать. Пробуйте питание передергивать.
Тайминги там не так важны - карта все равно быстрее. Там важно дожидаться флага готовности. Без него там и вправду здорово накуролесить можно.
Есть готовый код низкоуровневых операций, но я его под stm32 писал.
|
|
|
Сказали "Спасибо" Easyrider83
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:49.
|
|