Bus USB
L'Universal Serial Bus (usb) è un particolare tipo di bus, sviluppato nel 1995 (nel 1998 per Personal Computer) da
un insieme di aziende (Compaq, Digital, IBM, Intel, Microsoft, NEC e Northern Telecom) allo scopo di utilizzare
un'unica interfaccia per collegare periferiche accessorie, sostituendo le porte parallele e seriali e altri ingressi e uscite
presenti sui computer.
Nel 1995 nasce anche il Forum di Implementatori USB (USB IF), allo scopo di supportare ed accelerare l'adozione da
parte del mercato e del consumatore di periferiche USB.
Le specifiche USB hanno garantito all'industria un approccio uniforme per lo sviluppo di prodotti, al fine di permettere
un'interoperabilità senza soluzione di continuità attraverso un unico connettore ed una sola porta per tutte le
necessità.
Questo bus è stato progettato con queste intenzioni:
• Facilità d'uso
• Collegamento del PC al telefono
• Aumento del numero di periferiche da collegare
Il primo standard USB(versione 1.0) è stato rilasciato nel Gennaio del 1996 e la versione ufficiale(versione 1.1) è stato
rilasciata nel settembre 1998,l'ultima versione(versione2.0) è stata rilasciata nel 2001 sebbene ancora non ci siano
molti dispositivi che supportano quest'ultima versione.
L'USB è severamente gerarchico ed è controllato da un host. L'host usa un protocollo master/slave per comunicare
con i dispositivi USB ad esso collegati. Questo vuole dire che ogni genere di comunicazione è comandata dall'host e le
apparecchiature non possono stabilire alcuno collegamento diretto con altre apparecchiature. Il protocollo
master/slave risolve implicitamente problemi come conflitti di bus o simili.
Nelle sezioni sucessive parleremo più nel dettaglio di questo dispositivo.
L'Universal Serial Bus(USB)
Per unire i vantaggi delle seriali e quelli delle parallele è nato l'USB, altrimenti
detto Universal Serial Bus. Al pari delle seriali può utilizzare cavi molto lunghi,
ma come le parallele può accogliere sullo stesso canale più dispositivi dialoganti
a velocità maggiori di quelle permesse dalla parallela stessa. Queste porte sono
di solito presenti sulla motherboard e possono portare l'alimentazione elettrica
ai dispositivi ad esse collegati, riducendo il numero di cavi necessari.
E' uno standard per la connessione di periferiche al personal computer che si pone come
obiettivi :
•
•
•
•
Connessione al pc dall’esterno del case
Unico tipo di cavo, in grado di distribuire anche l'alimentazione
Connessione fino a 127 dispositivi ad un unico computer
Supporto per dispositivi real-time (audio, video)
CARATTERISTICHE/BENEFICI
Le specifiche dell'USB provvedono alla selezione di attributi che possono compiere diverse integrazioni dipendenti dal
prezzo e quindi dalle prestazioni e può attivare funzioni che permettono la differenziazione del sistema.
Fisiche
• Compatto, in contenitore funzionale
• Possibilità di utilizzare terminazioni esterne o integrate nel contenitore
• Non è necessaria nessuna alimentazione esterna, il bus è autoalimentato
I principali vantaggi del nuovo bus sono:
• Facile da usare per gli utenti: unico modello per cavi e connettori, identificazione autonoma delle periferiche,
mappatura e configurazione automatica delle funzioni, allocazione dinamica e riconfigurazione delle periferiche.
•Ampia gamma di lavori e applicazioni: Adatto per dispositivi con bandwidth da pochi kbs a molti Mbs;
supporto di trasferimento isocrono e asincrono sullo stesso filo;
•Connessione multipla: supporta operazioni concorrenti di molti dispositivi; supporta il collegamento di 127
periferiche;supporta trasferimenti multipli di dati e messaggi fra Host e dispositivo;
tollera dispositivi compositi di diverse funzioni.
•Banda isocrona: garantisce bande appropriate per telefoni, periferiche audio etc.; il lavoro isocrono usa l'intera
banda del bus.
•Flessibilità: ampia gamma di velocità di trasferimento dati; flusso di controllo per buffer costruiti nel protocollo.
•Robustezza: meccanismi di gestione errore e default costruiti nel protocollo; inserzione e rimozione dinamica di
dispositivi identificati dall'utente in tempo reale;identificazione di dispositivi difettosi.
•Sinergia con l'industria informatica: semplici protocolli da implementare e integrare; attinenza con l'architettura
PLUG&PLAY; influenzato da interfacce esistenti con diversi sistemi operativi
•Bassi costi di implementazione: basso costo periferiche a 1.5Mbs; ottimizzato per l'integrazione hardware di Host
e periferiche; adatto per lo sviluppo di periferiche a basso costo;basso costo dei cavi e dei connettori;
Alcuna applicazioni tipiche per i sistemi di acquisizione su bus USB sono:
http://guidepc.altervista.org
-Test automatizzati e misure
-Registrazione di misure
-Misure di temperature
-Controllo qualità
-Test elettronici
-Test su semiconduttori
etc...
Ci sono diversi tipi di dispositivi USB e possono essere usati per scopi diversi.
Un dispositivo USB, come prima cosa, può essere autoalimentato, alimentato tramite il bus o gestire entrambe le
soluzioni. L'USB può fornire un'alimentazione ai dispositivi fino a 500mA per ogni periferica. Se ci fossero solo
dispositivi alimentati tramite bus si avrebbe troppa dissipazione di potenza ecco perchè esistono apparecchiature
autoalimentate. I dispositivi che supportano entrambi i tipi di alimentazione possono diventare autoalimentati solo nel
momento in cui vi è fornita un'alimentazione esterna. Anche la massima velocità di comunicazione può differire a
seconda del tipo di periferica USB presa in esame. Le specifiche USB decidono tra dispositivi a bassa velocità o ad alta.
Quelli a bassa velocità (come mouse, tastiere, Joystick etc...) comunicano ad 1.5 Mb/s e hanno solo capacità limitate.
I dispositivi ad alta velocità invece (come i sistemi audio e video) possono usare fino al 90% dei 12Mb/s
utilizzabili,corrispondenti a circa 10 Mb/s inclusi nell'overhead del protocollo.
Caratteristiche Tecniche
L'USB rappresenta un tipo di bus in cui i vari componenti si possono collegare in una struttura che ricorda quella
dell'albero.
In questo tipo di bus, le comunicazioni sono controllate da un protocollo che non
consente alle unità periferiche di comunicare direttamente tra di loro.
Il bus USB è fatto per connettere unità periferiche esterne a un elaboratore, al
contrario di SCSI, che prevede la possibilità di un collegamento interno e di uno
esterno. Il bus USB ha un collegamento speciale, attraverso connettori di tipo
differente, a seconda che si tratti del lato rivolto verso l'unità periferica (il tipo «B»,
a destra), oppure verso l'unità di controllo (il tipo «A», a sinistra).
La continuazione del bus avviene attraverso
dei concentratori (HUB), che da un alto si
collegano come unità periferiche e dall'altro
offrono più connettori uguali a quelli dell'unità di controllo. In particolare, l'unità
di controllo viene definita anche root hub, come dire che si tratta del primo
concentratore della struttura.
Il bus USB consente di collegare un massimo di 127 dispositivi, oltre all'unità di
controllo. In questo numero vanno contati anche i concentratori. A differenza del
bus SCSI, qui i dispositivi non devono essere numerati manualmente, perché a
questo provvede automaticamente il sistema.
http://guidepc.altervista.org
Prima di andare avanti nella discussione tecnica è bene fare qualche precisazione sugli hub per meglio capire il loro
significato e la loro funzione.
Gli Hub sono un elemento chiave dell'architettura PLUG&PLAY dell'USB. L'Hub serve a semplificare la connessione di
periferiche USB dalla prospettiva dell'utente e provvede inoltre a rendere il sistema robusto e complesso mantenendo
un basso costo. Gli Hub infatti sono concentratori di fili permettendo multiple connessioni, peculiari dello standard
USB. Ogni Hub converte ogni porta in più porte. L'architettura può supportare la concatenazione di molti Hub. La porta
d'entrata può essere collegata al rootHub integrato nell'Host. Le altre porte finali di un Hub permettono la connessione
di altri Hub o di altre funzioni. Gli Hub possono riconoscere quando un dispositivo è collegato e quindi attivarli. Inoltre
ogni porta d'uscita può essere configurata indipendentemente scegliendo ad esempio alta o bassa velocità di
trasmissione che viene riconosciuta dall'Hub e quindi segnalata. L'Hub è formato di 2 porzioni: l'Hub controller e l'Hub
repeater. Il repeater è un protocollo attuato tra porta sorgente e la porta finale. Ha anche un supporto hardware per il
reset o la sospensione dell'attività. Il controllore invece provvede all'attivazione dei registri di interfaccia per
permettere la comunicazione da o verso l'Host. L'Hub specifica segnali di stato e di controllo che permettono all'Host
di configurarlo e di controllarlo.
Una caratteristica molto importante del bus USB è la possibilità di alimentare i dispositivi che vi si collegano,
attraverso il collegamento del bus stesso.
Un dispositivo USB comune può essere alimentato anche in modo indipendente, soprattutto se il suo consumo è
elevato; tuttavia, il fatto che l'alimentazione esterna non sia sempre necessaria, consente di ridurre il cablaggio per la
connessione di componenti esterni, soprattutto quando questi sono di piccole dimensioni.
Per prima cosa occorre comprendere un po' la logica delle connessioni USB, dal punto di vista fisico.
Si può osservare che i terminali utilizzati per l'alimentazione sono quelli più esterni; inoltre, i terminali interni per i
dati, hanno una polarità invertita rispetto all'alimentazione.Anche i terminali che sporgono da una
scheda madre rispettano questa logica, tenendo conto che, se esistono cinque terminali, uno va
collegato alla massa esterna, in modo distinto dall'alimentazione negativa. Una disposizione tipica
dei piedini di una scheda madre è questa:
alimentazione +5 V;
dati, terminale negativo;
dati, terminale positivo;
massa dell'alimentazione (0 V);
In queste condizioni, è necessario verificare almeno i terminali che sono adibiti al trasporto dell'alimentazione,
attraverso uno strumento di misura. A elaboratore spento, si può verificare quali piedini risultano essere collegati
direttamente alla massa; se sono due per ogni fila, quello più interno dovrebbe corrispondere alla massa di
alimentazione (0 V), mentre quello più esterno dovrebbe essere collegato alla massa vera e propria. Il terminale
esterno opposto di ogni fila, dovrebbe essere il positivo di alimentazione (+5 V), mentre i due terminali rimanenti
dovrebbero essere quelli dei dati, con polarità alternate (vicino al positivo di alimentazione dovrebbe trovarsi il
negativo dei dati; vicino al negativo di alimentazione, dovrebbe trovarsi il positivo dei dati). Se ci sono due file
parallele di terminali, si può verificare che i piedini esterni riguardano l'alimentazione, perché risultano collegati
assieme (i due terminali del positivo di alimentazione sono collegati tra loro, così come i due o i quattro terminali di
massa). Accendendo l'elaboratore si può verificare che il terminale positivo dell'alimentazione ha una tensione di (+5
V).
Le unità di controllo USB sono fondamentalmente di due tipi, in base alla loro compatibilità con lo standard OHCI
(Open host controller interface) o con lo standard UHCI (Universal host controller interface). Il secondo tipo è più
semplice e più economico, ma richiede un carico maggiore per la CPU, a causa della maggiore complessità del
software di gestione relativo.
Struttura fisica
Un sistema USB si costruisce a
partire da questi elementi:
• L'host,un PC equipaggiato
con il controllore e il
software USB
• I dispositivi USB
compatibili,separabili in due
classi :periferiche e hub
• I cavi di interconnessione
Una periferica può essere collegata
all'host in modo diretto oppure
attraverso i dispositivi intermedi detti
hub.Questi hanno il compito di
moltiplicazione delle porte e possono
essere a sé stanti (con la sola
funzione di moltiplicatore di porte
così come illustrato nella figura).
http://guidepc.altervista.org
La radice dell'albero della rete USB risiede concettualmente sul controllore dell'host. Se l'host dispone di più
porte,queste vanno considerate come le porte downstream dell'hub dell'host.
Elemento fondamentale dell'USB è la sua componente software. Sul calcolatore host deve essere presente il cosiddetto
software USB di sistema ,cioè una componente da guardare come parte integrata nel sistema operativo, esattamente
come il protocollo TCP/IP.
Non è pensabile di gestire direttamente un periferico USB.
Il software applicativo vede ciascuna periferica come a sé stante,indipendentemente dal livello fisico in cui si trova e
indipendentemente dal fatto che sia connessa direttamente all'hub radice o ad altro hub.
Il trasferimento dei dati avviene fisicamente attraverso le variazioni di tensione differenziale fra due dei quattro cavetti
costituenti il cavo USB.L'osservazione delle variazioni della tensione differenziale consente di riconoscere la
connessione/disconnessione degli apparati.L'host è anche in grado di riconoscere se la periferica è ad alta velocità o
bassa velocità.
E' solo attraverso i servizi forniti dal software USB(SWU)che i programmi applicativi hanno accesso alle periferiche
connesse.In questo senso SWU può essere riguardato come uno strato che si interpone tra il controllore del bus e i
programmi applicativi e che detiene il controllo assoluto di ogni tipo di informazione scambiata fra le applicazioni e le
periferiche connesse al bus.SWU monitorizza costantemente il bus e provvede a instaurare i flussi comunicativi tra i
programmi di utente e le periferiche ,anche in base all'occupazione di banda.
Una periferica, per quanto costituisca un dispositivo passivo, deve necessariamente essere dotata di intelligenza, in
modo da riprodurre la pila (stack) del protocollo.Le periferiche USB sono di norma realizzate attorno a un
microcontrollore che si fa carico di gestire lo scambio dei dati secondo il modello a strati.
http://guidepc.altervista.org
Il protocollo e il formato dei pacchetti
Il trasferimento dati su un bus USB avviene attraverso un protocollo che è strutturato in maniera molto simile al
protocollo di trasmissione dati in internet(TCP/IP), i dati infatti vengono suddivisi in pacchetti e così inviati nell'uno e
nell'altro verso.Andiamo a vedere più nel dettaglio.
Il protocollo è strutturato a livelli:
• Livello di interfaccia al bus:(LIB) contiene i componenti hardware che serializzano il pacchetto inviato sul
cavo. Le interfacce sono differenti a seconda che si tratti dell'host o della periferica;di ese fa comunque parte
il cosiddetto SIE (Serial Interface Engine),la logica che si interfaccia direttamente al cavo.
• Livello di periferica logica:(LPL) Sull'host è costituito da SWU, mentre sulla periferica è costituito dalla
logica per trattare i flussi di controllo.
• Livello funzionale(LF):Costituito dal software utilizzatore sull'host e dalla funzione vera e propria della
periferica .Un applicativo residente sul PC vede la periferica USB come se essa fosse direttamente connessa al
PC.
Il trasferimento dati consistono di pacchetti; si hanno 4 tipi di pacchetti:
– token
– data
– handshake
– special
Ogni pacchetto è diviso in campi di 8 bit (o multipli di 8) ciascuno. I bit vengono inviati sul bus dal bit meno
significativo al più significativo.
STRUTTURA DEI PACCHETTI Tutti i pacchetti iniziano con un campo di sincronizzazione (SYNC), costituito da una
sequenza codificata in grado di generare la massima densità di fronti di transizione.Del SYNC fa parte il cosiddetto
SOP (Start Of Packet), un sottocampo che marca l'inizio effettivo del pacchetto.
Dopo il SYNC viene trasmesso un campo di 8 bit identificativo del tipo di pacchetto (PID). Il PID differenzia di quattro
tipi di pacchetto a loro volta differenziati in sottotipi tramite il nome (SOF,IN,OUT,DATA...)la differenziazione è data
dalla codifica del campo PID.
Andiamo,ora, ad analizzare i vari tipi di pacchetti.
I pacchetti di tipo token: possono essere emessi solo dall'host e, in pratica, rappresentano comandi o sollecitazioni
per la rete USB. Il formato di questo tipo di pacchetto è il seguente:
PID| ADDR| ENDP|CRC
Il campo PID (8bit)specifica tipo e sottotipo di pacchetto qui di seguito specificati:
– SOF:Indicatore di inzio frame e numero del frame.
– IN: chiede dati al dispositivo (lettura);
—OUT: avvisa ildispositivo che stanno per arrivargli dati (scrittura); la
parte variabile è device identifier + endpoint
– SETUP: per la configurazione
Il campo ADDR(7 bit)contiene l'indirizzo assegnato alla periferica;
Il campo ENDP(4 bit)identifica il terminatore sulla periferica indirizzata;
Il campo CRC(5 bit) è il Cyclic Redundancy Check a cui dedicheremo più avanti un paragrafo.
Un pacchetto Dati ha il seguente formato:
PID|DATA|CRC
Il campo DATA è al massimo di 1024 byte ;
Il campo CRC è di 16 bit.
I pacchetti di tipo Handshake sono costituiti dal solo campo PID e vengono utilizzati per riportare lo stato di una
transizione.Si dividono a loro volta in tre tipi :
— ACK:il ricevente ha accettato i pacchetti data senza errori ;
— NACK:il ricevente non accetta i pacchetti dati oppre la trasmittente non può inviarne;
—STALL: l'endpoint è bloccato o non è esaudibile una richiesta di control pipe.
Cyclic Redundancy Check
Come abbiamo visto nella sezione precedente, parlando dei protocolli di trasmissione dati nell'USB, nei pacchetti di
tipo token e nei pacchetti di tipo dati si trova un campo chiamato CRC (Cyclic Redundancy Check).
Il CRC è utilizzato per proteggere tutti i campi non PID.Per generare il CRC si usano degli algoritmi implementati in
Perl.
I CRC sono utili in quanto riescono a rilevare sia gli errori singoli che gli errori multipli con un piccolo numero di bit.
I protocolli di comunicazione generalmente usano due campi CRC, uno per proteggere l'"header" del pacchetto l'altro
per protegger la parte "data" del pacchetto.Nel pacchetto USB l'header è rappresentato dal campo PID;questo campo
è lungo solo quattro bit ed è protetto da un campo di check di soli 4 bit ottenuto da una semplice inversione del wisebit del campo PID.
La porzione data del pacchetto USB,che è lungo 11 bit per i pacchetti di tipo token e max 1024 byte per i pacchetti
data, è protetta da un campo CRC :
• per i pacchetti di tipo token è un campo di 5 bit
• per i pacchetti data è un campo di 16 bit.
La specifica USB elenca due generatori polinomiali di CRC, uno per i pacchetti di tipo token e l'altro per il pacchetto
data :
http://guidepc.altervista.org
•
•
Generatore polinomiale di CRC per i Pacchetti token:
x^5+x^2+x^0
Generatore polinomiale di CRC per i pacchetti data:
x^16+x^15+x^2+x^0.
Generazione di CRC per l'USB
Per generare il CRC relativo ad un dato in input si deve dividere quest'ultimo con il polinomio generatore;se il bit più
significativo (MSB) del numeratore (dato in input) è 1 il divisore (polinomio generatore) è sottratto dal numeratore per
generare un nuovo numeratore(Nell'aritmetica binaria questa sottrazione corrisponde ad uno XOR).Lo stesso passo è
ripetuto per il prossimo MSB in sequenza attraverso tutti i bit incluso il bit meno significativo (LSB).A questo punto si
moltiplica il resto ottenuto da questa divisione, moltiplicato per quattro, con il polinomio generatore di grado d (d=5
per i pacchetti token, d=16 per i pacchetti data ).
La verifica del CRC a destinazione è equivalente alla generazione del CRC per un dato in trasmissione che sarà il dato
originale seguito dal resto invertito.
Programmi per la generazione di CRC
I seguenti due programmi inPerl (CRC5 e CRC16) sono usati per la verifica rispettivamente dell'implementazione del
token CRC e data CRC .
PROGRAMMA PER L'IMPLEMENTAZIONE DEL CRC TOKEN
#! /usr/local/bin/perl
## crc5 nrzstream
## e.g. crc5 1000111
## nrz stream is sent in left to right order
## generated crc should also be sent out in left to right order
sub xor5 {
local(@x) = @_[0..4];
local(@y) = @_[5..9];
local(@results5) = ();
for($j=0;$j<5;$j++) {
if (shift(@x) eq shift(@y)) { push(@results5, '0'); }
else { push(@results5, '1'); }
}
return(@results5[0..4]);
}
{
local($st_data) = $ARGV[0];
local(@G) = ('0','0','1','0','1');
local(@data) = split (//,$st_data);
local(@hold) = ('1','1','1','1','1');
if (scalar(@data) > 0) {
loop5: while (scalar(@data) > 0) {
$nextb=shift(@data);
if (($nextb ne "0") && ($nextb ne "1")) {next loop5} ## comment
character
if ($nextb eq shift(@hold)) {push(@hold, '0')}
else { push(@hold, '0'); @hold = &xor5(@hold,@G); }
## print (@hold); print "\n";
}
}
## print (@hold); print "\n";
## invert shift reg contents to generate crc field
for ($i=0;$i<=$#hold;$i++) {if (@hold[$i] eq "1") {print("0")} else {
print("1")} }
print "\n";
}
PROGRAMMA PER L'IMPLEMENTAZIONE DEL CRC TOKEN
#! /usr/local/bin/perl
## usage:
## crc16 nrzstream
## nrz stream is sent in left to right order
## generated crc should also be sent out in left to right order
sub xor16 {
local(@x) = @_[0..15];
local(@y) = @_[16..31];
local(@results16) = ();
for($j=0;$j<16;$j++) {
if (shift(@x) eq shift(@y)) { push(@results16, '0'); }
http://guidepc.altervista.org
else { push(@results16, '1'); }
}
return(@results16[0..15]);
}
{
local($st_data) = $ARGV[0];
local(@G) =
('1','0','0','0','0','0','0','0','0','0','0','0','0','1','0','1');
local(@hold) =
('1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1');
local(@data) = split (//,$st_data);
if (scalar(@data) > 0) {
loop16: while (scalar(@data) > 0) {
$nextb=shift(@data);
if (($nextb ne "0") && ($nextb ne "1")) {next loop16} ## comment
character
if ($nextb eq shift(@hold)) {push(@hold, '0')}
else { push(@hold, '0'); @hold = &xor16(@hold,@G); }
}
}
# print (@hold); print "\n";
## invert shift reg to generate CRC field
for ($i=0;$i<=$#hold;$i++) {if (@hold[$i] eq "1") {print("0")} else {
print("1")} }
print "\n";
}
Specifiche USB 1.0
Ci sono delle specifiche che il costruttore deve rispettare perchè il dispositivo funzioni correttamente,andiamo a vedere
in linea generale quali sono queste specifiche.
Le specifiche USB 1.0 fissano delle limitazioni riguardanti il ritardo di propagazione fissato ad un massimo di 30ns,la
lunghezza del cavo fissata a 5 metri e una tensione di alimentazione minima fissata a 4.4V.
• Dalle specifiche elettriche del segnale USB si sa che per ogni tipo di cavo il ritardo di propagazione massimo
deve essere 30ns. Poichè il ritardo di propagazione varia da 3 a 6ns per metro la lunghezza massima del cavo
può essere fissata a 5 metri.
• Il limite di tensione è fissato per valori compresi fra 4.4 e 4.75V, ma la scelta della tensione d'ingresso a cui
operare è relativa al tipo di dispositivo se esso è ad alta potenza o a bassa potenza.
I motivi fondamentali che limitano la lunghezza del cavo sono due:
• Prestazioni in termini di alimentazione
• Prestazioni in termini di tempo e sincronizzazione
Limitazioni di potenza
I limiti sulla lunghezza del cavo sono necessari per il mantenimento della potenza di alimentazione del dispositivo
connesso al bus USB e per il mantenimento della potenza sullo stesso bus.
Le specifiche di progetto per icostruttori su questo punto sono molto flessibili in quanto permettono al costruttore di
scegliere se alimentare il dispositivo direttamente dal bus o se fornirlo di cavo ausiliario per l'alimentazione.Dunque
non si possono usare cavi di qualunque lunghezza nè tanto meno si possono collegare un connettore ed una presa con
una cavo teoricamente di lunghezza nulla, fra i due può infatti esserci interazione senza comunque garantire la
tensione al dispositivo.
Limitazioni temporali
La lunghezza del cavo è importante anche per il mantenimento del segnale di sincronizzazione su cui è basato il
trasferimento del protocollo.
Viene dunque fissata la distanza massima entro la quale il segnale si può propagare mantenendo una buona qualità.
Il bus USB è un bus Master/Slave non un bus P2P e questo sta a significare che la direzione del segnale del buffer
guidante è controllato dal Master e la sincronizzazione per il cambio della direzione è settata nell'architettura del
protocollo.
Un cavo che è più lungo del massimo limite fissato dalla specifica causerà l'inserimento del dispositivo sul bus nella
direzione sbagliata.Questi conflitti causeranno un non riconoscimento dei dispositivi e/o lo spegnimento dei dispositivi
e degli hub.
http://guidepc.altervista.org