Каждый год мы с друзьями мутим 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!

Честно скажу — мне П-О-Н-Р-А-В-И-Л-О-С-Ь! Не уверен, что в следующий раз согласился бы паять их сам — всё веселье проходит на третьей штучке. Но точно нужно будет как-нибудь повторить!

А пока у меня всё. Всем кота! (づ˶•༝•˶)づ♡