Plug and Play compatibilidad con HID a través de SPI
En este artículo se describe la compatibilidad con plug and play para los dispositivos que admiten HID a través del transporte SPI.
Carga de controladores
Windows carga el controlador de clase HID SPI basado en una coincidencia de identificador compatible entre un identificador de hardware y el INF. La configuración avanzada y la interfaz de energía (ACPI) generan el identificador. El identificador de hardware se genera para el nodo de dispositivo SPI en ACPI. Todos los dispositivos compatibles con HID SPI deben exponer el identificador de compatibilidad, además de un identificador de hardware único.
La especificación ACPI 5.0 incluye compatibilidad con dispositivos de clase HID. Las definiciones ACPI para HID SPI son las siguientes.
Campo | Valor | AcpI (objeto) | Formato | Comentarios |
---|---|---|---|---|
Id. de hardware | Específico del proveedor | _ESCONDIÓ | Cadena con el formato VVVVdddddd (por ejemplo, MSFT0011) | VendorID + DeviceID |
Id. compatible | PNP0C51 | _CID | Cadena con el formato ACPIxxxx o PNPxxxx | CompatibleID |
Subsystem | Específico del proveedor | _SUB | Cadena con el formato VVVVssss (por ejemplo, MSFQ1234) | SubVendorID + SubSystemID |
Revisión de hardware | Específico del proveedor | _HRV | 0xRRRR (revisión 2byte) | Número de revisión de hardware |
Configuración actual de recursos | Específico del proveedor | _CRS | Secuencia de bytes | - SpiSerialBus para acceder al dispositivo. - GpioInt para interrupciones. |
Método específico del dispositivo | GUID {6e2ac436-0fcf-41af-a265-b32a220dcfab} | _DSM | Paquete | Define una estructura que contiene información específica del dispositivo. |
Método Device Reset | _RST | Método de restablecimiento de dispositivo compatible con ACPI 6.0 7.3.25, al que llamará el sistema operativo host como FLDR ACPI. |
Cada dispositivo HID SPI debe proporcionar los siguientes campos obligatorios:
- Id. de hardware
- Id. compatible
- Revisión de hardware
- Configuración actual de recursos
- Método específico del dispositivo
- Método Device Reset
Consulte la especificación Advanced Configuration and Power Interface (ACPI) 6.0 para obtener información adicional.
A continuación se proporciona un ejemplo de identificadores de hardware e identificadores compatibles para un dispositivo SPI HID aleatorio. Estos detalles se basan en un dispositivo de ejemplo que se notifica como HID con una colección de nivel superior de la clase "específica del proveedor".
Advanced Configuration and Power Interface (ACPI) genera los siguientes identificadores de hardware e identificadores compatibles para cargar el controlador de transporte HID SPI:
Identificadores de hardware: identificadores compatibles
ACPI\Vid_xxxx&Pid_yyyy&Rev_zzzz;: ACPI\PNP0C51
ACPI\Vid_xxxxPid_yyyy;:
ACPI\xxxxyyyy;:
En el ejemplo anterior, el identificador de hardware se generó mediante los valores extraídos del método ACPI de _HID para el dispositivo de ejemplo. El identificador compatible se genera mediante los valores extraídos del método ACPI de _CID para el dispositivo de ejemplo. El identificador compatible para un HID a través de SPI siempre debe ser PNP0C51 para la versión 1.0.
Nota
Si proporciona un INF, solo debe usar los identificadores de hardware de la columna izquierda de la tabla anterior. (No use el identificador compatible en la columna derecha).
El identificador de hardware del nodo de dispositivo cliente HID generado por el componente HIDClass.sys es el siguiente:
Identificador de hardware: identificador compatible
HID\VEN_MSFT&DEV_0010&REV_0002&Col01;: N/A
-HID\VEN_MSFT&DEV_0010&Col01 HID\MSFT0010&Col01;: N/A
-HID\*MSFT0010Col01: N/A
-HID_DEVICE_UP:FF00_U:0001;: N/A
-HID_DEVICE: N/A
El identificador de hardware lo genera HIDClass.sys y es idéntico para todos los transportes. Este identificador se basa en los valores pasados a HIDClass.sys de HIDSPI.SYS (extraídos de ACPI).
Secuencia de enumeración de dispositivos
Una vez cargado un controlador de dispositivo HID SPI (HIDSPI.SYS), comienza a comunicarse con el dispositivo a través del bus SPI. La primera operación que realiza el controlador es la secuencia de enumeración del dispositivo.
En la lista siguiente se proporciona la secuencia de enumeración. El orden de esta lista puede cambiar en versiones futuras de Windows.
Recupere el código del lenguaje de origen ACPI (ASL) para el dispositivo HID SPI desde el BIOS del sistema.
Emitir un restablecimiento iniciado por el host en el dispositivo
- Llamar al método de _RST ACPI
- La interrupción de GPIO del dispositivo confirma la interrupción de GPIO
- El host lee la respuesta de restablecimiento del dispositivo
Recuperación del descriptor HID del dispositivo
- El host escribe la solicitud del descriptor HID.
- La interrupción de GPIO del dispositivo confirma la interrupción de GPIO
- El host lee la respuesta del descriptor HID.
Recuperación del descriptor de informe
- El host escribe la solicitud del descriptor de informe
- La interrupción de GPIO del dispositivo confirma la interrupción de GPIO
- El host lee la respuesta del descriptor de informe.
Si el host no puede completar correctamente cualquiera de los pasos con el dispositivo, el controlador HIDSPI puede cargarse con un valor de error del código 10. El host puede volver a intentar restablecer el dispositivo si no se recibe ninguna respuesta, pero no se garantiza la lógica de reintento.
Operaciones de informe HID
En la tabla siguiente se proporciona información general sobre las operaciones de informe HID compatibles con el protocolo HID SPI y los informes de entrada y salida que se usan para llevar a cabo la operación.
Tipo de informe HID | Operación | Tipo de informe de salida | Tipo de informe de entrada |
---|---|---|---|
Informe de entrada | GET | 0x06 (Solicitud: contenido vacío) |
0x0B (Respuesta) |
Informe de entrada | SET (No compatible) |
N/D | N/D |
Informe de entrada | INTERRUPCIÓN EN | N/A: sin solicitud | 0x01 |
Informe de características | GET | 0x04 (Solicitud: contenido vacío) |
0x05 (Respuesta) |
Informe de características | SET | 0x03 | 0x09 (Confirmación: contenido vacío) |
Informe de salida | GET (No compatible) |
N/D | N/D |
Informe de salida | SET | 0x05 | 0x0A (Confirmación: contenido vacío) |
Operaciones de protocolo
Operación | Tipo de informe de solicitud | Tipo de informe de respuesta |
---|---|---|
Solicitud de descriptor de dispositivo | 0x01 | 0x7 |
Solicitud de descriptor de informe | 0x02 | 0x8 |
Solicitud de comando | 0x07 | 0x4 |
Restablecer respuesta | N/D | 0x3 |