Моя USB визитка
Всем привет!
Помимо основной работы я делаю достаточно много пет-проектов, но никогда о них не писал. Сейчас я решил исправить ситуацию и написать о проекте, который только что завершил. На его создание меня вдохновила вот эта работа Джорджа Хиллиарда.
Цель проекта
Сделать максимально дешёвую версию 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, скрины прилагаю.
Все компоненты обвязаны согласно даташитам. Микросхема флэш памяти запускается с контроллера через МДП транзистор.
Тут проблемой был USB разъем. Согласно спецификации USB он имеет толщину 2 мм. Плату такой толщины заказывать дорого, да и для визитки не очень практично. Выход из ситуации я подсмотрел у одного человека, который делал музыкальную визитку. Он использовал плату 1 мм, и делал на ней дополнительный разъем, который отрывается и запаивается поверх основного. Я поступил также.
Пайка
Пайка компонентов в основном проблем не вызывала. Всё запаял феном и паяльной пастой. Единственной проблемой для меня стало запаивание микроконтроллера. От паяльной пасты получалось слишком много клякс, паяльником такие ножки запаять тяжело. В итоге я просто промазал припоем все пады, а затем феном впаял микроконтроллер.
Программирование
Тут мне особо сказать нечего, программировал всё на низком уровне, на языке C++.Исходный код прикрепляю. Обращение к регистрам делал по статьям lamerok. USB реализовано с помощью средств микроконтроллера. Микросхема флэш памяти работает по SPI через DMA на самой высокой скорости. Диоды мигают по очереди по прерыванию таймера на 250 мС.
Заключение
На этом думаю всё, основные моменты я описал. Если нужно что-то раскрыть более подробно (программирование USB, Flash или схемотехнику), то пишите, обязательно сделаю.
Всех благ!