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


O teclado não precisa de nenhum sinal do computador, basta ligar, certo? Ou precisa receber sinais, bem como enviá-los?

Edit: Eu não esperava que esta questão 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 como praticamente não tenho as habilidades para construí-lo de qualquer maneira!


82


origem


por exemplo. pode receber status de chaves de bloqueio. Muitos teclados têm leds indicando o status das teclas de bloqueio. Tente ligar o caps lock, em seguida, substitua o teclado, provavelmente o estado ainda será bloqueado, esta informação precisa vir do PC. - Máté Juhász
mesmo teclados PS / 2 recebem sinais do PC, caso contrário, como ele pode ligar / desligar os LEDs? - phuclv
@Devsman você não pode fazer isso, senão o estado do bloqueio ficará fora de sincronia porque pode ser alterado pelo software. Por exemplo, se você conectar dois teclados e pressionar numlock, o LED do outro alternará. O mesmo pode ser alcançado com o teclado na tela - phuclv
Alternando os LEDs codegolf.stackexchange.com/questions/110974/blink-the-caps-lock - Dohn Joe
Um dispositivo USB deve ter dados bidirecionais, simplesmente devido aos requisitos do handshaking inicial para ativar a classe de dispositivo específica. - Steve


Respostas:


De "Definição de Classe de Dispositivo para interface humana Dispositivos (HID) "versão 11.1"especificação:

Sincronização entre estados de LED e CAPS LOCK, NUM LOCK, SCROLL   Os eventos LOCK, COMPOSE e KANA são mantidos pelo host e NÃO pelo   teclado. Se estiver usando o descritor de teclado no Apêndice B, os estados do LED   são definidos por envio um relatório absoluto de 5 bits para o teclado através de um   Pedido Set_Report (Output).

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 inversa 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 (referência):

Se um teclado for uma unidade de sistema periférica separada (como na maioria dos computadores de mesa modernos), o controlador de teclado não está diretamente conectado às teclas, mas recebe scancodes de um microcontrolador incorporado no teclado por meio de algum tipo de interface serial. Neste 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 utilizou um chip Intel 8042 para fazer interface com o teclado. Esse computador também controlava o acesso à linha A20 para implementar uma solução alternativa para um bug no Intel 80286.1 O controlador de teclado também foi usado para iniciar uma reinicialização da CPU do software para permitir que a CPU faça a transição do modo protegido para o modo real1 porque o 286 não permitia que a CPU passasse do modo protegido para o modo real, a menos que a CPU fosse reinicializada. Este foi um problema porque o BIOS e os serviços do sistema operacional só podiam ser chamados por 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 executando reinicializações de CPU de software, mesmo quando a necessidade de reinicialização por meio do controlador de teclado foi evitada pela capacidade do Intel 80386 de mudar para modo real do modo protegido sem uma reinicialização da CPU.


99



Se estamos falando de coisas em um nível de "sinais", mesmo se esquecermos de enumeração e LEDs, a entrada USB é baseada em pesquisas. Um dispositivo não pode enviar dados proativamente para o host, a menos que o host solicite isso. Um dispositivo de entrada é pesquisado com muita frequência para perguntar se há algo novo a ser relatado. - Matti Virkkunen
Você quer dizer "somente saída", certo? - Daniel
Não tenho certeza de como dizer que tbh, um teclado é um dispositivo de "entrada", e "somente entrada" significaria que ele só envia dados para o host, mas nunca recebe. Depende se o ponto de vista é o teclado ou o host. - LawrenceC
@Daniel a maioria das pessoas não chama o teclado de um dispositivo de "saída". Os periféricos são conectados externamente, então ficamos na perspectiva do PC para chamá-los de entrada ou saída. É o PC que queremos usar, não teclado, mouse ou 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) o que me confunde - Daniel


Qualquer dispositivo USB, independentemente da 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 pontos de extremidade que pode ser pensado como buffers que aceitam ou recebem dados. No entanto, mesmo endpoints que podem apenas enviar dados esperam por um pacote especial chamado símbolo antes que eles possam responder: enter image description here

(imagem de Aqui, caixas cinza representam host USB, caixas brancas representam a função USB)

Mesmo as chamadas transferências de interrupções 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.


55





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 de porta" e o USB PHY (driver de camada física) envia "USB_RESET" pelas linhas D + / D (ambas as linhas são LOW por um determinado período de tempo). Algumas informações sobre "reset de porta" para dispositivos FS / HS podem ser encontrado 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 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 "pipe padrão" com o endereço de dispositivo "0". [Existe 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 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 ela 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 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.

Em suma, 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 impossibilita compartilhar um dispositivo entre dois hosts USB.


17



If keyboard has any key pressed/depressed, the keyboard will return this information - como as teclas fantasmas ocorreriam então? Fiquei com a impressão de que os teclados devem enviar eventos de chave e para baixo, o que explicaria por que, se um evento de chave fosse perdido, você teria chaves fantasmas ... - Shadow
@ Shadow, não sei o que você está perguntando. A taxa de pesquisa do teclado, se bem me lembro, é de 8 ms. Você está pressionando as teclas de forma assíncrona, portanto, alguns eventos (make or break) podem entrar em diferentes quadros de pesquisa, algum evento ocorrerá exatamente quando a solicitação IN estiver em andamento. Um bom controlador de teclado deve manipular corretamente todos os cruzamentos de eventos e não deve ter eventos ausentes. Eu não tenho idéia porque teclados geram "chaves fantasmas", mas não tem nada a ver com o protocolo USB. - Ali Chen
As chaves fantasmas estão relacionadas à maneira como as chaves físicas são conectadas. Controladores de teclado mais baratos não têm um único pino para cada chave, em vez disso, eles têm um sistema de grade de endereçamento com, e. linhas e colunas onde o controlador ativa o fio da coluna e procura o sinal no fio da linha. Neste cenário, pressionar duas chaves, p. E e S simultaneamente podem ser indistinguíveis de pressionar W e D, exceto pelo tempo. - Ben


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 exige 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 responda aos estados de num lock, caps lock e scroll control (ou qualquer outra mudança 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 verificar:

  • 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, embutido 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)

2





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

Teclados USB mais antigos ainda têm o modo de emulação PS / 2 embutido; 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.

Os teclados USB mais recentes eliminaram o modo PS / 2 legado, por isso não funcionam neste caso.


1