Многие устройства USB 3.0 в одной Ubuntu через активный концентратор

Я попытался подключить несколько устройств с поддержкой USB 3.0 к моей машине с Ubuntu 12.04. Но обнаружил, что одновременно было видно не более 9 подключенных устройств. Я пытался отслеживать журналы ядра на /var/log/kern.log, где я узнал, что при подключении 10-го устройства, там была ошибка ниже:

это устройство не может найти достаточно свободных ресурсов, которые оно может использовать. (код 12)

Мой хост-контроллер USB:

Корпорация Intel Семейство наборов микросхем серии 8 /C220 USB xHCI (версия 05)

Некоторые форумы предлагают отключить поддержку USB 3.0, чтобы устройства работали в режиме USB 2.0, и это должно решить проблему. И это было правдой. Отключение поддержки xHCI в BIOS помогло мне.

Я предположил, что это должно быть ошибкой в ​​более старой установке Ubuntu 12.04 (или может быть драйвер usb). Поэтому я обновил свою систему до Ubuntu 16. Но здесь также существует та же проблема. Что делать, если я хочу использовать свои устройства с USB 3.0? Что если опция отключения поддержки xHCI в BIOS отсутствует на какой-либо материнской плате?

2 ответа

Решение

Контроллер имеет внутренние буферы, которые он выделяет для подключенных устройств с целью выполнения ввода и вывода. Эти буферы также называются ресурсами или конечными точками.

Более быстрые устройства должны иметь больше буферов, чтобы содержать больше данных. Это число может варьироваться в зависимости от устройства, но не более 32 конечных точек с 16 входами и 16 выходами на устройство.

Есть сообщения, что хост-контроллер Intel 8 Series USB 3.0 XHCI поддерживает только 96 конечных точек, и практические ограничения могут быть достигнуты ранее.

Из информации в вашем посте я бы предположил, что каждый диск USB3 использует 10 конечных точек, иначе. ресурсы, вероятно, 5 в и 5 из. Поэтому на 9 дисках использовалось 90 конечных точек, что нормально, но для 10 дисков требуется 100 конечных точек, что превышает ограничение 96, поэтому контроллер отправил код ошибки в операционную систему.

Когда вы ухудшили соединение с более медленным USB2, контроллер выделил гораздо меньше буферов для каждого устройства, поэтому вы можете подключить больше дисков.

Решением может быть добавление концентратора USB2 и установка на него дисков, для которых не требуется высокая скорость передачи.

Дальнейшее чтение:

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

Я тоже занимался этой проблемой, и мне потребовалось некоторое время, чтобы найти реальную проблему и пути ее решения. Это длинная страница, поэтому вы можете прочитать ее там http://marc.merlins.org/perso/linux/post_2018-12-20_Getting-Around-USB3-xhci-32-Device-Limit-_Max-number-of-devices-this-xHCI-host-supports-is-32_.html

В основном это сводится к этим вещам
1) существует ограничение 96 оконечных точек с USB3 (что означает только 32 устройства)
2) вы теряете дополнительные конечные точки из-за концентраторов, использование кабеля USB2 к концентратору USB3 дает вам несколько слотов назад
3) в более общем случае вам следует отключить USB3, если вы можете обойтись без него (удалите драйвер ядра USB3 или, если проще, отключите USB3 в своем BIOS). Использование чипа USB3 в режиме USB2 не помогает, вы должны отключить USB3, чтобы ваша материнская плата перенаправила порт на контроллер USB2, у которого нет этого предела 4), если вы не можете отключить USB3, получите карту USBe только с USB2 и тот действительно даст вам 120 устройств или около того.

Дополнительные ресурсы: https://www.spinics.net/lists/linux-usb/msg175224.html
https://forums.intel.com/s/question/0D50P00004905stSAA/hardware-limitations-on-usb-endpoints-xhci?language=en_US

Другие вопросы по тегам