Come configurare smartphone e PC. Portale informativo
  • casa
  • notizia
  • USB OTG in uno smartphone: cos'è e come utilizzare OTG. Collegamento di dispositivi host USB ad Android

USB OTG in uno smartphone: cos'è e come utilizzare OTG. Collegamento di dispositivi host USB ad Android

Scorrendo le caratteristiche di smartphone o tablet su Android, ci si imbatte spesso nella sigla USB OTG. La prima parte è familiare e comprensibile dalle unità flash e la seconda solleva la domanda: che tipo di animale è questo e ne ho bisogno? Il nome della tecnologia è oscuro, ma OTG è una cosa utile per qualsiasi utente pratico di smartphone. Scopriamo perché OTG è necessario in un dispositivo mobile.

USB OTG: che cos'è

OTG sta per "in movimento". in fuga. Lo standard consente ai dispositivi di "parlare" tra loro senza l'aiuto di un intermediario. Supponiamo che tu decida di stampare foto da uno smartphone o di copiare file da esso su una chiavetta USB, ma non c'era il computer a portata di mano. Cosa fare? Corri al negozio per un cavo speciale (foto sotto). Con l'aiuto di un tale "laccio", puoi collegare direttamente il tuo smartphone a quasi tutti i dispositivi tramite USB, bypassando un intermediario sotto forma di computer o laptop.

Le possibilità di USB OTG non finiscono qui. Uno smartphone può fungere da host USB, consentendo di collegare varie periferiche: tastiera, mouse e persino strumenti musicali con il controller appropriato.

USB OTG ha il suo logo. Tira fuori la confezione del tuo smartphone o tablet e guarda la scatola. Se vedi il logo standard, il dispositivo supporta questo utile standard. Se il pacco è andato perso da molto tempo, digita il modello del tuo smartphone e la sigla OTG in un qualsiasi motore di ricerca e leggi le specifiche tecniche al primissimo link, verrà menzionato il supporto standard. Un'opzione alternativa è scaricare l'app gratuita USB Host Diagnostic da Google Play.

Come utilizzare OTG su smartphone o tablet.

Innanzitutto, dovrai acquistare un cavo OTG speciale. In secondo luogo, potresti aver bisogno di un'applicazione speciale, come il già citato USB Host Controller o Total Commander. Le app possono essere scaricate da Google Play. Il cavo per OTG è economico: da 70 rubli su Aliexpress a 100-200 nel salone di comunicazione o nel negozio online più vicino.

Cosa si può fare con OTG

Lo standard consente di collegare una varietà di dispositivi tramite USB al proprio smartphone, sia per la memorizzazione dei dati che per espandere le funzionalità del proprio smartphone/tablet. Diciamo che non hai un computer, non usi il cloud storage e la memoria del tuo smartphone è quasi completamente occupata da film, musica, foto e video. La via d'uscita è acquistare un disco rigido (esterno), un cavo OTG e utilizzare l'unità come dispositivo di backup dei dati. Un'opzione alternativa consiste nell'utilizzare un'unità flash capiente.

Quali dispositivi possono essere collegati a uno smartphone OTG

L'elenco delle periferiche collegate ad uno smartphone tramite OTG è ampio, ci limiteremo ai dispositivi più diffusi:

  • Chiavetta USB.
  • Disco rigido esterno.
  • Tastiera.
  • Topo.
  • Tastiere MIDI e altri dispositivi musicali.
  • Un altro smartphone o tablet.
  • Controller di gioco (ad esempio, un gamepad Xbox).
  • Una stampante.
  • Scanner portatile.

23.1. Descrizione del canale

Per un controller host USB, viene utilizzato il termine "canale" al posto del termine "endpoint" utilizzato per un controller di dispositivo USB. Il canale host corrisponde all'endpoint del dispositivo, come descritto nella specifica USB.

Figura 23.1. Canali ed endpoint in un sistema USB

In un controller host USB, un canale è associato a un endpoint del dispositivo in base al descrittore di configurazione del dispositivo.

23.2. Distacco

Il valore del bit DETACH dopo il reset è 1. Pertanto, il software deve cancellare questo bit prima di passare alla modalità host (impostando il bit HOST).

23.3. Accendere e ripristinare

Il diagramma seguente illustra gli stati principali del controller host USB quando è acceso.


Figura 23.2. Stati del controller host USB dopo il ripristino

Lo stato del controller host USB dopo il ripristino è "reset". Quando il controller USB è abilitato e la modalità host è selezionata, il controller USB è nello stato "inattivo". In questo stato, il controller host USB attende la connessione di un dispositivo peer consumando un minimo di energia. I pin USB devono essere nello stato "inattivo". Non è necessario attivare il PLL per entrare in modalità "host pronto". Il controller host entra nello stato sospeso quando il bus USB è nello stato sospeso, ad es. quando il controller host non genera un inizio frame. In questo stato, il consumo del controller USB è minimo. Il controller host esce dallo stato sospeso quando inizia a generare SOF sulla linea USB.

23.4. Scoperta del dispositivo

Il dispositivo viene rilevato dal controller USB quando lo stato del bus USB non è basso su entrambe le linee D+ e D-. In altre parole, quando il controller host USB rileva un pullup (device matching) sulla linea D+. Per abilitare questo rilevamento, il controller host deve fornire alimentazione al dispositivo sulla linea Vbus. La disconnessione del dispositivo viene rilevata dal controller host come "inattiva" corrispondente a livelli bassi sulle linee USB D+ e D-.

23.5. Selezione del canale

Prima di qualsiasi operazione eseguita dalla CPU, è necessario selezionare un canale. Ciò avviene impostando i bit PNUM2:0 (registro UPNUM) in base al numero del canale con cui la CPU lavorerà. La CPU ha quindi accesso ai registri e ai dati del canale.

23.6. Configurazione del canale

La seguente sequenza di azioni deve essere eseguita per attivare il canale.


Figura 23.3. La sequenza di azioni per attivare il canale

Dopo che il canale è stato abilitato (il bit EPEN è impostato), il controller è pronto per inviare richieste al dispositivo. Una volta configurato (CFGOK = 1), è possibile modificare solo il token del canale (PTOKEN) e l'intervallo di polling per il canale isocrono. Il canale di controllo supporta solo 1 banco. Qualsiasi altro valore comporterà un errore di configurazione (CFGOK = 0).

