Compartir a través de


Arquitectura de pila de controladores de rol dual USB

Ahora se admiten controladores de rol dual USB en Windows, a partir de Windows 10, para ediciones de escritorio (Home, Pro, Enterprise y Education) y Windows 10 Mobile.

Introducción

La característica de rol dual USB permite que un sistema sea un dispositivo USB o un host USB. La especificación detallada para el rol dual USB se puede encontrar en la página de información de USB en Go de USB-IF.

La característica de rol dual permite a un dispositivo móvil, como un teléfono o una tableta, designarse como un dispositivo o un host.

Cuando un dispositivo móvil está en modo función, está conectado a un equipo o a otro dispositivo que actúa como host para el dispositivo móvil conectado.

Cuando un dispositivo móvil está en modo host, los usuarios pueden conectar su dispositivo, como un mouse o un teclado. En este caso, el dispositivo móvil hospeda dispositivos conectados.

Al proporcionar compatibilidad con el rol dual USB en Windows 10, proporcionamos las siguientes ventajas:

  • Conectividad a dispositivos periféricos móviles a través de USB, que ofrece un ancho de banda de datos mayor en comparación con protocolos inalámbricos como Bluetooth.
  • La opción de cargar la batería a través de USB mientras está conectada a otros dispositivos USB y comunicarse con otros dispositivos USB (siempre que la compatibilidad de hardware necesaria esté presente).
  • Habilitar a los clientes que probablemente posean un dispositivo móvil, como un teléfono inteligente para todo su trabajo. Esta característica permite mejorar la productividad en un escenario de acoplamiento por cable, donde un dispositivo móvil se acopla y, por tanto, hospeda dispositivos periféricos.

En la tabla siguiente se muestra la lista de controladores de clase host que están disponibles en las ediciones de escritorio y móvil de Windows.

Controladores de clase de host USB Windows 10 Mobile Windows10 para ediciones de escritorio
Concentradores USB (USBHUB) Sí (a partir de Windows 2000)
HID - Teclado/mouses (HidClass, KBDCLass, MouClass, KBDHid, MouHid) Sí (a partir de Windows 2000)
Almacenamiento masivo USB (masivo & UASP) Sí (a partir de Windows 2000)
Controlador host USB genérico (WinUSB) Sí (a partir de Windows Vista)
Entrada y salida de audio USB (USBAUDIO) Sí (a partir de Windows XP)
Dispositivos serie (USBSER) Sí (a partir de Windows 10)
Bluetooth (BTHUSB) Sí (a partir de Windows XP)
Impresión (usbprint) No Sí (a partir de Windows XP)
Escaneado (USBSCAN) No Sí (a partir de Windows 2000)
Cámara web (USBVIDEO) No Sí (a partir de Windows Vista)
Protocolo de transferencia de medios (iniciador de MTP) No Sí (a partir de Windows Vista)
NDIS remoto (RNDIS) No Sí (a partir de Windows XP)
IP a través de USB (IPoverUSB) No Sí (novedad para Windows 10)

Los controladores de clase de la tabla se seleccionaron en función de la telemetría de clases de dispositivo y en función de escenarios clave seleccionados para Windows 10. Tenemos pensado incluir de serie un número limitado de controladores host de terceros para admitir dispositivos clave en Windows 10 Mobile. Y para Windows 10 para ediciones de escritorio, estos controladores están disponibles en el sitio web del OEM o a través de Windows Update (WU).

Para Windows 10 Mobile, los controladores de terceros que no están incluidos de serie no están disponibles en Windows Update. La superficie de disco de la pila del host USB + HID se mantiene pequeña. Por eso no todos los controladores de clase y algunos controladores de terceros se incluyen de serie para Windows 10 Mobile. Un OEM que quiera hacer que los controladores de terceros estén disponibles puede usar un paquete de soporte de placa (BSP) para agregarlos a las imágenes del sistema operativo para sus dispositivos móviles.

