Работа с SD картой. Подключение к микроконтроллеру. Ч1

28/01/2014 - 10:10 Pavel Bobkov

Введение

В устройствах на микроконтроллерах для хранения больших объемов данных используется внешняя память. Если требуется хранить единицы мегабайт, то подойдут микросхемы последовательной флэш памяти. Однако для больших объемов (десятки -сотни мегабайт) обычно применяются какие-нибудь карты памяти. В настоящий момент наибольшее распространение получили SD и microSD карты, о них я и хотел бы поговорить в серии материалов. В этой статье речь пойдет о подключении SD карт к микроконтроллеру, а в следующих мы будет разбираться как читать или записывать на них данные.

Распиновка SD и microSD карт

SD карты могут работать в двух режимах - SD и SPI. Назначение выводов карт и схема подключения зависит от используемого режима. У 8-и разрядных микроконтроллеров AVR нет аппаратной поддержки SD режима, поэтому карты с ними обычно используются в режиме SPI. В 32-х разрядных микроконтроллерах на ядре ARM, например AT91SAM3, интерфейс для работы с картами в SD режиме есть, поэтому там можно использовать любой режим работы.

Назначение контактов SD карты в SD режиме

распиновка SD карты - SD режим


Назначение контактов SD карты в SPI режиме

распиновка SD карты - SPI режим


Назначение контактов microSD карты в SD режиме

распиновка microSD карты - SD режим


Назначение контактов microSD карты в SPI режиме

распиновка microSD карты - SPI режим


Подключение SD и microSD карт к микроконтроллеру в SPI режиме

Напряжение питания SD карт составляет 2.7 - 3.3 В. Если используемый микроконтроллер запитывается таким же напряжением, то SD можно подключить к микроконтроллеру напрямую. Расово верная схема, составленная путем изучения спецификаций на SD карты и схем различных отладочных плат, показана на рисунке ниже. По такой схеме подключены карты на отладочных платах фирм Olimex и Atmel.

На схеме обозначены именно выводы SD карты, а не разъема.

Подключение SD карты к микроконтроллеру


L1 - феррит или дроссель, рассчитанный на ток >100 мА. Некоторые его ставят, некоторые обходятся без него. А вот чем действительно не стоит пренебрегать, так это полярным конденсатором C2. Потому что при подключении карты происходит бросок тока, напряжение питания "просаживается" и может происходить сброс микроконтроллера. 

По поводу подтягивающих резисторов есть некоторая неоднозначность. Поскольку SD карты выпускаются несколькими производителями, на них существует несколько спецификаций. В одних документах четко указана необходимость подтягивающих резисторов (даже для неиспользуемых линий - 8, 9), в других документах этих указаний нет (или я не нашел). 

Упрощенный вариант схемы (без подтягивающих резисторов) показан на рисунке ниже. Эта схема проверена на практике и используется в платах фирмы Microelectronika. Также она используется во многих любительских проектах, которые можно найти в сети. 

Упрощенная схема подключения SD карты


Здесь сигнальные линии SD карты удерживаются в высоком состоянии микроконтроллером, а неиспользуемые линии (8, 9) никуда не подключены. По идее они должны быть подтянуты внутри SD карты. Далее я буду отталкиваться от этой схемы. 

Если микроконтроллер запитывается напряжением отличным от напряжения питания SD карты, например 5 В, то нужно согласовать логические уровни. На схеме ниже показан пример согласования уровней карты и микроконтроллера с помощью делителей напряжения. Принцип согласования уровней простой - нужно из 5-и вольт получить 3.0 - 3.2 В.

Согласование уровней SD карты


Линия MISO - DO не содержит делитель напряжения, так как данные по ней передаются от SD карты к микроконтроллеру, но для защиты от дурака можно добавить аналогичный делитель напряжения и туда, на функционировании схемы это не скажется. 

Резистивный делитель напряжения - это самый простой вариант согласования уровней, однако при высоких скоростях обмена или длинных проводах он может не подойти. Емкость входов SD карты, а также паразитная емкость линий, вместе с резисторами делителя образует RC фильтры, которые "заваливают" фронты передаваемых сигналов, а у SD карт есть определенные требования к этим фронтам. 

Если использовать для согласования уровней буферную микросхему, например CD4050 или 74AHC125, этих недостатков можно избежать. Ниже приведена схема, в которой согласование уровней выполняется с помощью микросхемы 4050. Это микросхема представляет собой 6 неинвертирующих буферов. Неиспользуемые буферы микросхемы "заглушены".

Согласование уровней SD карты с помощью буфера


Подключение microSD карт аналогичное, только у них немного отличается нумерация контактов. Приведу только одну схему.

Подключение microSD к микроконтроллеру


