Помимо основной работы я делаю достаточно много пет-проектов, но никогда о них не писал. Сейчас я решил исправить ситуацию и написать о проекте, который только что завершил. На его создание меня вдохновила вот эта работа Джорджа Хиллиарда.
![](https://habrastorage.org/webt/bb/iy/fm/bbiyfmwe75cz-ghoa0fhklowsf8.jpeg)
Цель проекта
Сделать максимально дешёвую версию USB Flash визитки, на которой бы содержалось моё резюме, исходный код и ещё несколько файлов. При этом использовать доступные комплектующие, которые можно заказать на LCSC и JLCPCB.
Что мне нужно было для этого сделать?
Подобрать дешёвые, но не ширпотребные компоненты, развести под них печатную плату, запаять их и написать прошивку.
Что в итоге делает моя визитка?
Как можно догадаться, моя визитка имитирует маленький USB Flash накопитель, на котором содержится резюме на двух языках, исходный код, прошивка, гербер файлы, схемотехника и печатная плата, а также моё фото.
Основные узлы проекта
Микроконтроллер STM32F070F6 — это был самый дешевый вариант контроллера с USB device на борту из тех что я нашёл;
Winbond W25Q32 — последовательная флэш память на 4 Мб;
Светодиоды 0805 — белый и синий цвета, для красоты;
LP3992 — понижающий преобразователь напряжения на 3.3В, питание микросхем;
USBLC6-2 — защита USB «разъема» от статики.
Мой подход к разработке пет-проектов
Есть определенный путь, которого я придерживаюсь программируя микроконтроллеры:
- Не использовать SPL, HAL и другие библиотеки для программирования периферии. Этого правила я придерживаюсь и на основной работе;
- Не использовать ОС. Я считаю что мои домашние проекты не настолько сложны, чтобы использовать этот полезный инструмент;
- Не использовать Кучу. Касается только домашних проектов (нет необходимости);
- Не использовать динамическое выделение памяти. Касается только домашних проектов (нет необходимости).
Проектирование
Компоненты
Для начала мне было необходимо подобрать компоненты для моей задумки т.к. помимо рассыпухи у меня ничего не было. Для этого я решил использовать сервис 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, скрины прилагаю.
![](https://habrastorage.org/webt/ha/ml/z1/hamlz1ev-yohjegygrnrqwvvcdy.png)
![](https://habrastorage.org/webt/el/sz/_o/elsz_owj9svcezdueu-xbrzezyq.png)
Все компоненты обвязаны согласно даташитам. Микросхема флэш памяти запускается с контроллера через МДП транзистор.
Тут проблемой был USB разъем. Согласно спецификации USB он имеет толщину 2мм. Плату такой толщины заказывать дорого, да и для визитки не очень практично. Выход из ситуации я подсмотрел у одного человека, который делал музыкальную визитку. Он использовал плату 1мм, и делал на ней дополнительный разъем, который отрывается и запаивается поверх основного. Я поступил так же.
![](https://habrastorage.org/webt/0r/lu/dj/0rludj6wa7s5iaffvwablbotpbk.jpeg)
Пайка
Пайка компонентов в основном проблем не вызывала. Всё запаял феном и паяльной пастой. Единственной проблемой для меня стало запаивание микроконтроллера. От паяльной пасты получалось слишком много клякс, паяльником такие ножки запаять тяжело. В итоге я просто промазал припоем все пады, а затем феном впаял микроконтроллер.
Программирование
Тут мне особо сказать нечего, программировал всё на низком уровне, на языке C++. Исходный код прикрепляю. Обращение к регистрам делал по статьям lamerok. USB реализовано с помощью средств микроконтроллера. Микросхема флэш памяти работает по SPI через DMA на самой высокой скорости. Диоды мигают по очереди по прерыванию таймера на 250мС.
![](https://habrastorage.org/webt/st/b4/pj/stb4pj8m8pudptgnsp0h2bytprc.jpeg)
![](https://habrastorage.org/webt/cz/oz/tr/czoztrdee-ag5xmup8gxpxj1z94.jpeg)
Заключение
На этом думаю всё, основные моменты я описал. Если нужно что-то раскрыть более подробно (программирование USB, Flash или схемотехнику), то пишите, обязательно сделаю.
Всех благ!
Ivnika
Хотелось именно в размер визитки? Вполне ведь можно было все в полоску по ширине юсб затолкать, а ФИО на обратной стороне маской сделать.
А если уж в формате визитки, можно заморочиться с конструкцией из двух поворачивающихся половин, чтобы в обычном состоянии разъем был в центре
big_dig_dev Автор
Да, хотелось именно в форме визитки.
Swill
Вполне можно было напечатать бумажную визитку с QR-кодом, ведущим в linktree. Получить электронные данные таким образом сегодня будет даже быстрее, чем втыкать USB.
Но тут, видимо, не о практичности речь.