Decodificación del protocolo de teclado PS / 2 utilizando un buen hardware antiguo

1987 fue un año glorioso. Nos trajo el teclado PS / 2 estándar, que todavía está presente en muchos paneles posteriores hasta el día de hoy. (También marcó la publicación de América del Norte / Europa por The La leyenda de Zelda pero ese es otro artículo.) Hasta ahora, los periféricos usaban conectores DIN-5 y DE-9 (a menudo erróneamente llamados DB9 y comunes para los ratones en ese momento) o, sin aliento, conectores patentados no estándar. Entonces, ¿de qué se trataba este nuevo calor? [Ben Eater] nos guía a través de la sala de celebridades de PS / 2 mediante ingeniería inversa del protocolo.

El conector PS / 2 en todo su esplendor

Este es un protocolo de datos de reloj, por lo que se genera una forma de onda en el pin de datos para cada pulsación de tecla que se puede comparar con el pin de reloj para establecer el tiempo de cada pulsación de tecla. Cada clave envía un conjunto único de pulsos encriptados y listo, la máquina puede descifrar rápida y fácilmente los caprichos del usuario.

Aquí es donde [Ben’s] dive realmente brilla, sabemos que es un shinobi panchino, por lo que recibe algunas fichas DIP. El registro de cambios es una manera fácil de construir una interfaz PS / 2 paralela para romper cada paquete de datos. Hay algunas rarezas en el camino, como la necesidad de invertir la señal del reloj, por lo que el registro de desplazamiento comienza en el borde derecho. También usa el retardo de propagación de algunas puertas del inversor para lanzar el perno del registro de cambios 595 un poco tarde, evitando el estado de carrera. Un segundo 595 almacena la salida para su visualización con un conjunto de LED.

Además de simplemente descifrar la señal, [Ben] entra a medida que se formatean los paquetes. No solo obtiene el código clave, sino que también obtiene una detección de error de interfaz serial normal; bits de inicio / parada y bits de igualdad también. Incluso busca teclas extendidas que envían más de un paquete y un paquete de acción de teclas enviado por este teclado en particular.

Esta es la demostración perfecta de bajo nivel de cómo funciona el protocolo. En la practicidad, parece un poco extraño romper la serie a un paralelo cuando sería muy fácil controlar las dos líneas de señal y descifrarlas con un microcontrolador. Es posible que desee cambiarlo un poco, ceñirse al reloj y los pines de datos, pero conéctelos a una Raspberry Pi usando solo algunos elementos pasivos.

  • Michael Black dice:

    Según recuerdo, la “computadora IBM” original usó 595 para paralelizar la señal del teclado en serie.

    Hubo una iteración posterior que utilizó un microcontrolador para manejar el teclado en serie.

    El teclado Tye siempre ha utilizado un microcontrolador.

  • tekkieneet dice:

    Si bien es una lógica simple para descifrar el protocolo PS / 2, es poco probable que pueda recuperar correctamente los problemas / ESD / eliminación / reconexión involuntaria. Cuando los bits del reloj fallan sin resincronización, todos los datos recopilados desde ese punto se tergiversan. Ésta fue una de las razones por las que la primera computadora no estaba funcionando bien con la reconexión y necesitaba reiniciarse si alguien se tropezaba con el cable del teclado.

    Para recuperarse, necesitaría una pausa en el último pulso del reloj e intentar volver a entintar el bit inicial. Implementé eso en mi código PS / 2 y siempre se cura.

  • jacques1956 dice:

    Un dato interesante sobre un teclado USB es que usa un protocolo PS / 2 cuando las líneas D + y D- están hasta Vdd. Todos los teclados USB que he probado hacen eso y lo aprovecho cuando quiero usar un teclado de computadora con una MCU. Nunca he usado un protocolo USB para este propósito porque implementar un protocolo PS / 2 es mucho más simple.

    • Ø dice:

      Muchos más teclados especiales (piense en reprogramables) o "para tocar" no lo hacen.
      Que es todo mío, porque mi Logitech IN 2001 SE finalmente murió.

    • Dean Styles dice:

      Recuerde los pequeños adaptadores que venían con los teclados USB cuando se introdujeron hace 20 años; hacen el retiro:
      https://commons.wikimedia.org/wiki/File:USB_to_PS2_mouse_adapter.jpg

    • Dissy dice:

      Muchos teclados que he comprado durante los últimos 10 años ya no son compatibles con la especificación de transición de usb a ps2.
      De todos modos, solo estaba destinado a unos pocos años, pero supongo que tomó (toma) mucho tiempo para que los teclados de transición pasaran por los canales. Pero parece que se han alcanzado nuevos controladores de teclado, ya que el precio inferior a $ 20 ya no es compatible con ps2 🙁

  • Ninguno dice:

    Un analizador lógico en este caso sería un poco más fácil.

    • RW versión 0.0.1 dice:

      Ese es uno.

  • Darko dice:

    Si solo conectara un reloj como ese, leería datos en un flanco ascendente que está convenientemente en el medio de un bit de datos, por lo que no necesitaría ningún retraso. Supongo que así es como planearon usarlo 🙂

  • Alex Rossie dice:

    Vi esto de camino al trabajo ayer, así que el 100% no se concentró. No pude evitar pensar que sería prácticamente inútil si realmente estuvieras interconectando esto.

    Parece que la mejor protección contra los datos basura se está probando constantemente y solo que las ráfagas de datos se apresuran contra el tiempo entre las pulsaciones de teclas.

    Supongo que fue una gran prueba, pero hay algo de negligencia en la forma en que está organizado. No puedo poner mi dedo en eso.

    • Dissy dice:

      Si alinea un búfer de bits bastante largo, puede detectar una sincronización con los datos con la paridad deshabilitada, luego cambie una ventana de bits un bit a la vez (máximo 8 veces) hasta que encuentre la posición adecuada donde la paridad verifica lo suficiente paquetes. Entonces puedes recuperar tu lugar.

  • Hirudinea dice:

    "Sería muy fácil controlar las dos líneas de señal y descifrarlas con un microcontrolador".

    ¡Ve a lo grande (la manera más difícil) o vete a casa!

  • ESTOLA dice:

    Alguna historia para aclarar algunas cuestiones del video.

    Antes del XT, IBM tenía un teclado existente (84 teclas) en producción. Los códigos de escaneo PS / 2 provienen de este teclado anterior y estos representan la posición de la tecla en lugar de la etiqueta (letra) impresa en la tecla y, por lo tanto, no hay correlación con ASCII. Esto se hizo para variedades internacionales. No es sorprendente para una empresa llamada International Trading Machines. DOS tenía páginas de códigos para variantes internacionales.

    Los teclados anteriores se usaban exclusivamente para la entrada de texto y no indicaban cuándo se soltó una tecla. En ese momento, el protocolo era una palabra de 9 bits. Esto no era adecuado para juegos u otros tipos de entrada, por lo que se agregó una segunda palabra para mantener la compatibilidad con el hardware existente e indicar la liberación de una clave.

    Los teclados posteriores se ampliaron a 101 teclas (PS / 2) y luego el protocolo se amplió a tres palabras de 11 bits. Esto no era compatible con hardware más antiguo y quizás los teclados de esa época tenían un interruptor para elegir el protocolo "XT / AT".

Maya Lorenzo
Maya Lorenzo

Deja una respuesta

Tu dirección de correo electrónico no será publicada.