Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Пытаюсь работать с SD card. Нужна помощь

Непрочитано 03.10.2009, 18:10  
uk8amk
Вид на жительство
 
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
uk8amk на пути к лучшему
По умолчанию Пытаюсь работать с SD card. Нужна помощь

Вообщем пробую в железе. Карта 256МБ SanDisk.Инициализация SPI проходит нормально, чтение как-то плохо работает.
Читаю по одному сектору: посылаю CMD17, принимаю результат в буфер 512 байт(это для удобства). Сектор 0 (MBR) читается нормально, по нему считаю адрес сектора PBR(чтобы работать с ФАТ16). У меня получился адрес смещения 103. При попытке обратится к сектору 103 карта не отвечает(возвращает ошибку). Я просканировал небольшой диапазон секторов с помошью МК, вот что выходит:
read error, sector#0000001

read error, sector#0000002

read error, sector#0000003
.............................................
read error, sector#0000508

read error, sector#0000509

read error, sector#0000510

read error, sector#0000511

read error, sector#0000513

read error, sector#0000514

Т.е. к нулевому и 512-му сектору доступ нормальный. К остальным - нету.

Затем я использовал команду CMD18 для мультиблочного чтения с сектора 0. Здесь карта честно выдала все свое содержимое(и кажется сделала это без ошибок). Почему нету доступа при одноблочном чтении к остальным секторам кроме 0 и 512?

ЗЫ. За основу кода я взял функцию посылки команд у Чана(elm-chan.org), а прием сектора делаю по описанию http://piclist.ru/S-64MMC-PIC-RUS/S-64MMC-PIC-RUS.html
Вложения:
Тип файла: rar SD card test.rar (57.9 Кб, 194 просмотров)
Реклама:
uk8amk вне форума  
Непрочитано 05.10.2009, 10:26  
uk8amk
Вид на жительство
 
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
uk8amk на пути к лучшему
По умолчанию Re: Пытаюсь работать с SD card. Нужна помощь

Да, забыл сказать, может это имеет какое-то значение. Это microSD карта, хотя по идее должно быть все как у карты обычных размеров. Комп через кардридер ее видит и нормально с ней работает(т.е. карта 100% не дохлая).
Только до сих пор не могу понять:
функция load_sector()
При посылке адреса adr !=0 и adr!=512
условие (send_CMD(CMD17,adr)!=0) не выполняется
и дальше происходит возврат из функции либо карта не отвечает ничего вразумительного и виснет если продолжать выполнение кода:
while(spi(0xFF)!=0xFE);//wait for start of transmission
т.е. она просто не отвечает 0xFE.
uk8amk вне форума  
Непрочитано 05.10.2009, 17:35  
Cyber_RAT
Прописка
 
Регистрация: 29.11.2007
Адрес: Могилев. РБ.
Сообщений: 143
Сказал спасибо: 30
Сказали Спасибо 20 раз(а) в 20 сообщении(ях)
Cyber_RAT на пути к лучшему
По умолчанию Re: Пытаюсь работать с SD card. Нужна помощь

вы читайте указывая номер сектора * 512... т.е. 0=0 1=512, 2=1024 и тд. это если посекторно читать. т.е. адрес кратен 512
Cyber_RAT вне форума  
Сказали "Спасибо" Cyber_RAT
uk8amk (05.10.2009)
Непрочитано 05.10.2009, 18:25  
uk8amk
Вид на жительство
 
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
uk8amk на пути к лучшему
По умолчанию Re: Пытаюсь работать с SD card. Нужна помощь

Да, заработало, спасибо большое! Только-только разобрался. Оказывается надо посылать линейный адрес сектора в пересчете на байты. Я же просто указывал номер блока и получал ответ 0x20(Adress Error).
uk8amk вне форума  
Непрочитано 28.10.2009, 13:06  
uk8amk
Вид на жительство
 
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
uk8amk на пути к лучшему
По умолчанию Re: Пытаюсь работать с SD card. Нужна помощь

Добрался до FAT16. Сделал простой PCM RIFF плейер. Играет, но столкнулся со следующей проблемой. Я открываю мультиблочное считываение (CMD 18 ), считываю первый кластер файла и параллельно вывожу звуковой поток в ШИМ(частота дискретизации потока 32КГц, 8 бит, моно), атмега88 тактируется от 16МГц кварца,установлена максимальная частота шины SPI. Когда кластер заканчивается, то я прекращаю мультиблочное считывание(CMD 12), а затем обращаюсь в таблицу FAT для поиска следующего клатсера. Когда я дохожу до требуемой записи ФАТ и ее считываю, то торможу чтение текущего сектора ФАТ с помощью CMD 12(это чтобы не читать лишнюю информацию) и снова перехожу на мультиблочное считывание следующего кластера файла. Все работает, данные читаются, но обращение к таблице FAT требует достаточно много времени и у меня в динамике в этот момент проскакивает довольно сильный щелчок. А учитывая что размер кластера 16КБ, то этот треск идет с частотой 2Гц. Первое что пришло в голову - это буферизовать всю таблицу ФАТ, но где я в 88-й меге возьму столько ОЗУ? Второе о чем я подумал - это частично буферизовать записи цепочки кластеров файла, но опять же когда они будут прочитаны, то необходимо будет загрузить новую цепочку для остальной части файла, а для этого также потребуется время и следовательно чтение временно остановится. Вопрос как еще можно решить эту задачу?
В нете есть похожий проект: http://elm-chan.org/works/sd8p/report.html