En la tabla siguiente se muestran los controladores de clase de función que están disponibles en las ediciones móviles de Windows.

Nota:

Los controladores de funciones no están disponibles en Windows 10 para las ediciones de escritorio.

Controladores de clase de función USB Windows 10 Mobile Windows10 para ediciones de escritorio Notas
Respondedor de protocolo de transferencia de medios (MTP) No No hay escenarios para el respondedor MTP en escritorio. Los escenarios P2P entre sistemas de escritorio se habilitaron a través de Easy-MigCable a través de WinUSB.
Salida de vídeo (vidstream) No
Controlador de función USB genérico (GenericUSBFn) No IPoverUSB y otros escenarios de instalación de escritorio necesitan este controlador.

Supervisamos los datos de conexión del dispositivo para saber si necesitamos proporcionar más compatibilidad con controladores de clase a medida que se actualiza la lista de popularidad de la clase de dispositivo.

Implementación del controlador

El controlador de conmutador de rol USB (URS) de Microsoft permite a un implementador del sistema aprovechar la funcionalidad USB de rol dual de su plataforma.

El controlador URS está diseñado para proporcionar funcionalidad de rol dual para plataformas que usan un único controlador USB que puede funcionar tanto en roles host como en periféricos a través de un único puerto. El rol periférico también se conoce como rol de función. El controlador URS administra el rol actual del puerto. El controlador URS carga y descarga las pilas de software adecuadas, en función de los eventos de hardware de la plataforma.

En un sistema que tiene un microconector AB USB, el controlador usa interrupciones de hardware que indican el estado del pin de identificador en el conector. Este pin se usa para detectar si el controlador debe asumir el rol de host o el rol de función en una conexión. Para obtener más información, consulte la especificación de USB en Go. En los sistemas con un conector USB tipo C, se espera que el implementador OEM proporcione un controlador cliente de conector mediante las interfaces de programación de controladores del conector USB tipo C. El controlador cliente se comunica con la extensión de clase del Administrador de conectores USB proporcionado por Microsoft (UcmCx) para administrar todos los aspectos del conector USB tipo C, como la detección de CC, la mensajería PD y otros. Para el cambio de roles, el controlador cliente comunica el estado del conector USB tipo C al controlador URS.

En el diagrama siguiente se muestra la pila de controladores de software USB para un controlador de rol dual que usa el controlador URS.

Arquitectura de pila de controladores de conmutador de rol USB.

El controlador URS nunca carga las pilas función y host que se muestran en el diagrama anterior simultáneamente. El controlador URS carga la pila de funciones o la pila host, en función del rol del controlador USB.

Requisitos de hardware

Si está desarrollando una plataforma que aprovecha el controlador URS, para proporcionar la funcionalidad USB de rol dual, deben cumplirse los siguientes requisitos de hardware:

  • Controladora USB

    Microsoft proporciona estos controladores como controladores de serie.

    Controlador Synopsys DesignWare Core USB 3.0. INF de serie: UrsSynopsys.inf.

    Controlador Chipidea OTG USB de alta velocidad. INF de serie: UrsChipidea.inf.

  • Interrupciones de pin de identificador

    • Una o varias interrupciones de pin de identificador para sistemas que no son de tipo USB-C se implementan de una de estas dos maneras:

      1. Dos interrupciones desencadenadas por el borde: una que se activa cuando el pin de identificador del conector está conectado a tierra y otra que se activa cuando el pin de identificador es flotante.
      2. Una única interrupción activa que está en el nivel activo cuando el pin del identificador está conectado a tierra.
  • Enumeración del controlador USB

    El controlador de rol dual USB debe estar enumerado en ACPI.

  • Compatibilidad de software

    El controlador URS espera una interfaz de software que permita el control de VBus sobre el conector. Esta interfaz es específica de SoC. Póngase en contacto con su proveedor de SoC para obtener más información.

