Condividi tramite


Supporto plug and play per I2C

Questo articolo descrive il supporto "plug and play" per i dispositivi che supportano HID su trasporto I2C.

Caricamento driver

Windows carica il driver di classe HID I2C in base a una corrispondenza di identificatore compatibile tra un identificatore hardware e l'INF. La configurazione avanzata e l'interfaccia di alimentazione (ACPI) generano l'identificatore. L'identificatore hardware viene generato per il nodo del dispositivo I2C in ACPI. Tutti i dispositivi compatibili con HID I2C devono esporre l'identificatore di compatibilità, oltre a un identificatore hardware univoco.

La specifica ACPI 5.0 include il supporto per i dispositivi di classe HID. Le definizioni ACPI per HID I2C sono le seguenti.

Campo valore Oggetto ACPI Formato Commenti
ID compatibile PNP0C50 _CID Stringa nel formato di ACPI0C50 o PNP0C50 CompatibleID
Hardware ID Specifico del fornitore _HID Stringa nel formato VVVVddddd (ad esempio NVDA0001) VendorID + DeviceID
Sottosistema Specifica del fornitore _SUB Stringa nel formato VVVVssss (ad esempio INTL1234) SubVendorID + SubSystemID
Revisione hardware Specifico del fornitore _HRV 0xRRRR (revisione a due byte) RevisionID
Impostazioni risorse correnti Specifico del fornitore _CRS Flusso di byte Deve includere I2CSerialBus e GPIO_INT rispettivamente per il controller I2C e le interruzioni GPIO.
Metodo specifico del dispositivo GUID {3CDFF6F7-4267-4555-AD05-B30A3D8938DE} _DSM Pacchetto Definisce una struttura che contiene l'indirizzo del descrittore HID.

Ogni dispositivo HID I2C deve fornire i campi obbligatori seguenti:

  • ID compatibile
  • Hardware ID
  • Revisione hardware
  • Impostazioni risorse correnti
  • Metodo specifico del dispositivo

Per altre informazioni, vedere Advanced Configuration and Power Interface Specification Version 5.0 .For more information, see the Advanced Configuration and Power Interface Specification Version 5.0.

Gli ID hardware e gli ID compatibili seguenti forniscono un esempio per un dispositivo I2C HID casuale. Questi dettagli sono basati su un dispositivo di esempio che segnala se stesso come HID con una raccolta di livello superiore della classe "specifica del fornitore".

Advanced Configuration and Power Interface (ACPI) genera i seguenti ID hardware e ID compatibili per caricare il driver di trasporto I2C HID:

Identificatori hardware: identificatori compatibili

ACPI\Vid_xxxx&Pid_yyyy&Rev_zzzz;: ACPI\PNP0C50

ACPI\Vid_xxxxPid_yyyy;:

ACPI\xxxxyyyy;:

Nell'esempio precedente l'ID hardware è stato generato usando i valori estratti dal metodo ACPI _HID per il dispositivo di esempio. L'ID compatibile viene generato usando i valori estratti dal metodo ACPI _CID per il dispositivo di esempio. L'ID compatibile per un HID su I2C deve essere sempre PNP0C50 per la versione 1.0.

Nota Se si specifica un INF, è consigliabile usare solo gli identificatori hardware nella colonna sinistra della tabella precedente. Non usare l'identificatore compatibile nella colonna destra.

L'ID hardware per il nodo del dispositivo client HID generato dal componente HIDClass.sys è il seguente:

Identificatore hardware: identificatore compatibile

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

HIDClass.sys genera l'ID hardware ed è identico per tutti i trasporti. Questo identificatore si basa sui valori passati a HIDClass.sys da HIDI2C.sys (estratti da ACPI).

Sequenza di enumerazione del dispositivo

Una volta caricato un driver di dispositivo I2C HID (HIDI2C.sys), inizia a comunicare con il dispositivo tramite il bus I2C. La prima operazione eseguita dal driver è la sequenza di enumerazione del dispositivo.

L'elenco seguente fornisce la sequenza di enumerazione . L'ordine di questo elenco potrebbe cambiare nelle versioni future di Windows.

  1. Recuperare il codice ACPI Source Language (ASL) per HID I2C DEVICE dal BIOS di sistema.

  2. Recuperare il descrittore HID dal dispositivo.

    • Scrivere l'indirizzo del descrittore HID
    • Leggi descrittore HID
  3. Eseguire un SET_POWER al dispositivo.

    • Comando Write SET_POWER
  4. Eseguire un reset (reimpostazione avviata dall'host) sul dispositivo.

    • Scrivi il comando RESET
    • Il dispositivo attiva l'interruzione GPIO
    • Leggere il valore (0x00 0x00) dal registro di input
  5. Recuperare il descrittore di report dal dispositivo.

    • Scrivere l'indirizzo del descrittore del report
    • Leggere il descrittore di report

Se l'host non riesce a completare correttamente uno dei passaggi da 1 a 5 con il dispositivo, il driver HIDI2C potrebbe caricare con il valore di errore Codice 10. Non esiste alcuna logica di ripetizione dei tentativi incorporata in nessuno di questi comandi.

Nota: i passaggi 4 e 5 possono essere eseguiti in parallelo per ottimizzare il tempo in I2C. Poiché i descrittori di report sono (a) statici e (b) lunghi, Windows 8 potrebbe emettere una richiesta per 5 mentre attende una risposta dal dispositivo per 4.

Comandi HID I2C supportati

HIDI2C.SYS driver supporta i comandi seguenti:

Comando Come viene utilizzato Quando viene usato
Reset (Ripristina) Windows supporta la reimpostazione avviata dall'host. Windows rilascia questo comando durante gli scenari seguenti: inizializzazione del dispositivo - disabilita/abilita - disinstallazione/reinstallazione
Ottieni/Imposta_Rapporto Windows supporta i comandi Get / Set_Report. Questo comando viene eseguito durante gli scenari seguenti: quando un driver client HID emette una richiesta di report sulle funzionalità get/set, quando un driver client HID genera un report di input/output sincrono
Imposta_Potenza Windows supporta il comando Set_Power Windows esegue questo comando nei seguenti scenari: quando il sistema passa a uno stato S3/standby connesso a basso consumo e quando il sistema viene arrestato.