Il ripristino della PEN ripristina la configurazione del canale. Tutti i registri relativi al canale prendono i loro valori predefiniti. Vedere il capitolo Gestione della memoria per i dettagli.

Nota: il software deve configurare il canale di controllo con i seguenti parametri:

  • tipo: manager
  • marcatore: CONFIGURAZIONE,
  • banca dati: 1,
  • dimensione 64 byte.

Il software richiede gli 8 byte Device Descriptor inviando una richiesta GET_DESCRIPTOR. Questi byte contengono la dimensione massima del pacchetto (MaxPacketSize) del checkpoint del dispositivo e il software riconfigura la dimensione del canale di controllo in base ai dati ricevuti.

23.7. Ripristino USB

Il controller USB invia un reset USB quando il bit RESET è impostato dal software. Il bit RSTI viene impostato dall'hardware quando viene inviata una richiesta di ripristino USB. Ciò provoca un'interruzione se è impostato il bit RSTE. Quando viene inviato un ripristino USB, tutta la configurazione del canale e l'allocazione della memoria vengono ripristinate. Il registro di abilitazione interrupt generico USB rimane invariato. Se la linea era precedentemente in uno stato sospeso (SOFEN = 0), il controller USB passa automaticamente alla modalità di ripristino (il bit HWUPI è impostato) e il bit SOFEN viene impostato dall'hardware per essere generato immediatamente dopo il reset SOF USB.

23.8. Stabilire un indirizzo

Dopo che il dispositivo USB ha risposto alla prima richiesta dell'host con l'indirizzo predefinito (0), l'host assegna un nuovo indirizzo al dispositivo. Il controller host deve reimpostare il dispositivo USB e inviare una richiesta di controllo SET ADDRESS con il nuovo indirizzo che il dispositivo deve utilizzare. Dopo la fine di questa richiesta di controllo, il software deve scrivere il nuovo indirizzo nel registro UHADDR. Tutte le richieste successive su tutti i canali verranno effettuate utilizzando questo indirizzo. Quando il controller host invia un ripristino USB, il registro UHADDR viene ripristinato dall'hardware e la successiva richiesta host utilizzerà l'indirizzo predefinito (0).

23.9. Rilevamento della sveglia remota

Quando il bit SOFEN viene cancellato, il controller host entra in modalità sospesa. Sulla linea USB non vengono più inviati frame di avvio e il dispositivo USB entra in modalità sospesa 3 ms dopo. Il dispositivo riprende l'host inviando una richiesta di ripristino upstream. Il controller host rileva uno stato non inattivo sul bus USB e imposta il bit HWUPI. Se lo stato non inattivo corrisponde a una riattivazione remota (stato K), il bit RXRSMI viene impostato dall'hardware. Il software, impostando il bit RESUME, deve inviare una richiesta per riprendere il funzionamento del dispositivo entro 1 ms e una durata di almeno 20 ms. Dopo l'invio di una richiesta di ripristino, il bit SOFEN viene impostato automaticamente dall'hardware per generare un SOF non appena il funzionamento riprende.

Una tecnologia così ovvia e allo stesso tempo folle come USB-Host ha sperimentato l'alba e l'oblio nei dispositivi mobili più volte. Ora, nell'era del dominio nel mercato dei dispositivi Android, questa tecnologia è di nuovo popolare. Nel 2013, non hai bisogno di cavi adattatori costosi e ingombranti per collegare il tuo dispositivo USB al tuo smartphone o tablet. Se non è integrata una USB completa, sarà utile un cavo USB-Otg economico o solo un adattatore microUSB economico.

Penso che tu lo sappia da molto tempo. Propongo di capire cosa può e non può essere collegato a un dispositivo Android, perché è così e quali problemi può causare.

Collega dispositivi esterni ad Android

Flash USB, HDD USB

Non si può dire che questa sia la prima cosa che le persone hanno provato a connettere ai dispositivi mobili, ma al giorno d'oggi, soprattutto, le unità flash e gli hard disk sono collegati ai tablet. Tutto è banale: inserisci una chiavetta USB e diventa disponibile sia in una cartella all'interno della memoria del dispositivo, sia in una cartella accanto alla memory card. Molto spesso, la cartella verrà chiamata External-Storage o External-SD o in un altro modo: tutto dipende dal dispositivo. Android moderno, a partire da Android 4.0, supporta tutti i file system di lettura e scrittura. Anche NTFS ed ExFat sono dedicati agli amanti dei video FullHD.

La velocità di scambio dei dati è conforme allo standard USB 2.0. La terza versione di Android non supporta. Molto probabilmente l'HDD USB richiederà ulteriore alimentazione. I lettori di schede per un gran numero di schede di memoria funzionano, ogni scheda ha la sua cartella.

L'unica difficoltà che ho riscontrato è stata la totale riluttanza a lavorare con un'unità flash avviabile. Se hai reso possibile l'installazione del sistema dall'unità flash, non tutti i dispositivi Android lo riconosceranno. Da cosa dipende, non sono riuscito a scoprirlo. Fortunatamente, questo non accade spesso.

Tastiere, mouse

Era la tastiera che faceva pensare agli utenti della funzione USB-Host nei primi PDA. L'immissione di testo e le operazioni con esso in quei giorni erano in prima linea.

Al giorno d'oggi, Android supporta senza problemi la connessione di qualsiasi tastiera e mouse. Cablato e wireless, da un adattatore e da altri diversi, direttamente e tramite un hub, tutto funzionerà. Tutti i tasti della tastiera funzionano. Se il layout russo non è supportato, programmi come la tastiera russa lo salveranno. Il passaggio da una lingua all'altra avviene tramite Ctrl-Spazio per impostazione predefinita.

Quando un mouse è collegato, sullo schermo verrà visualizzato un cursore nero. Alcuni dispositivi possono essere configurati per funzionare sia in modalità mouse che in modalità gesto. Molto spesso, il pulsante sinistro funziona come un tocco sullo schermo e il pulsante destro come il pulsante "Indietro" o "Menu". Tutto questo può essere configurato sia dalle impostazioni di sistema che da altre applicazioni.

modem 3G