Estas características de OTG USB no se admiten en Windows:

  • Detección del adaptador de cargador de accesorios (ACA).
  • Protocolo de solicitud de sesión (SRP).
  • Protocolo de negociación de host (HNP).
  • Protocolo de detección de conexión (ADP).

Configuración del sistema ACPI

Para poder usar el controlador URS, debe crear un archivo de definición ACPI para el sistema. Además, hay algunas consideraciones relacionadas con el controlador que debe tener en cuenta.

Esta es una definición ACPI de ejemplo para un controlador de rol dual 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}
        })
    }
}

Estas son algunas explicaciones para las secciones principales del archivo ACPI:

  • URS0 es la definición ACPI para el controlador de rol dual USB. El controlador URS se carga en este dispositivo ACPI.

  • USB0 y UFN0 son dispositivos secundarios dentro del ámbito de URS0. USB0 y UFN0 representan las dos pilas secundarias enumeradas por el controlador URS y las pilas de host y función respectivamente. _ADR es el medio por el que ACPI coteja estas definiciones de dispositivo con los objetos de dispositivo que crea el controlador URS.

  • Si el controlador usa la misma interrupción para ambos roles, la misma interrupción del controlador se puede describir en ambos dispositivos secundarios. Incluso en ese caso, la interrupción se puede seguir describiendo como "Exclusiva".

  • Puede agregar a este archivo de definición ACPI según sea necesario. Por ejemplo, puede establecer cualquier otro método o propiedades necesarios en cualquiera de los dispositivos del archivo de definición ACPI. Estas adiciones no interfieren con el funcionamiento del controlador URS. Cualquier otro recurso necesario en cualquiera de las pilas también se puede describir en el _CRS del dispositivo adecuado.

El controlador URS asigna identificadores de hardware a las pilas de funciones y host. Estos identificadores de hardware se obtienen del identificador de hardware del dispositivo URS. Por ejemplo, si tiene un dispositivo URS cuyo identificador de hardware es ACPI\ABCD1234, el controlador URS crea identificadores de hardware para las pilas de host y funciones de la siguiente manera:

  • Pila de host: URS\ABCD1234&HOST

  • Pila de funciones: URS\ABCD1234&FUNCTION

Paquetes de instalación del controlador INF

Los paquetes de controladores de terceros pueden depender de este esquema, si es necesario.

Si es un IHV o un OEM y tiene pensado proporcionar su propio paquete de controladores, estos son algunos aspectos que debe tener en cuenta:

  • Paquete de controladores URS

    El identificador de hardware del controlador de rol dual en cada plataforma se agrega al INF de serie para URS. Sin embargo, si por algún motivo no se puede agregar el identificador, el IHV/OEM puede proporcionar un paquete de controladores con un INF que necesite o incluya el INF de serie y que coincida con su identificador de hardware.

    Este paquete de controladores es necesario cuando el IHV/OEM requiere que un controlador de filtro esté presente en la pila de controladores.

  • Paquete de controladores host

    Se requiere un paquete de controladores proporcionado por IHV/OEM que necesite/incluya el usbxhci.inf de serie y que coincida con el identificador de hardware del dispositivo host. La coincidencia de ID de hardware se basaría en el esquema descrito en la sección anterior.

    Este paquete de controladores es necesario cuando el IHV/OEM requiere que un controlador de filtro esté presente en la pila de controladores.

    Se está trabajado para que el controlador URS asigne el identificador compatible XHCI para el dispositivo host.

  • Paquete de controladores de función

    Se requiere un paquete de controladores proporcionado por IHV/OEM que necesite/incluya el Ufxsynopsys.inf de serie y que coincida con el identificador de hardware del dispositivo periférico. La coincidencia de ID de hardware se basaría en el esquema descrito en la sección anterior.

    El IHV/OEM también puede incluir un controlador de filtro en el paquete de controladores.

Consulte también