La interfaz de controlador de host extensible ( xHCI ) es una especificación técnica que proporciona un marco detallado para el funcionamiento del controlador de host de una computadora para el bus serie universal (USB). Conocida también como la especificación del controlador de host USB 3.0 , xHCI está diseñada para ser compatible con versiones anteriores y soportar una amplia gama de dispositivos USB, desde las versiones USB 1.x más antiguas hasta las versiones USB 3.x más recientes.
A diferencia de sus predecesores, la Interfaz de Controlador de Host Abierta (OHCI) y la Interfaz de Controlador de Host Universal (UHCI), xHCI ofrece varias mejoras tecnológicas. En concreto, está diseñado para gestionar múltiples velocidades de transferencia de datos (baja, máxima, alta y SuperSpeed) dentro de un único estándar unificado. Esto lo hace más eficiente en la gestión de recursos computacionales y de energía, una característica especialmente beneficiosa para dispositivos móviles con capacidades de energía limitadas, como tabletas y teléfonos inteligentes. Además, xHCI simplifica la arquitectura necesaria para admitir una mezcla de dispositivos de baja y alta velocidad, lo que agiliza el desarrollo de controladores y software del sistema.
xHCI marca una mejora significativa con respecto a sus predecesores, la Interfaz de controlador de host abierto (OHCI) y la Interfaz de controlador de host universal (UHCI), en varios aspectos clave:
Al mejorar el soporte para múltiples velocidades, optimizar la administración de energía y simplificar la arquitectura subyacente, xHCI sirve como un estándar más eficiente y unificado para los controladores de host USB.
La arquitectura xHCI supone un cambio radical respecto de las generaciones anteriores de arquitecturas de interfaz de controlador host USB (es decir, la Interfaz de controlador host abierta (OHCI), la Interfaz de controlador host universal (UHCI) y la Interfaz de controlador host mejorada (EHCI)) en muchos aspectos. A continuación se indican los objetivos clave de la arquitectura xHCI:
Los controladores OHCI y UHCI solo admiten dispositivos con velocidad USB 1 (1,5 Mbit/s y 12 Mbit/s), y el EHCI solo admite dispositivos USB 2 (480 Mbit/s).
La arquitectura xHCI fue diseñada para soportar todas las velocidades USB, incluidas SuperSpeed (5 Gbit/s) y velocidades futuras, bajo una única pila de controladores.
Cuando el USB se desarrolló originalmente en 1995, estaba destinado a plataformas de escritorio para frenar la proliferación de conectores que aparecían en las PC, por ejemplo, PS/2 , puerto serie , puerto paralelo , puerto de juegos , etc., y el consumo de energía del host no era una consideración importante en ese momento. Desde entonces, las plataformas móviles se han convertido en la plataforma de elección, y sus baterías han hecho que el consumo de energía sea una consideración clave. Las arquitecturas de los controladores de host USB heredados (OHCI, UHCI y EHCI) eran muy similares en el sentido de que el "programa" para las transacciones que se realizarían en el USB se creaba mediante software en la memoria del host, y el hardware del controlador del host leía continuamente los programas para determinar qué transacciones debían ejecutarse en el USB y cuándo, incluso si no se movían datos. Además, en el caso de las lecturas desde el dispositivo, el dispositivo era sondeado cada intervalo de programación, incluso si no había datos para leer.
Las arquitecturas de controlador de host USB heredadas presentan algunas deficiencias graves cuando se aplican a entornos virtualizados. Las interfaces de controlador de host USB heredadas definen un bombeo de datos de hardware relativamente simple; donde el estado crítico relacionado con la administración general del bus (asignación de ancho de banda, asignación de direcciones, etc.) reside en el software del controlador de host (HCD). Intentar aplicar la técnica de virtualización de E/S de hardware estándar (replicar registros de interfaz de E/S) a la interfaz de controlador de host USB heredada es problemático porque el estado crítico que se debe administrar en las máquinas virtuales (VM) no está disponible para el hardware. La arquitectura xHCI traslada el control de este estado crítico al hardware, lo que permite la administración de recursos USB en las VM. Las características de virtualización xHCI también proporcionan:
El EHCI utiliza controladores OHCI o UHCI como "controladores complementarios", donde los dispositivos USB 2 se administran a través de la pila EHCI, y la lógica de puerto del EHCI permite que un dispositivo USB de baja o máxima velocidad se enrute a un puerto de un controlador UHCI u OHCI "complementario", donde los dispositivos USB de baja o máxima velocidad se administran a través de la pila UHCI u OHCI respectiva. Por ejemplo, una tarjeta controladora de host USB 2 PCIe que presenta 4 conectores USB "Estándar A" generalmente presenta un EHCI de 4 puertos y dos controladores OHCI de 2 puertos al software del sistema. Cuando un dispositivo USB de alta velocidad se conecta a cualquiera de los 4 conectores, el dispositivo se administra a través de uno de los 4 puertos del concentrador raíz del controlador EHCI. Si se conecta un dispositivo USB de baja o alta velocidad a los conectores 1 o 2, se enrutará a los puertos del concentrador raíz de uno de los controladores OHCI para su administración, y los dispositivos USB de baja o alta velocidad conectados a los conectores 3 o 4 se enrutarán a los puertos del concentrador raíz del otro controlador OHCI. La dependencia de EHCI de controladores host separados para dispositivos USB de alta velocidad y el grupo de dispositivos USB de baja o alta velocidad da como resultado interacciones y dependencias complejas entre los controladores EHCI y OHCI/UHCI.
La compatibilidad con Streams se agregó a la especificación USB 3.0 SuperSpeed, principalmente para permitir operaciones de almacenamiento de alto rendimiento a través de USB. Clásicamente, ha habido una relación 1:1 entre un punto final USB y un búfer en la memoria del sistema, y el controlador host es el único responsable de dirigir todas las transferencias de datos. Streams cambió este paradigma al proporcionar una asociación de "punto final a búfer" de 1 a muchos y permitir que el dispositivo indique al controlador host qué búfer mover. Las transferencias de datos USB asociadas con un punto final de USB Stream son programadas por el xHCI de la misma manera que cualquier otro punto final masivo, sin embargo, el búfer de datos asociado con una transferencia lo determina el dispositivo.
La arquitectura xHCI fue diseñada para ser altamente escalable, capaz de soportar de 1 a 255 dispositivos USB y de 1 a 255 puertos de concentrador raíz. Dado que cada dispositivo USB puede definir hasta 31 puntos finales, un xHCI que admitiera 255 dispositivos tendría que admitir 7906 puntos finales totales separados. Clásicamente, cada búfer de memoria asociado con un punto final se describe mediante una cola de bloques de memoria física, donde la cola requiere un puntero de cabeza, un puntero de cola, longitud y otros registros para definir su estado. Hay muchas formas de definir el estado de la cola, sin embargo, si uno asumiera 32 bytes de espacio de registro para cada cola, entonces se requerirían casi 256 KB de espacio de registro para admitir 7906 colas. Por lo general, solo una pequeña cantidad de dispositivos USB se conectan a un sistema a la vez y, en promedio, un dispositivo USB admite de 3 a 4 puntos finales, de los cuales solo un subconjunto de los puntos finales están activos al mismo tiempo. El xHCI mantiene el estado de la cola en la memoria del sistema como estructuras de datos de contexto de punto final. Los contextos están diseñados para que el xHCI pueda almacenarlos en caché y "paginarlos" dentro y fuera de la memoria en función de la actividad del punto final. De este modo, un proveedor puede escalar su espacio de caché y recursos internos de contexto de punto final xHCI para que coincidan con los modelos de uso práctico esperados para sus productos, en lugar de los límites arquitectónicos que admiten. Lo ideal es que el espacio de caché interno se seleccione de modo que, en condiciones de uso normales, no haya paginación de contexto por parte del xHCI. Además, la actividad del punto final USB tiende a ser intermitente. Es decir, en cualquier momento, una gran cantidad de puntos finales pueden estar listos para mover datos, pero solo un subconjunto está moviendo datos de forma activa. Por ejemplo, el punto final de interrupción IN de un mouse puede no transferir datos durante horas si el usuario está lejos de su escritorio. Los algoritmos específicos del proveedor de xHCI podrían detectar esta condición y hacer que ese punto final sea candidato para paginación fuera de la memoria si otros puntos finales se ocupan.
La especificación Open Host Controller Interface (OHCI) fue definida por un consorcio de empresas (Compaq, Microsoft y National Semiconductor) como una especificación abierta para soportar dispositivos USB 1.0. La Universal Host Controller Interface (UHCI) se refiere a una especificación que Intel definió originalmente como una interfaz propietaria para soportar dispositivos USB 1.0. La especificación UHCI finalmente se hizo pública, pero sólo después de que el resto de la industria hubiera adoptado la especificación OHCI.
La especificación EHCI fue definida por Intel para soportar dispositivos USB 2.0. La arquitectura EHCI fue modelada a partir de los controladores UHCI y OHCI, que requerían software para crear los cronogramas de transacciones USB en la memoria y para administrar el ancho de banda y la asignación de direcciones. Para eliminar un esfuerzo redundante de la industria para definir una versión abierta de una interfaz de controlador host USB 2.0, Intel puso la especificación EHCI a disposición de la industria sin costos de licencia.
El modelo de licencia EHCI se mantuvo para la especificación xHCI de Intel, pero con una contribución de la industria mucho mayor. Más de 100 empresas han contribuido a la especificación xHCI. El USB Implementers Forum (USB-IF) también ha financiado un conjunto de pruebas de cumplimiento de xHCI para maximizar la compatibilidad de las diversas implementaciones de xHCI.
Los controladores xHCI 1.0 se han estado distribuyendo desde diciembre de 2009. Los kernels de Linux desde 2009 contienen controladores xHCI, [4] pero para kernels más antiguos hay controladores disponibles en línea. Los controladores de Windows para XP, Vista y Windows 7 están disponibles de los respectivos proveedores de xHCI. Los controladores xHCI para sistemas integrados están disponibles de MCCI, Jungo y otros proveedores de software. Los bloques IP xHCI también están disponibles de varios proveedores para la personalización en entornos SOC. Los controladores y dispositivos xHCI 1.1 comenzaron a distribuirse en 2015.
La especificación xHCI utiliza archivos de "erratas" para definir actualizaciones y aclaraciones para una versión específica. Los cambios en los archivos de erratas se acumulan en cada versión. Consulte los archivos de erratas asociados para obtener detalles de los cambios específicos. La mayoría de los cambios definidos en los archivos de erratas de xHCI son aclaraciones, correcciones gramaticales u ortográficas, referencias cruzadas adicionales, etc., que no afectan la implementación de un controlador. Los cambios que se determinan como arquitectónicos utilizan un indicador de capacidad para determinar si una característica en particular es compatible con una implementación de xHCI y un indicador de habilitación para activar la característica.
La especificación xHCI evolucionó a través de varias versiones antes de su lanzamiento oficial en 2010:
{{cite web}}
: CS1 maint: copia archivada como título ( enlace )