Uso dell'interfaccia richiesta di I/O SPB
A partire da Windows 8, l'estensione spb framework (SpbCx) è un componente fornito dal sistema che supporta l'interfaccia di richiesta di I/O SPB. I driver di dispositivo periferiche SPB usano questa interfaccia per inviare richieste di I/O ai dispositivi connessi a I²C, SPI e altri semplici bus periferici (SPB). Rendendo disponibile un'interfaccia di richiesta di I/O standardizzata in un'ampia gamma di tipi di bus, SpbCx semplifica l'attività di fornire supporto driver per una famiglia di dispositivi periferici in un'ampia gamma di piattaforme hardware e controller SPB di diversi fornitori di hardware.
Se vengono soddisfatte le condizioni seguenti, il fornitore di hardware per un dispositivo periferico connesso a SPB può sviluppare un driver di dispositivo che può funzionare in più tipi di bus:
- Il dispositivo periferico deve essere compatibile con l'hardware con questi autobus.
- Il driver può usare gli stessi protocolli di controllo del dispositivo in tutti questi tipi di bus.
Eliminando il codice specifico del bus dai driver delle periferiche, l'estensione del framework SPB riduce il tempo di sviluppo per questi driver e garantisce un comportamento più coerente tra i tipi di bus supportati.
I dispositivi periferici connessi a SPB non sono mappati alla memoria e i driver per questi dispositivi non possono accedere direttamente ai registri hardware di questi dispositivi. Al contrario, un driver di dispositivo periferica SPB deve basarsi su un controller SPB per trasferire i dati in modo seriale da e verso il dispositivo. Per richiedere tale trasferimento, il driver deve inviare una richiesta di I/O al dispositivo. Questa richiesta di I/O viene inviata a una coda gestita da SpbCx.
SpbCx collabora con un driver del controller SPB per gestire le richieste di I/O dai driver. Il fornitore dell'hardware per il controller SPB fornisce il driver del controller SPB per eseguire attività specifiche dell'hardware del controller.
Solo i driver possono inviare richieste di I/O all'interfaccia di richiesta di I/O di un controller SPB. Le applicazioni non possono inviare direttamente richieste di I/O a un controller SPB. Un'applicazione può invece inviare richieste di I/O al driver per un dispositivo periferico connesso a SPB e quindi affidarsi al driver per inviare al controller SPB qualsiasi richiesta di I/O che potrebbe essere necessaria per trasferire i dati da o verso il dispositivo.
Prima che un driver possa inviare richieste di I/O a un dispositivo periferico connesso a SPB, il driver deve aprire una connessione logica al dispositivo. Per aprire questa connessione, il driver usa l'ID di connessione ricevuto come risorsa hardware dalla gestione Plug and Play. Per altre informazioni, vedere ID di Connessione ion per i dispositivi periferici SPB.
SpbCx e il driver del controller SPB gestiscono congiuntamente le richieste di lettura e scrittura per i dispositivi periferici connessi a SPB. In risposta a una richiesta di IRP_MJ_READ , il controller SPB trasferisce il numero specificato di byte da un dispositivo periferico a un buffer fornito dal driver. In risposta a una richiesta di IRP_MJ_WRITE , il controller SPB trasferisce il numero specificato di byte da un buffer fornito dal driver a un dispositivo periferico.
Per una richiesta di IRP_MJ_READ o IRP_MJ_WRITE di trasferire zero byte, SpbCx completa la richiesta con un codice di stato STATUS_SUCCESS, ma non esegue alcuna operazione.
SpbCx e il driver del controller SPB gestiscono anche questi codici di controllo I/O specifici di SPB (IOCTLs):
Un driver di periferica SPB usa questi IOCTLs per eseguire sequenze di trasferimento di I/O. Una sequenza di trasferimento di I/O è un set ordinato di trasferimenti di bus (operazioni di lettura e scrittura) eseguite come singola operazione atomica del bus. Per altre informazioni su questi IOCTL, vedere Sequenze di trasferimento di I/O.
Il driver del controller SPB per un particolare controller SPB potrebbe supportare IOCTLs personalizzati che eseguono funzioni specifiche dell'hardware. Si tratta di IOCTLs che SpbCx non gestisce e che il fornitore hardware per il controller SPB supporta per il vantaggio dei driver di dispositivo delle periferiche SPB che devono eseguire operazioni specifiche dell'hardware. Se un driver di periferica SPB invia un IOCTL che non riconosce né SpbCx né il driver del controller SPB, non viene eseguita alcuna operazione e la richiesta di I/O viene completata con un valore di stato di errore di STATUS_NOT_SUPPORTED.
Il driver per un dispositivo periferico connesso a SPB è in genere un driver UMDF (User-Mode Driver Framework ) o un driver KMDF (Kernel-Mode Driver Framework ). Per inviare una richiesta IOCTL di lettura, scrittura o IOCTL a un dispositivo periferico connesso a SPB, un driver UMDF chiama un metodo come IWDFIoRequest::Send. Un driver KMDF chiama un metodo come WdfIoTargetSendReadSynchronously, WdfIoTargetSendWriteSynchronously o WdfIoTargetSendIoctlSynchronously.
Per esempi di codice che illustrano come inviare richieste di I/O ai dispositivi periferici connessi a SPB, vedere gli argomenti seguenti:
Risorse hardware per driver di periferiche SPB in modalità utente
Risorse hardware per driver di periferiche SPB in modalità kernel