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

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

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

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

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

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

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

 
Опции темы
Непрочитано 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.RU
 
Регистрация: 30.06.2005
Сообщений: 3,399
Сказал спасибо: 5
Сказали Спасибо 431 раз(а) в 306 сообщении(ях)
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
Схемотехника. Нужна помощь по ряду вопросов 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, время: 13:30.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot