Подключение Sd Карты К Микроконтроллеру
- Восстановление Sd Карты
- Программа Для Форматирования Sd Карты
- Подключение Sd Карты К Микроконтроллеру Pic
Разбираясь к контроллером STM32 встала задача подключения внешней памяти, а точнее SD карты, как наиболее простого и удобного средства хранения. А сегодня мы по данному интерфейсу попробуем подключить к микроконтроллеру по данной шине.
Здравствуйте, суть темы такова. Решил я подключить к PIC контроллеру СД карту, пишу код сам на ассемблере. Проблема заключается в том, что не удается инициализировать карточку. Вот порядок моих действий: 1) Посылаю 80 тактов СД карте 2) Посылаю команду сброса CMD0, ответ приходит правильный 0х01 3) Затем CMD8, первый байт ответа 0х01, стало быть карта версии 2 4) Отправляем CMD55, ответ 0х01 5) Затем CMD41, и с этого момента начинается фигня, а именно после команды я опрашиваю карту до тех пор пока не придет ответ отличный от FF, приходит FE.
В общем чего только не перепробовал, от CMD1 ответа 0х00 нет, пробую карты на 2ГБ и 8 ГБ. И если команду инициализации отправлять после каждого ответа, тоже приходит ерунда. Надеюсь на любую помощь, исчерпал все идеи по этой проблеме. Удалось прочитать блок информации с сд карты на 8 Гб. Теперь вопрос в следующем. Я задумал устройство считывания текстовой информации с сд карты.
Файловая система на карте FAT32. Искал информацию по этой файловой системе, доходчиво пишут только о FAT16, как с этой системой работать я понял, а в чем отличие FAT32. Для работы с картой мне нужно знать, по какому адресу находятся таблицы FAT и корневой каталог, чтоб читать имя текстового документа и адрес его первого кластера. Может кто помочь с информацией по fat32???
Самый качественный (и наверно единственный) почти официальный документ по FAT32 называется: fatgen103.doc, лежит в недрах сайта мелкомягких. У мню он есть на англицком. Бонусом там же описана vFAT.
Немного изменена структура BOOT сектора, точнее таблицы BPB, и так по мелочам, типа дублирования и сдвигов. Корневой каталог теперь обычный файл, адрес которого лежит по смещению 44 в BPB. Ну и главное отличие, теперь для номера кластера используется не 16, а 28бит.
Mas123 Разве что, вначале нужно прочитать 'Boot Sector', и уже через него 'найти' сектор с BPB. 'Boot Sector' всегда содержит в себе и загрузочный код и BPB, и всегда(!) находится в первом секторе тома (раздела). Может ты с MBR перепутал? Тогда действительно нужно считывать 1й сектор диска(!) анализировать его структуру. Может ты с MBR перепутал? Тогда действительно нужно считывать 1й сектор диска(!) анализировать его структуру.Да, наверное перепутал, не спорю. Анализировать 0-й сектор нужно обязательно - либо там будет boot-сектор, либо MBR.
Какой либо логики 'почему на этой SD так, а на этих - вот так' я не нашел. А на современных SDHC (точнее, которые в продаже с прошлой осени) ещё необходимо тщательно выдерживать передачу dummy-байт. Впрочем, только на высоких скоростях можно 'залипнуть' с сектором кратным 0x1F.
Здравствуйте, суть темы такова. Решил я подключить к PIC контроллеру СД карту, пишу код сам на ассемблере.
Проблема заключается в том, что не удается инициализировать карточку. Вот порядок моих действий: 1) Посылаю 80 тактов СД карте 2) Посылаю команду сброса CMD0, ответ приходит правильный 0х01 3) Затем CMD8, первый байт ответа 0х01, стало быть карта версии 2 4) Отправляем CMD55, ответ 0х01 5) Затем CMD41, и с этого момента начинается фигня, а именно после команды я опрашиваю карту до тех пор пока не придет ответ отличный от FF, приходит FE. В общем чего только не перепробовал, от CMD1 ответа 0х00 нет, пробую карты на 2ГБ и 8 ГБ. И если команду инициализации отправлять после каждого ответа, тоже приходит ерунда. Надеюсь на любую помощь, исчерпал все идеи по этой проблеме. У меня аналогичная проблема. Пытаюсь подключить SDC-карту к микроконтроллеру ATiny2313, программу пишу на ассемблере.
На команду CMD0 приходит ответ 0x01, далее тупик - в ответ на CMD1 приходит 0xFF. Буду благодарен за помощь или подсказку.
Далее тупик - в ответ на CMD1 приходит 0xFF. Буду благодарен за помощь или подсказку.Документация на SD изучалась? Можно узнать, где написано о подаче CMD1 сразу после CMD0?
Да что там документация, эта тема изучалась? Моё сообщение от 'Ср апр 20, 2016 18:43:02' - там приведена диаграмма 'побудки' карточки! Применяю карту типа SDHC (San Disk), документацию на нее не изучал.
Восстановление Sd Карты
Последовательность команд CMD0 - CMD1 взята из статьи Chan, 'How to Use MMC/SDC'. Такая же последовательность приведена в программе автора 'vakula' (в статье 'SD/MMC карта памятии микроконтроллер AVR (часть 1).
Базовые операции). Ваше сообщение прочитал, попробую в ней разобраться (я не специалист в программировании). Кстати, как в переводе статьи Chen`а, выполненной PIClistRUS, так и программе 'vakula' команда CMD1 подается непрерывно, до тех пор пока не получим ответ R1 = 0x00. Казалось бы, логичнее, послать CMD1 один раз, а потом посылать 0xFF и ожидать ответ R1 = ox00. Почему надо посылать CMD1 много раз - не понимаю. Казалось бы, логичнее, послать CMD1 один раз, а потом посылать 0xFF и ожидать ответ R1 = ox00. Почему надо посылать CMD1 много раз - не понимаю.Потому что в спящем режиме или в режиме 'пробуждения' карточка не отвечает на команду или 'не видит' команду.
Программа Для Форматирования Sd Карты
Разве ответ R1=0x01 не свидетельствует о том, что карта готова принять следующую команду?! Если нет, то должен быть какой-то признак, свидетельствующий о неготовности карты - например ноль на линии Out. Если это не предусмотрено протоколом, то логично было бы подождать, например, 1.0 сек и только потом посылать команду CMD1. Здравствуйте, товарищи.
А у меня следующий вопрос. Пишу код в cvavr, везде пишут, что для работы с картой памяти необходимо каждые 10мс вызывать некую функцию disktimerproc. Не могли бы вы объяснить суть этого явления? То есть что вообще выполняет функция и зачем нужна.
Подключение Sd Карты К Микроконтроллеру Pic
Постоянно ли должна вызываться или в целях энергосбережения можно прекратить этот ddos, пока не пишу ничего. И если у меня запись в карту идёт в прерывании таймера, то данная функция на момент записи вызываться не будет.