¿Un teclado USB solo envía señales o también las recibe de la computadora?


83

El teclado no necesita ninguna señal de la computadora, solo energía, ¿verdad? ¿O necesita recibir señales y enviarlas?

Editar: ¡No esperaba que esta pregunta generara tanto interés! Lo pregunté porque tenía un sueño inactivo de construir una doohickey que duplicara la señal para que el teclado pudiera enviar la misma letra a dos computadoras a la vez. Dado que (por lo que puedo ver en las respuestas) la computadora controla activamente el teclado como cualquier otro dispositivo, esto claramente no es posible. ¡No es gran cosa ya que prácticamente no tenía las habilidades para construirlo de todos modos!


40
por ejemplo, puede recibir el estado de las teclas de bloqueo. Muchos teclados tienen leds que indican el estado de las teclas de bloqueo. Intente activar el bloqueo de mayúsculas, luego reemplace su teclado, probablemente el estado seguirá bloqueado, esta información debe provenir de la PC.
Máté Juhász

8
incluso los teclados PS / 2 reciben señales de la PC, de lo contrario, ¿cómo puede encender / apagar los LED?
phuclv

8
@Devsman, no puede hacer eso; de lo contrario, el estado de bloqueo no estará sincronizado porque el software puede cambiarlo. Por ejemplo, si conecta 2 teclados y presiona numlock en este, el LED en el otro se alternaría. Lo mismo se puede lograr con el teclado en pantalla
phuclv


77
Un dispositivo USB debe tener datos bidireccionales, simplemente debido a los requisitos del protocolo de enlace inicial para habilitar la clase de dispositivo en particular.
Steve

Respuestas:


101

De la especificación "Versión de clase de dispositivo para dispositivos de interfaz humana (HID)" versión 11.1 :

La sincronización entre los estados del LED y los eventos BLOQ MAYÚS, BLOQ NUM, BLOQUEO DE DESPLAZAMIENTO, COMPONER y KANA se mantiene por el host y NO por el teclado. Si usa el descriptor de teclado en el Apéndice B, los estados de los LED se configuran enviando un informe absoluto de 5 bits al teclado a través de una solicitud Set_Report (Salida).

Para cambiar los LED del teclado, el teclado acepta un comando para hacerlo. Por lo tanto, no es un dispositivo de "solo entrada" (lo que significa que solo envía datos al host).

Dicho esto, hay un proceso de negociación y enumeración con todos los dispositivos USB que requieren una conversación de ida y vuelta entre el host y el dispositivo. No puede tener un dispositivo USB de "solo lectura".

Incluso antes de USB, el controlador de teclado de la PC aceptaba comandos porque hacía algunas cosas además de leer el teclado ( referencia ):

Si un teclado es una unidad de sistema periférico separada (como en la mayoría de las computadoras de escritorio modernas), el controlador del teclado no está conectado directamente a las teclas, sino que recibe códigos de escaneo de un microcontrolador integrado en el teclado a través de algún tipo de interfaz en serie. En este caso, el controlador generalmente también controla los LED del teclado enviando datos al teclado a través del cable.

El PC PC de IBM utilizó un chip Intel 8042 para interactuar con el teclado. Esta computadora también controló el acceso a la línea A20 para implementar una solución alternativa para un error de chip en el Intel 80286. 1 El controlador del teclado también se usó para iniciar un reinicio de la CPU del software para permitir que la CPU pase del modo protegido al real modo 1 porque el 286 no permitió que la CPU pasara del modo protegido al modo real a menos que se reinicie la CPU. Esto era un problema porque los programas en modo real solo podían llamar al BIOS y a los servicios del sistema operativo.

Estos comportamientos han sido utilizados por una gran cantidad de software que espera este comportamiento y, por lo tanto, los controladores de teclado han continuado controlando la línea A20 y realizando restablecimientos de CPU de software incluso cuando la capacidad del Intel 80386 eliminó la necesidad de un reinicio a través del controlador del teclado. modo real desde modo protegido sin reinicio de la CPU.


15
Si estamos hablando de cosas en un nivel de "señales", incluso si olvidamos la enumeración y los LED, la entrada USB se basa en encuestas. Un dispositivo no puede enviar datos de forma proactiva al host a menos que el host lo solicite. Un dispositivo de entrada se sondea con mucha frecuencia para preguntar si tiene algo nuevo que informar.
Matti Virkkunen

Te refieres a "solo salida" ¿verdad?
Daniel

