QNA > C > Come Avviene Il Trasferimento Di Dati Via Usb?

Come avviene il trasferimento di dati via USB?

Quando il software richiede il trasferimento di dati tra se stesso e l'USB, invia un blocco di dati chiamato I/O Request Packet (IRP) alla pipe appropriata, e il software viene poi notificato quando questa richiesta viene completata con successo o terminata per errore. A parte la presenza di una richiesta IRP, la pipe non ha alcuna interazione con l'USB. In caso di errore dopo tre tentativi, l'IRP viene cancellato e tutti gli ulteriori IRP in sospeso a quella pipe vengono ignorati fino a quando il software risponde al segnale di errore che viene generato inviando una chiamata appropriata all'USB. Come esattamente questo viene gestito dipende dal tipo di dispositivo e dal software.

Come suggerito dal nome Universal Serial Bus, la trasmissione dei dati nel bus avviene in forma seriale. I byte di dati sono suddivisi e inviati lungo il bus un bit alla volta, con il bit meno significativo per primo, come illustrato:

main-qimg-0d126bca4957787327e35b903a211ada.webp

I dati reali sono inviati attraverso il bus in pacchetti. Ogni pacchetto è un fascio di dati insieme alle informazioni riguardanti la fonte, la destinazione e la lunghezza dei dati, e anche le informazioni di rilevamento degli errori. Poiché ogni endpoint imposta, durante la configurazione, un limite alla dimensione del pacchetto che può gestire, un IRP può richiedere l'invio di diversi pacchetti. Ognuno di questi pacchetti dovrebbe essere della massima dimensione possibile, tranne il pacchetto finale. L'host USB ha un meccanismo incorporato in modo che il software possa dirgli quando aspettarsi pacchetti di dimensioni complete.

Nel caso in cui un pacchetto di dimensioni inferiori al massimo venga ricevuto prima del previsto, si presume un errore e la pipe viene bloccata con tutti gli IRP annullati fino a quando il problema viene affrontato dal software di controllo. Se un endpoint è occupato, ma non si è verificato alcun errore, risponde con un segnale speciale etichettato NAK (Negative AcKnlowedge), che dice all'altra estremità della pipe di aspettare un po'. Come queste condizioni sono gestite dipende dal tipo di dispositivo e dal software.

Ogni pacchetto è costituito da un insieme di componenti chiamati campi che includono i seguenti, riassunti nella figura 4 :

  • Un campo di sincronizzazione "SYNC" a otto bit usato dagli ingressi per correggere il loro tempo di accettazione dei dati. Parte di questo campo è un simbolo speciale usato per marcare l'inizio di un pacchetto.
  • Il Packet Identifier (PID) a 8 bit che usa 4 bit per determinare il tipo, e quindi il formato, dei dati del pacchetto. I restanti 4 bit sono un complemento di 1'o di questo, agendo come bit di controllo. Parte di questo campo determina a quale dei quattro gruppi (token, data, handshake e special) appartiene il pacchetto, e specifica anche un'istruzione di input, output o setup.
  • Un campo indirizzo che dà l'indirizzo della funzione alla fine della pipe da usare
  • Il campo endpoint a 4 bit, che dà l'appropriato endpoint che invia o riceve il pacchetto.
  • Un campo dati composto da 0-1023 byte
main-qimg-fc9ca48951fa684dc134b96ff9c19093.webp

Questi campi sono messi insieme e usati dai vari tipi di pacchetti (riassunti nell'Appendice B) per una comunicazione significativa attraverso l'USB. Gli errori sono rilevati dall'uso di un Cyclic Redundancy Check (CRC) su tutti i campi eccetto il PID, che ha il proprio meccanismo di controllo. Il CRC è considerato accurato quasi al 100% nel rilevamento degli errori.

I dati vengono inviati in pacchetti: →il software controlla se è valido → i dati vengono ricevuti.

La maggior parte delle persone non lo sa.

Grazie per A2A

~DC

Di Shelden Oramas

Perché l'USB-C non sta prendendo piede più velocemente? :: I dispositivi possono caricarsi o essere caricati via USB-C. Cosa decide la direzione?
Link utili