Um teclado USB envia apenas sinais ou também os recebe do computador?

83

O teclado não precisa de nenhum sinal do computador, apenas energia, certo? OU precisa receber sinais e enviá-los?

Edit: Eu não esperava que esta pergunta gerasse tanto interesse! Perguntei porque tinha um sonho ocioso de construir uma chave eletrônica que duplica o sinal para que o teclado possa enviar a mesma letra para dois computadores ao mesmo tempo. Como (pelo que posso entender nas respostas) o computador controla ativamente o teclado como qualquer outro dispositivo, isso claramente não é possível. Não é grande coisa, pois praticamente eu não tinha as habilidades necessárias para construí-lo!

Ne Mo
fonte
40
por exemplo, pode receber status de chaves de bloqueio. Muitos teclados possuem leds indicando o status das teclas de bloqueio. Tente ativar o caps lock e, em seguida, substitua o teclado, provavelmente o estado ainda estará bloqueado, essas informações precisam vir do PC.
Máté Juhász
8
até os teclados PS / 2 recebem sinais do PC, caso contrário, como ele pode ligar / desligar os LEDs?
Phuclv 06/03/19
8
@ Devsman, você não pode fazer isso, caso contrário, o estado de bloqueio ficará fora de sincronia, pois pode ser alterado por software. Por exemplo, se você conectar 2 teclados e pressionar numlock, o LED do outro alternará. O mesmo pode ser conseguido com teclado na tela
phuclv
7
Um dispositivo USB deve ter dados bidirecionais, simplesmente devido aos requisitos do handshake inicial para habilitar a classe de dispositivo específica.
Steve

Respostas:

101

Na especificação " Device Class Definition for Human Interface Devices (HID)" versão 11.1 ":

A sincronização entre os estados do LED e os eventos CAPS LOCK, NUM LOCK, SCROLL LOCK, COMPOSE e KANA é mantida pelo host e NÃO pelo teclado. Se você estiver usando o descritor de teclado no Apêndice B, os estados dos LEDs serão configurados enviando um relatório absoluto de 5 bits ao teclado por meio de uma solicitação Set_Report (Output).

Para alterar os LEDs do teclado, o teclado aceita um comando para fazer isso. Portanto, não é um dispositivo "apenas de entrada" (o que significa que apenas envia dados para o host).

Dito isto, há um processo de negociação e enumeração com todos os dispositivos USB que requerem uma conversa entre o host e o dispositivo. Você não pode ter um dispositivo USB "somente leitura".

Mesmo antes do USB, o controlador do teclado do PC aceitava comandos porque fazia algumas coisas além de ler o teclado ( referência ):

Se um teclado é uma unidade de sistema periférico separada (como na maioria dos computadores desktop modernos), o controlador do teclado não está diretamente conectado às teclas, mas recebe códigos de scancodes de um microcontrolador incorporado no teclado por meio de algum tipo de interface serial. Nesse caso, o controlador geralmente também controla os LEDs do teclado enviando dados de volta ao teclado através do fio.

O IBM PC AT usou um chip Intel 8042 para fazer interface com o teclado. Este computador também controlou o acesso à linha A20, a fim de implementar uma solução alternativa para um bug de chip no Intel 80286. 1 O controlador do teclado também foi usado para iniciar uma redefinição da CPU do software para permitir a transição da CPU do modo protegido para o real modo 1 porque o 286 não permitiu que a CPU passasse do modo protegido para o modo real, a menos que a CPU fosse redefinida. Isso foi um problema porque o BIOS e os serviços do sistema operacional só podiam ser chamados pelos programas em modo real.

Esses comportamentos foram usados ​​por muitos softwares que esperam esse comportamento e, portanto, os controladores de teclado continuaram controlando a linha A20 e realizando as redefinições da CPU do software, mesmo quando a necessidade de redefinição pelo controlador de teclado foi evitada pela capacidade do Intel 80386 de mudar para modo real a partir do modo protegido sem uma reinicialização da CPU.