No estoy seguro de cómo decir que tbh, un teclado es un dispositivo de "entrada", y "solo de entrada" significaría que solo envía datos al host, pero nunca los recibe. Depende de si el punto de vista es el teclado o el host.
LawrenceC

1
@Daniel, la mayoría de la gente no llamará al teclado un dispositivo de "salida". Los periféricos están conectados externamente, por lo que desde la perspectiva de la PC los llamamos entrada o salida. Es la PC que queremos usar, no el teclado, el mouse u otros periféricos
phuclv

@ LưuVĩnhPhúc Lo sé, pero él escribe lo So it is not an "input-only" device (meaning it only outputs data to the host)que me confunde
Daniel

56

Cualquier dispositivo USB, independientemente de su clase, requiere comunicación bidireccional para funcionar . Cada dispositivo USB (o función en términos de especificaciones USB) se representa como un conjunto de puntos finales que pueden considerarse como memorias intermedias que aceptan o reciben datos. Sin embargo, incluso los puntos finales que solo pueden enviar datos esperan un paquete especial llamado token antes de que puedan responder: ingrese la descripción de la imagen aquí

(imagen de aquí , los cuadros grises representan el host USB, los cuadros blancos representan la función USB)

Incluso las llamadas transferencias de interrupción se realizan de esta manera, con el host USB que sondea los dispositivos conectados utilizando paquetes de tokens. Lo que difiere entre las transferencias regulares (masivas) y las transferencias de interrupción es que el tiempo de votación es pequeño y está garantizado en este último caso. Aún así, todas las transferencias son iniciadas por el host.


18

La pregunta refleja una idea errónea común de que los dispositivos USB "envían" algo a la PC por sí solos cuando se presiona una tecla (o el mouse se mueve), por eso se le presta tanta atención. De hecho, los dispositivos USB no envían nada hasta que RECIBEN la solicitud correspondiente del host. Una excepción es un proceso de activación desde un dispositivo suspendido.

Si bien el USB parece simple en la superficie, de hecho, su funcionamiento es bastante complicado. Cualquier dispositivo USB nuevo debe "enumerarse" primero antes de que comience a funcionar. La secuencia es la siguiente:

  1. Después de enchufar un teclado, el puerto host recibe la señal de "estado de conexión" (para señales LS, D- es elevado al teclado).

  2. Luego, el host establece el puerto en modo de "restablecimiento de puerto", y el USB PHY (controlador de capa física) envía "USB_RESET" por las líneas D + / D- (ambas líneas son BAJAS durante un período de tiempo prescrito). Aquí puede encontrar información sobre "restablecimiento de puerto" para dispositivos FS / HS .

  3. Luego, el host comienza a generar paquetes de límite de trama en un intervalo de 1 ms. Para dispositivos de baja velocidad (LS) como teclado con cable ordinario, estos son solo pulsos "mantener vivos", mientras que para FS el SOF especial: se generan paquetes de inicio de trama. Estos paquetes mantienen el dispositivo en modo activo y evitan que se suspenda.

  4. Entonces comienza la "enumeración". El host envía una solicitud para obtener el descriptor del dispositivo. La solicitud se envía a la "tubería predeterminada" con la dirección del dispositivo "0". [Solo hay un dispositivo de este tipo en este momento, el teclado, ya que todos los demás dispositivos en el bus ya deberían tener sus direcciones USB asignadas individualmente]

  5. El teclado devuelve la información solicitada, por lo que el host podrá determinar qué tipo de controlador debe cargarse.

  6. El host envía una transacción que requiere que el dispositivo cambie su dirección predeterminada a una nueva dirección asignada.

  7. Luego, el host inicia una nueva ronda de comunicación con el dispositivo, ahora en la nueva dirección asignada. Todos los demás dispositivos ignoran esta comunicación porque no está dirigida a ellos.

  8. El host puede leer mucha más información de varios otros descriptores, y finalmente selecciona "configuración del dispositivo". Esto concluye el proceso de enumeración.

  9. Dependiendo de la clase de dispositivo USB, el host comienza a comunicarse con el dispositivo. En el caso del teclado, el host envía esencialmente una solicitud "IN" periódicamente, esencialmente sondeando el dispositivo (incluso si esta tubería periódica se llama tubería de "interrupción"). Si el teclado tiene alguna tecla presionada / presionada, el teclado devolverá esta información. De lo contrario, no se devolverán datos al controlador del dispositivo.

