Не все устройства USB распознаются при подключении к большому концентратору USB
Для разработки я купил USB-концентратор с 28 USB-концентраторами: Manhattan MondoHub II. Устройство питается от внешнего источника питания, достаточного для моего случая использования.
На USB-концентраторе подключено 15 плат разработки (платы STMicro Nucleo). Обычно, когда вы подключаете плату разработчика к USB-порту, микросхема ST-Link v2 предоставляет флэш-память основного микроконтроллера в качестве USB-накопителя, на котором вы можете перетаскивать файл прошивки. Затем плата прошивается этой прошивкой. Мне нужно их прошить автоматически. Таким образом, я подключаю каждую плату к концентратору и запускаю скрипт, который все мигает.
Проблема в том, что не все 15 подключенных устройств распознаются. Только 11 из них. dmesg
выдает ошибки о том, что хост-контроллеру USB не хватает ресурсов.
Внутренне USB-концентратор, похоже, состоит из нескольких USB-концентраторов.
dmesg
когда я подключаю USB-концентратор, устройства не подключаются:
[269831.218406] usb 2-3: new high-speed USB device number 91 using xhci_hcd
[269831.369806] usb 2-3: New USB device found, idVendor=2109, idProduct=2811
[269831.369813] usb 2-3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[269831.369817] usb 2-3: Product: USB2.0 Hub
[269831.369821] usb 2-3: Manufacturer: VIA Labs, Inc.
[269831.370918] hub 2-3:1.0: USB hub found
[269831.371195] hub 2-3:1.0: 4 ports detected
[269831.678404] usb 2-3.1: new high-speed USB device number 92 using xhci_hcd
[269831.790645] usb 2-3.1: New USB device found, idVendor=1a40, idProduct=0201
[269831.790650] usb 2-3.1: New USB device strings: Mfr=0, Product=1, SerialNumber=0
[269831.790654] usb 2-3.1: Product: USB 2.0 Hub [MTT]
[269831.791150] hub 2-3.1:1.0: USB hub found
[269831.791177] hub 2-3.1:1.0: 7 ports detected
[269831.886375] usb 2-3.2: new high-speed USB device number 93 using xhci_hcd
[269831.998500] usb 2-3.2: New USB device found, idVendor=1a40, idProduct=0201
[269831.998504] usb 2-3.2: New USB device strings: Mfr=0, Product=1, SerialNumber=0
[269831.998506] usb 2-3.2: Product: USB 2.0 Hub [MTT]
[269831.998942] hub 2-3.2:1.0: USB hub found
[269831.998964] hub 2-3.2:1.0: 7 ports detected
[269832.090378] usb 2-3.3: new high-speed USB device number 94 using xhci_hcd
[269832.202654] usb 2-3.3: New USB device found, idVendor=1a40, idProduct=0201
[269832.202658] usb 2-3.3: New USB device strings: Mfr=0, Product=1, SerialNumber=0
[269832.202660] usb 2-3.3: Product: USB 2.0 Hub [MTT]
[269832.203232] hub 2-3.3:1.0: USB hub found
[269832.203258] hub 2-3.3:1.0: 7 ports detected
[269832.294400] usb 2-3.4: new high-speed USB device number 95 using xhci_hcd
[269832.415440] usb 2-3.4: New USB device found, idVendor=14cd, idProduct=8601
[269832.415449] usb 2-3.4: New USB device strings: Mfr=1, Product=3, SerialNumber=0
[269832.415454] usb 2-3.4: Product: USB 2.0 Hub
[269832.415458] usb 2-3.4: Manufacturer: USB Device
[269832.416721] hub 2-3.4:1.0: USB hub found
[269832.416838] hub 2-3.4:1.0: 4 ports detected
При отключении:
[269873.242343] usb 2-3: USB disconnect, device number 91
[269873.242349] usb 2-3.1: USB disconnect, device number 92
[269873.243596] usb 2-3.2: USB disconnect, device number 93
[269873.244672] usb 2-3.3: USB disconnect, device number 94
[269873.245725] usb 2-3.4: USB disconnect, device number 95
Затем я подключаю плату за платой. Доски с 1 по 11 распознаются и вызывают этот тип сообщений:
[269950.734094] usb 2-3.2.1: new full-speed USB device number 103 using xhci_hcd
[269950.856137] usb 2-3.2.1: New USB device found, idVendor=0483, idProduct=374b
[269950.856140] usb 2-3.2.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[269950.856142] usb 2-3.2.1: Product: STM32 STLink
[269950.856144] usb 2-3.2.1: Manufacturer: STMicroelectronics
[269950.856146] usb 2-3.2.1: SerialNumber: 0671FF323532543457250836
[269950.911199] usb-storage 2-3.2.1:1.1: USB Mass Storage device detected
[269950.911377] scsi host5: usb-storage 2-3.2.1:1.1
[269950.911809] cdc_acm 2-3.2.1:1.2: ttyACM2: USB ACM device
[269951.942405] scsi 5:0:0:0: Direct-Access MBED microcontroller 1.0 PQ: 0 ANSI: 2
[269951.942686] sd 5:0:0:0: Attached scsi generic sg4 type 0
[269951.942980] sd 5:0:0:0: [sdd] 2080 512-byte logical blocks: (1.06 MB/1.02 MiB)
[269951.943876] sd 5:0:0:0: [sdd] Write Protect is off
[269951.943887] sd 5:0:0:0: [sdd] Mode Sense: 03 00 00 00
[269951.944137] sd 5:0:0:0: [sdd] No Caching mode page found
[269951.944143] sd 5:0:0:0: [sdd] Assuming drive cache: write through
[269951.963779] sd 5:0:0:0: [sdd] Attached SCSI removable disk
Когда я подключаю 12-ю плату, она не распознается. Журнал:
[270155.277574] usb 2-3.2.6: new full-speed USB device number 112 using xhci_hcd
[270155.407457] usb 2-3.2.6: New USB device found, idVendor=0483, idProduct=374b
[270155.407464] usb 2-3.2.6: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[270155.407468] usb 2-3.2.6: Product: STM32 STLink
[270155.407472] usb 2-3.2.6: Manufacturer: STMicroelectronics
[270155.407476] usb 2-3.2.6: SerialNumber: 066DFF323532543457074843
[270155.408451] usb 2-3.2.6: Not enough host controller resources for new device state.
[270155.408681] usb 2-3.2.6: can't set config #1, error -12
Что тут происходит? Я ограничен протоколом USB, концентратором или ядром / драйверами?
Запуск Ubuntu Budgie '18.04.1 LTS (Bionic Beaver)' на Lenovo ThinkPad E550.
Получит больше журналов, если необходимо. Полный файл журнала: https://pastebin.com/BarBHwnc
2 ответа
Похоже, что это проблема с обоими моими ноутбуками / их чипсетом USB. Я переключился на настольный ПК, материнская плата которого имеет много USB-соединений.
Там Windows 10 и Linux (Debian 9) оба безошибочно распознавали каждое из 100 устройств (4 MondoHub II с 25 разработчиками каждое) без появления сообщения "Недостаточно ресурсов хост-контроллера".
Я столкнулся с той же проблемой на своем компьютере с Windows, и я считаю, что основная причина проблемы заключается в архитектуре USB и количестве хост-контроллеров USB, которые у вас есть и к которым вы подключены на вашем ПК. Эта статья базы знаний National Instruments является самым кратким объяснением, которое я нашел для этой проблемы.
Спецификация USB имеет фиксированные стандарты для своего протокола связи. Что касается перечисления и связи с USB-устройствами, то количество разрешенных USB-адресов и конечных точек определяется структурой USB Token Packet, как показано ниже:
{см. ссылку для изображения}
Поле адреса используется для представления физических USB-устройств. Поскольку его длина составляет 7 бит, один хост-контроллер USB может поддерживать до 127 (27 - 1 хост-контроллер) подключенных устройств. Подключенный концентратор USB считается как адрес устройства USB, и каждое подключенное к нему устройство идет к максимально допустимым адресам для этого одного хост-контроллера.
Точно так же поле Endpoint используется для маршрутизации данных определенных типов через шину USB, и они аналогичны портам в протоколе связи TCP/IP. Длина его поля составляет 4 бита, что позволяет использовать 16 (24) адресуемых конечных точек. Однако, поскольку конечные точки являются однонаправленными (как в устройстве USB, так и вне его), одно устройство USB может выделить до 32 конечных точек. Общее количество разрешенных конечных точек USB зависит от хост-контроллера USB и его встроенного программного обеспечения, однако это число может быть меньше 100 допустимых конечных точек USB для некоторых контроллеров.
Поэтому, если USB-устройство пытается добавить хост-контроллер, и это приведет к превышению количества адресов или конечных точек, будет выдана вышеупомянутая ошибка ресурса Windows. Поскольку некоторые устройства могут использовать до 32 конечных точек на устройство, вы можете превысить число допустимых конечных точек при подключении устройств NI с концентратором USB. Кроме того, собственные внутренние USB-порты некоторых компьютеров и другие внутренние устройства (такие как беспроводные сетевые карты, аудио, камеры и т. Д.) Связаны с одним хост-контроллером USB, что может привести к довольно быстрому превышению ресурсов USB.
С учетом вышесказанного, эта ссылка объясняет множество различных способов увидеть количество USB-устройств и контроллеров на вашем ПК.