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

82

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 essa pergunta gerasse tanto interesse! Eu perguntei porque eu tinha um sonho ocioso de construir um doohickey que duplica o sinal para que o teclado possa enviar a mesma carta para dois computadores ao mesmo tempo. Como (pelo que posso ver nas respostas) o computador controla ativamente o teclado como qualquer outro dispositivo, isso claramente não é possível. Não é grande coisa, praticamente não tenho as habilidades para construí-lo mesmo assim!

    
por Ne Mo 06.03.2017 / 16:28

5 respostas

100

Na " definição de classe de dispositivo para interface humana Devices (HID) "versão 11.1 " especificação:

Synchronization between LED states and CAPS LOCK, NUM LOCK, SCROLL LOCK, COMPOSE, and KANA events is maintained by the host and NOT the keyboard. If using the keyboard descriptor in Appendix B, LED states are set by sending a 5-bit absolute report to the keyboard via a Set_Report(Output) request.

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

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

Mesmo antes do USB, o controlador de teclado do PC aceitava comandos porque fazia algumas coisas além de ler o teclado ( reference <) / a>):

If a keyboard is a separate peripheral system unit (such as in most modern desktop computers), the keyboard controller is not directly attached to the keys, but receives scancodes from a microcontroller embedded in the keyboard via some kind of serial interface. In this case, the controller usually also controls the keyboard's LEDs by sending data back to keyboard through the wire.

The IBM PC AT used an Intel 8042 chip to interface to the keyboard. This computer also controlled access to the A20 line in order to implement a workaround for a chip bug in the Intel 80286.1 The keyboard controller was also used to initiate a software CPU reset in order to allow the CPU to transition from protected mode to real mode1 because the 286 did not allow the CPU to go from protected mode to real mode unless the CPU is reset. This was a problem because the BIOS and the operating system services could only be called by programs in real mode.

These behaviors have been used by plenty of software that expects this behavior, and therefore keyboard controllers have continued controlling the A20 line and performing software CPU resets even when the need for a reset via the keyboard controller was obviated by the Intel 80386's ability to switch to real mode from protected mode without a CPU reset.

    
por 06.03.2017 / 16:34
55

Qualquer dispositivo USB, independentemente de sua classe, requer comunicação bidirecional para funcionar . Cada dispositivo USB (ou função em termos de especificação USB) é representado como um conjunto de endpoints que podem ser considerados como buffers que aceitam ou recebem dados. Entretanto, mesmo endpoints que podem enviar dados apenas aguardam por um pacote especial chamado token antes que eles possam responder:

(imagemde aqui , caixas cinzas representam host USB, caixas brancas representam função USB)

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

    
por 06.03.2017 / 18:13
17

A pergunta reflete um equívoco comum de que os dispositivos USB "enviam" algo para o PC sozinhos quando uma tecla é pressionada (ou o mouse se move), e é por isso que a atenção é tão alta. Na verdade, os dispositivos USB não enviam nada até receberem a solicitação 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 o seu funcionamento é bastante complicado. Qualquer novo dispositivo USB deve ser "enumerado" antes de começar a funcionar. A sequência é a seguinte:

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

  2. Em seguida, o host define a porta no modo "redefinição da porta" e o USB PHY (driver da camada física) envia "USB_RESET" pelas linhas D + / D (ambas as linhas são LOW para uma quantidade prescrita de Tempo). 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 em intervalos de 1 ms. Para dispositivos de baixa velocidade (LS) como o teclado comum com fio, estes são apenas pulsos "keep alive", enquanto que para o FS os pacotes especiais SOF - start-of-frame são gerados. Esses pacotes mantêm o dispositivo no modo ativo e impedem que ele faça o SUSPEND de baixa energia.

  4. Em seguida, a "enumeração" começa. O host envia uma solicitação para obter o descritor do dispositivo. A solicitação é enviada para "pipe padrão" com o endereço de dispositivo "0". [Há apenas um desses dispositivos neste momento - o teclado - já que todos os outros dispositivos no barramento já devem ter seus endereços USB designados 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 são endereçados 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 de dispositivo USB, o host começa a se comunicar com o dispositivo. No caso do teclado, o host envia uma solicitação "IN" periódica, essencialmente pesquisando o dispositivo (mesmo se esse canal periódico for chamado de "interrupção"). Se o teclado tiver qualquer tecla pressionada / pressionada, o teclado retornará essas informações. Caso contrário, nenhum dado será retornado ao driver de dispositivo.

É curto, cada dispositivo USB deve receber um endereço exclusivo do host USB e dois hosts USB terão dificuldade para se comunicar com um dispositivo - colisão de barramento, incompatibilidade de endereço, interceptação aleatória de dados de pressionamento de tecla, etc. O protocolo USB torna impossível para compartilhar um dispositivo entre dois hosts USB.

    
por 07.03.2017 / 19:27
2

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

Teoricamente, você poderia criar um dispositivo para duplicar o sinal PS / 2 e enviá-lo para um segundo computador, e descartar quaisquer comandos dos computadores, para poder enviar seus pressionamentos de tecla para vários computadores, mas os LEDs do teclado não responderia aos estados num lock, caps lock e scroll control (ou qualquer outra alteração no estado do LED, por exemplo no Linux os LEDs do teclado são algumas vezes usados para propósitos alternativos).

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

Além disso, se seu objetivo for controlar um computador de outro computador ou dois computadores da mesma mesa, ou o que for, convém analisar:

  • VNC (permite controlar um computador de outro em uma rede)
  • RDP (também permite controlar um computador de outro em uma rede, incorporado ao Microsoft Windows, mas requer a versão Professional)
  • KVM (um hardware que permite alternar um conjunto de periféricos entre dois computadores)
por 09.03.2017 / 09:41
1

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

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

Novos teclados USB perderam o modo PS / 2 herdado, por isso não funciona neste caso.

    
por 10.03.2017 / 18:28

Tags