habrahabr

Горыныч: как и зачем мы создали свой мощный USB-хаб

  • среда, 23 апреля 2025 г. в 00:00:09
https://habr.com/ru/companies/yandex/articles/898282/

Привет, Хабр! Меня зовут Антон, я инженер‑электронщик из отдела умных устройств Яндекса. Сегодня хочу поделиться опытом разработки устройства, с помощью которого мы занимаемся отладкой Станций и заливаем в них прошивки на заводах — мощного USB‑хаба с красивым названием Горыныч.

У Горыныча есть ряд нетривиальных решений, которые сильно отличают его от стандартных USB‑хабов. В нём реализована трансляция USB 3.1 в USB 2.0 для ускорения времени прошивки устройств, установлены контроллеры USB Power Delivery source на каждый порт для питания устройств с различными требованиями к напряжению и мощности, а также 12 независимых COM‑портов для отладки. В итоге к Горынычу можно подключить одновременно 10 мощных устройств — и он спокойно выдержит такую нагрузку.

USB-C: плюсы и немного минусов

У большинства устройств, которые мы разрабатываем в Яндексе, для питания установлены разъёмы USB‑C. Самым простым устройствам мощностью до 10 Вт достаточно напряжения питания 5В, а более мощные поддерживают протокол USB Power Delivery и могут потреблять мощность до 100 Вт. Стоит отметить, что, начиная с версии Power Delivery 3.1, стандарт позволяет подключать устройства с мощностью до 240 Вт, но большинство наших устройств пока всё же используют мощности до 100 Вт. Однако USB‑C служит не только для подключения Станции к розетке.

Одно из главных преимуществ USB‑C разъема — это универсальность. У него есть конфигурации с 6, 16, 22 и 24 контактами. Ещё USB‑C интересен тем, что не все пины жёстко зафиксированы стандартом, а некоторые, например, SBU1/SBU2, могут использоваться для разных интерфейсов в зависимости от конфигурации устройств. И поэтому использовать этот разъём для прошивки, отладки и взаимодействия с нашими устройствами при разработке — отличная идея.

У некоторых компаний есть собственные отладочные платы на USB‑C. Например, у Google есть USB‑Cereal. Это небольшая плата, которая подключается к компьютеру и предоставляет системные логи тестируемых устройств через COM‑порт, а также даёт доступ к USB‑шине.

Со времён Станции 2 у нас тоже появилась похожая отладка — YANDEX DEBUG USB‑C. С одной стороны платы мы подключаем само устройство, чтобы получать информацию через интерфейсы UART и USB 2.0. Таким образом мы получаем доступ для отладки по adb и последовательному порту, а также можем просматривать отладочные логи. С другой стороны платы мы можем спокойно подключить комплектный блок питания Станции.

Примеры отладочных плат USB‑Cereal и YANDEX DEBUG USB‑C
Примеры отладочных плат USB‑Cereal и YANDEX DEBUG USB‑C

Суть отладок заключается в том, чтобы на свободные пины разъёма USB‑C добавить интерфейсы для отладки устройства: USB 2.0, а также более медленные UART, JTAG, SWD и т. д. Схожие инструменты и механизмы есть у многих вендоров электроники на USB‑C, потому что это очень удобно.

Но что же делать когда нужно взаимодействовать сразу с несколькими устройствами?

Логичный ответ — использовать хаб. Но…

…при использовании хабов и работе с несколькими устройствами одновременно появляется ряд неочевидных проблем:

  • Нестабильная прошивка при подключении большого количества устройств в силу ограниченной скорости USB 2.0. То есть вся скорость upstream‑порта делится на количество используемых через хаб устройств.

  • Сложности при питании нескольких устройств:

    • Устройства, которым нужно 5В, могут потреблять в пике до 3А. Далеко не все хабы способны хорошо работать в таких условиях.

    • К мощным устройствам необходимо подключать комплектные блоки питания с профилями Power Delivery, а это не всегда удобно.

  • Отсутствуют функции управления, защиты и мониторинга питания.

  • При тестировании пяти и более устройств нас окружает множество проводов, и поэтому появляется много точек отказа.

По сути, на базе этих проблем и родилась идея сделать all‑in‑one‑хаб. Мы собрали требования и пожелания команд, которые занимаются разработкой устройств. В процессе мозговых штурмов мы отсекали варианты всяких мегаферм на 100 устройств, киловаттного пикового потребления, встроенного SOM с ОС и т. д.

