Анатомия и клонирование USB адаптера для SD-карты

f54e21451bfa4ed38bb087e1641cdf12.jpg

… или как снабдить Ваш DIY-проект на MIPS или лёгком ARM быстрой микро-SD карточкой.
Доброго времени суток всему уважаемому сообществу. Хотел бы продолжить свой рассказ про коробочку-прибор, а именно про то, как ей удалось обзавестись микро-SD картой, подключённой к порту USB 2.
Корень всей проблемы был в том, что USB 2, и даже не один, у её процессорного модуля есть, а QSPI (QuadSPI) или карточного интерфейса — увы, нет. Как этот грустный факт связан с SD-картами? Очень просто, любая SD-карта в физической основе своего подключения имеет SPI (SerialPeripheral) интерфейс. Классический SPI для передачи и приёма последовательных данных использует по одной физической линии. Просто и экономно, как с точки зрения денег, так и миллиамперов. Однако недостатки, как известно, есть продолжение достоинств, и для SPI им в первую очередь стала относительно невысокая скорость обмена данными. Для решения этой проблемы был придуман четырёхбитовый режим обмена данными с SD-картой, являющийся близким родственником протокола QSPI. При использовании этого режима хост-контроллер и карточка сначала договариваются о параметрах обмена в однобитном режиме, а потом переходят в четырёхбитный, когда используют не по одной линии для приёма и передачи, а четыре на всё про всё (плюс ещё одну для индикации команды).
Что же делать, если аппаратура напрямую четырёхбитный протокол не поддерживает, а быстрый обмен всё же нужен? Очевидный ответ — снабдить проект мостом «быстрый интерфейс» — «четырехбитовая SD-карта».

Вот для решения этой задачи и была приобретена парочка адаптеров USB-SD и подвергнута препарированию (вивисекция не использовалась — мы же не изверги какие). Перед тем, как разогревать паяльник и фен, была проведена очень важная проверка — увидит ли Debian процессорного модуля предложенный ему свисток-адаптер. Тест прошёл на ура, добро пожаловать в операционную. Купленный свисток выглядит вот так:

8997405e7cdc4981aac38d2aad8b1c35.jpg
И вот так:
a709624bf49a44a1ac3ab97c63049c1c.jpg

После того, как был разобран корпус, стало можно разглядеть печатную плату (со всех её двух сторон).

140a2f16457b41a6be2902e9dca08a5d.png

2d948f33d59f4afc8fff7b97ebcb5a7e.png

Схема простенькая, основой её является ИМС GL823F — микроконтроллер с системой команд 8051 и с масочной памятью, оснащённый аппаратным блоком интерфейса USB 2, по всей видимости, не особо высокого качества (почему я так говорю — не вижу точного резистора смещения аналоговой части и кварцевого генератора, что означает восстановление частоты из принимаемого сигнала на основе внутреннего калибруемого генератора). Работать будет, но не HiFi, нет. Всё остальное — минимальный обвес: блокировочные конденсаторы, подтягивающий и токоограничивающий резисторы, LED и разъёмы, вот и вся инженерия.

Сдуваем компоненты феном и разглядываем печатную плату. По многим признакам, плата двухсторонняя с металлизацией отверстий. После недолгого разглядывания платы в микроскоп, срисовывания схемы соединений и сравнения с даташитом на родственные ИМС компании GL, восстанавливаем принципиальную схему.

d9674ea6ed584e8aa5566554642f4f18.jpg

45479e797ffd47a5966944d5a3e4b88d.jpg

И вот тут вот начинаем видеть одну небольшую закавыку. В чём же именно? Наша коробочка питается от гарантированного напряжения 3,3В, а схема на GL823 требует 5 вольт. Ну как требует — она так привыкла, потому что именно столько ей даёт USB. Сама микро-SD питается от 3,3В, потому в GL823 добавлен встроенный LDO-стабилизатор. Отсюда вопрос –, а если схему питать от 3,3В, то сможет она работать? Если LDO сумеет не уронить сильно напряжение — то сможет, но ведь не все LDO одинаково полезны. Небольшую подсказку даёт даташит — вывод, питающий SD-карту, называется PMOS. Такая аббревиатура не может не радовать — можно предположить, что используется HighSide PMOS схема, в которой падение напряжения на регулирующем элементе может быть очень небольшим. Однако всё это — рассуждения, а единственный решающий аргумент — опыт, он же сын ошибок трудных.

