Моя USB визитка

Всем привет!

Помимо основной работы я делаю достаточно много пет-проектов, но никогда о них не писал. Сейчас я решил исправить ситуацию и написать о проекте, который только что завершил. На его создание меня вдохновила вот эта работа Джорджа Хиллиарда.

bbiyfmwe75cz-ghoa0fhklowsf8.jpeg

Цель проекта


Сделать максимально дешёвую версию USB Flash визитки, на которой бы содержалось моё резюме, исходный код и ещё несколько файлов. При этом использовать доступные комплектующие, которые можно заказать на LCSC и JLCPCB.

Что мне нужно было для этого сделать?


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

Что в итоге делает моя визитка?


Как можно догадаться, моя визитка имитирует маленький USB Flash накопитель, на котором содержится резюме на двух языках, исходный код, прошивка, гербер файлы, схемотехника и печатная плата, а также моё фото.

Основные узлы проекта


Микроконтроллер STM32F070F6 — это был самый дешевый вариант контроллера с USB device на борту из тех что я нашёл;
Winbond W25Q32 — последовательная флэш память на 4 Мб;
Светодиоды 0805 — белый и синий цвета, для красоты;
LP3992 — понижающий преобразователь напряжения на 3.3В, питание микросхем;
USBLC6–2 — защита USB «разъема» от статики.

Мой подход к разработке пет-проектов


Есть определенный путь, которого я придерживаюсь программируя микроконтроллеры:
1) Не использовать SPL, HAL и другие библиотеки для программирования периферии. Этого правила я придерживаюсь и на основной работе;
2) Не использовать ОС. Я считаю что мои домашние проекты не настолько сложны, чтобы использовать этот полезный инструмент;
3) Не использовать Кучу. Касается только домашних проектов (нет необходимости);
4) Не использовать динамическое выделение памяти. Касается только домашних проектов (нет необходимости).

Проектирование


Компоненты
Для начала мне было необходимо подобрать компоненты для моей задумки т.к. помимо рассыпухи у меня ничего не было. Для этого я решил использовать сервис LCSC, как дешёвый и доступный вариант для домашних разработок. Как оказалось, по многим параметрам я вошёл тютелька в тютельку. Например, использовал все ножки микроконтроллера, уложился в оперативную память в 6кБ, из которых 4кБ у меня занял буфер для передачи данных с USB на SPI Flash, использовал ноги для USB которых физически нету на данном контроллере и т.п.

По цене в итоге вышло следующее:
Микроконтроллер STM32F070F6 -0.64$
Последовательная флэш память Winbond W25Q32 — 0.35$
Понижающий преобразователь LP3992–33B5F — 0.04$
Защита от статики USBLC6–2SC6 -0.08$
Кварц — 0.15$

Резисторы и конденсаторы использовал в форм факторе 0603, светодиоды 0805. Всё это у меня уже было, поэтому подсчитать их стоимость не представляется возможным. Однако можно с уверенностью сказать, что по цене всё уместилось в 1.5$ с запасом. Это не выглядит дешёвым по сравнению с проектом Хиллиарда, но и цены у меня не оптовые.

Печатная плата и схемотехника
Схему и печатную плату проектировал в Altium designer, скрины прилагаю.

hamlz1ev-yohjegygrnrqwvvcdy.png

elsz_owj9svcezdueu-xbrzezyq.png

Все компоненты обвязаны согласно даташитам. Микросхема флэш памяти запускается с контроллера через МДП транзистор.
Тут проблемой был USB разъем. Согласно спецификации USB он имеет толщину 2 мм. Плату такой толщины заказывать дорого, да и для визитки не очень практично. Выход из ситуации я подсмотрел у одного человека, который делал музыкальную визитку. Он использовал плату 1 мм, и делал на ней дополнительный разъем, который отрывается и запаивается поверх основного. Я поступил также.

0rludj6wa7s5iaffvwablbotpbk.jpeg

Пайка
Пайка компонентов в основном проблем не вызывала. Всё запаял феном и паяльной пастой. Единственной проблемой для меня стало запаивание микроконтроллера. От паяльной пасты получалось слишком много клякс, паяльником такие ножки запаять тяжело. В итоге я просто промазал припоем все пады, а затем феном впаял микроконтроллер.

Программирование
Тут мне особо сказать нечего, программировал всё на низком уровне, на языке C++.Исходный код прикрепляю. Обращение к регистрам делал по статьям lamerok. USB реализовано с помощью средств микроконтроллера. Микросхема флэш памяти работает по SPI через DMA на самой высокой скорости. Диоды мигают по очереди по прерыванию таймера на 250 мС.

stb4pj8m8pudptgnsp0h2bytprc.jpeg

czoztrdee-ag5xmup8gxpxj1z94.jpeg

Заключение


На этом думаю всё, основные моменты я описал. Если нужно что-то раскрыть более подробно (программирование USB, Flash или схемотехнику), то пишите, обязательно сделаю.

Всех благ!

© Habrahabr.ru