Введение
В устройствах на микроконтроллерах для хранения больших объемов данных используется внешняя память. Если требуется хранить единицы мегабайт, то подойдут микросхемы последовательной флэш памяти. Однако для больших объемов (десятки -сотни мегабайт) обычно применяются какие-нибудь карты памяти. В настоящий момент наибольшее распространение получили SD и microSD карты, о них я и хотел бы поговорить в серии материалов. В этой статье речь пойдет о подключении SD карт к микроконтроллеру, а в следующих мы будет разбираться как читать или записывать на них данные.
Распиновка SD и microSD карт
SD карты могут работать в двух режимах - SD и SPI. Назначение выводов карт и схема подключения зависит от используемого режима. У 8-и разрядных микроконтроллеров AVR нет аппаратной поддержки SD режима, поэтому карты с ними обычно используются в режиме SPI. В 32-х разрядных микроконтроллерах на ядре ARM, например AT91SAM3, интерфейс для работы с картами в SD режиме есть, поэтому там можно использовать любой режим работы.
Назначение контактов SD карты в SD режиме
Назначение контактов SD карты в SPI режиме
Назначение контактов microSD карты в SD режиме
Назначение контактов microSD карты в SPI режиме
Подключение SD и microSD карт к микроконтроллеру в SPI режиме
Напряжение питания SD карт составляет 2.7 - 3.3 В. Если используемый микроконтроллер запитывается таким же напряжением, то SD можно подключить к микроконтроллеру напрямую. Расово верная схема, составленная путем изучения спецификаций на SD карты и схем различных отладочных плат, показана на рисунке ниже. По такой схеме подключены карты на отладочных платах фирм Olimex и Atmel.
На схеме обозначены именно выводы SD карты, а не разъема.
L1 - феррит или дроссель, рассчитанный на ток >100 мА. Некоторые его ставят, некоторые обходятся без него. А вот чем действительно не стоит пренебрегать, так это полярным конденсатором C2. Потому что при подключении карты происходит бросок тока, напряжение питания "просаживается" и может происходить сброс микроконтроллера.
По поводу подтягивающих резисторов есть некоторая неоднозначность. Поскольку SD карты выпускаются несколькими производителями, на них существует несколько спецификаций. В одних документах четко указана необходимость подтягивающих резисторов (даже для неиспользуемых линий - 8, 9), в других документах этих указаний нет (или я не нашел).
Упрощенный вариант схемы (без подтягивающих резисторов) показан на рисунке ниже. Эта схема проверена на практике и используется в платах фирмы Microelectronika. Также она используется во многих любительских проектах, которые можно найти в сети.
Здесь сигнальные линии SD карты удерживаются в высоком состоянии микроконтроллером, а неиспользуемые линии (8, 9) никуда не подключены. По идее они должны быть подтянуты внутри SD карты. Далее я буду отталкиваться от этой схемы.
Если микроконтроллер запитывается напряжением отличным от напряжения питания SD карты, например 5 В, то нужно согласовать логические уровни. На схеме ниже показан пример согласования уровней карты и микроконтроллера с помощью делителей напряжения. Принцип согласования уровней простой - нужно из 5-и вольт получить 3.0 - 3.2 В.
Линия MISO - DO не содержит делитель напряжения, так как данные по ней передаются от SD карты к микроконтроллеру, но для защиты от дурака можно добавить аналогичный делитель напряжения и туда, на функционировании схемы это не скажется.
Резистивный делитель напряжения - это самый простой вариант согласования уровней, однако при высоких скоростях обмена или длинных проводах он может не подойти. Емкость входов SD карты, а также паразитная емкость линий, вместе с резисторами делителя образует RC фильтры, которые "заваливают" фронты передаваемых сигналов, а у SD карт есть определенные требования к этим фронтам.
Если использовать для согласования уровней буферную микросхему, например CD4050 или 74AHC125, этих недостатков можно избежать. Ниже приведена схема, в которой согласование уровней выполняется с помощью микросхемы 4050. Это микросхема представляет собой 6 неинвертирующих буферов. Неиспользуемые буферы микросхемы "заглушены".
Подключение microSD карт аналогичное, только у них немного отличается нумерация контактов. Приведу только одну схему.
На схемах я рассматривал подключение SD карт к микроконтроллеру напрямую - без разъемов. На практике, конечно, без них не обойтись. Существует несколько типов разъемов и они друг от друга немного отличаются. Как правило, выводы разъемов повторяют выводы SD карты и также содержать несколько дополнительных - два вывода для обнаружения карты в разъеме и два вывода для определения блокировки записи. Электрически эти выводы с SD картой никак не связаны и их можно не подключать. Однако, если они нужны, их можно подключить как обычную тактовую кнопку - один вывод на землю, другой через резистор к плюсу питания. Или вместо внешнего резистора использовать подтягивающий резистор микроконтроллера.
Подключение SD и microSD карт к микроконтроллеру в SD режиме
Ну и для полноты картины приведу схему подключения SD карты в ее родном режиме. Он позволяет производить обмен данными на большей скорости, чем SPI режим. Однако аппаратный интерфейс для работы с картой в SD режиме есть не у всех микроконтроллеров . Например у Atmel`овских ARM микроконтроллеров SAM3/SAM4 он есть.
Шина данных DAT[0..3] может использоваться в 1 битном или 4-х битном режимах.
Продолжение следует...
Comments
вы просто читаете мысли)я только хотел вас попросить написать про работу с SD картами)
Кризис? Вы имеете ввиду у Вас, или глобально?
в связи с этим хотел бы попросить затронуть возможность вести лог событий с последующим анализом на компе. Например термометр с календарем производит переодические замеры, сохраняет в некой таблице значения температуры и времени/даты измерений
, а затем например в экселе можно просмотреть эти данные, создать гистограмму и т.п.
Товарищ ГЕТЧИПЕР показал как воспроизврдить WAV, тоже неплохо.
Скорее всего из этого ничего не получится, смотря на каком контроллере будет собран этот термометр, который будет писать логи на карту и в каком режиме будет работать карта с контроллером. Дело в том, что карты продаются отформатированн ые в файловой системе FAT16, таким образом на них есть разметка и WIN их видит как диск. Если вы подключите карту к контроллеру в режиме ISP и будете на карту что нибудь писать, то это будет писаться в пространство абсолютных адресов карты, то есть поверх разметки и ей соответственно придет "кердык". Потом, когда вы вставите такую карту в комп с WIN, она ее не распознает и будет сильно ругаться. Для того, чтобы такого не происходило, контроллер на котором будет собран ваш термометр должен иметь аппаратную поддержку карт и файловой системы FAT16, то есть быть 32 разрядным.
Да, чего там имхо заморачиваться с этим. Возьмите китайский смарт, на более менее мощьном чипе, пристегните к нему датчик темперературы (типо как в тестере с термометром) напишите приложение для смарта и загрузите его в тело. И можно было бы сказать здесь "вуаля". Но вот "написать приложение" и "загрузить его в китайское тело", - с этим возникнут бааальшие проблемы...
http://www.getchip.net/posts/087-attiny2313-sd-card-talking-device/ вот тебе ссылка, не ломай малину
готовое устройство совсем не интересно.
У Pashgan'а намного интересней)
Нет, без дополнительного преобразования USB интерфейса в интерфейс SD карты - не возможно. Так-как USB и SD интерфейсы отличаются не только внешним видом фишки разъема, но и количеством сигналов, а так-же протоколом обмена. Делать контроллер который будет преобразовывать USB -> SD обойдется дороже, чем купить магнитолу с USB.
RSS feed for comments to this post