Condividi tramite


Guida alla progettazione del driver SPB (Simple Peripheral Bus)

Questa sezione descrive come scrivere un driver per un semplice dispositivo controller del bus di periferica (SPB) o per un dispositivo periferico connesso a un SPB. La categoria SPB include autobus come I²C e SPI. Il fornitore dell'hardware per un dispositivo controller SPB fornisce un driver del controller SPB per gestire le funzioni hardware nel controller. Questo driver può supportare una famiglia di dispositivi controller simili. Il fornitore hardware per un dispositivo periferico connesso a SPB fornisce un driver di periferica SPB per gestire le funzioni hardware nel dispositivo periferico. Questo driver può supportare una famiglia di dispositivi periferici in diverse piattaforme hardware che forniscono SPB compatibili.

Nelle versioni di Windows prima di Windows 8, il sistema operativo ha ottenuto informazioni dai dispositivi connessi a SPB in una scheda madre pc solo indirettamente tramite il firmware della piattaforma. A partire da Windows 8, i fornitori di hardware possono fornire driver Windows per controllare direttamente i controller SPB e i relativi dispositivi periferici connessi con SPB e per rendere questi dispositivi disponibili per l'uso dal sistema operativo e dalle applicazioni. Per altre informazioni, vedere Driver controller SPB e driver di dispositivo periferiche SPB.

Gli SPB vengono spesso usati per connettere dispositivi periferici a velocità bassa ai chipset della scheda madre e ai moduli System su un chip (SoC). Un circuito integrato richiede meno pin per connettersi a un bus seriale rispetto a un bus parallelo, che trasmette più bit di dati per ciclo di orologio. In genere, gli SPB vengono usati nelle applicazioni sensibili ai costi in cui i conteggi dei pin bassi e le connessioni semplici sono più importanti della velocità di trasmissione dei dati. Poiché gli SPB vengono eseguiti a bassa velocità e richiedono poche connessioni elettriche, vengono spesso usati nelle applicazioni in cui è necessario conservare la potenza della batteria.

Ad esempio, la scheda madre PC in un computer portatile potrebbe usare un bus I²C per comunicare con un dispositivo a bassa velocità che monitora il livello di batteria. Analogamente, il modulo SoC in un telefono intelligente o in un altro dispositivo mobile potrebbe usare un bus I²C per connettersi a un dispositivo sensore, ad esempio un accelerometro, un dispositivo GPS o un sensore di temperatura.

Un SPB non è un bus Plug and Play. I dispositivi periferici in genere hanno connessioni fisse a un SPB e non possono essere rimossi. Anche se un dispositivo periferico può essere scollegato da uno slot in un SPB, lo slot è in genere dedicato a questo dispositivo. Durante l'avvio del sistema, il firmware ACPI nella piattaforma hardware enumera i dispositivi periferici connessi con SPB per la gestione Plug and Play e specifica le risorse hardware dedicate a ogni dispositivo.

Incluso in queste risorse è un ID di connessione che identifica la connessione del dispositivo al SPB. L'ID connessione incapsula le informazioni ,ad esempio un indirizzo del bus e una frequenza di clock del bus, che un controller SPB richiede di stabilire una connessione al dispositivo. Altre risorse hardware possono includere un interruzione a cui il driver connette il relativo ISR. Tuttavia, le risorse hardware per il dispositivo non includono memoria per i registri del dispositivo. Un dispositivo periferico connesso a SPB non è mappato alla memoria e può essere accessibile solo tramite il SPB. Per altre informazioni, vedere ID connessione per dispositivi periferici SPB-Connected.

Un SPB non fornisce mezzi specifici del bus per trasmettere richieste di interruzione dai dispositivi periferici al processore. Invece, un dispositivo periferico connesso a SPB segnala un interruzione tramite un percorso hardware separato che si trova all'esterno del controller SPB e del controller SPB. La routine del servizio di interruzione (ISR) per un dispositivo periferico connesso a SPB deve essere eseguita in IRQL = PASSIVE_LEVEL in modo che possa inviare in modo sincrono richieste di I/O per accedere serialmente ai registri hardware del dispositivo tramite spB. Per altre informazioni, vedere Interruzioni da dispositivi periferici SPB-Connected.