В итоге в процессе «огранки» получилась вот такая структурная схема хаба. Назвали GORYNYCH — потому что «многоглавый».

Структурная схема нашего хаба
Структурная схема нашего хаба

Как выжать максимум из USB 3.1

Одно из главных пожеланий команд — ускорить время прошивки устройств по USB. Как я писал выше, при использовании хабов мы всегда получаем условное дробление скорости upstream‑порта на количество всех подключённых устройств. Поэтому для подключения к компьютеру мы решили использовать интерфейс USB 3.1 с большой пропускной способностью.

Мы выбрали структуру подключения хабов в виде дерева, где второй и третий хабы подключаются в первый — таким образом получается 10 выходных портов. В плане микросхем стоял вопрос выбора вендора. На тот момент на стоках у дистрибьюторов было совсем небольшое количество микросхем Microchip, TI и других подобных вендоров, поэтому правильным решением показалось рассмотреть микросхемы от китайско‑тайваньских вендоров: Realtek, VIA Labs, Genesys Logic.

VIA Labs — достаточно известная компания. В её ассортименте есть полный набор микросхем, который подходит реализации нашего устройства: USB 3.1 Gen1 Hub Controller, USB‑C 2:4 Data Switch with CC, а также специальная микросхема трансляции USB 3.1 в USB 2.0 и обратно. Поэтому было принято решение использовать все основные микросхемы от этого вендора.

Схема
Принципиальная схема хаба USB 3.1 на базе микросхемы VL817-Q7

Дело в том, что в большинстве наших устройств нет USB 3.0, а тем более USB 3.1 Gen1, поэтому для решения этих проблем мы нашли микросхемы преобразования интерфейса USB 3.1 в USB 2.0. По сути, такое решение даёт нам возможность взаимодействовать с подключёнными устройствами на максимальной скорости USB 2.0. Таким образом, при подключении нашего USB‑хаба к компьютеру USB 3.1 транслируется в USB 2.0 благодаря специальной микросхеме.

Принципиальная схема хаба USB 3.1 на базе микросхемы VL670-Q4
Принципиальная схема хаба USB 3.1 на базе микросхемы VL670-Q4

Power Delivery

Основной задачей было дать возможность питать все колонки без ограничений по мощности или специальных режимов работы. А у всего нашего семейства Станций и других умных устройств напряжение и мощность может варьироваться от 5 Вт (5В, 1A) до 65 Вт (20В, 3,25А). Таким образом, появилась задача реализации полноценного PD‑source‑контроллера.

В какой‑то момент разработки возникла мысль, которая долго не давала покоя: что, если сделать хаб с возможностью подключения десяти Станций Дуо Макс?

Выяснилось, что на рынке есть совсем немного готовых хабов с PD, при этом зарядных станций было достаточно много. Их стоимость могла начинаться с 1000 $. Это даже немного подстегнуло интерес к разработке.

И оказалось, что существует много готовых микросхем DC‑DC‑преобразователей, заточенных именно под Power Delivery. На тот момент наиболее подходящими мне показались две: SW3518S и IP2366. Это микросхемы DC‑DC‑преобразователей со встроенной обработкой логики Power Delivery и внешними ключами для поддержки разных профилей питания до 100 и 140 Вт соответственно.

Титульные страницы даташитов SW3518S и IP2366
Титульные страницы даташитов SW3518S и IP2366

После детального изучения решили использовать микросхему от более известного производителя — INJOINIC. Оно обладало рядом преимуществ:

  • Возможность управления микросхемой по интерфейсу I2C.

  • Топология BUCK‑BOOST, обеспечивающая более широкий входной диапазон напряжений.

  • Большая частота работы DC‑DC‑преобразователя, что даёт возможность использовать дроссель меньших габаритов.

Эта микросхема — универсальное решение для работы в качестве power bank с батареями 2–6S. Поэтому первым делом мы отключили всё лишнее: зарядку аккумулятора и ряд функций, связанных с работой от батареи (так как эта микросхема — power bank), а также работу в Dual‑Role‑Port‑режиме (нам нужен только Source‑режим). Для работы с десятью портами мы реализовали столько же независимых каналов DC‑DC‑преобразователя на базе IP2366. Управление по I2C даёт много возможностей, но после изучения документации выяснилось, что у микросхемы нельзя изменить I2C‑адрес. Для решения данной проблемы мы поставили I2C‑мультиплексоры. Таким образом мы реализовали десять независимых источников питания с полноценным Power Delivery.