На схемах я рассматривал подключение SD карт к микроконтроллеру напрямую - без разъемов. На практике, конечно, без них не обойтись. Существует несколько типов разъемов и они друг от друга немного отличаются. Как правило, выводы разъемов повторяют выводы SD карты и также содержать несколько дополнительных - два вывода для обнаружения карты в разъеме и два вывода для определения блокировки записи. Электрически эти выводы с SD картой никак не связаны и их можно не подключать. Однако, если они нужны, их можно подключить как обычную тактовую кнопку - один вывод на землю, другой через резистор к плюсу питания. Или вместо внешнего резистора использовать подтягивающий резистор микроконтроллера.

Подключение SD разъема к микроконтроллеру

Подключение SD и microSD карт к микроконтроллеру в SD режиме

Ну и для полноты картины приведу схему подключения SD карты в ее родном режиме. Он позволяет производить обмен данными на большей скорости, чем SPI режим. Однако аппаратный интерфейс для работы с картой в SD режиме есть не у всех микроконтроллеров . Например у Atmel`овских ARM микроконтроллеров SAM3/SAM4 он есть. 

Подключение SD карты в режиме SD


Шина данных DAT[0..3] может использоваться в 1 битном или 4-х битном режимах. 

Продолжение следует...

Comments   

# Yf,k.lfntkm 2014-01-28 12:46
Автор, вы очень хорошо излагаете материал. Если применяете stm32, то и про них тоже пишите.
# Pashgan 2014-01-29 07:28
STM32 не применяю, да по ним и без меня уже много материала написали.
# skullhead 2014-01-28 17:53
огромное спасибо за статью!
вы просто читаете мысли)я только хотел вас попросить написать про работу с SD картами)
# Pashgan 2014-01-29 07:29
Захотелось за что-то новое взяться.
# Plotnik 2014-01-29 09:50
Подскажу еще одну тему: реализация ШИМ,использован ие генератора DTMF тонов,используя мега8, 7 сегм. индикатор,кнопк и 4x4 и,соответственн о, твои либы! Сейчас пытаюсь все собрать на макете,нашел сишный файл DTMF,терь не могу собрать до кучи...признаю, знаний маловато!
# Pashgan 2014-01-31 11:59
Никогда не имел дело с DTMF. Имею общее представление, но не знаю где и как это можно использовать.
# САБ 2014-01-29 11:30
"Рассово" пишется с двумя "с".
# САБ 2014-01-29 11:31
блин... с одной. Извиняюсь.
# Pashgan 2014-01-31 12:00
Я сверялся с интернетом)
# demiurg 2014-01-30 10:23
Вторую часть когда ждать?
# Pashgan 2014-01-31 12:00
На следующей неделе.
# edma 2014-02-23 19:40
Ух, как ждёмсссс.....Ка ждый день по 10 раз сюда захожу..
# Pashgan 2014-02-25 16:43
Да какой-то писательский кризис последние дни..
# ua2fff 2014-02-25 20:26
Quoting Pashgan:
Да какой-то писательский кризис последние дни..

Кризис? Вы имеете ввиду у Вас, или глобально?
# Pashgan 2014-03-18 19:55
У меня. Но глобальный вроде тоже на подходе.
# Gromozeka 2014-01-30 14:45
Ну что тут скажешь, Павел... Просто вырастаем на Ваших статьях. Низкий поклон за Ваш энтузазизм!
# Pashgan 2014-01-31 12:01
Да я сам на них росту. Сайт уже как справочник использую. Иногда забудешь чего-нибудь - лезешь сюда, вспоминаешь.
# kosign 2014-02-01 18:40
Спасибо за статью! Очень полезная тема. У меня возник вопрос по поводу схемы подключения карты к контроллеру питающемуся от 5-и вольт, как я понял карточка питаясь от 3.3 вольт на выход (ножка DO) в качестве логической единицы выдаёт тоже только 3.3 вольта, а контроллер настроен на 5 вольт, не могут ли возникнуть проблемы из-за этого? Или лучше как-то согласовать уровни и в данном случае?
# Pashgan 2014-02-02 17:55
Проблем не должно быть. Я сравнивал выходные уровни SD карты и входные уровни AVR при питании 5 В. Все попадает куда надо и с запасом.
# Виктор 2014-02-01 22:10
очень к стати.
в связи с этим хотел бы попросить затронуть возможность вести лог событий с последующим анализом на компе. Например термометр с календарем производит переодические замеры, сохраняет в некой таблице значения температуры и времени/даты измерений
, а затем например в экселе можно просмотреть эти данные, создать гистограмму и т.п.
Товарищ ГЕТЧИПЕР показал как воспроизврдить WAV, тоже неплохо.
# Pashgan 2014-02-02 17:56
Достаточно разобраться с записью на карту и можно вести логи.
# ua2fff 2014-02-16 23:38
Quoting Виктор:
... вести лог событий с последующим анализом на компе. Например термометр с календарем производит переодические замеры, сохраняет в некой таблице значения температуры и времени/даты измерений, а затем например в экселе можно просмотреть эти данные, создать гистограмму и т.п. ...


Скорее всего из этого ничего не получится, смотря на каком контроллере будет собран этот термометр, который будет писать логи на карту и в каком режиме будет работать карта с контроллером. Дело в том, что карты продаются отформатированн ые в файловой системе FAT16, таким образом на них есть разметка и WIN их видит как диск. Если вы подключите карту к контроллеру в режиме ISP и будете на карту что нибудь писать, то это будет писаться в пространство абсолютных адресов карты, то есть поверх разметки и ей соответственно придет "кердык". Потом, когда вы вставите такую карту в комп с WIN, она ее не распознает и будет сильно ругаться. Для того, чтобы такого не происходило, контроллер на котором будет собран ваш термометр должен иметь аппаратную поддержку карт и файловой системы FAT16, то есть быть 32 разрядным.
# ua2fff 2014-02-17 02:19
Quoting Виктор:
очень к стати.
в связи с этим хотел бы попросить затронуть возможность вести лог событий с последующим анализом на компе. Например термометр с календарем производит переодические замеры, сохраняет в некой таблице значения температуры и времени/даты измерений
, а затем например в экселе можно просмотреть эти данные, создать гистограмму и т.п.
Товарищ ГЕТЧИПЕР показал как воспроизврдить WAV, тоже неплохо.

Да, чего там имхо заморачиваться с этим. Возьмите китайский смарт, на более менее мощьном чипе, пристегните к нему датчик темперературы (типо как в тестере с термометром) напишите приложение для смарта и загрузите его в тело. И можно было бы сказать здесь "вуаля". Но вот "написать приложение" и "загрузить его в китайское тело", - с этим возникнут бааальшие проблемы...
# skullhead 2014-02-02 05:43
а мне кажется, было бы здорово изучить работу с SD картами на примере воспроизведения WAV в проекте WAV-плеера Elm Chen`a.двух зайцев можно убить.и с оцифрованных звуком работать и с SD-картой))
# Виктор 2014-02-02 09:20
Quoting skullhead:
а мне кажется, было бы здорово изучить работу с SD картами на примере воспроизведения WAV в проекте WAV-плеера Elm Chen`a.двух зайцев можно убить.и с оцифрованных звуком работать и с SD-картой))

http://www.getchip.net/posts/087-attiny2313-sd-card-talking-device/ вот тебе ссылка, не ломай малину
# skullhead 2014-02-02 17:59
ту статью я видел.но там готовое устройство.без разбора и подробностей.а именно этого нам,новичкам,хо телось бы-разобраться.
# dim 2014-02-14 12:18
Quote:
# Виктор 02.02.2014 09:20
Цитирую skullhead:
а мне кажется, было бы здорово изучить работу с SD картами на примере воспроизведения WAV в проекте WAV-плеера Elm Chen`a.двух зайцев можно убить.и с оцифрованных звуком работать и с SD-картой))

