Arsitektur Tumpukan Driver Peran Ganda USB

Pengontrol Peran Ganda USB sekarang didukung di Windows, dimulai dengan Windows 10 untuk edisi desktop (Home, Pro, Enterprise, dan Education) dan Windows 10 Mobile.

Pengantar

Fitur Peran Ganda USB memungkinkan sistem menjadi perangkat USB atau host USB. Spesifikasi terperinci untuk Usb Dual Role dapat ditemukan di USB-IF USB pada halaman informasi Go.

Poin penting di sini adalah bahwa fitur peran ganda memungkinkan perangkat seluler, seperti ponsel, phablet atau tablet, untuk menunjuk dirinya sebagai perangkat atau host.

Saat perangkat seluler dalam mode fungsi , perangkat tersebut dilampirkan ke PC atau beberapa perangkat lain yang bertindak sebagai host untuk perangkat seluler yang terpasang.

Saat perangkat seluler dalam mode host , pengguna dapat melampirkan perangkat mereka, seperti mouse atau keyboard, ke perangkat tersebut. Dalam hal ini perangkat seluler menghosting perangkat yang terpasang.

Dengan memberikan dukungan untuk peran ganda USB dalam Windows 10, kami memberikan manfaat berikut:

  • Konektivitas ke perangkat periferal seluler melalui USB, yang menawarkan bandwidth data yang lebih besar dibandingkan dengan protokol nirkabel seperti Bluetooth.
  • Opsi pengisian daya baterai melalui USB saat terhubung dan berkomunikasi dengan perangkat USB lainnya (selama dukungan perangkat keras yang diperlukan ada).
  • Aktifkan pelanggan yang kemungkinan besar akan memiliki perangkat seluler, seperti ponsel pintar untuk semua pekerjaan mereka. Fitur ini akan memungkinkan peningkatan produktivitas dalam skenario docking kabel, di mana perangkat seluler berlabuh dan dengan demikian menghosting perangkat periferal.

Tabel berikut ini memperlihatkan daftar driver kelas host yang tersedia di SKU desktop dan seluler Windows.

Driver kelas Host USB Windows 10 Mobile Windows 10 untuk edisi desktop
Usb Hubs (USBHUB) Ya Ya (Sejak Windows 2000)
HID - Keyboard/Tikus (HidClass, KBDCLass, MouClass, KBDHid, MouHid) Ya Ya (Sejak Windows 2000)
Penyimpanan Massal USB (UASP & Massal) Ya Ya (Sejak Windows 2000)
Driver Host USB Generik (WinUSB) Ya Ya (Sejak Windows Vista)
Audio USB masuk / keluar (USBAUDIO) Ya Ya (Sejak Windows XP)
Perangkat Serial (USBSER) Ya Ya (Sejak Windows 10)
Bluetooth (BTHUSB) Ya Ya (Sejak Windows XP)
Cetak (usbprint) Tidak Ya (Sejak Windows XP)
Pemindaian (USBSCAN) Tidak Ya (Sejak Windows 2000)
WebCam (USBVIDEO) Tidak Ya (Sejak Windows Vista)
Protokol Transfer Media (Inisiator MTP) Tidak Ya (Sejak Windows Vista)
NDIS Jarak Jauh (RNDIS) Tidak Ya (Sejak Windows XP)
IP melalui USB (IPoverUSB) Tidak Ya (Baru untuk Windows 10)

Driver Kelas dalam tabel dipilih berdasarkan telemetri kelas perangkat, dan berdasarkan skenario utama yang dipilih untuk Windows 10. Kami berencana untuk menyertakan sejumlah kotak masuk terbatas, driver Host pihak ke-3, untuk mendukung perangkat utama di Windows 10 Mobile. Dan untuk Windows 10 untuk edisi desktop, driver ini akan tersedia baik di situs web OEM atau melalui Windows Update (WU).

Untuk Windows 10 Mobile, driver pihak ke-3 yang tidak disertakan dalam kotak masuk tidak akan tersedia di WU. Jejak disk tumpukan Host USB + HID tetap kecil. Itulah sebabnya tidak semua driver kelas, dan sangat sedikit driver pihak ke-3 yang disertakan dalam kotak masuk untuk Windows 10 Mobile. OEM yang ingin membuat driver pihak ke-3 tersedia dapat menggunakan Paket Dukungan Papan (BSP) untuk menambahkannya ke gambar OS untuk perangkat seluler mereka.

