Una tastiera USB invia solo segnali o li riceve anche dal computer?


83

La tastiera non ha bisogno di alcun segnale dal computer, solo alimentazione, giusto? O deve ricevere segnali e inviarli?

Modifica: non mi aspettavo che questa domanda generasse così tanto interesse! L'ho chiesto perché avevo un sogno ozioso di costruire un doohickey che duplica il segnale in modo che la tastiera potesse inviare la stessa lettera a due computer contemporaneamente. Poiché (da quello che posso capire nelle risposte) il computer controlla attivamente la tastiera come qualsiasi altro dispositivo, questo chiaramente non è possibile. Non è un grosso problema come praticamente non avevo le abilità per costruirlo comunque!


40
ad es. potrebbe ricevere lo stato dei tasti di blocco. Molte tastiere hanno led che indicano lo stato dei tasti di blocco. Prova ad attivare il blocco maiuscole, quindi sostituisci la tastiera, probabilmente lo stato sarà ancora bloccato, queste informazioni devono provenire dal PC.
Máté Juhász,

8
anche le tastiere PS / 2 ricevono segnali dal PC, altrimenti come si possono accendere / spegnere i LED?
phuclv,

8
@Devsman non puoi farlo, altrimenti lo stato di blocco non sarà sincronizzato perché può essere modificato dal software. Ad esempio, se si collegano 2 tastiere e si preme il numlock su questo, il LED sull'altro si attiva. Lo stesso si può ottenere con la tastiera su schermo
phuclv


7
Un dispositivo USB deve disporre di dati bidirezionali, semplicemente a causa dei requisiti dell'handshaking iniziale per abilitare la particolare classe di dispositivi.
Steve

Risposte:


101

Dalla specifica "Versione 11.1 " di " Device Class Definition for Human Interface Devices ":

La sincronizzazione tra stati LED ed eventi BLOC MAIUSC, BLOC NUM, BLOC SCORR, COMPOSE e KANA è gestita dall'host e NON dalla tastiera. Se si utilizza il descrittore di tastiera nell'Appendice B, gli stati dei LED vengono impostati inviando un rapporto assoluto a 5 bit alla tastiera tramite una richiesta Set_Report (Output).

