Story Transcript
Manejo de Periféricos con la Tarjeta Nexys - 2 Teclado PS/2
M. C. Felipe Santiago Espinosa Enero – 2015
El puerto PS/2 El puerto PS2 fue introducido en las computadoras personales de IBM
como una interfaz para la comunicación de un teclado o ratón. El puerto PS2 contiene dos líneas para establecer la comunicación; una
para Datos, en la cual puede haber un flujo serial bidireccional; y la otra es para reloj, con ésta se indica cuando un dato válido puede ser recuperado. La información es transmitida en un “paquete” de 11 bits que contiene:
Bit de Inicio, 8 bits de datos, bis de paridad impar y bit de paro. Aunque el formato básico es idéntico para un teclado y un ratón, la
interpretación de los bits de datos es diferente. La tarjeta Nexys 2 tiene un puerto PS2 , la tarjeta actúa como anfitrión y
el FPGA debe contener el controlador del puerto.
El teclado PS/2 El teclado es uno de los principales dispositivos periféricos para
introducir datos en un sistema. Básicamente realiza dos funciones, para ejemplificarlas, se considera que está conectado a un controlador (de una PC o de un FPGA); así, las funciones que realiza son: Envío de códigos. Cuando el usuario presiona una tecla, el teclado envía un
código al controlador, correspondiente a la tecla presionada, éste recibe el código y decide si va a realizar una acción o si permanecerá sin cambios. Ejecución de comandos. Cuando el controlador desea que el teclado realice una
acción, como encender sus LEDs, debe enviar un comando para que el teclado lo ejecute. La comunicación de un anfitrión con el teclado por medio del puerto
PS/2 es bidireccional, sin embargo, con el FPGA se manejará un controlador simplificado con un flujo de información unidireccional.
Terminales del teclado Se utilizan cuatro terminales en un puerto PS/2: Terminales de alimentación y tierra. Sirven para suministrar voltaje al
teclado, el controlador debe proporcionar el nivel de voltaje adecuado (5V ó 3.3V) y tierra.
Terminal de datos. Se emplea para enviar y recibir datos, de manera
bidireccional. Cuando el teclado se conecta al controlador y no hay datos a enviar o recibir, esta terminal tendrá un nivel lógico alto. Para el intercambio de datos se emplea un protocolo serial, cuando el teclado o el controlador envían datos, pueden forzar a que la línea tenga un nivel lógico bajo si colocan un ‘0’ o mantienen el nivel lógico alto si colocan un ‘1’.
Terminal de reloj. En el envío y recepción de datos, el teclado cuenta con una
señal de reloj para la transmisión serial previamente mencionada. La frecuencia máxima de la señal es de 33 kHz, sin embargo, la mayoría de los dispositivos operan dentro del rango de los 10 kHz a 20 kHz. Al igual que en la terminal de datos, la señal de reloj normalmente se encuentra en un nivel lógico alto.
Conexión de un teclado PS/2 Datos Teclado Reloj
Datos Controlador Reloj
Códigos que el teclado envía Código de Rastreo. El código de rastreo es la representación de la
tecla presionada. Cada tecla tiene un código de rastreo único. Si el usuario mantiene presionada una tecla, el teclado se mantiene enviando al controlador su código de rastreo, hasta el momento en que la tecla se suelta. El código de rastreo no es código ASCII, por lo que, si el controlador necesita el código ASCII de una tecla presionada, debe capturar el código de rastreo y posteriormente realizar la conversión de código de rastreo a código ASCII.
Código de Liberación. Al momento de soltar la tecla presionada,
el teclado envía al sistema controlador el código de liberación. Con éste, el controlador se entera de que se liberó la tecla presionada.
Códigos de Rastreo Existen 3 conjuntos de códigos de rastreo: Conjunto de Códigos de Rastreo 1: Utilizado en el teclado XT de IBM, el cual consta de
83 teclas, este teclado es obsoleto.
Conjunto de Códigos de Rastreo 2: Este conjunto es el más usado por los teclados
modernos. Se emplea en teclados AT o PS/2.
Conjunto de Códigos de Rastreo 3: Esta representación de códigos es opcional. Se creó
para los teclados PS/2 con el objeto de soportar algunas órdenes adicionales al conjunto de códigos de rastreo 2.
El conjunto 3 difiere del conjunto de códigos de rastreo 2 en que todos sus códigos de
rastreo son de 1 byte y sus códigos de liberación de 2 bytes, con lo cual resulta más fácil el desarrollo del controlador, el conjunto de códigos de rastreo 3 se muestra en las tablas siguientes.
Conjunto de Códigos de Rastreo 2
Es la configuración por default en los teclados modernos.
Funcionamiento del teclado Cuando se presiona una tecla, el teclado envía al controlador
tramas de 11 con el orden siguiente:
Bit de inicio. La línea de datos normalmente está en un nivel lógico
alto, por lo que el bit de inicio obliga que ésta pase a un nivel lógico bajo con el objeto de indicar al controlador el inicio de la trama. Byte de datos. Es la representación de la información que el teclado envía al controlador. El dato se envía desde el bit menos significativo (LSB) al bit más significativo (MSB). Bit de paridad. Este bit lo utiliza el controlador para identificar si la trama es válida. Se utiliza paridad impar. Bit de paro. Después del bit de paridad, este bit coloca la línea de datos a un nivel lógico alto para indicar el final de la trama.
Sincronización La señal de reloj es generada por el teclado y se utiliza para la
sincronización durante el envío serial de bits. El teclado coloca los bits de información en los flancos de subida, por lo que el controlador debe leer la línea de datos sincronizando con flanco de bajada. Cuando se termina el envío de todos los bits de la trama (incluyendo el bit de paridad) el teclado deja de generar la señal de reloj.
Ejecución de comandos Los comandos, al igual que los códigos de rastreo, son datos de 1 byte, la
trama se forma de manera similar:
Bit de inicio. Con la línea de datos en un nivel lógico bajo. Byte de datos. Bits que representan la orden enviada al teclado del LSB al
MSB. Bit de paridad. Debe ser impar. Bit de paro. Con la línea de datos en un nivel lógico alto.
Después del envío del bit de paro, el teclado envía al controlador un bit
de reconocimiento para indicarle que recibió la orden de manera exitosa.
Para el envío de comandos del controlador al teclado –al igual que en el
envío de códigos del teclado al controlador– la señal de reloj también la genera el teclado.
El controlador debe seguir los siguientes pasos para el envío de 1. 2. 3.
4.
5.
comandos al teclado: Poner la línea de reloj en un nivel lógico bajo, por lo menos 100 μs, con esto el controlador toma el control sobre la comunicación. Terminado ese lapso debe liberar la señal de reloj, esto porque el teclado es el único que genera la señal de reloj. Poner la señal de datos en un nivel lógico bajo, lo cual interpretará el teclado como una petición del controlador para enviar datos. Con esto el teclado comenzará a generar las señales de reloj para los 8 bits de datos, el bit de paridad y el bit de paro. Para el envío de los bits, el controlador debe esperar a que el teclado ponga la línea de reloj en alto. En cada flanco de subida el controlador debe colocar un 1 bit, comenzando con el bit menos significativo y finalizando con el bit de paro. Por último, el controlador debe esperar a que el teclado ponga la línea de reloj en un nivel lógico bajo, que es una indicación de reconocimiento, además de generar el último pulso de reloj.
Las señales durante el envío de comandos del controlador al
teclado:
Existen además 2 parámetros en el teclado: El retardo typematic, el cual es un tiempo corto entre el primer y el
segundo código de rastreo (de 0.25 segundos a 1.00 segundos), La frecuencia typematic rate, que indica cuantos caracteres por segundo se enviarán después del retardo typematic (2.0 a 30.0 caracteres por segundo).
Cuando el controlador envía una orden, debe esperar a recibir el
byte de reconocimiento 0xFA.
Diseño del controlador Un controlador completo debe contar con las siguientes características: Recepción de datos provenientes del teclado. Envío de comandos para la configuración y manejo del teclado, por ejemplo,
para solicitar al teclado que encienda uno de sus LEDs. Detección de errores de Paridad. Detección de errores en la trama, debidos a bits de paro incorrectos.
Sin embargo, se presenta el diseño básico de un controlador simplificado
que espera los flancos en la señal de reloj, para sincronizar la captura serial de datos.
El controlador notifica cuando hay un código de rastreo listo, en la
aplicación deberá ignorarse al carácter 0xF0, que es parte de los códigos de liberación.
Diseño del controlador flanco = '0' CR