Se il tablet non ha un modulo 3G o la versione con esso è troppo costosa, puoi provare a collegare un modem esterno tramite USB-Host. Per fare ciò, devi passare alla modalità "Solo modem". Puoi farlo sia su un computer che su Android stesso. Successivamente, entriamo nelle impostazioni e otteniamo Internet. Esistono modi per collegare un modem senza passare a modalità speciali. Ma qui devi inserire i comandi tramite il "Terminale", su cui non tutti saranno d'accordo.

C'è un altro problema quando il supporto modem non è implementato nel kernel di sistema. Questo di solito viene fatto nei dispositivi con un modulo 3G installato e nella maggior parte degli smartphone e dei tablet di marca. I cinesi, di regola, non si preoccupano di questo: tutto funziona per loro.
In generale, per i dispositivi Android, consiglierei modem 3G che funzionano come schede di rete. Di solito tutto funziona senza impostazioni e driver subito dopo aver inserito il modem nella porta. Le impostazioni per la connessione stessa vengono immesse tramite l'interfaccia web.

Il prossimo martedì- continuazione del tema. Aspetta il post« Colleghiamo il dispositivo Android alla scheda video e al joystick

maschera

Il telefono ha smesso di caricarsi... Visualizza una notifica: "La modalità host USB è abilitata, la batteria non può essere caricata in questa modalità." Si carica solo quando è completamente scarica e spenta. La ricarica è originale, non ho trovato nulla nelle impostazioni, un reset completo non ha aiutato. Aiuto!



Succede quando è collegato?

Sofia

La situazione è esattamente la stessa ... E durante la ricarica dalla rete e dal PC ... telefono HTC Desire 601. Dimmi se il problema è risolto?



+1 alla ricerca di una soluzione. AIUTO!



Lo stesso per uno


20.01.2015
Come disabilitare la modalità host su NTS one


01.02.2015
Lo stesso problema, la modalità host USB è attivata, la ricarica non è in corso. Htc desire 500, tutto è iniziato dopo la sostituzione del modulo display.


22.03.2015
Lo stesso problema, la modalità host USB è attivata, la ricarica non è in corso. Htc desire 500, all'inizio caricava da spento, e ora anche così ogni altra volta. E può anche emettere energia durante la ricarica.


09.04.2015
Qualcuno ha trovato una soluzione?


05.05.2015
Stesso problema su HTC One. Cosa fare? Inoltre, quando è collegato a un computer, il computer non lo vede. Si carica solo quando è spento.


28.05.2015
Non mi è stato offerto altro che ripristinare le impostazioni.


04.06.2015
Ho lo stesso problema su desire 500, ho anche fatto il firmware ma non è servito


07.06.2015
Anche io ho questo problema. Dimmi cosa ha aiutato?


13.07.2015
Nelle impostazioni - per gli sviluppatori - deseleziona Host USB


20.07.2015


20.07.2015
Non c'è alcuna funzione nelle impostazioni: deseleziona l'host USB


17.09.2015
Si prega di descrivere in modo più dettagliato dove esattamente nelle impostazioni deselezionare questa casella?


25.09.2015
Il riavvio del telefono (nel menu di spegnimento) con il caricabatterie acceso mi aiuta. A volte la seguente sequenza di azioni aiuta: rimuovere il messaggio (!) Informazioni sul lavoro in modalità host USB, spegnere il mob. Internet, accendi il run-of-the-mill. Ma in generale era disossato, qualcuno che lo sa cancellerebbe l'iscrizione.



10.11.2015
Non ci sono zecche. Campagna dolente


19.11.2015
Sì, ha elogiato così tanto HTC, ora ha avuto lo stesso problema! HTC uno mini 2


21.11.2015
Ciao ragazzi. Quindi, ho avuto un problema simile, ho letto molti forum, ho pensato che fosse una piaga. Quindi, la prima cosa che viene in mente in tali situazioni è riavviare il telefono, ma no. Ho cercato a lungo come spegnerlo, ma non ho trovato nulla di adatto. Di conseguenza, si è trattato di un ripristino generale ... ho ripristinato, sperando in un miracolo delle impostazioni di fabbrica, risultato delle mie azioni, il telefono è vuoto, il problema è lo stesso ... Il giorno dopo sono andato a un amico, il ragazzo lavora nella riparazione di telefoni cellulari, hanno aperto il telefono, ma con mia sorpresa, tutto era fantastico lì, assembla il telefono, sto in silenzio e penso a dove scavare il cellulare ora ... Alla fine delle sue azioni, dopo aver assemblato il telefono, ha spruzzato un detergente (non so quale, ma penso che le officine ce l'abbiano e te lo forniranno gratuitamente) nella presa di ricarica e ci ha speso un paio di volte con uno stuzzicadenti (pulito). E il lieto fine, HTC One Mini 2, ha funzionato perfettamente. Spero che questo aiuti qualcun'altro)


20.12.2015
Basta pulire la presa di ricarica con del cotone


24.02.2016
Ahahah. La pulizia della presa di ricarica aiuta davvero. Ho spento il telefono, l'ho pulito, l'ho pulito un po' con del cotone leggermente umido, l'ho acceso e voilà. Lavorando. HTC ONE MINI 2


26.05.2016
Strano, ha funzionato anche per me =-O


27.05.2016
Ma non mi ha aiutato! Il giorno successivo, quando si caricava all'80%, è apparso questo fastidioso host USB


13.06.2016
Non solo la fotocamera è feolite, ma anche questa accusa ha iniziato a smussare


08.08.2016
Un pezzo di tormento comprato per più di 20! Fotocamera "G", con problemi di ricarica... HTC mi è caduto negli occhi... Passato ad una mela...


31.10.2016
Getta il cavo USB nella spazzatura e comprane un altro. Il problema è proprio in questo nido. Ho preso mia moglie dal Samsung e tutto funziona. Poi se ne comprò uno nuovo e glielo ruppe, poi l'ospite iniziò a deludermi. In breve, non cercare dove non è necessario. Firma il tuo pizzo e pulisci il nido.


07.11.2016
C'era lo stesso problema con htc one m7, ho preso un semplice ago e pulito un po' la presa USB, tutto funziona.


06.02.2017
Come pulire il nido con il cotone? Nient'altro che un ago ci entra? Cosa fare?


24.02.2017
Pulito e tutto ha funzionato!


24.02.2017
Prendi un ago, strappi un pezzetto di cotone idrofilo nell'alcool e il gioco è fatto. Basta fare tutto molto delicatamente!


12.03.2017
Lo stesso problema, ma si carica dal computer, ha aiutato a pulire il connettore, grazie.