En resumen, cada dispositivo USB debe recibir una dirección única del host USB, y dos hosts USB tendrán dificultades para comunicarse con un dispositivo: colisión de bus, falta de coincidencia de direcciones, intercepción aleatoria de datos de pulsación de teclas, etc. El protocolo USB hace que sea imposible compartir un dispositivo entre dos hosts USB.


If keyboard has any key pressed/depressed, the keyboard will return this information- ¿Cómo ocurrirían las llaves fantasma entonces? Tenía la impresión de que los teclados deben enviar eventos de activación y desactivación de teclas, lo que explicaría por qué si se omitiera un evento de activación de teclas tendrías teclas fantasmas ...
Shadow

2
@shadow, no estoy seguro de qué preguntas. La tasa de sondeo para el teclado, si recuerdo, es de 8 ms. Está presionando las teclas de forma asincrónica, por lo que algunos eventos (hacer o interrumpir) pueden entrar en diferentes marcos de votación, algún evento ocurrirá exactamente cuando la solicitud IN esté en progreso. Un buen controlador de teclado debe manejar adecuadamente todos los cruces de eventos y no debe tener eventos faltantes. No tengo idea de por qué los teclados generan "claves fantasmas", pero no tiene nada que ver con el protocolo USB.
Ale..chenski

44
Las claves fantasma están relacionadas con la forma en que se conectan las claves físicas. Los controladores de teclado más baratos no tienen un solo pin para cada tecla, sino que tienen un sistema de direccionamiento con, por ejemplo, filas y columnas donde el controlador ensambla el cable de la columna y busca la señal en el cable de la fila. En este escenario, presionar dos teclas, por ejemplo, E y S simultáneamente, es indistinguible de presionar W y D, excepto por temporización.
Ben

2

Como han explicado otras respuestas, el USB requiere comunicación bidireccional como parte de la forma en que funciona. PS / 2, si bien permite la comunicación bidireccional, no lo requiere para enviar claves a la computadora, pero sí requiere que configure los LED del teclado.

Teóricamente, podría construir un dispositivo para duplicar la señal PS / 2 y enviarla a una segunda computadora, y descartar cualquier comando de las computadoras, para que pueda enviar sus pulsaciones de teclas a varias computadoras pero los LED del teclado no responda a los estados de bloqueo numérico, bloqueo de mayúsculas y bloqueo de desplazamiento (o cualquier otro cambio de estado del LED, por ejemplo, en Linux, los LED del teclado a veces se usan para fines alternativos).

No estoy seguro de lo complejo que sería un proyecto de este tipo. Ha pasado un tiempo desde que trabajé con PS / 2, así que no sé si podría simplemente conectar un par de cables / conectores o si necesitaría un dispositivo activo (por ejemplo, microcontrolador) para pasar comandos en una dirección pero descartarlos en el otro. Si tuviera un microcontrolador, incluso podría hacer que el dispositivo pueda interpretar los comandos LED del teclado y "combinarlos" para mostrarlos (p. Ej., Parpadear el LED si está encendido en la computadora uno pero apagado en la computadora dos, flash corto el LED si está encendido en la computadora dos pero apagado en la computadora uno, el LED permanece encendido si está encendido en ambas computadoras y el LED está apagado si está apagado en ambas computadoras). Sin embargo, eso sería más avanzado.

Además, si su objetivo es poder controlar una computadora desde otra computadora, o dos computadoras desde el mismo escritorio, o lo que sea, es posible que desee considerar:

  • VNC (permite controlar una computadora desde otra a través de una red)
  • RDP (también permite controlar una computadora desde otra a través de una red, integrada en Microsoft Windows pero requiere la versión Professional)
  • KVM (una pieza de hardware que le permite cambiar un conjunto de periféricos entre dos computadoras)

1

Antes de los teclados USB, los teclados PS / 2 usaban un protocolo mucho más simple en el que es posible tener un teclado conectado a 2 dispositivos y hacer que funcione. Una simple conexión en Y es todo lo que se requiere.

Los teclados USB más antiguos todavía tienen incorporado el modo de emulación PS / 2; El uso de uno de esos adaptadores de conector púrpura le permite conectarlo a un puerto PS / 2 en la parte posterior de una computadora. Entonces, usando un cable de conexión USB a PS / 2 en 2 computadoras, entonces un adaptador morado de regreso a su teclado USB podría funcionar.

Los teclados USB más nuevos dejaron el modo PS / 2 heredado, por lo que no funcionarán para este caso.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.