Udostępnij przez


Architektura stosu sterowników dwufunkcyjnych USB

Kontrolery roli podwójnej USB są teraz obsługiwane w systemie Windows, począwszy od systemu Windows 10 dla wersji klasycznych (Home, Pro, Enterprise i Education) i Windows 10 Mobile.

Wprowadzenie

Funkcja podwójnej roli USB umożliwia systemowi być urządzeniem USB lub hostem USB. Szczegółową specyfikację dla USB z podwójną rolą można znaleźć na stronie informacji USB-IF USB On-The-Go.

Funkcja podwójnej roli umożliwia urządzeniu przenośnemu, takiemu jak telefon lub tablet, określenie się jako urządzenie lub host.

Gdy urządzenie przenośne jest w trybie funkcji, jest dołączone do komputera lub innego urządzenia, które działa jako host dołączonego urządzenia przenośnego.

Gdy urządzenie przenośne jest w trybie hosta, użytkownicy mogą dołączać swoje urządzenie, takie jak mysz lub klawiatura. W takim przypadku urządzenie przenośne hostuje dołączone urządzenia.

Zapewniając obsługę podwójnej roli USB w systemie Windows 10, oferujemy następujące korzyści:

  • Łączność z urządzeniami peryferyjnymi przenośnymi za pośrednictwem portu USB, która oferuje większą przepustowość danych w porównaniu z protokołami bezprzewodowymi, takimi jak Bluetooth.
  • Opcja ładowania baterii przez USB, gdy jest podłączona do innych urządzeń USB i komunikowania się z innymi urządzeniami USB (o ile jest wymagana obsługa sprzętu).
  • Umożliwianie klientom, którzy najprawdopodobniej będą właścicielami urządzenia przenośnego, takiego jak telefon inteligentny dla całej swojej pracy. Ta funkcja zapewnia lepszą produktywność w scenariuszu dokowania przewodowego, w którym urządzenie przenośne jest zadokowane i w ten sposób obsługuje urządzenia peryferyjne.

W poniższej tabeli przedstawiono listę sterowników klas hostów, które są dostępne w wersjach klasycznych i mobilnych systemu Windows.

Sterowniki klas hostów USB Windows 10 Mobile Windows 10 dla wersji desktopowych
Koncentratory USB (USBHUB) Tak Tak (od systemu Windows 2000)
HID — Klawiatura/myszy (HidClass, KBDCLass, MouClass, KBDHid, MouHid) Tak Tak (od systemu Windows 2000)
Pamięć masowa USB (Bulk i UASP) Tak Tak (od systemu Windows 2000)
Ogólny Sterownik Hosta USB (WinUSB) Tak Tak (od systemu Windows Vista)
Usb Audio in / out (USBAUDIO) Tak Tak (od systemu Windows XP)
Urządzenia szeregowe (USBSER) Tak Tak (od systemu Windows 10)
Bluetooth (BTHUSB) Tak Tak (od systemu Windows XP)
Drukowanie (usbprint) Nie. Tak (od systemu Windows XP)
Skanowanie (USBSCAN) Nie. Tak (od systemu Windows 2000)
WebCam (USBVIDEO) Nie. Tak (od systemu Windows Vista)
Protokół transferu multimediów (inicjator MTP) Nie. Tak (od systemu Windows Vista)
Remote NDIS (RNDIS) Nie. Tak (od systemu Windows XP)
Adres IP przez USB (IPoverUSB) Nie. Tak (nowy dla systemu Windows 10)

Sterowniki klas w tabeli zostały wybrane na podstawie telemetrii klasy urządzenia i na podstawie kluczowych scenariuszy wybranych dla systemu Windows 10. Planujemy uwzględnienie ograniczonej liczby sterowników hosta innych firm w celu obsługi kluczowych urządzeń w systemie Windows 10 Mobile. W przypadku systemu Windows 10 dla wersji klasycznych te sterowniki są dostępne w witrynie internetowej producenta OEM lub za pośrednictwem usługi Windows Update (WU).

