Поиск USB устройства

Drivers for periphery equipment
  • Контроллеры называются *HCI, не CHI.

    Если в системе есть USB3-контроллер XHCI, то устройства, подключённые к его портам, он не отдаст другим контроллерам. Часто бывает так, что в системе некоторые из портов отведены под XHCI-контроллер, некоторые - под EHCI. В таком случае через EHCI будут в принципе видны только некоторые устройства - те, которые подключены к отведённым под него портам.

    EHCI сам по себе умеет обрабатывать только устройства на скорости High-Speed, USB2. Устройства Low-Speed и Full-Speed он делегирует USB1-контроллерам-компаньонам UHCI либо OHCI. Бит Port Owner отвечает как раз за делегирование - если он 1, то устройство делегировано компаньону, EHCI-контроллер про него забыл.

    Есть трюк, позволяющий избежать включения UHCI/OHCI-контроллеров в систему с EHCI: устройства подключены не напрямую к контроллеру, а через виртуальный хаб. Виртуальный хаб всегда работает на High-Speed, его делегировать не нужно, компаньоны не нужны. Этот трюк особенно любит Intel. Твоя конфигурация, похоже, именно такая - только один порт connected, на нём висит виртуальный хаб, всё остальное - не считая устройств, подключённых к XHCI-портам - висит на портах виртуального хаба. Которых ни в каких регистрах просто не видно.

    По регистрам контроллера можно определить только базовые вещи - подключено устройство или нет, и на какой скорости оно подключено. Устройство, подключённое к EHCI, может работать только на High-Speed, в регистрах OHCI и UHCI есть отдельный бит Low-Speed. Вся информация о том, что это за устройство, хранится только в структурах операционной системы.

    В винде иерархию подключённых USB-устройств показывает USBView из Debugging Tools. В линуксе - lsusb -t и lsusb -v.
    Сделаем мир лучше!
  • С *CHI я что-то погорячился :roll:
    В моем случае, видимо, XHCI ничего не забирает себе.
    Тогда есть другой вопрос, если я сам сформирую QHead и QTD к какому либо устройству, допустим к мыши, и вставлю в периодическую очередь контроллера, имеет ли смысл делать их LS или FS? Или так как хаб HS-устройство, они все равно будут преобразованы в HS?
    Attachments
    Безымянный.png
    Безымянный.png (72.46 KiB)
    Viewed 6317 times
  • В Queue Head у EHCI есть двухбитовое поле Endpoint Speed, его нужно заполнять в соответствии со скоростью конечного устройства. Для LS и FS-устройств нужно ещё заполнить адрес на шине последнего HS-хаба на пути к устройству и порт на этом хабе. Дальше контроллер с хабом сами разберутся.
    Сделаем мир лучше!
  • Who is online

    Users browsing this forum: No registered users and 2 guests