Принципиальная схема DC‑DC‑преобразователя на базе микросхемы IP2366
Принципиальная схема DC‑DC‑преобразователя на базе микросхемы IP2366

COM-порты и отладка

Основной инструмент отладки Станций — это COM‑порт. Благодаря ему можно, например, определить место, где прекращает работать прошивка, или выявить сбой в работе аппаратной части. Такой подход позволяет обнаруживать проблемы на ранней стадии, что ощутимо сокращает время на поиск и устранение ошибок.

Тут было значительно проще: в наших маленьких отладках всегда использовались микросхемы USB‑UART CP2102N от компании SiLabs. Чтобы сохранить надёжность и совместимость, при их переносе в хаб мы решили использовать старшую микросхему из линейки SiLabs/Skyworks — CP2108. Таким образом, мы получили 12 независимых COM‑портов, установив три таких микросхемы. При этом два COM‑порта были задействованы для управления хабом, а оставшиеся десять использовались для отладки устройств.

Принципиальная схема преобразователя USB — 4x UART на базе микросхемы CP2108
Принципиальная схема преобразователя USB — 4x UART на базе микросхемы CP2108

Одна из фич среди пожеланий от тестировщиков — режим измерения мощностей, напряжения и токов. Для этих задач мы выбрали максимально подходящую и простую линейку микросхем INA22x. Основной выбор на INA226 для штатного мониторинга питания и на INA228 для более высокочастотного — до 1 КГц. В каждом случае конечный результат выглядит как компактное, надёжное и легко масштабируемое решение, которое не только удовлетворяет нужды команды тестирования, но и открывает новые возможности для дальнейшего развития функциональности хаба.

Микроконтроллер

При выборе управляющего микроконтроллера прежде всего мы руководствовались его доступностью на рынке, количеством портов ввода/вывода и вычислительной мощностью. Неплохим и в то же время удовлетворяющим всем этим пунктам был STM32H750.

Скриншот из магазина LCSC
Скриншот из магазина LCSC

Вышеперечисленные факторы стали решающими в выборе микроконтроллера, и теперь он устанавливается почти во всех наших внутренних проектах. Наличие I2C FM+, когда I2C‑шина работает на частотах более 1 МГц, позволяет нам опрашивать INA228 на максимально возможной скорости. К тому же большое количество выводов и интерфейсов дало возможность реализовать LAN‑интерфейс и индивидуальное управление каналами.

Трассировка и запуск платы

Из высокоскоростных интерфейсов на плате хаба есть только USB и LAN, поэтому при выборе конструкции печатной платы решили руководствоваться скоростью изготовления. И как ни странно, мы выбрали прекрасный бюджетный стэкап JLC06 161H-3313 для шестислойной платы завода JLCPCB. На их сайте есть калькулятор расчётов импеданса для дифференциальных и одиночных линий, который почти сходится со встроенным в схемный редактор Altium Designer. По итогу получилось следующее:

Скриншот калькулятора импедансов JLCPCB с полученными расчётами для стэка JLC06 161H-3313
Скриншот калькулятора импедансов JLCPCB с полученными расчётами для стэка JLC06 161H-3313

Для простоты мы использовали иерархический подход в Altium Designer, что сильно сократило время на разработку печатной платы. Каждый функциональный блок USB‑хаба был оформлен в виде отдельного листа схемы. Это не только упростило трассировку, но и позволило легко вносить изменения: правки в одном модуле автоматически применялись ко всем его экземплярам на плате.

В итоге, руководствуясь мануалами и референсами дизайна микросхем, мы разработали плату пятого класса точности. Её размер — 168 × 134 мм, а суммарное количество компонентов — около 1900 штук с двухсторонним монтажом.

Проект платы нашего USB‑хаба и его реализация. На ней можно найти маленького Горыныча
Проект платы нашего USB‑хаба и его реализация. На ней можно найти маленького Горыныча

Итак, после производства плат и закупки всех комплектующих и компонентов мы приступили к сборке, в ходе которой не обошлось без курьёзов. Так вышло, что футпринт микросхемы не соответствовал площадкам на плате. На фото видно, что габариты микросхемы одинаковые, шаг такой же, количество выводов совпадает, но на боковых гранях контактных площадок меньше.