Так какой же именно опыт мы поставим? Давайте попробуем питать ИМС двумя переключаемыми напряжениями — от 5 В USB либо от 3,3В, получаемых отдельным стабилизатором. Вот теперь у нас достаточно знаний, чтобы нарисовать принципиальную схему.
fb74bca0b27545c192d85f552f89d9f9.gif
Нумерация компонентов на схеме несколько странная по той причине, что на заводе-изготовителе печатных плат заказывалась мультизаготовка с ещё несколькими тестовыми схемками, и у всех них нумерация компонентов была сквозная. Готовя статью, принципиальную схему я привёл в соответствие с фотографией, и получилось то, что получилось.

Что мы видим на схеме? Понятно, ядром является 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-портам под стол к ПК.

Вот что получилось после трассировки, изготовления ПП и монтажа:

f54e21451bfa4ed38bb087e1641cdf12.jpg

d3defa4908c8471181c4c5a177f66a5a.jpg

Как можно видеть, нижняя сторона платы совершенно незамысловата, да и верхняя не сильно сложнее.

Не собираюсь оттягивать развязку сюжета, сразу скажу, что опыт показал — питать GL823F от источника 3,3 В можно без проблем, переключение XS4 ни на что, кроме потребляемой мощности (не тока) не влияет.

Чтобы убедиться, что сделанная плата работает нормально, было проведено измерение скорости записи и потребляемого при этом тока для трёх различных микро-SD карточек. Фото конкурсантов –в студию!

5d0b4493fa7b4383bf2209d97733a56f.jpg

Оценка потребляемого тока (измерением то, что делалось, мой язык назвать не поворачивается) производилась при помощи такого вот комбинированного измерителя тока-напряжения-количества заряда аккумуляторов. Некоторой неожиданностью для меня, скажу откровенно, оказалось то, что он ещё и USB-данные передаёт.

ccb1ece7f12d4f14b50c78a014df4dfc.jpg

Использовалось только показание потребляемого тока, цена деления у этого, с позволения сказать, прибора — 0,01А, плюс к тому как минимум ошибка дискретизации 1 единица младшего разряда — ещё 0,01А. Поэтому в таблице приведены только диапазоны показаний, между которыми скакала цифра потребляемого тока. Надеюсь, однако, что тем, кому будет интересно применить GL823 в своих решениях, верхнюю планку потребления оценить всё же будет можно.

Кроме испытаний сделанной платы, для повышения объективности была сделана пара контрольных замеров при помощи другой читалки SD-карт. Вот такой:

bb665a79dcfa41269e29baf219bb7977.jpg

Этот образец не препарировался, его я позаимствовал на 5 минут у дочки, и если бы я его распотрошил, то тут же распотрошили бы меня. Одно можно сказать с уверенностью — чип в нём не принадлежит к семейству GL823, члены которого умеют работать столько со стандартом SD, мультистандарт им не по зубам.

Скорости чтения-записи измерялись простейшим способом: один и тот же файл размером 1058268 кБайт записывался на и считывался с испытуемой карты. Контрольный опыт (на другой читалке) проводился только для того, чтобы исключить системные ошибки на один-другой десятичный порядок, данные по нему не обрабатывались, я только убедился, что примерно времена и токи потребления бьются с полученными на предыдущей стадии.
4ffb4728d606444c81159a2e12eac81b.png

Если Вам захочется применить описываемую схему в своём проекте, то при оценке потребления сделайте поправку на то, что ток питания поступал от напряжения USB 5 Вольт, но GL823 питалась от напряжения 3,3 В, и разница 5–3.3=1.7 (а это 50% от 3.3) просто терялась на DA2. При питании от централизованного (и, я надеюсь, импульсного) источника 3,3 Вольт получится порядочная экономия.

© Geektimes