Dla systemu Windows 10 Mobile, sterowniki innych firm, które nie są dołączone domyślnie, nie są dostępne w Windows Update. Zajętość dysku przez stos hosta USB + HID jest niewielka. Dlatego nie wszystkie sterowniki klasowe oraz tylko kilka sterowników firm trzecich są domyślnie zintegrowane z systemem Windows 10 Mobile. OEM, który chce udostępnić sterowniki firm trzecich, może użyć pakietu BSP, aby dodać je do obrazów systemu operacyjnego na swoich urządzeniach przenośnych.

W poniższej tabeli przedstawiono sterowniki klas funkcji, które są dostępne w wersjach mobilnych systemu Windows.

Uwaga / Notatka

Sterowniki funkcji nie są dostępne w systemie Windows 10 dla edycji komputerowych.

Sterowniki klas funkcji USB Windows 10 Mobile Windows 10 dla wersji desktopowych Notatki
Odpowiednik protokołu MTP (Media Transfer Protocol) Tak Nie. Brak scenariuszy dla MTP responder na komputerze stacjonarnym. Scenariusze P2P między systemami komputerowymi zostały włączone za pośrednictwem Easy-MigCable przez WinUSB.
Wyświetlanie wideo (vidstream) Tak Nie.
Ogólny sterownik funkcji USB (GenericUSBFn) Tak Nie. IPoverUSB i inne scenariusze flashowania związane z pulpitami potrzebują tego sterownika.

Monitorujemy dane dotyczące podłączania urządzeń, aby ustalić, czy musimy zapewnić wsparcie dla sterowników klasowych w miarę aktualizowania się listy popularności klas urządzeń.

Implementacja sterownika

Sterownik przełącznika roli USB (URS) firmy Microsoft umożliwia implementatorowi systemu korzystanie z funkcji USB o podwójnej roli dla swojej platformy.

Sterownik URS ma na celu zapewnienie funkcji podwójnej roli dla platform korzystających z jednego kontrolera USB, który może działać zarówno w rolach hosta, jak i peryferyjnych na jednym porcie. Rola peryferyjna jest również nazywana rolą funkcji. Sterownik URS zarządza bieżącą rolą portu. Sterownik URS ładuje i rozładowuje odpowiednie stosy oprogramowania na podstawie zdarzeń sprzętowych z platformy sprzętowej.

Na systemie z gniazdem mikro-AB USB, sterownik korzysta z przerwań sprzętowych, które wskazują stan pinu ID w złączu. Ten numer PIN służy do wykrywania, czy kontroler musi przyjąć rolę hosta, czy rolę funkcji w połączeniu. Aby uzyskać więcej informacji, zobacz specyfikację usb on-The-Go. W systemach z łączem USB Type-C implementacja OEM ma dostarczyć sterownik klienta złącza, korzystając z interfejsów programowania sterowników złącza USB Type-C. Sterownik klienta komunikuje się z udostępnionym przez firmę Microsoft rozszerzeniem klasy Menedżera łącznika USB (UcmCx), aby zarządzać wszystkimi aspektami łącznika Type-C USB, takimi jak wykrywanie CC, obsługa komunikatów PD i inne. W przypadku przełączania ról sterownik klienta komunikuje stan łącznika Type-C USB do sterownika URS.

Na poniższym diagramie przedstawiono stos sterowników oprogramowania USB dla kontrolera z podwójną rolą, który używa sterownika URS.

architektura stosu sterowników przełączania ról USB.

Sterownik URS nigdy nie ładuje jednocześnie stosów funkcji i hostów pokazanych na powyższym diagramie. Sterownik URS ładuje stos funkcji albo stos hosta, w zależności od roli, jaką pełni kontroler USB.

Wymagania sprzętowe