Эта микросхема отвечает за переключение SS‑линий интерфейса USB 3.1 для его подключения к USB‑C. Она определяет положение провода USB‑C (да‑да, то, какой стороной вы воткнёте провод, имеет значение) и в зависимости от этого переключает SuperSpeed‑линии USB 3.1 на разъёме.

Принципиальная схема USB 3.1 Gen2 Data Switch с CC function на базе микросхемы VL162
Принципиальная схема USB 3.1 Gen2 Data Switch с CC function на базе микросхемы VL162

Поэтому идея соединить напрямую проводками вход и выход микросхемы для работы в одном положении кабеля воспринималась скептически и была самым крайним вариантом. Ещё была идея сделать тонкую переходную гибкую плату, но, когда я сел её рисовать, пришла идея припаять микросхему под углом 9 градусов и присоединить боковые контакты к площадкам на плате тонкими проводниками.

Слева микросхема не совпадает с футпринтом на плате, посередине — альтернативное решение, справа — итоговое решение
Слева микросхема не совпадает с футпринтом на плате, посередине — альтернативное решение, справа — итоговое решение

Спустя пару минут работы феном и паяльником всё получилось — микросхема начала детектировать оба положения провода USB‑C.

Корпус

На плате расположено 10 независимых PD-source-контроллеров мощностью до 65 Вт. В среднем КПД варьируется от 80 до 90% в зависимости от профиля питания подключаемого устройства.

Корпус спроектировали с акцентом на простоту: нижняя пластина толщиной 3 мм отводит тепло через термопрокладки, а верхняя крышка выполнена из гнутого алюминия толщиной 0,5 мм. Это решение позволило создать предельно простую конструкцию.

Первые натурные тесты показали, что на максимальной нагрузке пассивное охлаждение не справляется, поэтому мы внедрили пару довольно распространённых вентиляторов от ноутбуков. Однако при повседневном использовании Станций без музыки и глубокого баса они почти всегда остаются выключенными.

Горыныч в первом корпусе и после установки охлаждения
Горыныч в первом корпусе и после установки охлаждения

Тесты

После получения первых прототипов мы начали сравнивать время загрузки ПО на колонки. Получилось так, что чем больше размер образа, тем больше прирост скорости.

Тест

Обычный USB_HUB, минуты

Gorynych_HUB, минуты

Прирост скорости

Станция Дуо Макс, 5 шт.

≈11–12

7:30

46,7%

Станция Дуо Макс, 10 шт.

не удаётся

8:50

Станция Миди, 7 шт.

4:55

3:20

33,3%

Станция Миди, 10 шт.

5:35 (нестабильно)

3:45

31%

Так что помимо того, что мы увеличили стабильность и скорость загрузки, теперь можно работать сразу с десятью устройствами. Впервые широкой публике мы продемонстрировали это на прошлогодней конференции «Я Железо». Горыныч смог обеспечить необходимой мощностью десять Станций Дуо Макс для проигрывания музыки на полной громкости. С функцией мультирум это происходит синхронно и позволяет реализовать невероятно глубокий бас и потрясающий звук.

Горыныч в работе на выставках и тестах и в качестве прошивочной станции
Горыныч в работе на выставках и тестах и в качестве прошивочной станции

Внедрение и применение

Одно из ключевых применений получившегося USB‑хаба — внедрение на производственных линиях наших заводов в качестве прошивочной станции. Тем самым мы значительно повышаем пропускную способность производственных линий и снижаем процент ошибок при прошивке образа.

Также мы внедряем хабы для тестирования на устройствах, которые прямо сейчас находятся в процессе разработки. Мы проверяем циклические выключения и обновления, а также aging — словом, все те процессы, которые выполняются на Станциях сотни часов, чтобы валидировать каждую новую ревизию железа.

Ещё мы постепенно внедряем хабы на фермы — специальные шкафы со Станциями и другими умными устройствами. Каждую ночь в таких фермах происходит тестирование прошивок. В контексте релизов это замена ручному тестированию колонок, да и просто удобный инструмент. А новые отладочные функции хаба в теории могут помочь быстрее отлавливать баги.

Спасибо, что дочитали до конца. С удовольствием отвечу на все вопросы в комментариях. А ещё приходите на Я Железо 24 мая, чтобы посмотреть на Горыныча вживую.