Panoramica dell'architettura serCx2
SerCx2 interagisce con un driver del controller seriale per consentire la comunicazione tra un driver di periferica e un dispositivo periferico connesso in modo seriale. In genere, il controller seriale è integrato in un chip SoC (System on a Chip) per fornire comunicazioni a basso numero di pin con un dispositivo periferico esterno al chip SoC, ma viene venduto alla stessa scheda del circuito stampato.
Il diagramma seguente mostra il percorso di comunicazione tra un dispositivo periferico connesso in modo seriale e il driver per questo dispositivo. Questo driver periferico viene eseguito in modalità kernel o utente e invia richieste di I/O alla porta seriale a cui è connesso il dispositivo periferico.
SerCx2 e il driver del controller seriale vengono entrambi eseguiti in modalità kernel e comunicano tra loro tramite l'interfaccia DDI (Device-Driver Interface) SerCx2. Il driver del controller seriale chiama metodi di supporto driver implementati da SerCx2. SerCx2 chiama le funzioni di callback degli eventi implementate dal driver del controller seriale.
In genere, i registri hardware del controller seriale vengono mappati alla memoria. Il driver del controller seriale accede direttamente a questi registri per configurare la porta seriale e per trasferire i dati da e verso il dispositivo periferico connesso alla porta seriale. Per i trasferimenti di dati più lunghi, SerCx2 usa in genere trasferimenti DMA (non illustrati nel diagramma precedente).
Le informazioni necessarie per aprire una connessione logica al dispositivo periferico vengono incapsulate in un tipo speciale di risorsa hardware denominata ID connessione. Per altre informazioni, vedere ID connessione per dispositivi periferiche connesse in modo seriale.
In genere, solo i driver inviano richieste di I/O direttamente a un controller seriale. Quando un'applicazione in modalità utente deve comunicare con un dispositivo periferico connesso in modo seriale, il driver di periferica per il dispositivo funge da intermediario tra l'applicazione e il dispositivo. Se l'applicazione deve trasferire dati da o verso il dispositivo periferico, l'applicazione invia una richiesta di scrittura (IRP_MJ_WRITE) o di lettura (IRP_MJ_READ) al driver periferico e il driver periferica risponde inviando una richiesta di scrittura o lettura corrispondente al controller seriale. Inoltre, il driver periferico può inviare richieste di controllo I/O del dispositivo (IOCTLs) per configurare la porta seriale. Per un elenco di IOCTLs supportati da SerCx2, vedere Interfaccia richiesta I/O seriale.
Il driver periferico che invia richieste di I/O al controller seriale è un driver in modalità kernel che usa Kernel-Mode Driver Framework (KMDF) o un driver in modalità utente che usa UMDF ( User-Mode Driver Framework ). SerCx2 gestisce le code di richieste di I/O inviate al controller seriale dal driver di periferica.
In risposta a una richiesta di lettura o scrittura, SerCx2 avvia una o più transazioni di I/O per spostare i dati tra il controller seriale e il buffer di dati nella richiesta. Ogni transazione di I/O usa operazioni di I/O programmate (PIO) o DMA per trasferire i dati tra il controller seriale e il buffer dei dati nella richiesta. I tipi di transazioni di I/O supportate da un driver controller seriale dipendono dalle funzionalità hardware del controller seriale. Per altre informazioni, vedere Panoramica delle transazioni di I/O SerCx2.