17.07.2017
Mi ha aiutato a lasciarlo durante la notte senza una batteria della scheda SIM e una scheda di memoria. HTC Desire 601


30.07.2017
E mi ha aiutato. Ho pulito la presa di ricarica e tutto ha funzionato.


18.08.2017
Grazie, ha aiutato anche me, ha pulito il nido e fino in fondo


11.09.2017
Grazie per l'aiuto... Volevo già acquistare un nuovo telefono...) e ora funziona tutto, è in carica!


14.09.2017
Il tuo consiglio ha aiutato molto.


24.03.2018
C'era questo problema su htc desire 500, ho scalato tutti i forum, praticamente nulla ha aiutato. Dopo aver pulito la presa di ricarica. Risolto il problema proprio così. Quando questo errore viene eliminato, tiriamo la tenda, teniamo premuto l'errore stesso in modo che appaia la voce "Informazioni sull'applicazione", vai lì, sarà "Impostazioni". Cancelliamo i dati. Non ho nemmeno bisogno di riavviare il mio telefono.


16.04.2018
Chiudere le uscite nel connettore USB. Quando si accende la ricarica, il cavo del caricabatterie funziona come un cavo otg. Devi solo pulire il nido!

Ogni bus USB deve avere un (e solo uno!) host: un computer con un controller USB. Tuttavia, il concetto di computer non significa solo le solite opzioni per computer desktop, da pavimento, laptop. Un computer è una combinazione di processore, memoria e periferiche; in questo senso, la maggior parte dei dispositivi moderni ha computer incorporati. Se l'"intelligenza" di questo computer e la sua capacità di dialogare con l'utente sono sufficienti, allora può assumere il ruolo di host USB. Questa opzione host è discussa nell'ultima sezione di questo capitolo.