Jeśli tworzysz platformę, która korzysta z sterownika URS, aby zapewnić funkcję USB o podwójnej roli, należy spełnić następujące wymagania sprzętowe:

  • Kontroler USB

    Te sterowniki są dostarczane przez firmę Microsoft jako sterowniki wbudowane.

    Synopsys DesignWare Core USB 3.0 controller. Inbox INF: UrsSynopsys.inf.

    Chipidea High-Speed USB OTG Controller. Inbox INF: UrsChipidea.inf.

  • Przerwania pinu ID

    • Co najmniej jedno przerwanie ID pinu dla systemów innych niż USB Type-C jest implementowane na jeden z dwóch sposobów:

      1. Dwa przerwania wyzwalane przez krawędź: jeden, który jest uruchamiany, gdy numer PIN identyfikatora łącznika jest uziemiony, a drugi wyzwalany, gdy numer PIN identyfikatora jest zmienny.
      2. Jedno aktywne-oba przerwanie, które jest na poziomie aktywnym, gdy numer PIN identyfikatora jest uziemiony.
  • Enumeracja kontrolera USB

    Kontroler podwójnej roli USB musi być enumerowany przez ACPI.

  • Obsługa oprogramowania

    Sterownik URS oczekuje interfejsu oprogramowania, który umożliwia sterowanie VBus za pośrednictwem złącza. Ten interfejs jest specyficzny dla układu SoC. Aby uzyskać więcej informacji, skontaktuj się z dostawcą SoC.

Te funkcje USB OTG nie są obsługiwane w systemie Windows:

  • Wykrywanie adaptera ładowarki do akcesoriów (ACA).
  • Protokół SRP (Session Request Protocol).
  • Protokół negocjacji hosta (HNP).
  • Protokół wykrywania dołączania (ADP).

Konfiguracja systemu ACPI

Aby można było używać sterownika URS, należy utworzyć plik definicji ACPI dla systemu. Ponadto należy wziąć pod uwagę pewne zagadnienia związane ze sterownikiem.

Oto przykładowa definicja ACPI dla kontrolera podwójnej roli USB.

//
// You may name the device whatever you want; we don't depend on it being called 'URS0'.
//
Device(URS0)
{
    //
    // Replace with your own hardware ID. Microsoft will add it to the inbox INF,
    // or you may choose to author a custom INF that uses Needs & Includes directives
    // to include sections from the inbox INF.
    //
    Name(_HID, "ABCD1234")

    Name(_CRS, ResourceTemplate() {
        //
        // The register space for the controller must be defined here.
        //
        Memory32Fixed(ReadWrite, 0xf1000000, 0xfffff)


        //
        // The ID pin interrupts, if you are using two edge-triggered interrupts.
        //
        GpioInt(Edge, ActiveHigh, Exclusive, PullUp, 0, "\\_SB.GPI0", 0, ResourceConsumer, , ){0x1001}
        GpioInt(Edge, ActiveHigh, Exclusive, PullUp, 0, "\\_SB.GPI0", 0, ResourceConsumer, , ){0x1002}

        //
        // Following is an example of a single active-both interrupt.
        //
        // GpioInt(Edge, ActiveBoth, Exclusive, PullUp, 0, "\\_SB.GPI0", 0, ResourceConsumer, , ){0x12}
        //

        //
        // For a Type-C platform, you do not need to specify any interrupts here.
        //
    })

    //
    // This child device represents the USB host controller. This device node is in effect
    // when the controller is in host mode.
    // You may name the device whatever you want; we don't depend on it being called 'USB0'.
    //
    Device(USB0)
    {
        //
        // The host controller device node needs to have an address of '0'
        //
        Name(_ADR, 0)
        Name(_CRS, ResourceTemplate() {

            //
            // The controller interrupt.
            //
            Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive, , , ){0x10}
        })
    }

    //
    // This child device represents the USB function controller. This device node is in effect
    // when the controller is in device/function/peripheral mode.
    // You may name the device whatever you want; we don't depend on it being called 'UFN0'.
    //
    Device(UFN0)
    {
        //
        // The function controller device node needs to have an address of '1'
        //
        Name(_ADR, 1)
        Name(_CRS, ResourceTemplate() {

            //
            // The controller interrupt (this could be the same as the one defined in
            // the host controller).
            //
            Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive, , , ){0x11}
        })
    }
}