Tabel berikut menunjukkan driver kelas fungsi yang tersedia di SKU seluler Windows.

Catatan

Driver fungsi tidak tersedia di Windows 10 untuk edisi desktop.

Driver kelas Fungsi USB Windows 10 Mobile Windows 10 untuk edisi desktop Catatan
Protokol Transfer Media (Penanggap MTP) Ya Tidak Tidak ada skenario untuk responden MTP di Desktop. Skenario P2P antara sistem Desktop diaktifkan melalui Easy-MigCable melalui WinUSB.
Video Ditampilkan keluar (vidstream) Ya Tidak
Driver Fungsi USB Generik (GenericUSBFn) Ya Tidak Ini akan diperlukan oleh IPoverUSB dan skenario berkedip desktop lainnya.

Kami akan memantau data lampiran perangkat, untuk memberi tahu kami apakah kami perlu memberikan dukungan driver kelas tambahan, karena daftar popularitas kelas perangkat berubah dari waktu ke waktu.

Implementasi driver

Driver Microsoft USB Role Switch (URS) memungkinkan pelaksana sistem untuk memanfaatkan kemampuan USB peran ganda platform mereka.

Driver URS dimaksudkan untuk menyediakan fungsionalitas peran ganda untuk platform yang menggunakan pengontrol USB tunggal yang dapat beroperasi dalam peran host dan periferal melalui satu port. Peran periferal juga dikenal sebagai peran fungsi. Driver URS mengelola peran port saat ini, dan pemuatan dan pembongkaran tumpukan perangkat lunak yang sesuai, berdasarkan peristiwa perangkat keras dari platform.

Pada sistem yang memiliki konektor USB micro-AB, driver menggunakan gangguan perangkat keras yang menunjukkan status pin ID pada konektor. Pin ini digunakan untuk mendeteksi apakah pengontrol perlu mengambil peran host atau peran fungsi dalam koneksi. Untuk informasi selengkapnya, lihat spesifikasi USB On-The-Go. Pada sistem dengan konektor USB Type-C, pelaksana OEM diharapkan menyediakan driver klien konektor dengan menggunakan antarmuka pemrograman driver konektor USB Type-C. Driver klien berkomunikasi dengan ekstensi kelas Manajer konektor USB yang disediakan Microsoft (UcmCx) untuk mengelola semua aspek konektor USB Type-C, seperti deteksi CC, pesan PD, dan lainnya. Untuk peralihan peran, driver klien mengkomunikasikan status konektor USB Type-C ke driver URS.

Diagram berikut menunjukkan tumpukan driver perangkat lunak USB untuk pengontrol peran ganda yang menggunakan driver URS.

arsitektur tumpukan driver sakelar peran usb.

Perhatikan bahwa driver URS tidak akan pernah memuat tumpukan Fungsi dan Host yang ditunjukkan dalam diagram sebelumnya secara bersamaan. Driver URS akan memuat tumpukan Fungsi, atau tumpukan Host - tergantung pada peran pengontrol USB.

Persyaratan perangkat keras

Jika Anda mengembangkan platform yang akan memanfaatkan driver URS, untuk menyediakan fungsionalitas USB peran ganda, persyaratan perangkat keras berikut harus dipenuhi:

  • Pengontrol USB

    Driver ini disediakan oleh Microsoft sebagai driver dalam kotak.

    Sinopsis Pengontrol DesignWare Core USB 3.0. INF Kotak Masuk: UrsSynopsys.inf.

    Chipidea High-Speed Pengontrol OTG USB. INF Kotak Masuk: UrsChipidea.inf.

  • Interupsi pin ID

    Interupsi pin ID untuk sistem non-USB Type-C dapat diimplementasikan dengan salah satu dari dua cara:

    Dua interupsi yang dipicu tepi: salah satu yang menembak saat pin ID pada konektor dialihkan, dan satu lagi yang menembak saat pin ID mengambang.

    Satu interupsi aktif-keduanya yang berada pada tingkat aktif saat pin ID di-grounded.

  • Enumerasi pengontrol USB

    Pengontrol peran ganda USB harus dijumlahkan acpi.

  • Dukungan perangkat lunak

    Driver URS mengharapkan antarmuka perangkat lunak yang memungkinkan kontrol VBus melalui konektor. Antarmuka ini khusus SoC. Hubungi vendor SoC Anda untuk detail selengkapnya.