Per cambiare i LED della tastiera, la tastiera accetta un comando per farlo. Quindi non è un dispositivo "solo input" (nel senso che trasmette solo dati all'host).

Detto questo, esiste un processo di negoziazione ed enumerazione con tutti i dispositivi USB che richiedono una conversazione avanti e indietro tra host e dispositivo. Non è possibile avere un dispositivo USB "di sola lettura".

Anche prima dell'USB, il controller della tastiera del PC avrebbe accettato i comandi perché faceva alcune cose oltre a leggere la tastiera ( riferimento ):

Se una tastiera è un'unità di sistema periferica separata (come nella maggior parte dei computer desktop moderni), il controller della tastiera non è direttamente collegato ai tasti, ma riceve gli scancodes da un microcontrollore incorporato nella tastiera tramite una sorta di interfaccia seriale. In questo caso, il controller di solito controlla anche i LED della tastiera inviando i dati alla tastiera attraverso il filo.

IBM PC AT ha utilizzato un chip Intel 8042 per l'interfaccia con la tastiera. Questo computer controllava anche l'accesso alla linea A20 al fine di implementare una soluzione alternativa per un bug del chip nell'Intel 80286. 1 Il controller della tastiera veniva utilizzato anche per avviare un ripristino della CPU del software al fine di consentire alla CPU di passare dalla modalità protetta alla reale modalità 1 perché il 286 non consentiva alla CPU di passare dalla modalità protetta alla modalità reale a meno che la CPU non venga ripristinata. Questo era un problema perché il BIOS e i servizi del sistema operativo potevano essere chiamati solo da programmi in modalità reale.

Questi comportamenti sono stati utilizzati da molti software che prevedono questo comportamento, e quindi i controller della tastiera hanno continuato a controllare la linea A20 e ad eseguire reimpostazioni della CPU del software anche quando la necessità di Intel 80386 di passare a modalità reale dalla modalità protetta senza un ripristino della CPU.


15
Se stiamo parlando di cose a livello di "segnali", anche se dimentichiamo l'enumerazione e i LED, l'ingresso USB si basa sul polling. Un dispositivo non può inviare in modo proattivo i dati all'host a meno che l'host non lo richieda. Un dispositivo di input viene appena interrogato molto frequentemente per chiedere se ha qualcosa di nuovo da segnalare.
Matti Virkkunen,

Intendi "solo output" giusto?
Daniel

Non sono sicuro di come pronunciare quel tbh, una tastiera è un dispositivo "input" e "solo input" significherebbe che invia solo dati all'host, ma non li riceve mai. Dipende se il punto di vista è la tastiera o l'host.
LawrenceC,

1
@Daniel la maggior parte delle persone non chiamerà la tastiera un dispositivo di "output". Le periferiche sono collegate esternamente, quindi rimaniamo dalla prospettiva del PC per chiamarle input o output. È il PC che vogliamo usare, non tastiera, mouse o altre periferiche
phuclv

@ LưuVĩnhPhúc Lo so, ma scrive So it is not an "input-only" device (meaning it only outputs data to the host)che mi confonde
Daniel

56

Qualsiasi dispositivo USB indipendentemente dalla sua classe richiede la comunicazione bidirezionale per funzionare . Ogni dispositivo USB (o funzione in termini di specifiche USB) è rappresentato come un insieme di endpoint che possono essere considerati buffer che accettano o ricevono dati. Tuttavia, anche gli endpoint che possono solo inviare dati attendono un pacchetto speciale chiamato token prima di poter rispondere: inserisci qui la descrizione dell'immagine

(immagine da qui , le caselle grigie rappresentano l'host USB, le caselle bianche rappresentano la funzione USB)

Anche i cosiddetti trasferimenti di interruzione vengono eseguiti in questo modo, con l'host USB che esegue il polling dei dispositivi collegati mediante pacchetti di token. Ciò che differisce tra i trasferimenti regolari (di massa) e quelli di interruzione è che il tempo di polling è ridotto e garantito in quest'ultimo caso. Tuttavia, tutti i trasferimenti vengono avviati dall'host.


18

La domanda riflette un malinteso comune sul fatto che i dispositivi USB "inviano" qualcosa al PC da soli quando si preme un tasto (o si sposta il mouse), ecco perché un'attenzione così alta. In effetti, i dispositivi USB non inviano nulla fino a quando non RICEVONO richieste di risposta dall'host. Un'eccezione è un processo di riattivazione da un dispositivo sospeso.

Mentre l'USB sembra semplice in superficie, in realtà il suo funzionamento è piuttosto complicato. Qualsiasi nuovo dispositivo USB deve essere "enumerato" prima di iniziare a funzionare. La sequenza è la seguente:

  1. Dopo aver collegato una tastiera, la porta host riceve il segnale "stato connessione" (per i segnali LS, D- viene tirato ALTO dalla tastiera).

  2. Quindi l'host imposta la porta in modalità "reimpostazione porta" e USB PHY (driver del livello fisico) invia "USB_RESET" lungo le linee D + / D (entrambe le linee sono BASSE per un periodo di tempo prestabilito). Alcune informazioni sul "ripristino porta" per i dispositivi FS / HS sono disponibili qui .

  3. Quindi l'host inizia a emettere pacchetti di limiti di frame a intervalli di 1 ms. Per i dispositivi a bassa velocità (LS) come una normale tastiera cablata, questi sono solo impulsi "keep alive", mentre per FS viene generato lo speciale SOF - pacchetti di inizio del frame. Questi pacchetti mantengono il dispositivo in modalità attiva e impediscono che si trasformi in SUSPEND a basso consumo.

  4. Quindi inizia l '"enumerazione". L'host invia una richiesta per ottenere il descrittore del dispositivo. La richiesta viene inviata a "pipe predefinita" con indirizzo dispositivo "0". [Al momento esiste solo un dispositivo del genere - la tastiera - poiché tutti gli altri dispositivi sul bus dovrebbero già avere i loro indirizzi USB assegnati individualmente]

  5. La tastiera restituisce le informazioni richieste, quindi l'host sarà in grado di determinare quale tipo di driver deve essere caricato.

  6. L'host invia una transazione che richiede al dispositivo di cambiare il suo indirizzo predefinito con il nuovo indirizzo assegnato.

  7. Quindi l'host avvia un nuovo ciclo di comunicazione con il dispositivo, ora al nuovo indirizzo assegnato. Tutti gli altri dispositivi ignorano questa comunicazione perché non è indirizzata a loro.

  8. L'host potrebbe leggere molte più informazioni da molti altri descrittori e alla fine seleziona "configurazione dispositivo". Questo conclude il processo di enumerazione.

  9. A seconda della classe del dispositivo USB, l'host inizia a comunicare con il dispositivo. Nel caso della tastiera, l'host invia periodicamente una richiesta "IN" periodicamente, eseguendo il polling del dispositivo (anche se questa pipe periodica viene chiamata pipe "interrupt"). Se la tastiera ha un tasto premuto / premuto, la tastiera restituirà queste informazioni. In caso contrario, nessun dato verrà restituito al driver del dispositivo.

In breve, ogni dispositivo USB deve ricevere un indirizzo univoco dall'host USB e due host USB avranno difficoltà a comunicare con un dispositivo: collisione del bus, mancata corrispondenza dell'indirizzo, intercettazione casuale di dati di pressione dei tasti, ecc. Il protocollo USB rende impossibile condividere un dispositivo tra due host USB.


If keyboard has any key pressed/depressed, the keyboard will return this information- come si verificherebbero allora le chiavi fantasma? Ho avuto l'impressione che le tastiere debbano inviare eventi key-up e key-down, il che spiegherebbe perché se un evento key-up si perdesse avresti i tasti fantasma ...
Shadow

2
@shadow, non sono sicuro di cosa stai chiedendo. La frequenza di polling per la tastiera, se ricordo, è di 8 ms. Si premono i tasti in modo asincrono, quindi alcuni eventi (creazione o interruzione) possono andare in diversi frame di polling, alcuni eventi si verificano esattamente quando la richiesta IN è in corso. Un buon controller di tastiera dovrebbe gestire correttamente tutti gli incroci di eventi e non dovrebbe avere eventi mancanti. Non ho idea del perché le tastiere generino "chiavi fantasma", ma non ha nulla a che fare con il protocollo USB.
Ale..chenski l'

4
Le chiavi fantasma sono correlate al modo in cui sono cablate le chiavi fisiche. I controller per tastiera più economici non hanno un singolo pin per ciascun tasto, piuttosto hanno un sistema a griglia di indirizzamento, ad esempio con righe e colonne in cui il controller afferma il filo della colonna e cerca il segnale sul filo della riga. In questo scenario, premendo due tasti, ad es. E e S contemporaneamente, può essere indistinguibile dalla pressione di W e D, ad eccezione del tempo.
Ben

2

Come hanno spiegato altre risposte, USB richiede una comunicazione bidirezionale come parte del modo in cui funziona. PS / 2, pur consentendo la comunicazione bidirezionale, non è necessario per inviare le chiavi al computer, ma richiede l'impostazione dei LED della tastiera.

Teoricamente, potresti costruire un dispositivo per duplicare il segnale PS / 2 e inviarlo a un secondo computer, e scartare qualsiasi comando dai computer, in modo da poter inviare i tasti premuti a più computer, ma i LED della tastiera non lo farebbero rispondere agli stati di blocco numerico, blocco maiuscole e scorrimento (o qualsiasi altra modifica dello stato dei LED, ad esempio in Linux i LED della tastiera vengono talvolta utilizzati per scopi alternativi).

Non sono sicuro di quanto sia complesso un progetto del genere. È passato un po 'di tempo da quando ho lavorato con PS / 2, quindi non so se potresti semplicemente collegare un paio di cavi / connettori o se avresti bisogno di un dispositivo attivo (ad esempio un microcontrollore) per passare i comandi in una direzione ma scartarli nell'altro. Se avessi un microcontrollore, potresti persino rendere il dispositivo in modo tale da poter interpretare i comandi LED della tastiera e "combinarli" per la visualizzazione (ad esempio flash lungo il LED se è acceso sul computer uno ma spento sul computer due, flash breve il LED se è acceso sul computer due ma spento sul computer uno, il LED è acceso fisso se è acceso su entrambi i computer e il LED è spento se è spento su entrambi i computer). Sarebbe comunque più avanzato.

Inoltre, se il tuo obiettivo è quello di essere in grado di controllare un computer da un altro computer o due computer dalla stessa scrivania o qualsiasi altra cosa, potresti voler esaminare:

  • VNC (consente di controllare un computer da un altro su una rete)
  • RDP (consente anche di controllare un computer da un altro su una rete, integrato in Microsoft Windows ma richiede la versione Professional)
  • KVM (un componente hardware che consente di cambiare un set di periferiche tra due computer)

1

Prima delle tastiere USB, le tastiere PS / 2 utilizzavano un protocollo molto più semplice in cui è possibile avere una tastiera collegata a 2 dispositivi e farlo funzionare. È sufficiente una semplice connessione a Y.

Le tastiere USB meno recenti hanno ancora la modalità di emulazione PS / 2 integrata; l'utilizzo di uno di questi adattatori per connettori viola consente di collegarlo a una porta PS / 2 sul retro di un computer. Quindi, usando un cavo breakout da USB a PS / 2 su 2 computer, un adattatore viola sulla tastiera USB potrebbe funzionare.

Le tastiere USB più recenti hanno abbandonato la modalità PS / 2 legacy, quindi non funzionerà per questo caso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.