Ciao a tutti. A volte le persone sono interessate a sapere in cosa differisce USB 3.0 da USB 2.0, a volte vogliono capire quale versione o tipo di connettore USB hanno sul proprio computer, che tipo di dinosauro USB 1.0 è e così via. Approfondiamo un po' più a fondo questo argomento.
Lo standard USB è apparso a metà degli anni '90. Decifrato USB Ecco come - Bus seriale universale. Questo standard è stato sviluppato appositamente per la comunicazione tra dispositivi periferici e un computer e ora occupa una posizione di leadership tra tutti i tipi di interfacce di comunicazione. Ciò non sorprende. Al giorno d'oggi è difficile immaginare un dispositivo senza connettore USB, sebbene questi connettori varino nel tipo.
Oggi ce ne sono abbastanza un gran numero di tipi di connettori USB. Alcuni sono più comuni, altri meno. Ad ogni modo, diamo loro un'occhiata.
USBtipo-UN– uno dei tipi più comuni di connettori USB. Potresti averlo visto sul tuo, sul, sul blocco caricabatterie e non solo. Ha molti usi. Con esso puoi collegare mouse e tastiere a un computer (o altro dispositivo), unità flash, unità esterne, smartphone e così via. Questo elenco può essere continuato per molto tempo se ci pensi.
USBtipo-B– il connettore viene utilizzato principalmente per collegare una stampante o altri dispositivi periferici al computer. Ricevuto molto meno diffuso di USB di tipo A.
MiniUSB era molto comune su dispositivi mobili ah prima dell'avvento della Micro USB. Al giorno d'oggi è molto raro, ma puoi ancora trovarlo su alcuni dispositivi più vecchi. Sul mio altoparlante audio portatile, il connettore Mini USB riceve l'elettricità per caricare la batteria. Ho comprato questo altoparlante circa 5 anni fa (si è rivelato durevole).
Micro USB ora utilizzato su smartphone e cellulari quasi tutti i produttori. Questo connettore USB ha guadagnato un'incredibile popolarità tra i dispositivi mobili. Tuttavia, USB Type-C sta gradualmente prendendo la sua posizione.
Il trisnonno dello standard USB è USB 1.0è nato nel freddo novembre del 1995. Ma è nato un po’ prematuro e non ha guadagnato molta popolarità. Ma il suo fratello minore USB 1.1, nato tre anni dopo, era un esemplare più valido e riusciva ad attirare abbastanza attenzione.
Per quanto riguarda la parte tecnica, la velocità di trasferimento dei dati era ridotta, ma per gli standard di quei tempi questa velocità era più che sufficiente. La velocità arrivava fino a 12 Mbit/s e in modalità ad alto rendimento.
USB 2.0 e USB 3.0 sono due standard USB completamente moderni che ora vengono utilizzati ovunque nei computer e nei laptop. USB 3.0 è, ovviamente, più recente e più veloce e ha anche la versione completa compatibile con versioni precedenti con dispositivi USB 2.0. Ma la velocità in questo caso sarà limitata alla velocità massima secondo lo standard USB 2.0.
In teoria, le velocità di trasferimento USB 3.0 sono circa 10 volte più veloci di USB 2.0 (5 Gbps contro 480 Mbps). Ma in pratica, la velocità di scambio delle informazioni tra i dispositivi è spesso limitata dai dispositivi stessi. Anche se in generale USB 3.0 vince ancora.
Sebbene gli standard USB 2.0 e USB 3.0 siano retrocompatibili, presentano tuttavia alcune differenze tecniche. USB 2.0 ha 4 pin: 2 per l'alimentazione dei dispositivi e 2 per il trasferimento dei dati. Questi 4 pin sono stati mantenuti nello standard USB 3.0. Ma oltre a loro sono stati aggiunti altri 4 contatti necessari per ad alta velocità trasferimento dati e ricarica più rapida dei dispositivi. A proposito, USB 3.0 può funzionare con corrente fino a 1 Ampere.
Di conseguenza, il cavo standard USB 3.0 è diventato più spesso e la sua lunghezza ora non supera i 3 metri (in USB 2.0 la lunghezza massima ha raggiunto i 5 metri). Ma puoi caricare il tuo smartphone molto più velocemente, anche se colleghi più smartphone a un connettore tramite uno splitter.
Naturalmente i produttori si sono presi cura delle differenze visive. Non è necessario cercare la confezione della scheda madre per vedere quali standard USB supporta. E non è necessario accedere alle impostazioni del computer o a Gestione dispositivi per farlo. Basta guardare il colore del connettore. Il connettore USB 3.0 è quasi sempre blu. Molto raramente è anche rosso. Mentre USB 2.0 è quasi sempre nera.
Ora, con una rapida occhiata, puoi determinare se sul tuo laptop è installata la porta USB 2.0 o USB 3.0.
Questa è probabilmente la fine della conversazione su come USB 2.0 differisce da USB 3.0.
Cosa abbiamo imparato da questo articolo? Quella USB è divisa in standard di trasferimento dati, che differiscono per la velocità di trasferimento dati. E anche l'USB ha un gran numero di tipi di connettori.
E la cosa più interessante che ho dimenticato di menzionare nell'articolo è che i tipi di connettori possono essere combinati come segue. È possibile trovare un connettore USB di tipo A di dimensioni standard e un connettore USB di tipo A di dimensioni standard USB di tipo B, allo stesso tempo ci sono (ma rari) micro USB tipo A e micro USB tipo B (molto comuni). USB di tipo A può funzionare utilizzando il protocollo USB 2.0 o magari utilizzando il protocollo USB 3.0. In generale, se vuoi, puoi confonderti.
E se sei preoccupato su quali connettori sia meglio scegliere per un laptop USB 2.0 o USB 3.0, non preoccuparti affatto. Ora tutti i laptop e computer moderni sono dotati di entrambi i tipi di USB. Ad esempio, il mio laptop ha due connettori USB 2.0 e un connettore USB 3.0. E tutti e tre i connettori sono USB di tipo A.
Ecco cosa sono: USB!
Hai letto fino alla fine?
questo articolo è stato utile?
Non proprio
Cosa non ti è piaciuto esattamente? L'articolo era incompleto o falso?
Scrivi nei commenti e promettiamo di migliorare!
Bit rate di segnalazione ad alta velocità - 12 Mb/s - Lunghezza massima del cavo per bit rate di segnalazione ad alta velocità - 5 m - Bit rate di segnalazione a bassa velocità - 1,5 Mb/s - Lunghezza massima del cavo per bit rate di segnalazione a bassa velocità baud rate - 3 m - Numero massimo di dispositivi collegati (inclusi moltiplicatori) - 127 - È possibile collegare dispositivi con baud rate diversi - Non è necessario che l'utente installi elementi aggiuntivi come terminatori per SCSI - Tensione di alimentazione per dispositivi periferici - 5 V - Consumo massimo di corrente per dispositivo - 500 mA
I segnali USB vengono trasmessi su due fili di un cavo schermato a quattro fili.
Qui :
GND- circuito “case” per l'alimentazione delle periferiche V AUTOBUS- +5V anche per circuiti di alimentazione Bus D+ progettato per la trasmissione dei dati
Pneumatico D- per ricevere dati.
Sebbene velocità massima Il trasferimento dati USB 2.0 è di 480 Mbit/s (60 MB/s), nella vita reale non è realistico raggiungere tali velocità (~33.5 MB/s in pratica). Ciò è dovuto ai grandi ritardi sul bus USB tra la richiesta di trasferimento dei dati e l'effettivo inizio del trasferimento. Ad esempio, il bus FireWire, sebbene abbia un throughput di picco inferiore di 400 Mbps, ovvero 80 Mbps (10 MB/s) in meno rispetto a USB 2.0, consente in realtà un throughput maggiore per lo scambio di dati con dischi rigidi e altri dispositivi di archiviazione delle informazioni dispositivi. A questo proposito diversi drive mobili sono da tempo limitati dalla larghezza di banda pratica insufficiente di USB 2.0.
Il vantaggio più significativo di USB 3.0 è la sua maggiore velocità (fino a 5 Gbps), che è 10 volte più veloce della porta precedente. La nuova interfaccia ha migliorato il risparmio energetico. Ciò consente all'unità di entrare in modalità di sospensione quando è inattiva. È possibile effettuare contemporaneamente la trasmissione dati bidirezionale. Ciò consentirà una velocità maggiore se colleghi più dispositivi a una porta (dividi la porta). È possibile diramarsi utilizzando un hub (un hub è un dispositivo che si dirama da una porta in 3-6 porte). Ora, se colleghi l'hub a una porta USB 3.0 e colleghi più dispositivi (ad esempio, chiavette USB) all'hub ed effettui un trasferimento dati simultaneo, vedrai che la velocità sarà molto più elevata rispetto a quella USB interfaccia 2.0. C'è una caratteristica che può essere un vantaggio e un svantaggio. L'interfaccia USB 3.0 ha aumentato la corrente a 900 mA e USB 2.0 funziona con una corrente di 500 mA. Questo sarà un vantaggio per i dispositivi che sono stati adattati per USB 3.0, ma un piccolo svantaggio è che potrebbe esserci un rischio quando si caricano dispositivi più deboli, come un telefono. Lo svantaggio fisico della nuova interfaccia è la dimensione del cavo. Per mantenere l'alta velocità, il cavo è diventato più spesso e più corto (non può essere più lungo di 3 metri) rispetto a USB 2.0. Va notato che è importante che i dispositivi con diverse interfacce USB lo facciano lavoro bene e non dovrebbe essere un problema. Ma non pensare che la velocità aumenterà se colleghi USB 3.0 a una porta più vecchia o colleghi un cavo di interfaccia più vecchio a una nuova porta. La velocità di trasferimento dei dati sarà uguale alla velocità della porta più debole.
Proiezione illustrata del modello di rete OSI sull'Universal Serial Bus.
Stack USB non molto utile
Se il lettore ha avuto sensazioni simili, offro una visione alternativa di uno stack USB, che all'improvviso mi è apparso chiaramente nel mio cervello surriscaldato, basato sull'amato modello OSI a 7 strati. Mi sono limitato a cinque livelli:
Non voglio dire che tutti i software e le librerie siano già stati realizzati o debbano essere progettati sulla base di questo modello. Per ragioni ingegneristiche, il codice con i livelli sarà molto misto. Ma voglio aiutare coloro che iniziano a conoscere il bus USB, che vogliono comprendere i protocolli di scambio dei dispositivi e la terminologia della materia, ad avvicinarsi esempi già pronti, biblioteche e navigarle meglio. Questo modello non è da caricare in MK, ma nelle vostre menti brillanti, cari amici. E poi le tue mani d'oro faranno tutto da sole, non ho dubbi :)
Quindi, andiamo, correggi se vedi errori. Questa è una bozza, e se qualcosa del genere è già stato disegnato da qualche parte, mi scuso, non sono riuscito a trovarlo, quindi l'ho realizzato da solo. Penso che l’immagine non scapperà, ma per ora spiegherò al pubblico rispettabile perché ho iniziato questa pubblicazione.
Un altro flashback degli anni Novanta
Ho eliminato il mio primo bug dal codice di qualcun altro alla fine degli anni Novanta, mentre lavoravo da studente. Era pppd per FreeBSD, che poi abbiamo installato sul pool di modem. I modem Motorola erano bloccati in fase di riaggancio, nessuno riusciva a comunicare, la linea era perduta e l'unico metodo rimasto tramite PPP keep-alive era per qualche motivo difettoso. È stato allora che ho scoperto che per qualche motivo pppd stava aspettando sei byte di risposta LCP invece dei quattro richiesti. Mi sentivo così pazzo allora agitatore di insetti degli anni Novanta :-) Cosa c'entra il PPP? È proprio simile all’USB: pacchetto e punto-punto. È vero, a differenza di USB 2.0, è full duplex.
Mi piaceva l'idea di HID. Ma non appena ho lasciato Windows oltre i compiti didattici dei LED lampeggianti (verso i veri ambienti UNIX!), ha iniziato a filtrare attraverso tutte le crepe non sigillate e mi sono sentito come una specie di zoppo indifeso. Durante il debug del progetto, ho istintivamente preso una sorta di tcpdump (è così che si chiama: usbdump(8) o usbmon), ma ho visto solo messaggi in una lingua sconosciuta.
È diventato ovvio: mancano le conoscenze fondamentali sul bus USB. Se uno specialista IT esperto capisce il modello OSI e lo stack TCP/IP da qualche parte a livello del midollo spinale semplicemente per necessità, allora con USB la situazione è diversa. È comprensibile: lì puoi (è necessario) spiare il traffico attraverso lo stesso tcpdump e configurare l'hardware e il software, ma qui è completamente plug and play e puoi sistemare qualcosa aggiornando il driver o il firmware (o reinstallando il sistema operativo). Ma ci siamo riuniti qui solo per creare un buon firmware, giusto? Dopo aver letto alcune descrizioni USB online, sono rimasto sorpreso da quanto possa essere confusa la documentazione. Ho avuto addirittura la sensazione che volessero deliberatamente portarci fuori strada, diffondendo la nebbia ed eliminando la concorrenza sul nascere. Non sono d'accordo con questo stato di cose!
Inizialmente sembra ottimista. Infine, la pila viene smontata. I fotogrammi però sono poco marcati: li disegnerei con linee tratteggiate verticali, e EOF è solo una pausa, in realtà non viene trasmesso nessun dato. Ma iniziamo a leggere il contesto e perdiamo la comprensione della vera intenzione dell’autore (per confonderci):
Il controller host dell'interfaccia bus USB genera personale;Ed eccone un altro:
Personale trasmesso mediante trasmissione di bit seriale utilizzando il metodo NRZI.
ogni telaioè costituito dalla massima priorità pacchi, la cui composizione è formata dal conducente ospite;
ogni trasmissione consiste in una o più operazioni;
ogni transazione è composta da Pacchetti;
ogni sacchetto di plasticaè costituito da un identificatore di pacchetto, dati (se presenti) e un checksum.
Eccone uno
Sul software è tutto chiaro: sono esempi non per uso industriale, potrebbero esserci dei bug, alcune parti (come la tabella dei collegamenti nell'esempio Mass storage) sono protette da brevetto e non si ha il diritto di utilizzarle in un progetto commerciale. Ma non è niente, i cinesi poi riescono a vendere sul mercato prodotti USB, per i quali non si preoccupano nemmeno di cambiare la libreria VID e PID.
Per il ferro, a quanto ho capito, devi iniziare con il quarzo. Ho una Chelyabinsk PinBoard II con quarzo da 12 MHz (tutte le librerie sono progettate per 8 MHz), ho cambiato il moltiplicatore PLL da 9 a 6 (link con spiegazioni), altrimenti il MK accelererà a 108 MHz invece di 72 MHz, e USB non andrà a 72 MHz invece dei 48 MHz richiesti. Puoi anche rallentare la velocità MK a 48 MHz modificando il divisore del bus USB da uno e mezzo a uno. Agli specialisti non piace utilizzare il generatore interno dell'HSI MK: la frequenza può variare leggermente a causa del riscaldamento ed è difficile prevedere le conseguenze per l'USB. Beh, non dimenticare la periferia, ovviamente. Senza memoria flash SPI/SDIO, dall'esempio della memoria di massa puoi solo creare un analogo di /dev/null, ma non puoi formattarlo :-)
Gli ingegneri elettronici industriali hanno eccellenti conoscenze e competenze nell'hardware; saldano sottilissimi componenti radio con la mano sinistra con gli occhi chiusi (e poi funziona). Guardando circuito elettronico, iniziano quasi fisicamente a sentire tutte le sue correnti con potenziali, lavorano anche con circuiti di potenza e con prodotti industriali (grandi, veloci, pericolosi). L’approccio alla programmazione dell’MK è appropriato: deve semplicemente fornire i livelli logici necessari alle gambe giuste al momento giusto, non importa in che modo. Sono conservatori nella tecnologia (non interferiscono, funziona), le periferiche MK pesanti non sono particolarmente favorite. Quando si parla di programmazione orientata agli oggetti, informazioni di sicurezza, progetti giganteschi con un milione di righe di codice e ogni sorta di fantasiose interfacce grafiche stanno diventando noiosi. Invece del bus USB orientato ai pacchetti, preferiscono la modalità streaming USART, arricchita dal solito RS-232 o dal più brutale RS-485 (bus seriale per applicazioni industriali, fino a 10 Mbit/s a 15 m, fino a 100 kbit/s a 1200m, fino a 32 dispositivi).
Le persone IT sono educate a capire sistemi operativi, infrastrutture di rete e interazioni complesse, l'élite è esperta nella sicurezza delle informazioni e comprende tutti i tipi di modi invisibili per penetrare nel sistema di qualcun altro. Alcune persone amano davvero i gatti (come puoi non amarli? Io, invece, non li allevo, non li allevo e non cucino :-). Molte persone amano la libertà di informazione, criticano le aziende/governi e sconfiggono le forze della natura con il potere del pensiero. Sono patologicamente pigri, ma amano le nuove tecnologie e gli enigmi ingegneristici contorti con giocattoli costosi (preferibilmente risolti a livello di software o, in casi estremi, di jumper). I rapporti con il saldatore sono custoditi: non chiedete all'informatico se gli piace il saldatore, potrebbe fraintendere; Meglio chiedergli se gli piace saldare circuiti elettronici.
Di cosa sto parlando? Vediamo semplicemente questo mondo in modo diverso... Dopotutto kernel Linux Gli stessi ragazzi lo hanno ritagliato dai moduli C e dagli inserti in assembler per piattaforme specifiche, e sembravano cavarsela senza holivar. Vedo un progetto veramente serio come un sistema multi-core che combina gli ultimi microcontrollori con periferiche pesanti, ma non escludo abbinamenti con modelli classici come AVR: possono essere utilizzati per appendere alcune punte di diamante critiche e in rapida rotazione del progresso tecnico. Se il codice è stato testato per anni, perché no?
Aggiungere etichetteUSB (Bus seriale universale- "bus seriale universale") - interfaccia seriale trasferimento dati per periferiche a media e bassa velocità.Per il collegamento viene utilizzato un cavo a 4 fili, con due fili utilizzati per ricevere e trasmettere dati e 2 fili per alimentare il dispositivo periferico. Grazie alle linee integrate Alimentazione USB consente di collegare periferiche senza alimentazione propria.
cavo USB è costituito da 4 conduttori in rame: 2 conduttori di potenza e 2 conduttori dati in doppino intrecciato e una treccia con messa a terra (schermo).
Cavi USB avere suggerimenti fisicamente diversi “al dispositivo” e “all’host”. Possibile Implementazione USB dispositivi senza cavo, con punta “to-host” integrata nel corpo. È anche possibile integrare permanentemente il cavo nel dispositivo(ad esempio, tastiera USB, fotocamera Web, mouse USB), sebbene lo standard lo proibisca per i dispositivi a piena velocità e ad alta velocità.
Bus USB strettamente orientato, ovvero ha il concetto di "dispositivo master" (host, noto anche come controller USB, solitamente integrato nel chip South Bridge su scheda madre) e "dispositivi periferici".
I dispositivi possono ricevere alimentazione a +5 V dal bus, ma potrebbero anche richiedere un'alimentazione esterna. È inoltre supportata una modalità standby per dispositivi e splitter su comando dal bus, rimuovendo l'alimentazione principale mantenendo l'alimentazione in standby e accendendola su comando dal bus.
Supporti USBCollegamento e scollegamento a caldo dei dispositivi. Ciò è possibile grazie all'aumento della lunghezza del conduttore del contatto di terra rispetto a quelli del segnale. Quando connesso connettore USB sono i primi a chiudere contatti di terra, i potenziali delle custodie dei due dispositivi diventano uguali e l'ulteriore collegamento dei conduttori di segnale non porta a sovratensioni, anche se i dispositivi sono alimentati da fasi diverse di una rete di alimentazione trifase.
A livello logico Dispositivo USB supporta le transazioni per la ricezione e la trasmissione dei dati. Ogni pacchetto di ciascuna transazione contiene un numero punto finale sul dispositivo. Quando un dispositivo è connesso, i driver nel kernel del sistema operativo leggono un elenco di endpoint dal dispositivo e creano strutture di dati di controllo per comunicare con ciascun endpoint sul dispositivo. Viene chiamata la raccolta di endpoint e strutture dati nel kernel del sistema operativo tubo.
Endpoint, e quindi i canali, appartengono a una delle 4 classi:
1) flusso (alla rinfusa),
2) manager (controllo),
3) isocrono (isoch),
4) interruzione.
I dispositivi a bassa velocità come un mouse non possono avere canali isocroni e di flusso.
Canale di controllo progettato per lo scambio di brevi pacchetti di domande-risposte con il dispositivo. Qualsiasi dispositivo ha il canale di controllo 0, che lo consente Software Lettura del sistema operativo brevi informazioni informazioni sul dispositivo, inclusi produttore e codici modello utilizzati per selezionare il driver e un elenco di altri endpoint.
Canale di interruzione consente di consegnare pacchetti brevi in entrambe le direzioni, senza ricevere una risposta/conferma, ma con la garanzia dei tempi di consegna: il pacchetto verrà consegnato entro N millisecondi. Ad esempio, utilizzato nei dispositivi di input (tastiere, mouse o joystick).
Canale isocrono consente di consegnare pacchetti senza garanzia di consegna e senza risposte/conferme, ma con una velocità di consegna garantita di N pacchetti per periodo di bus (1 KHz per bassa e massima velocità, 8 KHz per alta velocità). Utilizzato per trasmettere informazioni audio e video.
Canale di flusso fornisce una garanzia di consegna di ciascun pacchetto, supporta la sospensione automatica della trasmissione dei dati a causa della riluttanza del dispositivo (buffer overflow o underrun), ma non garantisce velocità e ritardo di consegna. Utilizzato, ad esempio, in stampanti e scanner.
Orario dell'autobusè suddiviso in periodi, all'inizio del periodo il controllore trasmette il pacchetto “inizio periodo” all'intero bus. Successivamente, durante il periodo, vengono trasmessi i pacchetti di interrupt, poi quelli isocroni nella quantità richiesta, per il restante tempo del periodo vengono trasmessi i pacchetti di controllo ed infine i pacchetti di stream;
Lato attivo dell'autobusè sempre il titolare del trattamento, il trasferimento di un pacchetto di dati dal dispositivo al titolare del trattamento avviene come una breve domanda da parte del titolare del trattamento e una lunga risposta del dispositivo contenente i dati. Il programma di movimento dei pacchetti per ciascun periodo del bus viene creato congiuntamente dall'hardware del controller e dal software del driver, utilizzato da molti controller DMA ad accesso diretto alla memoria (Accesso diretto alla memoria) - modalità di scambio di dati tra dispositivi o tra il dispositivo e la memoria principale, senza partecipazione Processore centrale(PROCESSORE). Di conseguenza, la velocità di trasferimento aumenta poiché i dati non vengono inviati avanti e indietro alla CPU.
La dimensione del pacchetto per un endpoint è una costante incorporata nella tabella degli endpoint del dispositivo e non può essere modificata. Viene selezionato dallo sviluppatore del dispositivo tra quelli supportati dallo standard USB.
Alta velocità di trasferimento (bit rate di segnalazione a piena velocità) - 12 Mb/s
- Lunghezza massima del cavo per velocità di trasferimento elevate - 5 m
- Bit rate di segnalazione a bassa velocità - 1,5 Mb/s
- Lunghezza massima del cavo per baud rate basso - 3 m
- Numero massimo di dispositivi collegati (inclusi moltiplicatori) - 127
- È possibile collegare dispositivi con velocità di trasmissione diverse
- Non è necessario che l'utente installi elementi aggiuntivi come terminatori SCSI
- Tensione di alimentazione per periferiche - 5 V
- Consumo massimo di corrente per dispositivo - 500 mA
I segnali USB vengono trasmessi su due fili di un cavo schermato a quattro fili.
Qui :
GND- circuito “case” per l'alimentazione delle periferiche
V AUTOBUS- +5V anche per circuiti di alimentazione
Pneumatico D+ progettato per la trasmissione dei dati
Pneumatico D- per ricevere dati.
Sebbene la velocità di trasferimento massima Dati USB 2.0 è di 480 Mbit/s (60 MB/s), nella vita reale non è realistico raggiungere tali velocità (~33,5 MB/s in pratica). Ciò è dovuto ai grandi ritardi sul bus USB tra la richiesta di trasferimento dei dati e l'effettivo inizio del trasferimento. Ad esempio, FireWire, sebbene abbia un throughput di picco inferiore di 400 Mbps, ovvero 80 Mbps (10 MB/s) in meno rispetto a USB 2.0, in realtà consente un throughput di trasferimento dati maggiore. dischi fissi e altri dispositivi di archiviazione delle informazioni. A questo proposito diversi drive mobili sono da tempo limitati dalla larghezza di banda pratica insufficiente di USB 2.0.
Fornisce lo scambio di dati tra l'host e il dispositivo. A livello di protocollo, vengono risolti compiti come garantire l'affidabilità e l'affidabilità della trasmissione e il controllo del flusso. Tutto il traffico sul bus USB viene trasferito tramite transazioni; in ogni transazione, lo scambio è possibile solo tra l'host e il dispositivo indirizzato (il suo endpoint).
Tutte le transazioni (scambi) con dispositivi USB sono costituite da due o tre pacchetti. Le tipiche sequenze di pacchetti nelle transazioni sono mostrate in Fig. 1. Ogni transazione viene pianificata e avviata dal controller host, che invia un pacchetto di token di transazione. Il token della transazione descrive il tipo e la direzione del trasferimento, l'indirizzo del dispositivo USB selezionato e il numero dell'endpoint. L'apparecchio indirizzato dal marcatore riconosce il proprio indirizzo e si prepara allo scambio. La fonte dati identificata dal token trasmette il pacchetto di dati. A questo punto, le transazioni relative ai trasferimenti isocroni sono completate: non vi è alcuna conferma della ricezione del pacchetto. Per altri tipi di trasmissioni esiste un meccanismo di conferma che garantisce la consegna garantita dei dati. I formati dei pacchetti sono mostrati in Fig. 2, i tipi di pacco sono nella tabella. In tutti i campi del pacchetto, ad eccezione del campo CRC, i dati vengono trasmessi per primi con il bit meno significativo (il bit meno significativo è mostrato a sinistra nei diagrammi temporali). Il pacchetto inizia con la sequenza Sync e termina con il terminatore - EOP. Il tipo di pacchetto è determinato dal campo PID. Lo scopo dei restanti campi è spiegato di seguito. La lunghezza dei campi Sync ed EOP è specificata per le trasmissioni su FS/LS; per le trasmissioni ad alta velocità, il campo Sync viene esteso a intervalli di 32 bit e l'EOP a 8 (nei pacchetti SOF, il campo EOP è lungo 40 bit). ).
Tutti i pacchetti ricevuti vengono controllati per verificare la presenza di errori, poiché i formati di pacchetto accettati e alcune convenzioni consentono:
Il rilevamento di uno qualsiasi di questi errori in un pacchetto fa sì che il destinatario lo consideri non valido. Né il dispositivo né il controller host rispondono ai pacchetti ricevuti con un errore. Nella trasmissione isocrona, i dati del pacchetto non validi dovrebbero semplicemente essere ignorati (andranno persi); Per altri tipi di trasmissioni vengono utilizzati mezzi per garantire una consegna affidabile.
Per rilevare la mancata risposta del peer a un pacchetto, ciascun dispositivo dispone di un contatore di timeout che smette di attendere una risposta dopo che è trascorso un certo tempo. L'USB ha un limite al tempo di andata e ritorno del bus: il tempo dalla fine dell'EOP del pacchetto generato fino alla ricezione dell'inizio del pacchetto di risposta. Per il dispositivo finale (e il controller host), il ritardo massimo di risposta (tempo di risposta) dalla fine dell'EOP visto all'introduzione dell'inizio del pacchetto è normalizzato. Per gli hub il ritardo di trasmissione dei pacchetti è normalizzato; per i cavi è normalizzato il ritardo di propagazione del segnale. Il contatore di timeout deve tenere conto del ritardo massimo possibile per una configurazione di bus valida: fino a 5 hub intermedi, fino a 5 metri per cavo. Il valore di timeout consentito, espresso in intervalli di bit (bt), dipende dalla velocità:
Il controller host dispone di un proprio contatore di errori associato a ciascun endpoint di tutti i dispositivi, che viene reimpostato su zero quando viene pianificata ogni transazione. Questo contatore conta tutti gli errori di protocollo (inclusi gli errori di timeout) e se il numero di errori supera la soglia (3), il canale con questo endpoint viene arrestato e il suo proprietario (driver del dispositivo o USBD) viene informato. Fino al superamento della soglia, l'host gestisce gli errori relativi ai trasferimenti non isocroni tentando di ritentare le transazioni, senza avvisare il software client. I trasferimenti isocroni non vengono ripetuti; l'host segnala immediatamente gli errori.
I pacchetti di handshake vengono utilizzati per il riconoscimento, il controllo del flusso e la segnalazione degli errori. Di questi pacchetti, l'host controller può inviare al dispositivo solo un pacchetto ACK, confermando la corretta ricezione del pacchetto dati. Il dispositivo utilizza i seguenti pacchetti di handshake per rispondere all'host:
ACK - conferma (positiva) del completamento con successo di una transazione di output o di controllo;
NAK - conferma negativa, è segno che il dispositivo non è pronto per eseguire questa transazione (non ci sono dati da trasmettere all'host, non c'è spazio nel buffer per la ricezione, l'operazione di controllo non è stata completata). Questa è una risposta normale di cui nessuno verrà a conoscenza tranne il controller host, che sarà costretto a ripetere la transazione in seguito. Nelle transazioni di input, il dispositivo fornisce una risposta NAK invece di un pacchetto di dati se non sono pronti;
STALL è un messaggio di errore grave che significa che senza un intervento software speciale, lavorare con questo endpoint diventa impossibile. Questa risposta viene comunicata sia al driver USBD, che annulla ulteriori transazioni con questo punto, sia al driver client, da cui si attende l'intervento del software per sbloccare il punto. Nelle transazioni di controllo (Control), la risposta STALL significa non eseguibile di questa richiesta; Non è necessario sbloccare il punto.
Il controllo del flusso di uscita che si basa esclusivamente sulla capacità di rispondere con un NAK se il dispositivo non è pronto costituisce un uso molto inefficiente della larghezza di banda del bus: un grande pacchetto di dati viene sprecato sul bus per garantire che il dispositivo non sia pronto. In USB 2.0, questo problema viene evitato nelle transazioni Bulk-OUT e di controllo utilizzando il protocollo Ping. L'host può verificare la disponibilità del dispositivo a ricevere una dimensione massima del pacchetto inviandogli un token sonda PING. Il dispositivo può rispondere a questo token con un ACK (se pronto) o un NAK (se non è in grado di ricevere la dimensione massima del pacchetto). Una risposta negativa costringerà l'host a riprovare più tardi, una risposta positiva gli consentirà di eseguire una transazione di output. Ad una transazione di prelievo dopo una risposta positiva al test, le risposte del dispositivo sono più varie:
Il dispositivo ad alta velocità nei descrittori dell'endpoint segnala la possibile intensità degli invii NAK: il campo bInterval per gli endpoint Bulk e Control indica il numero di microframe per NAK (0 significa che il dispositivo non risponderà mai con un NAK a una transazione di output).
I trasferimenti di array, interruzioni e controlli garantiscono una consegna affidabile dei dati. Dopo aver ricevuto con successo il pacchetto, il ricevitore dati invia una conferma: un pacchetto di conferma ACK. Se il ricevitore dati rileva un errore, il pacchetto viene ignorato e non gli viene inviata alcuna risposta. La sorgente dati considera che il pacchetto successivo è stato trasmesso con successo quando riceve un ACK dal ricevitore. Se la conferma non arriva, nella transazione successiva la sorgente ripete l'invio dello stesso pacchetto. Tuttavia, il pacchetto di riconoscimento potrebbe andare perso a causa dell'interferenza; affinché in questo caso il ripetuto invio del pacchetto da parte del destinatario non venga percepito come la porzione di dati successiva, i pacchetti di dati vengono numerati. La numerazione è modulo 2 (numero a 1 bit): i pacchetti sono divisi in pari (con identificatore DATA0) e dispari (DATA1). Per ciascun endpoint (eccetto isocrono), l'host e il dispositivo dispongono di bit di commutazione, i loro stati iniziali sono coerenti in un modo o nell'altro. Le transazioni IN e OUT trasmettono e attendono pacchetti di dati con identificatori DATA0 o DATA1, corrispondenti allo stato corrente di questi bit. Il ricevitore dati cambia il suo bit in caso di ricezione senza errori dei dati con l'identificatore previsto, la fonte dati cambia dopo aver ricevuto la conferma. Se il destinatario riceve un pacchetto privo di errori con un ID imprevisto, invia un ACK, ma ignora i dati nel pacchetto perché il pacchetto è una ritrasmissione di dati che sono già stati ricevuti.
Transazioni per vari tipi le trasmissioni presentano differenze di protocollo dovute alla garanzia o meno di throughput, tempi di risposta, affidabilità di consegna e sincronizzazione di input e output. A seconda di queste caratteristiche, le transazioni utilizzano l'uno o l'altro dei meccanismi del protocollo sopra descritti. Tieni presente che il rilevamento degli errori di trasmissione funziona in tutte le transazioni, quindi i dati ricevuti per errore vengono sempre ignorati. Quali meccanismi di protocollo vengono utilizzati nella transazione corrente sono "conosciuti" sia dal controller host (in base al descrittore dell'endpoint ricevuto in precedenza) sia dal dispositivo USB in cui è implementato questo endpoint.
Le transazioni isocrone forniscono tassi di cambio garantiti, ma non forniscono una consegna affidabile. Per questo motivo nel protocollo non sono presenti conferme, poiché la riproduzione dei pacchetti causerà il fallimento dei piani di consegna dei dati. Non esiste un controllo del flusso basato sul riconoscimento: il dispositivo deve mantenere la velocità del traffico dichiarata nel descrittore dell'endpoint isocrono.
Le transazioni di output isocrone sono costituite da due pacchetti inviati dal controller host, un token OUT e un pacchetto di dati DATA. In una transazione di input, l'host invia un token IN, al quale il dispositivo risponde con un pacchetto di dati, possibilmente con una lunghezza del campo dati pari a zero (se non ci sono dati pronti). Qualsiasi altra risposta da parte del dispositivo (così come il "silenzio") viene considerata dall'host come un errore che porta all'arresto di questo canale.
Con lo scambio isocrono, c'è il controllo dell'affidabilità (scartando i pacchetti con errori) e dell'integrità dei dati (rilevando il fatto di un pacchetto mancante). Il controllo dell'integrità si basa sul rigoroso determinismo del tasso di cambio: secondo il suo descrittore, il punto prevede una transazione con un periodo di microframe 2bInterval-1. Per un tipico endpoint isocrono, è possibile solo una transazione per microframe e un errore durante la ricezione di un pacchetto fa sì che i dati ricevuti non vengano ricevuti nel microframe in cui erano previsti. Pertanto, la numerazione dei pacchetti (interruttore Toggle Bit) non è richiesta. I dispositivi a piena velocità e i controller host dovrebbero inviare solo pacchetti di tipo DATA01. Per gli endpoint isocroni a banda larga (USB 2.0), in ogni microframe possono essere trasmessi fino a tre pacchetti di dati. Ognuno di questi pacchetti può andare perso e per rilevare questa situazione è necessaria la numerazione dei pacchetti all'interno del microframe. Per questa numerazione sono state introdotte due nuove tipologie di pacchetti dati: DATA2 e MDATA. La varietà dei tipi di pacchetti, oltre alla numerazione, consente anche di informare il proprio interlocutore di comunicazione sui propri piani per un determinato microframe. Nelle transazioni IN, il dispositivo indica tramite l'identificatore del pacchetto quanti altri pacchetti intende emettere nello stesso microframe, consentendo all'host di evitare tentativi di input non necessari. Quindi, se un pacchetto viene trasmesso in un microframe, sarà DATA0; se due la sequenza sarà DATA1, DATA0; tre: DATI2, DATI1, DATI0. Le transazioni OUT utilizzano un pacchetto MDATA (More Data) per emettere il non ultimo pacchetto in un microframe e l'ultimo identificatore di pacchetto indica quanti pacchetti sono stati trasmessi prima di esso. Quindi, con una transazione in uscita viene utilizzato il pacchetto DATA0, con due - la sequenza MDATA, DATA1, con tre - MDATA, MDATA, DATA2. Tutte le transazioni tranne l'ultima in un microframe devono utilizzare la dimensione massima del pacchetto. Si noti che altre transazioni possono essere inserite tra transazioni a banda larga in un microframe.