Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
SerCx2 gestisce una richiesta di lettura o scrittura da un client inviando una o più transazioni di I/O al driver del controller seriale. Questo driver considera ogni transazione come un'operazione di I/O autonoma che trasferisce i dati tra il controller seriale e il buffer di dati nella richiesta.
I circuiti integrati SoC (System on a Chip) includono spesso controller seriali (o UART) per consentire la comunicazione seriale ad alta velocità con altri circuiti integrati saldati sulla stessa scheda di circuito stampato. I processori in questi soC possono usare operazioni di I/O programmate (PIO) per trasferire direttamente i dati da o verso i registri di dati mappati alla memoria in questi controller seriali. Inoltre, questi soC forniscono in genere hardware DMA avanzato per spostare i dati tra i controller seriali e la memoria.
PIO potrebbe essere sufficiente per i trasferimenti di dati brevi, ma l'uso di PIO per trasferimenti più lunghi a velocità di dati elevate comporta un carico eccessivo per il processore. Il DMA è necessario per scaricare tali trasferimenti dal processore.
Tipi di transazioni di I/O
SerCx2 definisce i tre tipi generali seguenti di transazioni di I/O:
- PIO
- DMA di sistema
- Personalizzato
Tutti i driver del controller seriale devono supportare le transazioni di I/O che usano PIO per trasferire i dati. Un driver del controller seriale può supportare anche le transazioni di I/O che usano DMA di sistema o un meccanismo di trasferimento dati personalizzato, a seconda delle funzionalità del controller seriale e dell'hardware associato. Il driver può supportare transazioni DMA di sistema o transazioni personalizzate, ma non entrambe.
Per ogni tipo di transazione di I/O supportata dall'hardware del controller seriale, il driver del controller seriale registra un pacchetto di supporto con SerCx2. Questo pacchetto descrive le funzionalità hardware pertinenti e include un set di funzioni di callback degli eventi implementate dal driver che SerCx2 chiama per avviare e controllare questo tipo di transazione di I/O.
Se un controller seriale può usare un controller DMA di sistema, che potrebbe essere condiviso con altri dispositivi, il driver del controller seriale potrebbe supportare le transazioni DMA di sistema. Per queste transazioni, SerCx2 configura il controller DMA di sistema e avvia i trasferimenti DMA. Il driver del controller seriale funziona relativamente poco durante le transazioni DMA di sistema.
Se un controller seriale dispone di un meccanismo hardware personalizzato per il trasferimento dei dati, il driver del controller seriale potrebbe supportare transazioni personalizzate che usano questo meccanismo. Ad esempio, se l'hardware del controller seriale ha funzionalità DMA master bus predefinite, il driver del controller seriale può supportare transazioni personalizzate per rendere questa funzionalità disponibile per SerCx2.
Le transazioni personalizzate sono flessibili in termini di tipi di meccanismi di trasferimento dei dati che possono supportare. Tuttavia, queste transazioni sono più difficili da implementare rispetto alle transazioni PIO o alle transazioni DMA di sistema. Per supportare transazioni personalizzate, il driver del controller seriale deve in genere configurare e inizializzare l'hardware usato per trasferire i dati. Inoltre, se una richiesta di lettura o scrittura in sospeso viene annullata prima del completamento della transazione di ricezione personalizzata o trasmissione personalizzata associata, il driver deve terminare la transazione e completare la richiesta.
Ogni transazione di I/O è un'operazione relativamente semplice. Una transazione di I/O legge i dati dal controller seriale o scrive i dati nel controller e non combina mai letture e scritture. Una transazione di I/O usa una singola modalità di trasferimento( PIO, DMA di sistema o personalizzata) e non combina mai le modalità di trasferimento.
SerCx2 può decidere in modo intelligente se usare PIO o DMA per soddisfare una richiesta di lettura o scrittura. Ad esempio, SerCx2 potrebbe scegliere di presentare una richiesta di lettura o scrittura molto breve al driver del controller seriale come transazione PIO. In alternativa, SerCx2 potrebbe presentare una richiesta di lettura o scrittura più lunga al controller seriale come transazione DMA.
Suddividere una richiesta di lettura o scrittura in più transazioni
Alcuni controller DMA di sistema potrebbero presentare limitazioni che richiedono a SerCx2 di interrompere una richiesta di lettura o scrittura più lunga in due o più transazioni di I/O. Ad esempio, se un controller DMA di sistema richiede l'avvio e la fine dei trasferimenti DMA sui limiti di byte pari in memoria, ma il buffer di dati in una richiesta di lettura inizia e termina su limiti di byte dispari, SerCx2 potrebbe usare PIO per trasferire i primi e gli ultimi byte nel buffer e usare DMA di sistema per trasferire tutti i dati tra i primi e gli ultimi byte. Per questo esempio, SerCx2 rilascia le tre transazioni di I/O seguenti al driver del controller seriale nell'ordine illustrato:
- Transazione di ricezione PIO per il primo byte.
- Transazione di ricezione DMA di sistema per i byte intermedi.
- Transazione di ricezione PIO per l'ultimo byte.
Analogamente, se un meccanismo di trasferimento dati personalizzato può avviare e terminare una transazione di trasmissione personalizzata su un limite di byte arbitrario in memoria, ma le dimensioni del buffer in una richiesta di scrittura superano la lunghezza massima di trasferimento di una transazione di trasmissione personalizzata, SerCx2 partiziona la richiesta di scrittura in due o più transazioni di trasmissione personalizzate, ognuna delle quali non supera la lunghezza massima del trasferimento.
Se SerCx2 deve suddividere una richiesta di lettura o scrittura in due o più transazioni di I/O, il driver del controller seriale può ignorare in modo sicuro la relazione tra queste transazioni e la richiesta. SerCx2 serializza le transazioni per garantire che i dati vengano ricevuti o trasmessi nell'ordine corretto.
Quando il driver del controller seriale registra un set di funzioni di callback per supportare transazioni DMA di sistema o transazioni personalizzate, il driver fornisce i valori dei parametri che descrivono le funzionalità dell'hardware che eseguiranno queste transazioni. Ad esempio, per le transazioni system-DMA, i parametri includono i requisiti di allineamento e le lunghezze di trasferimento minime e massime supportate dal controller DMA di sistema. SerCx2 usa questi parametri per decidere se elaborare una richiesta di lettura o scrittura come transazione PIO o una transazione DMA di sistema e se suddividere la richiesta in due o più transazioni di I/O.
Tuttavia, un controller seriale potrebbe avere funzionalità hardware speciali che non possono essere descritte adeguatamente dai parametri forniti dal driver del controller seriale a SerCx2. Pertanto, il driver potrebbe avere accesso alle informazioni dipendenti dall'hardware che consentono al driver di prendere decisioni migliori rispetto a SerCx2 su come partizionare una richiesta di lettura o scrittura in una o più transazioni di I/O. Come opzione, tale driver può implementare le funzioni di callback evento EvtSerCx2SelectNextReceiveTransactionType e EvtSerCx2SelectNextTransmitTransactionType. SerCx2 chiama queste funzioni, se implementate, per consentire al driver di decidere quali transazioni di I/O usare per soddisfare una richiesta di lettura o scrittura.