L'host USB "classico" è diviso in tre livelli principali:

  • L'interfaccia bus USB fornisce l'interfaccia fisica e il protocollo bus. L'interfaccia bus è implementata dal controller host, che ha un hub root integrato che fornisce punti di connessione fisica al bus (prese USB tipo “A”). Il controller host è responsabile della generazione di microframe. A livello hardware, il controller host comunica con la memoria principale del computer utilizzando il bus mastering diretto per ridurre al minimo il carico sul processore centrale;
  • il sistema USB, tramite il/i controller/i host, traduce la "visione" client dello scambio dati con i dispositivi - richieste IRP (I/O Request Packet - I/O Request Packet) - in transazioni eseguite con dispositivi bus reali. Il sistema è anche responsabile dell'allocazione delle risorse USB: larghezza di banda e alimentatori (per dispositivi alimentati tramite bus). Il sistema è composto da tre parti principali:
  1. driver del controller host - HCD (Host Controller Driver) - un modulo legato a un modello di controller specifico che astrae il driver USB e consente di includere diversi tipi di controller in un sistema;
  2. Driver USB - USBD (Driver USB) - fornisce l'interfaccia principale (USBDI) tra client e dispositivi USB. L'interfaccia HCDI (Host Controller Driver Interface) tra USBD e HCD non è regolata dalla specifica USB. È definito dai fornitori del sistema operativo e dovrebbe essere supportato dai fornitori del controller host che desiderano avere un supporto specifico per il sistema operativo per i loro prodotti. I client non possono utilizzare l'interfaccia HCDI; per loro è prevista l'interfaccia USBDI. USBD fornisce un meccanismo di scambio sotto forma di IRP che richiedono il trasporto di dati su un determinato canale. Inoltre, USBD è responsabile di una rappresentazione astratta del dispositivo USB al client, che consente la configurazione e la gestione dello stato del dispositivo (inclusa la gestione standard tramite l'endpoint "0"). L'implementazione dell'interfaccia USBDI è determinata dal sistema operativo; la specifica USB fornisce solo idee generali;
  3. il software host implementa le funzioni necessarie per il funzionamento del sistema USB nel suo complesso: rilevamento della connessione e disconnessione dei dispositivi e intraprendere le azioni appropriate su questi eventi (caricamento dei driver richiesti), numerazione dei dispositivi, assegnazione della larghezza di banda e del consumo energetico, gestione dello stato di alimentazione, eccetera.
  • I client USB sono elementi software (applicazioni o componenti di sistema) che interagiscono con i dispositivi USB. I client possono interagire con qualsiasi dispositivo (set di endpoint disponibili inclusi nelle interfacce selezionate) connesso al sistema USB. Tuttavia, il sistema USB isola i client dalla comunicazione diretta con qualsiasi porta (nello spazio I/O) o posizioni di memoria che rappresentano la parte dell'interfaccia del controller USB.

Collettivamente, i livelli host forniscono le seguenti funzionalità:

  • rilevamento di connessione e disconnessione di dispositivi USB;
  • manipolazione dei flussi di controllo tra i dispositivi e l'host;
  • manipolazione di flussi di dati;
  • raccolta di statistiche sulle attività e stati dei dispositivi;
  • gestione dell'interfaccia elettrica tra il controller host e i dispositivi USB, inclusa la gestione dell'alimentazione.

La parte software dell'host è completamente implementata dal sistema operativo. Prima che il sistema operativo venga caricato, solo una parte troncata del software USB può funzionare, supportando solo i dispositivi necessari per l'avvio. Ad esempio, nel BIOS delle moderne schede madri è presente il supporto per una tastiera USB che implementa le funzioni del servizio Int 9h. Dopo aver avviato il sistema USB, questo supporto "pre-boot" viene ignorato: il sistema inizia a funzionare con il controller "da zero", ovvero ripristinando e identificando tutti i dispositivi collegati. La specifica PC'2001 propone una serie di requisiti per il BIOS, in particolare il requisito per supportare l'avvio del sistema operativo da dispositivi USB.

Il controller host è un intermediario hardware tra i dispositivi USB e l'host. Attualmente sono disponibili tre specifiche del controller host, ciascuna con un diverso set di driver della parte host:

  • UHC (Universal Host Controller): un controller host universale per il bus USB 1.x, sviluppato da Intel;
  • OHC (Open Host Controller) - controller host "aperto" per il bus USB 1.x, sviluppato da Compaq, Microsoft e National Semiconductor;
  • EHC (Enhanced Host Controller) è un controller host avanzato per supportare il bus USB 2.0 ad alta velocità.

Tutte queste varianti di controller svolgono le stesse attività: organizzano le transazioni fisiche con i dispositivi tramite il bus USB in base alle descrizioni (descrittori) di queste transazioni inserite nella RAM di sistema dal driver del controller host. Allo stesso tempo, le transazioni di diverso tipo vengono elaborate in modo diverso. In termini di gestione degli errori, le transazioni isocrone sono le più semplici, in cui gli errori non richiedono nuovi tentativi. Le transazioni di trasferimento con consegna garantita in caso di errori richiedono nuovi tentativi fino alla fine o ammissione del fallimento (esaurimento del numero di tentativi consentito). Dal punto di vista della pianificazione, è necessario individuare le transazioni periodiche che devono essere eseguite rigorosamente nei tempi previsti, il resto - a quanto pare, e vengono messe in coda. A causa della pianificazione e dei possibili tentativi, l'ordine in cui vengono elaborati i descrittori di transazione (con successo o meno) sarà diverso dall'ordine in cui sono stati inseriti in memoria1, il che si aggiunge alle preoccupazioni del controller host e del suo driver. I tre controller host risolvono questi problemi in modo diverso e utilizzano strategie di pianificazione delle transazioni diverse, come illustrato nelle tabelle seguenti.

Il controller host UHC di Intel è stato introdotto nel chip PIIX3 (ponte PCI-ISA) sui chipset della scheda madre per i processori Pentium e viene utilizzato in molti prodotti Intel successivi. Questo è il controller host FS / LS, che sposta la maggior parte dei problemi di pianificazione delle transazioni sul software: il driver del controller UHC (UHCD). L'interfaccia del controller UHC è descritta nella Guida alla progettazione dell'interfaccia UHCI (Universal Host Controller Interface), versione 1.1 rilasciata nel 1996.

Il driver UHC genera descrittori per il controller host, chiamati "Transfer Descriptors" (TD - Transfer Descriptor) in UHCI, che descrivono effettivamente ogni transazione bus. Ricordiamo che in termini di specifica USB, un trasferimento (trasferimento) può essere costituito da più transazioni e anche i trasferimenti di controllo utilizzano il proprio tipo di transazione per ciascuna fase. Per le transazioni di trasferimento con consegna garantita, i TD devono essere messi in coda. Le code sono necessarie per tali trasmissioni, poiché non si sa in anticipo quante volte si dovrà tentare di eseguirle. L'avanzamento della coda è possibile solo dopo l'esecuzione riuscita di una transazione situata in testa alla coda: questa regola fornisce un ordine garantito (all'interno della propria coda) per la consegna dei pacchetti. Ogni coda ha la propria intestazione (QH). I trasferimenti isocroni vengono sempre eseguiti una volta (non c'è consegna garantita), il che semplifica la loro programmazione. Il driver memorizza i descrittori TD e QH in memoria e li collega insieme in base al piano di esecuzione della transazione in ogni frame. Il driver UHC deve fare una "programmazione" dettagliata per ogni frame futuro, per il quale viene utilizzato un elenco di frame di 1024 frame. Il controller host attraversa gli elenchi dei descrittori, a partire dal punto indicato dall'elenco dei frame per il frame corrente, ed esegue le transazioni appropriate. Il risultato dell'esecuzione della transazione è contrassegnato nel suo descrittore, la transazione completata è contrassegnata come "inattiva" e il controllore, dopo averla incontrata durante il bypass successivo, passa semplicemente a quella successiva. Il driver deve periodicamente scansionare i descrittori, estraendo quelli che sono già stati elaborati e passando i risultati dell'esecuzione al driver client. La logica del controller implica che una richiesta di input / output (IRP) dal driver client può corrispondere a diversi "trasferimenti" - elementi della coda. Il driver UHC suddivide la richiesta in transazioni e inserisce i descrittori di queste transazioni nella coda appropriata e la coda la include nei piani più vicini. Il conducente è responsabile del bilanciamento del carico del bus in ogni frame, in particolare, per garantire che almeno il 10% della larghezza di banda sia fornito per le transazioni di trasferimento di controllo. La pianificazione dei frame garantisce inoltre la frequenza richiesta degli accessi ai punti di trasmissione periodici.

Il controller UHC è un dispositivo PCI (Bus-Master) attivo. L'interazione principale del driver con il controller host avviene con l'aiuto di descrittori situati in memoria. Il controller ha dei registri (nello spazio I/O) con i quali puoi controllarne il comportamento: resettare, sospendere e riattivare globalmente, regolare il frame rate, gestire le richieste di interrupt, gestire le porte dell'hub root integrato. Il controller permette di lavorare in modalità debug, fermandosi dopo l'esecuzione di ogni transazione.

Nel processo di elaborazione del piano, il responsabile del trattamento legge dalla memoria i descrittori ei dati necessari per avviare la transazione. Non appena il buffer FIFO del controller riceve dalla memoria informazioni sufficienti per avviare una transazione, il controller avvia la transazione sul bus USB. Durante la sua esecuzione i dati sono trasferiti, dopo il completamento, il titolare modifica i descrittori in memoria secondo le condizioni per il completamento dell'operazione. Durante l'elaborazione di una transazione, possono verificarsi overflow del buffer FIFO o errori di overflow a causa di un sovraccarico del controller di memoria di sistema o del bus PCI. Questi gravi errori attivano gli interrupt hardware. Il controller host include anche un hub radice con 2 o più porte.

Le interruzioni dell'UHC possono essere attivate da vari eventi, come l'esecuzione di transazioni (selezionate), il rilevamento della ricezione di un pacchetto corto, la ricezione di un segnale di ripristino o il risultato di un errore. Il controller non genera interruzioni per il collegamento/scollegamento dei dispositivi.

Il controller UHC ha un supporto speciale per l'interfaccia tradizionale di tastiera e mouse tramite il controller 8042 - intercettando le chiamate alle porte 60h e 64h dello spazio I/O. Quando l'emulazione è abilitata sulle chiamate software a queste porte UHC, provoca un interrupt di sistema SMI (System Management Interrupt), che viene elaborato in un PC su processori x86 in SMM (System Management Mode), invisibile ai normali programmi. Il gestore SMI che intercetta queste chiamate genera le sequenze di azioni necessarie alla loro esecuzione tramite tastiera e (o) mouse USB. L'unica eccezione viene fatta quando si intercettano i comandi che controllano il gate GateA20: invece di generare SMI, questo gate viene manipolato nell'hardware (come è stato fatto nell'8042 per molto tempo). Questo supporto hardware è abilitato impostando le opzioni di installazione CMOS appropriate.

Un grosso inconveniente di lavorare con UHC deriva dalla necessità di scansionare in modo programmatico tutti i descrittori di trasferimento per identificare quelli completati. I descrittori dei trasferimenti completati devono essere recuperati programmaticamente dalle catene, mantenendo gli elementi collegati. Anche la pianificazione delle transazioni (compilazione di elenchi di descrittori e intestazioni) è un'attività piuttosto dispendiosa in termini di tempo per il conducente. Ovviamente, l'obiettivo era semplificare l'hardware del controller host. Tuttavia, ciò può comportare la dipendenza delle prestazioni effettive del bus USB dalla potenza e dal carico della CPU. Questo approccio all'organizzazione di input/output difficilmente può essere definito efficace.

Il driver crea un elenco di frame di 1024 elementi nella memoria di sistema. Ciascun elemento di questo elenco contiene un puntatore a 32 bit a un elenco associato di strutture dati su cui il controller esegue le transazioni in questo frame. Il controller host dispone di un registro degli indirizzi di base dell'elenco di frame che punta all'inizio dell'elenco. Il numero attuale dell'elemento elaborato è determinato dai dieci bit meno significativi del contatore di fotogrammi situato nel controller e incrementato ogni millisecondo. Il periodo di conteggio dei fotogrammi può essere leggermente variato modificando la costante immessa nel registro di modifica della durata dei fotogrammi (SOF Modify Register), che offre la possibilità di regolare il frame rate per sincronizzare gli scambi isocroni.

L'elemento dell'elenco dei frame può puntare al descrittore di trasferimento isocrono TD (Transfer Descriptor) o (se non è previsto uno scambio isocrono in questo frame) all'intestazione della coda QH (Queue Head). Se non sono previste trasmissioni in questo frame, nell'elemento viene impostato l'attributo "stub" T (Termina, la fine dell'elenco collegato, in questo caso vuoto). Ricordiamo ancora una volta che qui la parola "trasferimento" (trasferimento, secondo la specifica UHCI) è usata in senso stretto: corrisponde a una transazione (trasferimento di non più di un pacchetto di dati). L'elemento (parola a 32 bit) ha il formato mostrato nella figura seguente. Campo FLLP (Frame List Link Pointer) - puntatore all'elemento; bit T è il segno dell'ultimo elemento (quando T = 1, il puntatore FLLP non è valido). Il bit Q specifica la classe dell'elemento associato a cui punta l'FLLP (0 - TD, 1 - QH).

Per ogni frame dell'elenco viene impostata la propria catena di descrittori di trasferimento isocroni (possibilmente vuota), l'ultimo di questa catena deve fare riferimento alla catena di intestazioni di coda. Le catene di intestazione QH possono essere comuni a un gruppo di frame o anche a tutti i frame di un elenco. L'idea generale di costruire code è quella di creare una coda per ogni canale stabilito (per tutti i punti configurati, ad eccezione di quelli isocroni). Il metodo di servizio "dazio" è orizzontale, quindi dopo che una transazione con un punto è stata completata, il controller si sposterà in un altro punto (un'altra coda). Il collegamento di TD e QH tramite puntatori consente di creare configurazioni arbitrarie di transizioni da una coda all'altra e persino di creare loop: in quest'ultimo caso, è possibile che diverse transazioni abbiano il tempo di passare con un punto nel frame. Tuttavia, questo non è un modo tipico di pianificazione. Se ci sono molte code (sono installati molti canali), vengono distribuite tra i frame (da un elenco di 1024 elementi) in modo che la catena di ciascun frame debba passare orizzontalmente fino alla fine. Questo può essere pianificato perché il tempo massimo per elaborare un elemento di ciascuna coda (così come le transazioni isocrone) è noto in anticipo (è determinato dal tipo di trasferimento, dalla dimensione massima del pacchetto e dalla velocità del dispositivo, che è nota al sistema USB). Se necessario, la "giustizia orizzontale" può essere violata impostando un ordine di servizio verticale: il responsabile del trattamento, dopo aver elaborato con successo una trasmissione dalla coda con il segno V = 1, andrà al descrittore successivo dalla stessa coda e non a la coda successiva.