LawrenceC
fonte
15
Se estivermos falando sobre coisas no nível de "sinais", mesmo se esquecermos a enumeração e os LEDs, a entrada USB será baseada na pesquisa. Um dispositivo não pode enviar dados proativamente para o host, a menos que o host solicite. Um dispositivo de entrada é pesquisado com muita frequência para perguntar se há algo novo para relatar.
Matti Virkkunen
Você quer dizer "somente saída", certo?
Daniel
Não tendo certeza de como digitar tbh, um teclado é um dispositivo de "entrada" e "somente entrada" significaria que apenas envia dados ao host, mas nunca recebe. Depende se o ponto de vista é o teclado ou o host.
LawrenceC
1
@ Daniel Daniel muitas pessoas não chamam o teclado de dispositivo de "saída". Os periféricos são conectados externamente, portanto, defendemos a perspectiva do PC para chamá-los de entrada ou saída. É o PC que deseja usar, não teclado, mouse e outros periféricos
phuclv
@ LưuVĩnhPhúc Eu sei, mas ele escreve So it is not an "input-only" device (meaning it only outputs data to the host)que me confunde
Daniel
56

Qualquer dispositivo USB, independentemente de sua classe, requer comunicação bidirecional para funcionar . Todo dispositivo USB (ou função em termos de especificações USB) é representado como um conjunto de terminais que podem ser considerados buffers que aceitam ou recebem dados. No entanto, mesmo os pontos de extremidade que podem enviar dados apenas aguardam um pacote especial chamado token antes que possam responder: insira a descrição da imagem aqui

(imagem daqui , caixas cinza representam host USB, caixas brancas representam função USB)

Mesmo as chamadas transferências de interrupção são feitas dessa maneira, com o host USB pesquisando dispositivos conectados usando pacotes de token. O que difere entre transferências regulares (em massa) e transferências de interrupção é que o tempo de pesquisa é pequeno e garantido no último caso. Ainda assim, todas as transferências são iniciadas pelo host.

Dmitry Grigoryev
fonte
18

A pergunta reflete um equívoco comum de que os dispositivos USB "enviam" algo para o PC por conta própria, quando uma tecla é pressionada (ou o mouse se move), por isso é tão alta atenção. De fato, os dispositivos USB não enviam nada até receberem o pedido correspondente do host. Uma exceção é um processo de ativação de um dispositivo suspenso.

Enquanto o USB parece simples na superfície, na verdade seu funcionamento é bastante complicado. Qualquer novo dispositivo USB deve ser "enumerado" primeiro antes de começar a funcionar. A sequência é a seguinte:

  1. Depois que um teclado é conectado, a porta do host recebe o sinal "status de conexão" (para sinais LS, D- é puxado ALTO pelo teclado).

  2. Em seguida, o host define a porta no modo "redefinição de porta" e o USB PHY (driver da camada física) envia "USB_RESET" pelas linhas D + / D- (as duas linhas são reduzidas durante um período de tempo prescrito). Algumas informações sobre "redefinição de porta" para dispositivos FS / HS podem ser encontradas aqui .

  3. Em seguida, o host começa a emitir pacotes de limite de quadros no intervalo de 1 ms. Para dispositivos de baixa velocidade (LS) como teclado com fio comum, esses são apenas pulsos "keep alive", enquanto para FS o SOF especial - pacotes de início de quadro são gerados. Esses pacotes mantêm o dispositivo no modo ativo e impedem que ele atinja SUSPEND de baixa potência.

  4. Então a "enumeração" começa. O host envia uma solicitação para obter o descritor do dispositivo. A solicitação é enviada para "canal padrão" com o endereço do dispositivo "0". [No momento, existe apenas um desses dispositivos - o teclado - já que todos os outros dispositivos no barramento já devem ter seus endereços USB atribuídos individualmente]

  5. O teclado retorna as informações solicitadas, para que o host possa determinar que tipo de driver deve ser carregado.

  6. O host envia uma transação exigindo que o dispositivo altere seu endereço padrão para o novo endereço atribuído.

  7. Em seguida, o host inicia uma nova rodada de comunicação com o dispositivo, agora no novo endereço atribuído. Todos os outros dispositivos ignoram essa comunicação porque não é endereçada a eles.

  8. O host pode ler muito mais informações de vários outros descritores e, eventualmente, seleciona "configuração do dispositivo". Isso conclui o processo de enumeração.

  9. Dependendo da classe do dispositivo USB, o host começa a se comunicar com o dispositivo. No caso do teclado, o host envia essencialmente uma solicitação "IN" periodicamente, pesquisando essencialmente o dispositivo (mesmo que esse canal periódico seja chamado de "interrupção"). Se alguma tecla for pressionada / pressionada, o teclado retornará essas informações. Caso contrário, nenhum dado será retornado ao driver do dispositivo.

