Mr.Duppl: Cheap USB Sniffer && Isolator
Как я и писал в посте про PicoYubiPin, я давно хотел себе какой-нить USB Sniffer. А еще хотел USB Isolator, чтобы не бояться вставлять всякие говноподелки в ноут. Ну и раз уж они отлично дополняют друг друга, родился Mr.Duppl - простенький USB Sniffer && Isolator.
На всякий: это моя первая попытка самостоятельно спроектировать, развести и запаять печатную плату, потому относитесь к увиденному скептически
Hardware: Intro
Mr.Duppl, будучи простеньким и дешевеньким сниффером, получил такое же простенькое и дешевенькое железо:
- ADuM3160 - Full/Low Speed USB Digital Isolator
- RP2040 SuperMini - Heart of Mr.Duppl
- HLK-B0505S-2WR3 - 5V 2W DC/DC Power Module
- сопутствующая SMD рассыпуха
ADuM3160 можно было бы заменить на что-то в духе ADuM3166 или TI ISOUSB211, дабы получить USB High Speed, но в паре с RP2040 смысла в этом никакого нет - он и полноценный Full Speed навряд ли прожует. Вот если бы собрать на FPGA…но об этом как-нить в другой раз ;)
Hardware: Schematic && PCB
Если вы когда-либо видели схему USB изоляторов на базе ADuM3160, которыми завален AliExpress, то считайте, что видели их все. Мой не исключение, если не считать GND, D+ и D-, подключенные к RP2040 (full version):
Осталось развести печатную плату для заказа на JLCPCB:
И коль этот пост о создании, то для любителей позалипать, у меня есть царский подгон:
- создаем принципиальную схему печатной платы:
- саму печатную плату:
- заказываем на JLCPCB и любуемся получившейся красотой:
Hardware: Assembling
Т.к. паяю я одинаково плохо примерно чем угодно, в этот раз решил заиспользовать Pre-heating plate MECHANIC IX5, вот такой: и низкотемпературную паяльную пасту. Да, preheating plate не такой точный как фен (и не должен быть), зато проще, быстрее, не портит пластик и не сдувает рассыпуху :) Кстати, именно IX5 от Mechanic не советую, как-то уж очень неравномерно греется поверхность даже в сравнении с более дешевыми аналогами (или это у меня совсем паль) :(
C пайкой всегда лучше один раз увидеть, потому залипушники наслаждайтесь:
Firmware
firmware для rp2040 написана на C++ поверх Pico SDK 2.0, пока (?) поддерживает только USB Full speed (LS можно дописать, благо поддержка железом заложена) и требует улучшения перфоманса. С практической точки зрения выполняет простую задачу - перекладывает байтики из D+/D- в USB ACM, используя SLIP для кодирования данных. А уже из USB ACM должен вычитывать софт на ПК, о чем чуть ниже.
Software
Софтовая же часть написана на Go и представляет из себя плагин к Wireshark, используя extcap интерфейс. В коем-то веке нормальный интерфейс плагинов без so’шек, ура! Ну а с практической точки зрения - перекладывает байтки из USB ACM сниффера в пайп Wireshark, попутно перекодируя из SLIP в PcapNG. Вот так просто, да :)
Result
Раз все запчасти разобрали, можно и финальный результат оценить:
На видео я подключил&&прошил Mr.Duppl, проверил, что система его подхватила, поставил нужный пакетик и увидел USB трафик от YubiKey и Xbox Controller. Все в пределах ожиданий, как то и должно быть ;)
Closure
Это был интересный опыт со всех сторон:
- впервые разводил плату
- впервые заказывал на JLCPCB
- впервые паял не тренировочные платки с SMD компонентами
- впервые снимал и монтировал видосы всего процесса
Не могу сказать, что все вышло идеально (по всем пунктам, хах), но оно работает! Повторять текущую версию Mr.Duppl я, конечно же, не рекомендую - стоит подождать третьего сервис-пака минимум. В первую очередь, меня очень огорчил RP2040 SuperMini, который нужно или менять на что-то другое, или разводить RP2040 сразу на плате (благо документация есть: Hardware design with RP2040).
А пока у меня все, всем кота (づ˶•༝•˶)づ♡