Каждый год мы с друзьями мутим CTF для коллег (разок был и внешний, btw). Этот год не стал исключением, но бонусом я решил замутить собственные подарочки:
Да-да, хардварная сувенирка со вкусом DIY!
Intro
Этим летом я загорелся идеей сделать какие-то хардварные подарочки своими руками. По возможности — недорогие хардварные подарочки :) Так и пришла идея сделать бейджи для CTF, которые управляются с ПК (e.g. нотификашку показать), моргают лампочками и, в целом, украшают стол.
Hardware
В качестве MCU я выбрал CH552G в корпусе SOP-16:
- улучшенная версия E8051 с максимальной частотой 24MHz
- 16KB ROM
- 128B data flash
- 256B iRAM + 1KB xRAM
- встроенный USB LS/FS контроллер (только device)
- может питаться от 5V
Отличный кандидат со всех сторон:
- давно хотел с ним поиграть
- из BOM нужны лишь несколько конденсаторов + опциональный резистор и кнопка для прошивки
- стоит 38₽ за штучку на Алике
Можно было бы взять более мелкий CH552E в корпусе MSOP-10 (который всё ещё приятно паять, в отличие от QFN-16 у CH552T), но он был на 5₽ дороже — а на тираже в 30 штучек выходит полшавухи.
К нему в пару несколько светодиодов и резисторов. Финальная схемка получилась незамысловатой (как того и хотелось):

PCB, соответственно, тоже должна быть скорее красивой, чем сложной:

Самое время оформлять заказик и ждать ;)
Assembling
Распаковываю долгожданную посылку — и вот они, будущие красавцы:

Понятное дело, что теперь их следовало запаять:

Смоделировать во Fusion 360 будущий бэкплейт с подставкой (для красоты и переотражений):

Распечатать:

И насладиться результатом:

Software
Но это всё дела хардварные, которые без дел софтовых далеко не уедут :)
Фирмварю для CH552G написал на C. Логика нарочито простая:
- представиться HID-устройством;
- попарсить get/set команды из output report;
- включить/выключить светодиоды;
- ответить хосту.
Клиент по традиции на Golang. Тоже ничего сложного:
- дискаверит подключённые устройства;
- умеет получать/устанавливать состояние светодиодов;
- умеет выполнять кастомные паттерны;
- и имеет ряд встроенных (wave, loop, etc).
Осталось только прошить CH552G (спасибо ребятам из ch32-rs team, что избавили меня от вендорского ада) и насладиться красотой:
bl1nky pattern wave:bl1nky pattern bounce:
That’s all folks!
Честно скажу — мне П-О-Н-Р-А-В-И-Л-О-С-Ь! Не уверен, что в следующий раз согласился бы паять их сам — всё веселье проходит на третьей штучке. Но точно нужно будет как-нибудь повторить!
А пока у меня всё. Всем кота! (づ˶•༝•˶)づ♡