Resumindo, todo dispositivo USB deve receber um endereço exclusivo do host USB e dois hosts USB terão dificuldade em se comunicar com um dispositivo - colisão de barramento, incompatibilidade de endereço, interceptação aleatória de dados pressionados por tecla etc. O protocolo USB torna impossível o compartilhamento de um dispositivo. dispositivo entre dois hosts USB.

Ale..chenski
fonte
If keyboard has any key pressed/depressed, the keyboard will return this information- como as chaves fantasmas ocorreriam então? Eu estava sob a impressão de que os teclados devem enviar chave-up e eventos-chave para baixo, o que explicaria por que se um evento chave-up ficou perdido você teria chaves de fantasmas ...
Sombra
2
@ sombra, não sei o que você está perguntando. A taxa de votação para o teclado, se bem me lembro, é de 8 ms. Você está pressionando teclas de forma assíncrona, para que alguns eventos (criar ou interromper) possam entrar em diferentes quadros de pesquisa, algum evento ocorrerá exatamente quando a solicitação IN estiver em andamento. Um bom controlador de teclado deve lidar adequadamente com todos os cruzamentos de eventos e não deve ter eventos ausentes. Não sei por que os teclados geram "teclas fantasmas", mas isso não tem nada a ver com o protocolo USB.
Ale..chenski 8/03
4
As chaves fantasmas estão relacionadas à maneira como as chaves físicas são conectadas. Os controladores de teclado mais baratos não têm um único pino para cada tecla; eles têm um sistema de grade de endereçamento com, por exemplo, linhas e colunas em que o controlador afirma o fio da coluna e procura o sinal no fio da linha. Nesse cenário, pressionar duas teclas, por exemplo, E e S simultaneamente, pode ser indistinguível de pressionar W e D, exceto pelo tempo.
Ben
2

Como outras respostas explicaram, o USB requer comunicação bidirecional como parte do modo como funciona. O PS / 2, embora permita a comunicação bidirecional, não exige isso para enviar chaves ao computador, mas exige que ele defina os LEDs do teclado.

Teoricamente, você pode criar um dispositivo para duplicar o sinal PS / 2 e enviá-lo para um segundo computador e descartar qualquer comando dos computadores, para poder enviar as teclas pressionadas para vários computadores, mas os LEDs do teclado não responda aos estados num lock, caps lock e scroll lock (ou qualquer outra alteração do estado do LED, por exemplo, no Linux, os LEDs do teclado às vezes são usados ​​para fins alternativos).

Não tenho certeza de quão complexo seria esse projeto. Já faz um tempo desde que eu trabalhei com o PS / 2, então não sei se você poderia simplesmente conectar alguns fios / conectores ou se precisaria de um dispositivo ativo (por exemplo, microcontrolador) para passar comandos em uma direção, mas descartá-los no outro. Se você possui um microcontrolador, pode até fazer com que o dispositivo possa interpretar os comandos dos LEDs do teclado e "combiná-los" para exibição (por exemplo, pisque prolongadamente o LED se estiver aceso no computador um, mas desligado no computador dois, flash curto o LED se estiver aceso no computador dois, mas apagado no computador um, LED aceso se estiver aceso nos dois computadores e LED apagado se estiver aceso nos dois computadores). Isso seria mais avançado.

Além disso, se seu objetivo é controlar um computador de outro computador, ou dois computadores da mesma mesa, ou o que for, você pode procurar:

  • VNC (permite controlar um computador de outro através de uma rede)
  • RDP (também permite controlar um computador de outro através de uma rede, integrada no Microsoft Windows, mas requer a versão Professional)
  • KVM (uma peça de hardware que permite alternar um conjunto de periféricos entre dois computadores)
Micheal Johnson
fonte
1

Antes dos teclados USB, os teclados PS / 2 usavam um protocolo muito mais simples, onde é possível conectar um teclado a 2 dispositivos e fazê-lo funcionar. Uma conexão Y simples é tudo o que é necessário.

Os teclados USB mais antigos ainda têm o modo de emulação PS / 2 embutido; o uso de um desses adaptadores de conector roxo permite conectá-lo a uma porta PS / 2 na parte traseira de um computador. Portanto, usando um cabo USB para PS / 2 em 2 computadores, um adaptador roxo de volta para o teclado USB pode funcionar.

Os teclados USB mais recentes abandonaram o modo PS / 2 herdado, portanto não funcionarão neste caso.

Tomuo
fonte