… или как снабдить Ваш DIY-проект на MIPS или лёгком ARM быстрой микро-SD карточкой.
Доброго времени суток всему уважаемому сообществу. Хотел бы продолжить свой рассказ про коробочку-прибор, а именно про то, как ей удалось обзавестись микро-SD картой, подключённой к порту USB 2.
Корень всей проблемы был в том, что USB 2, и даже не один, у её процессорного модуля есть, а QSPI (QuadSPI) или карточного интерфейса – увы, нет. Как этот грустный факт связан с SD-картами? Очень просто, любая SD-карта в физической основе своего подключения имеет SPI (SerialPeripheral) интерфейс. Классический SPI для передачи и приёма последовательных данных использует по одной физической линии. Просто и экономно, как с точки зрения денег, так и миллиамперов. Однако недостатки, как известно, есть продолжение достоинств, и для SPI им в первую очередь стала относительно невысокая скорость обмена данными. Для решения этой проблемы был придуман четырёхбитовый режим обмена данными с SD-картой, являющийся близким родственником протокола QSPI. При использовании этого режима хост-контроллер и карточка сначала договариваются о параметрах обмена в однобитном режиме, а потом переходят в четырёхбитный, когда используют не по одной линии для приёма и передачи, а четыре на всё про всё (плюс ещё одну для индикации команды).
Что же делать, если аппаратура напрямую четырёхбитный протокол не поддерживает, а быстрый обмен всё же нужен? Очевидный ответ – снабдить проект мостом «быстрый интерфейс» — «четырехбитовая SD-карта».
Вот для решения этой задачи и была приобретена парочка адаптеров USB-SD и подвергнута препарированию (вивисекция не использовалась – мы же не изверги какие). Перед тем, как разогревать паяльник и фен, была проведена очень важная проверка – увидит ли Debian процессорного модуля предложенный ему свисток-адаптер. Тест прошёл на ура, добро пожаловать в операционную. Купленный свисток выглядит вот так:
И вот так:
После того, как был разобран корпус, стало можно разглядеть печатную плату (со всех её двух сторон).
Схема простенькая, основой её является ИМС GL823F — микроконтроллер с системой команд 8051 и с масочной памятью, оснащённый аппаратным блоком интерфейса USB 2, по всей видимости, не особо высокого качества (почему я так говорю – не вижу точного резистора смещения аналоговой части и кварцевого генератора, что означает восстановление частоты из принимаемого сигнала на основе внутреннего калибруемого генератора). Работать будет, но не HiFi, нет. Всё остальное – минимальный обвес: блокировочные конденсаторы, подтягивающий и токоограничивающий резисторы, LED и разъёмы, вот и вся инженерия.
Сдуваем компоненты феном и разглядываем печатную плату. По многим признакам, плата двухсторонняя с металлизацией отверстий. После недолгого разглядывания платы в микроскоп, срисовывания схемы соединений и сравнения с даташитом на родственные ИМС компании GL, восстанавливаем принципиальную схему.
И вот тут вот начинаем видеть одну небольшую закавыку. В чём же именно? Наша коробочка питается от гарантированного напряжения 3,3В, а схема на GL823 требует 5 вольт. Ну как требует – она так привыкла, потому что именно столько ей даёт USB. Сама микро-SD питается от 3,3В, потому в GL823 добавлен встроенный LDO-стабилизатор. Отсюда вопрос – а если схему питать от 3,3В, то сможет она работать? Если LDO сумеет не уронить сильно напряжение – то сможет, но ведь не все LDO одинаково полезны. Небольшую подсказку даёт даташит – вывод, питающий SD-карту, называется PMOS. Такая аббревиатура не может не радовать – можно предположить, что используется HighSide PMOS схема, в которой падение напряжения на регулирующем элементе может быть очень небольшим. Однако всё это – рассуждения, а единственный решающий аргумент – опыт, он же сын ошибок трудных.
Так какой же именно опыт мы поставим? Давайте попробуем питать ИМС двумя переключаемыми напряжениями – от 5 В USB либо от 3,3В, получаемых отдельным стабилизатором. Вот теперь у нас достаточно знаний, чтобы нарисовать принципиальную схему.
Нумерация компонентов на схеме несколько странная по той причине, что на заводе-изготовителе печатных плат заказывалась мультизаготовка с ещё несколькими тестовыми схемками, и у всех них нумерация компонентов была сквозная. Готовя статью, принципиальную схему я привёл в соответствие с фотографией, и получилось то, что получилось.
Что мы видим на схеме? Понятно, ядром является GL823F. К ней очевидным образом подключается разъём микро-SD. Единственное, что надо отметить – пин 9 у разъёма – это скользящий контакт наличия карты в гнезде, когда карта на месте, он замкнут на землю. С7-С10 – блокировочные конденсаторы на цепях питания. Если хотите немножко повысить помехоустойчивость, то выводы 2 и 16 DD1 можно соединить через ферритовый дроссель. R4 ограничивает ток через HL1, R5 подтягивает линию GPIOк единице в отсутствие карты в гнезде. DA2, C11 и C12 формируют линейный стабилизатор напряжения 3,3В.
Поскольку в тот момент, когда рисовалась схема, с одной стороны, не было понятно, сколько она будет потреблять, а с другой был неприятный опыт использования некоторых USB-флешек (не будет показывать пальцем), потребляющих при записи по 400mA, было принято решение добавить R6. Вообще это стандартный приём – при заметном потреблении в схеме линейного LDO (ключевые слова тут – LowDropout) поставить на входе низкоомный резистор повышенной мощности и часть тепла рассеивать на нём, а не на стабилизаторе. Опыт, однако, показал, что нужды в R6 нет, и ниже на фото платы вы его ещё увидите.
XS4 как раз и предназначен для проведения опыта – переключения питания DD1 между 5 и 3,3 Вольтами. XS2 – стандартный USBB разъём, чтобы можно было перед собой положить, а не лазать к свободным USB-портам под стол к ПК.
Вот что получилось после трассировки, изготовления ПП и монтажа:
Как можно видеть, нижняя сторона платы совершенно незамысловата, да и верхняя не сильно сложнее.
Не собираюсь оттягивать развязку сюжета, сразу скажу, что опыт показал – питать GL823F от источника 3,3 В можно без проблем, переключение XS4 ни на что, кроме потребляемой мощности (не тока) не влияет.
Чтобы убедиться, что сделанная плата работает нормально, было проведено измерение скорости записи и потребляемого при этом тока для трёх различных микро-SD карточек. Фото конкурсантов – в студию!
Оценка потребляемого тока (измерением то, что делалось, мой язык назвать не поворачивается) производилась при помощи такого вот комбинированного измерителя тока-напряжения-количества заряда аккумуляторов. Некоторой неожиданностью для меня, скажу откровенно, оказалось то, что он ещё и USB-данные передаёт.
Использовалось только показание потребляемого тока, цена деления у этого, с позволения сказать, прибора – 0,01А, плюс к тому как минимум ошибка дискретизации 1 единица младшего разряда – ещё 0,01А. Поэтому в таблице приведены только диапазоны показаний, между которыми скакала цифра потребляемого тока. Надеюсь, однако, что тем, кому будет интересно применить GL823 в своих решениях, верхнюю планку потребления оценить всё же будет можно.
Кроме испытаний сделанной платы, для повышения объективности была сделана пара контрольных замеров при помощи другой читалки SD-карт. Вот такой:
Этот образец не препарировался, его я позаимствовал на 5 минут у дочки, и если бы я его распотрошил, то тут же распотрошили бы меня. Одно можно сказать с уверенностью – чип в нём не принадлежит к семейству GL823, члены которого умеют работать столько со стандартом SD, мультистандарт им не по зубам.
Скорости чтения-записи измерялись простейшим способом: один и тот же файл размером 1058268 кБайт записывался на и считывался с испытуемой карты. Контрольный опыт (на другой читалке) проводился только для того, чтобы исключить системные ошибки на один-другой десятичный порядок, данные по нему не обрабатывались, я только убедился, что примерно времена и токи потребления бьются с полученными на предыдущей стадии.
Если Вам захочется применить описываемую схему в своём проекте, то при оценке потребления сделайте поправку на то, что ток питания поступал от напряжения USB 5 Вольт, но GL823 питалась от напряжения 3,3 В, и разница 5-3.3=1.7 (а это 50% от 3.3) просто терялась на DA2. При питании от централизованного (и, я надеюсь, импульсного) источника 3,3 Вольт получится порядочная экономия.
Комментарии (25)
gudvinr
14.04.2017 07:23Если не сложно, не могли бы вы выложить, например, на гитхаб файлы вашей печатной платы?
Думаю, это было бы полезно, и если кому-то нужно, то проще готовое изменить, чем заново самому рисовать.VladSMR
14.04.2017 07:26Выложить не вопрос — нужно только немного времени отыскать файлы в архиве. Есть и ещё один нюанс — эта плата сделана не в Альтиуме и не в Игле, а во FreePCB, так что выкладывать придётся Герберы, а их редактировать — та ещё радость…
gears
14.04.2017 20:08В герберах нет ничего страшного, их не сложно загрузить в тот же Альтиум и восстановить печатную плату.
VladSMR
14.04.2017 20:09Хорошо, мне только нужно некоторое время, чтобы их вытащить из архива — после эксперимента они мне были совсем не нужны. Результат вошёл составной частью в другой проект, в крайнем случае возьму оттуда.
Fen1xL
14.04.2017 09:15Есть идея железки процессор которой грузится с eMMC. Для прошивки eMMC хотелось бы использовать USB, который бы притворялся Mass Storage Device (преимущество — не надо писать свой драйвер). Вопрос здесь в микросхеме USB <-> eMMC bridge. Из таких микросхем нашёл только у SMSC (ныне Microchip), сам чип USB2244i. Вот он у нас почему-то не взлетел. Может партия была паленая, либо у нас руки не там. Может кто знает альтернативы этой микросхеме?
SvSh123
14.04.2017 09:55Так у того же Микрочипа: вот, например.
Судя по тому, что 2244 поддерживает SM, MS и xD, она далеко не новая. Может, потому и не взлетела?Fen1xL
14.04.2017 11:23Действительно в даташите на USB2642 указана поддержка MMC и отдельным пунктиком также указана поддержка eMMC. А вот USB2244i по даташиту поддерживает MMC и про eMMC ни слова. Хотя я ожидал протокольной совместимости между MMC и eMMC. Странно. Может конечно и не в этом дело. Спасибо, буду экспериментировать.
SvSh123
14.04.2017 09:41Если уж питать схему от 3.3 В, лучше использовать MIC23050-SYML, например. Встроенный LDO, наверное, можно обойти и запитать SD напрямую от преобразователя. Насколько я понял, данный вариант м/с GL823 управление питанием не поддерживает.
Насчет «выложить печать на гиту» — поверьте, такую простую схему проще развести заново самому, чем адаптировать чужую… впрочем, это лишь мое мнение. :)VladSMR
14.04.2017 10:21Может быть я не чётко выразил свою мысль в основном тексте, но задача была такова: попробовать запитать GL823 от внешнего источника 3.3В (то есть в режиме, даташитом не предусмотренном). Как именно и насколько эффективным должен быть преобразователь 5В VSUB -> 3.3В SD-карты особенного значения не имело. Под рукой был 1117 — он и пошёл в дело.
По поводу «выложить» — совершенно с Вами солидарен. Повторюсь, выложить не проблема, потом проблема применить. Мне кажется, что нужный кусочек заинтересованный юзер потом сам вставит в свой дизайн…SvSh123
14.04.2017 11:38Я понял, просто народ уже начал обсуждать использование схемы… :)
Упомянутые выше варианты от Microchip мне показались интересней.
P.S.: в DFN и QFN ничего страшного нет, они неплохо паяются в почти домашних условиях. :) Сам видел.daggert
14.04.2017 11:50P.S.: в DFN и QFN ничего страшного нет, они неплохо паяются в почти домашних условиях
100-ватным советским паяльником (:
VladSMR
14.04.2017 12:41Знаете, на Зеленоградском Кванте технолог SMD-линии высказал пожелание «лучше уж BGA, чем QFN» :-)
Мы, когда выбора уже нет, QFN паяем так: под нижней площадкой теплоотвода-земли делаем серию обычных переходных отверстий, центральное из которых сверлится шире (1.7-2.5 мм). Дорожки футпринта делаем длиннее рекомендованных так, чтобы они миллиметра на полтора выступали за контур корпуса. Сначала иглой паяем две диагональные площадки в угол между удлинённой дорожкой и корпусом, потом остальные площадки, потом обычным наконечником в отверстие теплоотвод.
VladSMR
14.04.2017 10:23MIC23050 всем хорош, да только корпус у него безвыводной. Мы их всё же пока стремимся избегать.
oxothuk_uae
14.04.2017 12:58+1ИМХО — неправильный подход «будет ли работать схема если»…
данная GL823 требует 5V (внутри два регулятора 5->3.3V и 3.3->1.8V) если на вход подать 3.3V — на выходе будет во-первых — меньше, во-вторых, и это главное, напряжение не будет стабилизированным, и будет зависит параметров нагрузки, а будет ли с таким питанием надежно работать SD карта — еще вопрос. Подключите осциллограф и посмотрите 3.3V на входе и на выходе GL823 (интересно, кстати, измерить напряжение на питании SD карты)
есть версия этой же микросхемы на 3.3V в корпусе QFN, паяется феном (даже проще чем MSOP)VladSMR
14.04.2017 13:14Напряжение на выводе PMOS, конечно же будет меньше, чем положено. Насколько меньше? Настолько, насколько LowDropout встроенный LDO. Будет ли оно менее стабильным, чем при питании 5 вольтами? Да, будет.
Насколько такие ухудшения повысят вероятность общей нестабильности работы? Непонятно, но можно проверить. О результатах проверки докладываю. То, что она весьма ограничена по диапазону тестируемых параметров — отчёт себе отдаю.
Рассмотрим альтернативный вариант: любой step-up регулятор для конверсии 3.3В->5В и далее по даташиту. Стабильность выше — да, намного — не знаю.
На другой чаше весов цена компонентов, дополнительной площади платы, рост стоимости монтажа, снижение надёжности из-за увеличения числа компонентов, снижение времени работы коробочки от ионисторов.
Теперь уже в ход идёт Ваша интуиция как инженера — смотрим и сравниваем. Для себя я принял решение в этом случае step-up не заморачиваться. Когда нужно было иметь внешнее гнездо для USB-флешки, step-up пришлось поставить.
Я постарался дать некоторую информацию для размышления. Применять или не применять — это уже Ваше решение.
oxothuk_uae
14.04.2017 13:57как я понял, изначально задачей было обеспечить большую надежность работы устройства (конкретно защитить информацию на SD карте от проблем, вызванных некорректным выключением), для этого добавили резервное питание. Затем, для еще большего увеличения надежности, добавим немного интуиции и попробуем запитать контроллер не по даташиту, а как-нибудь попроще.
что мешает подать питание на VCC SD-карты непосредственно с VBUS (если там 3.3V)VladSMR
14.04.2017 20:15Не совсем так — была ещё проблема, что коробочка по отключении питания должна успеть записать сообщение во внутренний лог и попробовать отослать сообщение наружу.
Спасибо за идею — этого не пробовали, поскольку достаточно надёжно работает и вышеприведённая схема.
mihmig
14.04.2017 14:38>>точного резистора смещения аналоговой части
Простите за глупый вопрос — а зачем в полностью цифровом устройстве аналоговая часть?VladSMR
14.04.2017 16:53Увы, USB 2 и USB 3 не являются полностью цифровыми интерфейсами с точки зрения микросхемотехники.
Как, впрочем, и многие другие, навскидку SATA и Ethernet.
xl0e
14.04.2017 16:54Почему время записи для 2гб больше чем для 32х?
Как делали плату? ЛУТ?VladSMR
14.04.2017 16:572, 4 и 32 это только условные обозначения карт.
Их фотографии есть в статье, там же немного ниже описывается тестирование — повторюсь, при нём записывался и считывался один и тот же одногигабайтный файл.
Плату заказывали на аутсорсе, 4 класс точности по ГОСТ.
daggert
Не смотрели в сторону XC6206 вместо *1117?
VladSMR
Помнится, в кассетнице XC6206 имеются, правда в SOT-23 и на меньшие напряжения. Я даже не уверен, что припаянная 1117 именно LM — сейчас очень много, кто их делает. Если у Вас есть именно ХС на 3.3В — можно поставить без опасений.