USB-топология для DMA: контроллеры, хабы и порты
Как устроены хост-контроллеры, корневые хабы и общая полоса USB и почему задний порт — не суеверие. Как узнать согласованную скорость порта и как selective suspend рвёт связь.
Коротко
USB — это дерево: каждый хост-контроллер обслуживает корневой хаб, а все внешние хабы, док-станции и фронтальные разъёмы ниже него делят его пропускную способность. Место DMA-карты — в заднем порту, подключённом к корневому хабу, и на этом контроллере с ней не должно конкурировать ничто другое.
На странице10
- Как USB-порты на самом деле подключены к компьютеру
- Четыре термина USB, которые нужно знать
- Зачем подключаться в задний USB-порт?
- Держите карту на отдельном USB-контроллере
- Как проверить согласованную скорость порта
- Отключите USB selective suspend через powercfg
- Выключите экономию питания USB и в Диспетчере устройств
- Частые проблемы с USB и их решения
- Вопросы про USB
- Источники
Как USB-порты на самом деле подключены к компьютеру
Большинство представляет каждый USB-разъём как отдельное независимое подключение к компьютеру, но устроено всё иначе. В машине всего несколько хост-контроллеров, у каждого контроллера свой корневой хаб, а у каждого корневого хаба — свой набор портов. Всё, что подключено к этим портам, делит пропускную способность, обработку прерываний и драйвер этого контроллера. Внешний хаб или док-станция добавляет ещё один уровень, который, в свою очередь, делят все подключённые к нему устройства. Почти каждый необъяснимый отвал DMA возникает из-за того, что это дерево глубже или загруженнее, чем может выдержать ридер.
Четыре термина USB, которые нужно знать
Разберитесь с этими четырьмя терминами, и большинство советов по USB, которые вам попадутся, станут понятны.
- Хост-контроллер (host controller)
- Чип, который управляет шиной USB. На современной машине это контроллер xHCI. У него есть драйвер, и он может оказаться узким местом
- Корневой хаб (root hub)
- Виртуальный хаб на вершине дерева одного контроллера. Его порты — это разъёмы, разведённые прямо на плате
- Хаб (hub)
- Любое устройство, которое разветвляет один порт на несколько: внешний хаб, док-станция, монитор с портами, плата фронтальной панели внутри корпуса
- Согласованная скорость (negotiated speed)
- То, о чём на деле договорилось соединение, а не то, на что способен порт. Порт USB 3 с кабелем USB 2 согласует USB 2
Зачем подключаться в задний USB-порт?
Порты на задней панели распаяны на материнской плате и идут напрямую к корневому хабу. Фронтальный порт висит на конце внутреннего кабеля, идущего к разъёму на плате, и во многих корпусах этот разъём сам сидит за внутренним хабом. Поэтому фронтальный порт добавляет длину кабеля, лишние разъёмы, а часто и ступень хаба, прежде чем сигнал дойдёт до контроллера. USB 3 на полной скорости не прощает тракта на грани, и именно поэтому в каждом гайде советуют задний порт. По той же причине карта, которая не работает во фронтальном порту, работает в заднем, хотя больше ничего не менялось.
Совет
Держите карту на отдельном USB-контроллере
Делить контроллер с простаивающей клавиатурой ничего не стоит, а вот с веб-камерой, внешним диском, картой захвата или USB-ЦАПом — стоит реальной пропускной способности. Вдобавок растёт нагрузка по прерываниям, причём ровно в тот момент, когда ридер находится посреди передачи. На машинах с несколькими задними портами их обычно разносят по нескольким контроллерам. На практике цель такая: подключить карту в порт, контроллер которого больше ничем требовательным не занят, а прожорливую периферию держать на других портах. По той же причине отключение всех лишних устройств перед тестом скорости чтения — не пустая формальность: это меняет результат.
Как проверить согласованную скорость порта
Делайте это на втором ПК, когда карта подключена, а игровой ПК включён. Цель — убедиться, что соединение поднялось как USB 3 и не откатилось молча на более низкую скорость.
- Откройте «Диспетчер устройств» (Device Manager) на втором ПК
- В меню «Вид» (View) выберите «Устройства по подключению» (Devices by connection): список перерисуется в виде реального дерева
- Пройдите по дереву от хост-контроллера через корневой хаб до своего устройства и отметьте каждый хаб по пути как уровень, который можно убрать
- Переключите «Вид» обратно на «Устройства по типу» (Devices by type) и раскройте «Контроллеры USB» (Universal Serial Bus controllers)
- Щёлкните правой кнопкой по устройству FTDI или USB-мосту, выберите «Свойства» (Properties) и откройте вкладку «Сведения» (Details)
- В выпадающем списке «Свойство» (Property) выберите «Родитель» (Parent): там указано устройство, которое стоит прямо над этим в дереве USB
- Чтобы узнать скорость напрямую, установите Windows SDK с компонентом Debugging Tools, запустите USBView и выберите устройство, чтобы посмотреть скорость шины. SuperSpeed означает, что связь USB 3 поднялась, а High — что она откатилась до USB 2
- Если скорость не та, сначала поменяйте кабель, затем порт, затем уберите всё промежуточное и проверяйте скорость заново после каждого отдельного изменения
Отключите USB selective suspend через powercfg
USB selective suspend (временное отключение USB-порта) позволяет драйверу хаба обесточить порт, который тот считает простаивающим. Для клавиатуры это экономия энергии, а для DMA-карты — устройство, которое пропадает, пока вы не смотрите. GUID ниже — это стандартная подгруппа параметров USB и сам параметр selective suspend, а значение 0 его отключает. Выполняйте эти команды в командной строке от имени администратора и только на ВТОРОМ ПК.
powercfg /setacvalueindex SCHEME_CURRENT 2a737441-1930-4402-8d77-b2bebba308a3 48e6b7a6-50f5-4782-a5d4-53bb8f07e226 0
powercfg /setdcvalueindex SCHEME_CURRENT 2a737441-1930-4402-8d77-b2bebba308a3 48e6b7a6-50f5-4782-a5d4-53bb8f07e226 0
powercfg /setactive SCHEME_CURRENT
powercfg /query SCHEME_CURRENT 2a737441-1930-4402-8d77-b2bebba308a3Внимание
Выключите экономию питания USB и в Диспетчере устройств
Отключить selective suspend в схеме питания необходимо, но часто этого мало. У устройств «Корневой USB-концентратор» (USB Root Hub) и «USB-концентратор» (USB Hub) в Диспетчере устройств тоже может быть своя вкладка «Управление электропитанием» (Power Management), хотя она есть не у каждого хаба. Там, где вкладка есть, флажок «Разрешить отключение этого устройства для экономии энергии» по умолчанию стоит, так что снимите его на каждом хабе по пути. Если карта всё равно пропадает после простоя, хотя обе настройки изменены, подозревайте кабель или порт, прежде чем подозревать карту.
Частые проблемы с USB и их решения
Каждая строка соответствует симптому, который люди часто ищут. Идите по списку сверху вниз: каждое следующее решение обходится дороже предыдущего.
| Симптом | Вероятная причина | Решение |
|---|---|---|
| Устройство показывает скорость High вместо SuperSpeed | Кабель USB 2 или кабель только для зарядки, либо порт, который выглядит как USB 3, но им не является | Поставьте кабель USB 3 с передачей данных, затем перейдите в порт, который по документации платы значится как USB 3. После каждого изменения снова проверяйте показанную скорость |
| Скорость чтения проседает всякий раз, когда работает веб-камера или внешний диск | Оба устройства сидят за одним хост-контроллером и делят его пропускную способность | Переключите другое устройство в порт на другом контроллере или отключите его на время сессии |
| Устройство пропадает после нескольких минут бездействия | USB selective suspend или корневой USB-концентратор, которому всё ещё разрешено отключаться | Отключите USB selective suspend в схеме питания, затем снимите флажок управления питанием на каждом хабе по пути, где он есть |
| Работает в одном заднем порту и не работает в соседнем | Эти два порта висят на разных контроллерах, и только у одного исправный драйвер и достаточный запас по питанию | Оставьте карту в рабочем порту и пометьте его: порты не взаимозаменяемы, даже если стоят рядом |
| Всё стабильно, пока где-нибудь в машине не появляется док-станция или хаб | Хаб добавил уровень и при любом изменении заново согласует общий восходящий канал | Навсегда уберите док-станцию с пути карты и используйте её только для мыши, клавиатуры и монитора |
| Unknown USB device, descriptor request failed (в русской Windows — «Сбой запроса дескриптора устройства») | Соединение настолько нестабильно, что устройство не успевает определиться в системе (пройти enumeration): обычно виноват кабель, иногда повреждённый разъём | Попробуйте короткий заведомо исправный кабель в другом заднем порту, а если заведомо исправный кабель не работает на двух контроллерах, подозревайте разъём на карте |
Вопросы про USB
Можно ли взять хаб с внешним питанием, если портов действительно не хватает?
Для периферии — да, а для карты по умолчанию — нет. Если другого выхода нет, используйте хаб с внешним питанием, к которому больше ничего не подключено, и прогоните тест скорости чтения, прежде чем ему доверять.
Важна ли длина кабеля?
Да: запас по качеству сигнала USB 3 уменьшается с длиной кабеля, и дешёвый длинный кабель — частая причина периодических отвалов. Берите самый короткий кабель, который свободно дотягивается.
Как узнать, какие порты делят один контроллер?
В Диспетчере устройств выберите «Вид», затем «Устройства по подключению», чтобы увидеть реальное дерево: всё, что находится под одним хост-контроллером, делит этот контроллер. USBView показывает то же дерево вместе со скоростями.
А порт USB 2 вообще заработает?
Устройство, как правило, определится, но пропускная способность будет сильно урезана, так что считайте связь по USB 2 результатом диагностики, а не конфигурацией, которую стоит оставлять.
Помогает ли отключить другие USB-устройства в Диспетчере устройств?
Редко. Надёжнее физически вытащить их из портов, и вернуть всё обратно так же просто. А после программного отключения у вас остаётся машина, особенности поведения которой потом придётся держать в голове.
Источники
Помимо двух указанных источников, всё про задние порты, общие контроллеры и отвалы взято из замеров команды на собственных машинах.
- 01Windows debugging tools (Microsoft)
откуда берётся USBView — утилита, которой в этом гайде проверяют согласованную скорость порта
learn.microsoft.com
- 02USB device descriptors (Microsoft Learn)
что такое дескриптор устройства — именно его чтение не проходит при ошибке запроса дескриптора
learn.microsoft.com
Читать дальше
Не получилось? Откройте тикет в Discord
Все гайды