I descrittori di trasferimento e le intestazioni di coda vengono inseriti dal driver nella RAM agli indirizzi allineati al limite del paragrafo, poiché solo i 28 bit superiori vengono utilizzati come puntatori (i bit vengono utilizzati per le funzioni di servizio).

Il descrittore di trasferimento (TD) è costituito da 32 byte, di cui il controller host utilizza solo le prime quattro parole a 32 bit DW0-DW3. Le parole DW4-DW7 sono riservate all'uso da parte dell'autista UHC (per l'organizzazione della "raccolta dei rifiuti" - riutilizzo delle aree di scarto). Il formato del descrittore di trasferimento è mostrato nella figura seguente. I campi modificati dal controller host sono evidenziati in grigio.

IN parola DW0 il campo Link Pointer è lo stesso del campo FLLP ei bit T e Q sono gli stessi dei bit dell'elemento dell'elenco frame con lo stesso nome. Il bit V è il metodo di servizio TD (1 per profondità, 0 per larghezza).

Parola DW1 utilizzato per controllare e determinare lo stato di avanzamento del trasferimento, modificato dal controller host. Il campo ActLen è la lunghezza effettiva dei dati trasmessi; il campo Stato è lo stato del trasferimento:

lunghezza dei dati trasmessi; il campo Stato è lo stato del trasferimento:

  • bit 23: Attivo - “dovrebbe essere eseguito”, impostato dal driver, resettato dal controllore al termine dell'esecuzione o esaurimento del limite di ripetizione;
  • bit 22: stallo - il punto ha risposto con un pacchetto STALL;
  • bit 21: Data Buffer Error - errore del buffer dati (FIFO overflow o overflow durante l'esecuzione della transazione), la transazione rimane attiva (al riempimento, il controllore genera un pacchetto con un CRC errato, non risponde con la conferma in caso di overflow);
  • bit 20: Babble - durante l'esecuzione di questa transazione è stata rilevata la “talkiness” del dispositivo (si spegne e viene impostato il bit Stall);
  • bit 19: NAK - ricezione della risposta corrispondente (nella transazione SETUP, la ricezione di un NAK imposta anche il flag di errore di timeout);
  • bit 18: Errore CRC/Time Out - È stato rilevato un errore di trasmissione (CRC o timeout);
  • bit 17: Bitstuff Error - È stato rilevato un errore di riempimento del bit.

I bit vengono utilizzati per controllare la trasmissione. Il bit IOC ordina un interrupt di esecuzione (un interrupt viene generato alla fine di un frame, anche se la transazione è già inattiva, il recupero del suo handle causerà un interrupt). Il bit ISO è un segno di trasferimento isocrono (un'indicazione di non riprovare). Il bit LS è un segno del dispositivo LS, utilizzare un preambolo prima della trasmissione. Il campo C_ERR è un contatore di tentativi decrementato per ogni errore. Una transizione a 1 o 0 fa sì che il descrittore venga impostato sullo stato inattivo. Se il driver imposta il valore su zero, il numero di tentativi è illimitato. Il bit SPD è un rilevatore di pacchetti brevi: se vengono ricevuti con successo meno dati del previsto nella transazione IN accodata, viene generata una condizione di interruzione alla fine del frame.

La parola DW2 contiene informazioni per l'esecuzione della transazione: Packet ID — il tipo di marker utilizzato IN (69h), OUT (E1h) o SETUP (2Dh); Indirizzo dispositivo - Indirizzo dispositivo USB; EndPt - numero e direzione del punto finale. Bit D (Commutazione dati) - Lo stato dell'interruttore per il pacchetto trasmesso o inviato. Campo MaxLength - lunghezza dei dati trasmessi (lunghezza massima dei dati ricevuti), 000 - 1 byte, 001 - 2, 3FF - 1024; 7FFh - 0 (pacchetto vuoto). I valori validi fino a 4FFh sono 1280 byte, il limite di capacità del frame teorico. I valori 500-7FEh non sono validi, causando un errore fatale del controller.

DW3 contiene un Buffer Pointer, un puntatore al buffer RAM utilizzato per questi dati di trasferimento.

L'intestazione della coda (QH) collega le code tra loro (in orizzontale) e fa riferimento al primo elemento (TD) della coda data. Il controller host utilizza due parole a 32 bit (vedere la figura seguente). Il campo QHLP (Queue Head Link Pointer) contiene un puntatore all'intestazione della coda successiva (collegamento orizzontale). Il campo QELP (Queue Element Link Pointer) contiene un puntatore all'elemento della coda (collegamento verticale). Gli attributi dell'ultimo elemento (T) e la classe dell'elemento associato (Q) sono simili agli attributi e alle classi con lo stesso nome nelle strutture precedenti.

Il descrittore dell'intestazione della coda viene creato dal driver; il controller host modifica il puntatore QELP in memoria: dopo aver completato con successo la transazione, il controller porta il puntatore all'elemento successivo dal DW0 del suo descrittore e lo posiziona al posto del QELP nell'intestazione della coda. Pertanto, un TD completato con successo viene rimosso dalla coda. Quando l'ultimo TD viene rimosso, il flag QELP viene impostato su una coda vuota (T). In caso di errore irreversibile durante l'elaborazione di alcuni descrittori, QELP imposta anche una T "stub": uno stream con consegna garantita non consente di saltare alcuna transazione. Il campo QELP può fare riferimento sia a TD (scheduling banale) che a QH - la coda stessa può contenere code.

Il modello di registro UHC è spiegato nella tabella seguente, che mostra i registri mappati nello spazio I/O. Inoltre, come qualsiasi dispositivo PCI, il controller UHC ha dei registri nello spazio di configurazione, in cui, in particolare, i codici di classe (0Ch - controller bus seriale), sottoclasse (03 - USB) e codici di interfaccia software (00) nel Sono specificate le classificazioni PCI SIG.

Tavolo. Registri del controller UHC

L'indirizzo Scopo
Base + (00-01h)

USBCMD - Registro comandi USB

Bit 15:8 - riservato
Bit 7: MAXP (Max Packet) è la dimensione del pacchetto consentita (per FS) con cui
possibile transazione in prossimità della fine del frame: 1 = 64 byte, 0 = 32 byte

Bit 6: CF (Configure Flag) - un flag con il quale il driver segna la fine del processo
configurazione del controller (semaforo software per software)
Bit 5: SWDBG (debug software) - Controllo debug: 1=Modalità debug (Stop
dopo ogni transazione), 0 - normale
Bit 4: FGR (Force Global Resume) - Global Resume
sveglia Impostato dal software, ripristinato dall'hardware al termine.
risveglio
Bit 3: EGSM (Enter Global Suspend Mode) - passa alla modalità globale
sospensione
Bit 2: GRESET (Global Reset) - ripristino generale del controller e del bus USB
Bit 1: HCRESET (Reset controller host) - ripristina il controller host
Bit 0 Controllo funzionamento controller RS ​​(Run/Stop): 1=Esegui - esegui
transazioni secondo il piano, 0=Stop — stop

Base + (02-03h)

USBSTS - Registro di stato USB

Bit - riserva
Bit 5: HCHalted - Il controller si è arrestato, software o hardware (per errore
o durante il debug)
Bit 4: Errore di processo del controller host - errore di esecuzione irreversibile (maggio
si verificano anche a causa dell'errata impostazione del PID nel descrittore di transazione), cause
interrompere
Bit 3: Errore di sistema host - errore di sistema (problemi nell'interfaccia PCI),
attiva un'interruzione
Bit 2: Resume Detect - Riceve un segnale di ripristino (se globale
sospensione)
Bit 1: USB Error Interrupt - flag di interruzione dell'errore di runtime
transazioni (overflow o overflow del buffer FIFO del bus PCI)
Bit 0: USBINT (Interruzione USB) - interruzione della transazione
con il bit IOC impostato o ricevendo un pacchetto breve (quando il
pacchetto corto rilevato)

Base + (04-05h)

USBINTR - registro di abilitazione interruzione

Bit - riserva
Bit 3: Abilita interrupt a pacchetto breve - Abilita interrupt di ricezione
pacchetto corto
Bit 2: IOC (Interrupt On Complete Enable) - abilita gli interrupt al completamento
transazioni
Bit 1: Resume Interrupt Enable - abilita gli interrupt per la ricezione di un segnale
rinnovo
Bit 0: abilitazione interruzione timeout/CRC - abilitazione interruzione errore
timeout e controllo CRC

Base + (06-07h) FRNUM - registro del numero di frame
Base + (08-0Bh) FRBASEADD Registro degli indirizzi di base di Framelist
Base+0C

SOFMOD - registro di controllo del frame rate

Bit - controllo della durata del frame: 0 - 11936 bit, 1 - 11937 bit, ...
63 - 11999 bit, 64 - 12000 bit (nominale), 65 - 12001 bit, 127 - 12063 bit

Base + (10-11h)

PORTSC1 - Registro di controllo e stato della porta 1

Bit - riserva (0)
Bit 12: (R/W) Sospendi porta Sospensione
Bit - riserva (0)
Bit 9: Ripristino porta (R/W).

Bit 8: (RO) Dispositivo a bassa velocità collegato - un segno di connessione di un dispositivo LS
Bit 7 - riservato (1)
Bit 6: (RW) Resume Detect - Rilevato segnale di ripristino. Registra "1"
provoca la generazione di un segnale di ripristino sulla porta, successiva scrittura
"0" - terminazione del segnale di ripristino e invio di bit LS-EOP: (RO) -
stato attuale delle linee D- e D+
Bit 3: (R / WC) Port Enable / Disable Change - un segno di divieto automatico
porta per errore, resetta scrivendo "1"
Bit 2: (R/W) Porta abilitata/disabilitata: abilita la porta
Bit 1: (R / WC) Connect Status Change - un segno di un evento di connessione /
spegnendo il dispositivo
Bit 0: (RO) Stato di connessione corrente - un'indicazione del dispositivo collegato

La specifica OpenHCI Host Controller Interface (OHCI) è stata sviluppata da Compaq, Microsoft e National Semiconductor ed è descritta nella specifica Open Host Controller Interface per USB. La versione 1.0a di questo documento è stata pubblicata nel 1999. Il controller OHC, come l'UHC, è progettato per supportare velocità FS/LS. Tuttavia, l'hardware OHC si occupa della maggior parte della pianificazione, scaricando la CPU dalla routine di elaborazione costante del descrittore. L'OHC gestisce descrittori di endpoint e descrittori di trasferimento.

I descrittori degli endpoint ED (Endpoint Descriptor) vengono creati per tutti gli endpoint configurati di tutti i dispositivi collegati. Questi descrittori sono posti in memoria e collegati tra loro; la configurazione del collegamento determina l'ordine in cui i collegamenti vengono serviti dal controller host. Un descrittore di endpoint ne descrive l'indirizzo completo e la direzione, il tipo, la dimensione del pacchetto consentita, la velocità, lo stato del punto e il descrittore, i puntatori alla coda di trasferimenti associati a questo punto, un puntatore al descrittore del punto successivo. Vengono create catene ED separate per tutti i punti di controllo (Control) e tutti i punti di trasferimento degli array (Bulk), speciali registri OHC puntano all'inizio di queste catene. I descrittori dei punti di trasferimento periodici sono organizzati in un albero binario "caduto" (vedi figura sotto), nei cui "rami" sono i descrittori del punto di interruzione e nel "tronco" sono i descrittori dei punti di interruzione con un intervallo di servizio minimo e tutti i descrittori di isocrono punti di trasferimento. L'albero ha 32 rami terminali, l'albero è attraversato dai rami terminali al tronco. In ciascuno dei 32 frame adiacenti, l'input proviene dal proprio ramo. Per fare ciò, l'OHC dispone di un registro di indirizzi di base HCCA (Host Controller Communication Area, host controller communication area), che indica il numero di ramo 0, e di un frame counter, i cui 5 bit meno significativi impostano il numero del ramo di ingresso per il fotogramma successivo. Pertanto, il processore descrittore passa attraverso ogni ramo del quinto livello (finale) 1 volta ogni 32 frame (T = 32 ms), il quarto - 1 volta ogni 16 frame (T = 16 ms), per il terzo livello - T = 8 ms, per il secondo - T = 4 ms, per il primo - T = 2 ms, per lo zero (trunk) - T = 1 ms.

I descrittori di trasferimento TD (Transfer Descriptor), a differenza di TD UHC, per OHC descrivono i trasferimenti USB. Ogni trasferimento può essere suddiviso in più transazioni e questa suddivisione viene eseguita dal controller host in base alla dimensione del pacchetto impostata nel descrittore dell'endpoint. Il buffer di dati per la trasmissione può trovarsi in una o due pagine fisiche di memoria, eventualmente sparse. Nello spazio di indirizzi logici virtuali, il buffer deve essere un'area contigua. La dimensione del trasferimento può arrivare fino a 8 KB, ma se il buffer non si avvia all'inizio della pagina, la dimensione del trasferimento consentita verrà ridotta (nel peggiore dei casi a 4097 byte). I descrittori di trasferimento vengono raccolti in code allegate ai descrittori di endpoint.

Il controller host OHC dispone di timer con i quali pianifica le transazioni all'interno di un frame. Dopo SOF, il controller inizia a bypassare la catena ED per i trasferimenti di controllo ed esegue il maggior numero possibile di essi nel tempo T1. Successivamente, inizia ad attraversare l'albero delle trasmissioni periodiche, dall'ennesimo ramo terminale al tronco, fino ad attraversare tutti gli ED incontrati. Se ha ancora tempo nel frame, riprende le trasmissioni non periodiche (Bulk e Control). Il controller raccoglie i descrittori elaborati (con successo o rimossi quando viene superata la soglia di errore) in una coda speciale di descrittori di coda completata, da cui il driver li recupera facilmente. Il controllore può generare interrupt al termine dell'elaborazione TD e con un determinato ritardo (per ogni TD) (o non generare una richiesta). Il controller OHC ha un registro per la regolazione del frame rate. Il controller include anche un hub root per 2 o più porte.

Il controller OHC, come l'UHC, è solitamente un dispositivo PCI (Bus Master) attivo, ma rispetto all'UHC è dotato di più intelligenza. Il controller fornisce supporto per il controller della tastiera e del mouse (KBC) utilizzando gli interrupt SMI, ma, a differenza dell'UHC, l'OHC dispone anche di registri speciali che semplificano l'attività di emulazione.

Articoli correlati in alto