http://www.getchip.net/posts/087-attiny2313-sd-card-talking-device/ вот тебе ссылка, не ломай малину
исходник устройства есть, но не на Си (я вообще без понятия,как работать на АБ, например), да и там автор не рассказывает как это все работает на программном уровне, а это и есть самое интересное.
готовое устройство совсем не интересно.
У Pashgan'а намного интересней)
# Pashgan 2014-02-02 17:57
Зайцев жалко..
# Л.Сергей 2014-12-25 08:46
Извините пожалуйста. В машите стоит магнитола с SD флэшкой. Не совсем удобно когда хочется послушать музыку с USB флэшки.Не подскажите, возможно-ли в SD-microSD адаптер впаять кабель с USB(мама) на конце. Вставил адаптер в слот магнитофона и вставляй в USB(мама)- USB flesh
# ua2fff 2014-12-26 16:58
Quoting Л.Сергей:
Извините пожалуйста. В машите стоит магнитола с SD флэшкой. Не совсем удобно когда хочется послушать музыку с USB флэшки.Не подскажите, возможно-ли в SD-microSD адаптер впаять кабель с USB(мама) на конце. Вставил адаптер в слот магнитофона и вставляй в USB(мама)- USB flesh


Нет, без дополнительного преобразования USB интерфейса в интерфейс SD карты - не возможно. Так-как USB и SD интерфейсы отличаются не только внешним видом фишки разъема, но и количеством сигналов, а так-же протоколом обмена. Делать контроллер который будет преобразовывать USB -> SD обойдется дороже, чем купить магнитолу с USB.

У вас недостаточно прав для комментирования.