Poniżej przedstawiono kilka wyjaśnień głównych sekcji pliku ACPI:

  • URS0 to definicja ACPI dla kontrolera podwójnej roli USB. Sterownik URS ładuje się na tym urządzeniu ACPI.

  • USB0 i UFN0 są urządzeniami podrzędnymi wewnątrz zakresu URS0. USB0 i UFN0 reprezentują dwa stosy podrzędne wyliczane przez sterownik URS oraz odpowiednio stosy hosta i funkcji. _ADR to metoda, za pomocą której ACPI pasuje te definicje urządzeń z obiektami urządzenia tworzonymi przez sterownik URS.

  • Jeśli kontroler używa tego samego przerwania dla obu ról, to to samo przerwanie kontrolera można opisać na obu urządzeniach podrzędnych. Nawet w takim przypadku przerwanie można nadal opisać jako „Ekskluzywne”.

  • W razie potrzeby możesz dodawać zmiany do tego pliku definicji ACPI. Można na przykład ustawić inne niezbędne metody lub właściwości na dowolnym urządzeniu w pliku definicji ACPI. Takie dodatki nie zakłócają działania sterownika URS. Wszelkie inne zasoby wymagane w dowolnym ze stosów można również opisać w _CRS odpowiedniego urządzenia.

Sterownik URS przypisuje identyfikatory sprzętu do stosów hostów i funkcji. Te identyfikatory sprzętowe pochodzą z identyfikatora sprzętowego urządzenia URS. Jeśli na przykład masz urządzenie URS, którego identyfikator sprzętu to ACPI\ABCD1234, sterownik URS tworzy identyfikatory sprzętowe dla hosta i stosów funkcji w następujący sposób:

  • Stos hosta: URS\ABCD1234&HOST

  • Stos funkcji: URS\ABCD1234&FUNCTION

Pakiety instalacyjne sterowników INF

W razie potrzeby pakiety sterowników innych firm mogą mieć zależność od tego schematu.

Jeśli jesteś niezależnym dostawcą sprzętu (IHV) lub producentem OEM i rozważasz dostarczenie własnego pakietu sterowników, oto kilka rzeczy do rozważenia:

  • Pakiet sterowników URS

    Identyfikator sprzętu dla kontrolera z podwójną rolą na każdej platformie jest dodawany do skrzynki odbiorczej INF dla urS. Jeśli jednak z jakiegoś powodu nie można dodać identyfikatora, IHV/OEM może dostarczyć pakiet sterowników z INF, który wymaga lub zawiera wbudowany INF i pasuje do ich identyfikatora sprzętu.

    Ten pakiet sterowników jest niezbędny, gdy IHV/OEM wymaga, aby sterownik filtru był obecny w stosie sterowników.

  • Pakiet sterowników hosta

    Wymagany jest pakiet sterowników IHV/OEM, który wymaga/zawiera skrzynkę odbiorczą usbxhci.inf i pasuje do identyfikatora sprzętu urządzenia hosta. Dopasowanie identyfikatora sprzętu będzie oparte na schemacie opisanym w poprzedniej sekcji.

    Ten pakiet sterowników jest niezbędny, gdy IHV/OEM wymaga, aby sterownik filtru był obecny w stosie sterowników.

    Trwają prace nad przypisaniem sterownika URS do identyfikatora zgodnego z standardem XHCI dla urządzenia hosta.

  • Pakiet sterowników funkcji

    Wymagany jest pakiet sterowników IHV/OEM, który wymaga/zawiera skrzynkę odbiorczą Ufxsynopsys.inf i odpowiada identyfikatorowi sprzętu urządzenia peryferyjnego. Dopasowanie identyfikatora sprzętu będzie oparte na schemacie opisanym w poprzedniej sekcji.

    IHV/OEM może również dołączyć sterownik filtru do pakietu sterowników.

Zobacz także