H₂H³: USB-KVM как открытый прибор, а не чёрная коробка
H₂H³ переключает USB-периферию между двумя компьютерами через один USB 2.0 hub и выводит состояние питания на OLED. Внутренний STM32G0B1 подключён к тому же hub как четвёртое устройство, поэтому аппаратный коммутатор получает собственный канал управления и телеметрии на каждом из host-PC. Ключевой вопрос здесь — как совмещены переключение линий, питание VBUS и повторное перечисление USB-устройств.
Проект H₂H³ опубликовал открытую конструкцию USB-переключателя для двух компьютеров и трёх периферийных устройств. В компактном корпусе размещены два USB-A штекера для host-PC, три USB-A гнезда для клавиатуры, мыши и другой периферии, hub-контроллер Genesys Logic GL852G, STM32G0B1KBU6 и OLED-индикатор 64×32. Видеотракта в устройстве нет: обозначение USB-KVM относится к сценарию управления двумя машинами общей периферией, фактически это USB KM-переключатель с hub.
Архитектура построена вокруг GL852G — USB 2.0 hub-контроллера с поддержкой High-Speed и Full-Speed upstream, а также High-Speed, Full-Speed и Low-Speed downstream. Контроллер рассчитан на четыре downstream-порта. Три из них выведены наружу, четвёртый занимает STM32. Такое включение превращает микроконтроллер в обычное USB-устройство, доступное активному компьютеру через тот же внутренний hub. В репозитории заявлен Custom HID-канал для связи с сервисным daemon, обработки переключения и передачи телеметрии.
Ценность схемы раскрывается именно в этом четвёртом порте. Внешний USB-коммутатор обычно скрывает логику выбора host-PC внутри отдельного контроллера, а H₂H³ позволяет видеть её в прошивке STM32, модифицировать HID-протокол, добавлять макросы и фиксировать диагностические события. Автор также реализовал daemon на Rust: переключение может инициироваться по достижению курсором края экрана. Для такого режима не требуется эмуляция клавиатуры на уровне приложения; команда проходит через отдельное USB-устройство, расположенное за hub.
Аппаратная часть выполнена на четырёхслойной плате в KiCad 9. Автор указывает контролируемый импеданс дифференциальных пар USB 2.0, программную последовательность break-before-make для VBUS и USB-линий, измерение напряжения на обоих входах host-PC и измерение тока трёх периферийных портов. На OLED выводятся параметры питания, а порог аварии по току заявлен выше 1.5 А. Корпус рассчитан на MJF или SLS-печать из нейлона PA12 и собирается на защёлках; заявленные габариты составляют около 60×20×20 мм.
Переключение USB требует аккуратного отношения к состояниям шины. После отключения одного host-PC и подключения другого периферийные устройства должны пройти процедуру перечисления заново, а питание и линии D+/D− не должны образовать путь между компьютерами. Программная break-before-make последовательность выглядит логичным подходом, однако опубликованных осциллограмм переходного процесса, eye diagram, результатов USB-IF compliance, ESD-испытаний и hot-plug тестов пока нет. Поэтому controlled impedance, устойчивость к переключениям и заявленная «glitch-free» работа остаются авторскими характеристиками, ожидающими измерительной проверки.
Исходники устройства доступны полностью: прошивка STM32, daemon, схемы и PCB KiCad, CAD-модель корпуса и документация. Код firmware и daemon распространяется по MIT, аппаратная документация — по CERN-OHL-W v2. Такая комплектность позволяет использовать H₂H³ как редкий пример USB-прибора, где доступны одновременно топология шины, power-path, управляющая прошивка и механика корпуса. При этом статус готовности следует считать прототипным: в раннем описании автор оценивал firmware как 95% functional prototype, хотя текущая документация сообщает о работающем базовом переключении, телеметрии и daemon.