Fitur OTG USB ini tidak didukung di Windows:

  • Deteksi Adaptor Pengisi Daya Aksesori (ACA).
  • Protokol Permintaan Sesi (SRP).
  • Protokol Negosiasi Host (HNP).
  • Lampirkan Protokol Deteksi (ADP).

Konfigurasi Sistem ACPI

Untuk menggunakan driver URS, Anda harus membuat file definisi ACPI untuk sistem Anda. Selain itu, ada beberapa pertimbangan terkait driver yang harus Anda pertimbangkan.

Berikut adalah contoh definisi ACPI untuk pengontrol peran ganda 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}
        })
    }
}

Berikut adalah beberapa penjelasan untuk bagian utama file ACPI:

  • URS0 adalah definisi ACPI untuk pengontrol peran ganda USB. Ini adalah perangkat ACPI tempat driver URS akan dimuat.

  • USB0 dan UFN0 adalah perangkat anak di dalam cakupan URS0. USB0 dan UFN0 mewakili dua tumpukan anak yang akan dijumlahkan oleh driver URS, dan tumpukan host dan fungsi masing-masing. Perhatikan bahwa _ADR adalah sarana di mana ACPI cocok dengan definisi perangkat ini dengan objek perangkat yang dibuat driver URS.

  • Jika pengontrol menggunakan interupsi yang sama untuk kedua peran, gangguan pengontrol yang sama dapat dijelaskan di kedua perangkat anak. Bahkan dalam hal ini, interupsi masih dapat digambarkan sebagai "Eksklusif."

  • Anda dapat membuat penambahan ke file definisi ACPI ini sesuai kebutuhan. Misalnya, Anda dapat mengatur metode atau properti lain yang diperlukan pada salah satu perangkat dalam file definisi ACPI. Penambahan tersebut tidak akan mengganggu pengoperasian driver URS. Sumber daya tambahan apa pun yang diperlukan di salah satu tumpukan juga dapat dijelaskan dalam _CRS perangkat yang sesuai.

Driver URS menetapkan ID Perangkat Keras ke host dan tumpukan fungsi. ID Perangkat Keras ini berasal dari ID Perangkat Keras perangkat URS. Misalnya, jika Anda memiliki perangkat URS yang ID Perangkat Kerasnya acpi\ABCD1234, driver URS membuat ID Perangkat Keras untuk host dan tumpukan fungsi sebagai berikut:

  • Tumpukan host: URS\ABCD1234&HOST

  • Tumpukan fungsi: URS\ABCD1234&FUNCTION

Paket penginstalan driver INF

Paket driver pihak ketiga dapat mengambil dependensi pada skema ini, jika perlu.

Jika Anda adalah IHV atau OEM dan Anda berpikir untuk menyediakan paket driver Anda sendiri, berikut adalah beberapa hal yang perlu dipertimbangkan:

  • Paket driver URS

    Diharapkan bahwa ID Perangkat Keras untuk pengontrol peran ganda pada setiap platform akan ditambahkan ke INF kotak masuk untuk URS. Namun, jika karena alasan tertentu ID tidak dapat ditambahkan, IHV/OEM dapat menyediakan paket driver dengan INF yang Membutuhkan/Menyertakan INF kotak masuk dan cocok dengan ID Perangkat Keras mereka.

    Ini diperlukan dalam kasus di mana IHV/OEM memerlukan driver filter untuk hadir di tumpukan driver.

  • Paket driver host.

    Paket driver yang disediakan IHV/OEM yang Membutuhkan/Menyertakan usbxhci.inf kotak masuk dan cocok dengan ID Perangkat Keras perangkat host diperlukan. Kecocokan ID Perangkat Keras akan didasarkan pada skema yang dijelaskan di bagian sebelumnya.

    Ini diperlukan dalam kasus di mana IHV/OEM memerlukan driver filter untuk hadir di tumpukan driver.

    Ada pekerjaan yang sedang berlangsung untuk membuat driver URS menetapkan ID kompatibel XHCI untuk perangkat host.

  • Paket driver fungsi

    Paket driver yang disediakan IHV/OEM yang Membutuhkan/Menyertakan kotak masuk Ufxsynopsys.inf dan cocok dengan ID Perangkat Keras perangkat periferal diperlukan. Kecocokan ID Perangkat Keras akan didasarkan pada skema yang dijelaskan di bagian sebelumnya.

    IHV/OEM juga dapat menyertakan driver filter dalam paket driver.

Lihat juga

Referensi driver pengontrol peran ganda