Вроде там нету подобной проблемы. При просмотре исходников я там не обнаружил чего-то полезного в данном случае.

Средняя скорость чтения файла(просто последовательно грузится поток байтов без обработки) около 120-130КБайт/сек. Может быть это карта тормознутая и стоит попробовать другую?
uk8amk вне форума  
Непрочитано 28.10.2009, 16:34  
espectr0
Временная регистрация
 
Регистрация: 26.09.2009
Сообщений: 81
Сказал спасибо: 4
Сказали Спасибо 16 раз(а) в 13 сообщении(ях)
espectr0 на пути к лучшему
По умолчанию Re: Пытаюсь работать с SD card. Нужна помощь

uk8amk, зачем область ФАТ читать командой CMD18, когда есть CMD17.
espectr0 вне форума  
Непрочитано 28.10.2009, 16:45  
Gnider
Почётный гражданин KAZUS.RUN
 
Регистрация: 30.06.2005
Сообщений: 3,392
Сказал спасибо: 5
Сказали Спасибо 429 раз(а) в 305 сообщении(ях)
Gnider на пути к лучшему
По умолчанию Re: Пытаюсь работать с SD card. Нужна помощь

Если нужен ультрабюджетный вариант то мучайся с atmega. Если нет то возьми проц помощнее.
Gnider вне форума  
Непрочитано 28.10.2009, 16:58  
uk8amk
Вид на жительство
 
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
uk8amk на пути к лучшему
По умолчанию Re: Пытаюсь работать с SD card. Нужна помощь

Давайте прикинем. Если нужные данные находятся в конце сектора, то да, особой разницы нету. Но представим, что требуемая запись, а именно 2 байта, находятся в начале сектора. Тогда после CMD17 мы должны прочитать весь сектор(данные о корректной работе CMD12 после CMD17 в даташите от Sandisk и опублиекованном стандарте JEDEC на (e)MMC я так и не нашел, быть может плохо искал?). Таким образом с помощью CMD18 я открываю транзакцию неопределенной длины, а когда прочитаю запись ФАТ, то тутже прибиваю эту транзакцию с CMD12 не дожидаясь конца сектора. При тактовой частоте SPI 8 МГц пересылка одного байта займет 1мкс. Если длина блока около 500байт, то я уже не должен ждать 500мкс для того чтобы закончить начатую транзакцию. Вместо этого я уже передаю в карту адрес нового кластера. Я прав?
uk8amk вне форума  
Непрочитано 28.10.2009, 17:04  
uk8amk
Вид на жительство
 
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
uk8amk на пути к лучшему
По умолчанию Re: Пытаюсь работать с SD card. Нужна помощь

Gnider: Я осведомлен о существовании камней со встроенным интерфейсом MMC. Вопрос в том чтобы сделать из того что есть в наличии, т.е. на атмеге. Точнее у меня уже сделано на атмеге, но я хочу знать как народ обходит данную трудность.
uk8amk вне форума  
Непрочитано 28.10.2009, 17:43  
espectr0
Временная регистрация
 
Регистрация: 26.09.2009
Сообщений: 81
Сказал спасибо: 4
Сказали Спасибо 16 раз(а) в 13 сообщении(ях)
espectr0 на пути к лучшему
По умолчанию Re: Пытаюсь работать с SD card. Нужна помощь

uk8amk, я лично глубоко убежден, что делать нужно не из того, что в наличии, а из того с чем можно более-менее комфортно работать. Возьмите к примеру мегу32, там больше оперативы и считанный сектор ФАТ можно хранить в ней.
espectr0 вне форума  
Сказали "Спасибо" espectr0
dozent65 (10.01.2010)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь в поиске схемы novoaidar Электроника средств транспорта 9 07.10.2009 17:42
Схемотехника на ОУ для генерации 13Гц zzyaka Электроника - это просто 9 28.09.2009 11:16
[Решено] Нужна помощь с вопросами! Istwood Делимся опытом 4 20.09.2009 14:53
PCAD- нужна помощь. помогите открыть файл Pavelrb Proteus, KiCAD и другие ECAD 3 16.09.2009 17:23


Часовой пояс GMT +4, время: 06:50.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.