Interface del Puerto Paralelo de la PC
Interface del Puerto Paralelo El puerto paralelo de la IBM PC y AT fue diseñado para comunicarse sólo con la impresora y este estándar se conoce como la interface de impresora Centronics. La interface Centronics permite transmitir 8 bits a una impresora a la vez sobre un conjunto de 8 líneas de datos D0 - D7. Deben estar presentes otras señales para sincronizar el flujo de datos entre la PC y la impresora.
Las dos señales de sincronización más importantes son las líneas STROBE' y BUSY. Cada vez que la computadora quiere enviar un byte de datos a la impresora, primero checa el estado de la línea BUSY (es una señal de entrada de la impresora). Si BUSY es bajo, la computadora pone un nuevo dato en las ocho líneas de datos y también envía un pulso bajo en la línea STROBE'. Tan pronto como la impresora ve que STROBE' se va a bajo, asegura el byte y pone la línea BUSY en alto. La impresora deja BUSY en alto hasta que procesa el dato y después regresa a bajo a BUSY cuando esta lista para aceptar otro dato. El diagrama de tiempos de la siguiente muestra las relaciones de las señales de handshake.
Diagrama de tiempos para una interface Centronics
Por handshake queremos decir un intercambio de señales entre dos dispositivos que determina la temporización de transferencia de datos entre ellos. Cada señal de handshake es típicamente una transición de alguna línea que le dice al otro dispositivo que ha cumplido alguna condición. Una secuencia de handshake típica puede ser un conjunto de transiciones lógicas sobre un par de líneas de señal que proporciona la lógica digital equivalente al siguiente dialogo: Dispositivo 1: Estoy listo para aceptar un nuevo byte Dispositivo 2: El dato nuevo esta ahora en las líneas de datos Dispositivo 1: He recibido el dato nuevo Dispositivo 2: Esta bien, gracias por escucharme
El intercambio de señales entre la computadora y la impresora es un ejemplo clásico de un handshake de dos vías. El dispositivo que recibe dice "estoy listo para manejar otro byte ahora" (BUSY = bajo), el dispositivo que envía dice "Aquí esta un dato" (el pulso STROBE'), y el dispositivo receptor responde "Voy por el" (BUSY = alto). La sincronización de handshake del flujo de datos es necesario porque la computadora puede sacar datos a través del puerto paralelo a una razón de 100-200 Kbs y la impresora no puede hacerlo. Hay una línea de handshake redundante adicional llamada ACK' (Acknowledge) que también es parte del estándar Centronics. La razón de tener esta otra línea es para soportar dos maneras de controlar el flujo de datos. La señal BUSY es adecuada para handshake en modo encuestado (polled). Encuestar significa que la computadora se detiene en un pequeño lazo, probando la línea hasta que ocurre la condición deseada.
Cada interface de puerto paralelo de la PC contiene tres registros de ocho bits: datos, estado y control (ver figura siguiente), que aparecen en la CPU como tres puertos E/S consecutivos. La convención original puesta por IBM es que los dos primeros puertos paralelos en la PC aparecen en los puertos direccionados por 378h-37Ah y 278-27Ah. Una tercera dirección de puerto paralelo "estándar" fue la 3BCh-3BEh, esta dirección se uso en el puerto interconstruido de las tarjetas de video Hércules e IBM y se asignó para ser el primer puerto paralelo si estaba presente, si no, el primero es el 378h. Cuando se enciende la PC, la rutina del BIOS checa para ver si alguno de estos puertos responde, si alguno lo hace, la dirección base del puerto se escribe en el área de datos del BIOS en las direcciones 40:8h - 40:0Dh.
Los tres registros del puerto paralelo de la PC
Arquitectura del puerto paralelo Centronics IBM PC
La figura anterior resume las señales y número de patas usadas por la interface Centronics de la PC. A pesar de que la interface Centronics especificó un conector de 36 patas, se usa un conector hembra tipo D de 25 patas en un extremo y en el otro un conector Centronics de 36 patas. Note que además de las líneas DATA, STROBE' y líneas de tierra, tres líneas de salida adicionales llevan las señales SLCT IN' (Selecciona Entrada, la PC aplica un 0 lógico para indicar que la impresora esta seleccionada), INIT' (Inicializa Impresora), y AUTO FD' (Auto Alimentación de Línea, para avanzar el papel). La PC manda la línea SLCT IN' a bajo para decirle a la impresora que debe hacer un reinicio interno para inicializarse ella misma. Hay también cinco líneas de entrada proporcionando información de estado a la PC desde la impresora: BUSY, ACK', PE (Fin de Papel), SLCT (Seleccionar, significa que la impresora esta seleccionada y en línea), y ERROR' (significa que la impresora ha detectado un error interno en su propio funcionamiento).
Todas las salidas del puerto de datos son de lógica verdadera Todas las salidas del puerto de datos son de lógica verdadera. Esto es, escribir un uno lógico a un bit causa que la correspondiente salida vaya a alto. Sin embargo, las salidas SLCT IN', AUTO FD' y STROBE' en el puerto de control tienen lógica invertida. Esto es, sacando un uno lógico a un bit causa un cero lógico en la salida correspondiente. Esto agrega alguna complejidad al usar el puerto paralelo, pero la solución es simplemente invertir aquellos bits usando la función XOR antes de sacarlos. Debido a que al menos le toma cuatro instrucciones de E/S e igual número de instrucciones de movimiento de datos y control de flujo para transferir cada byte, una interface Centronics esta limitada a una taza de transferencia de alrededor de 100-200 K/seg. La longitud del cable usado también esta limitada, debido a que los niveles TTL, los cuales son más susceptibles al ruido, están limitados a 4.5 m (15 pies) a menos que se use cable blindado y circuitería receptora especial en el dispositivo externo. En el último caso, los cables pueden ser hasta de 13.5 m (50 pies).
Puerto paralelo bidireccional El puerto paralelo de la PC pudiera ser más útil si fuera bidireccional, esto es, si pudiera transferir datos en ambas direcciones. Aun así, el puerto paralelo estándar se puede usar para meter datos haciendo uso de cuatro de las cinco líneas de entrada del registro de estado para introducir datos desde un dispositivo externo metiendo medio byte (nibble) a la vez. La quinta línea se puede usar para implementar una señal de handshake. Esta técnica se usa en programas para transferir datos entre PC's. Tanto el cable como las señales de handshake no son estándar y varían de un programa a otro.
Estándar IEEE 1284 En un esfuerzo por obtener un estándar en las variaciones del puerto paralelo , la IEEE creó un estándar (IEEE P1284) para definir 5 modos de operación del puerto paralelo que permiten a la PC y dispositivos (impresoras, escáneres) tener diferentes capacidades para operar entre ellos. Los 5 modos de operación son los siguientes: 1.Modo de Compatibilidad. Es el modo de operación usado por la PC original. La interfase opera de acuerdo a la especificación Centronics con los datos enviados solamente por la PC al dispositivo externo. 2.Modo Nibble (medio byte). Usa las entradas de estado de la PC original para implementar la transferencia de datos desde el dispositivo externo a la PC. Los bytes de datos se transmiten sobre 4 de las líneas de estado como 2 nibbles de 4 bits secuenciales.
3. Modo Byte. Este modo se introdujo en la PS/2 3.Modo Byte. Este modo se introdujo en la PS/2. La circuitería requerida para implementar este modo permite que los bytes de datos se transmitan sobre las líneas de datos desde un dispositivo externo a la PC cuando el bit de dirección (bit 5) esta puesto en el registro de control. 4.Modo ECP. El modo de Puerto de Capacidades Extendidas (Extended Capabilities Port) permite a una PC y a un dispositivo externo comunicarse en ambos sentidos. La circuitería permite que las líneas de control del puerto paralelo protocolo de apretón de manos sean redefinidos y así implementar un canal de datos bidireccional de 8 bits usando las líneas de datos. 5.Modo EPP (Enhanced Parallel Port). Este modo requiere circuitería bastante compleja y usa las líneas de datos del puerto paralelo como un bus bidireccional de 8 bits llevando tanto datos como direcciones.
El estándar esta definido de tal manera que las PC's o periféricos que utilizan el puerto paralelo de la PC original aun trabajen (sólo en modo de Compatibilidad y Nibble). Esto se hace requiriendo que una interfase paralela acomodable o adaptable al 1284 este en el modo de Compatibilidad en el encendido. El software que controla la interfase anfitriona o host (la PC) debe negociar con el dispositivo periférico para operar en cualquier otro modo.
Diagrama de tiempos para los ciclos de datos y comando hacia adelante del modo ECP
Diagrama de tiempos de los ciclos de datos y comando en reversa del modo ECP
Redefinición de señales para los varios modos de puerto paralelo IEEE 1284.
Diagrama de tiempos para ciclos de bus de escritura-dirección y lectura-datos para EPP
Comunicación Serial: UART
Comunicación serial: UART Una desventaja de las técnicas de comunicación que envían 8 o más bits en paralelo es que los cables contienen de 15-50 alambres siendo así voluminosos y caros. Una buena solución a este problema es convertir los bytes a transmitirse en una cadena serial de bits y enviarlos en un solo alambre. La comunicación serial también tiene la ventaja de están bien estandarizado y tener un amplio soporte en todos los sistemas de computo incluyendo a la PC, estaciones de trabajo, y minicomputadoras. La información en una cadena serial de bits esta contenida en su forma de onda dependiente del tiempo: los bits se representan por códigos que se transmiten por un periodo de tiempo fijo. El periodo de tiempo usado para transmitir cada código se conoce como periodo baud.
Las cadenas seriales de bits generadas por los puertos serie de la PC usan una forma muy simple de codificación. Un bit se transmite durante cada periodo baud, con un bit “1” representado por un voltaje alto TTL y un “0” por un voltaje bajo TTL. Así la velocidad en baudios (baud rate, 1/[periodo baud]) de un puerto serie de la PC es igual al número de bits por segundo que se transmiten o reciben. Para enviar información codificada de esta manera, el transmisor y receptor registran el tiempo, el cual define el periodo baud, deben estar a la misma frecuencia y estar sincronizados. Los bits se transmiten como grupos separados, con una longitud típica de 7 u 8 bits, llamados caracteres. El nombre caracter se usa porque cada grupo de bits representan una letra del alfabeto cuando el texto esta codificado en ASCII. Cada carácter se envía en una armazón (frame) consistiendo de un bit “0” llamado un bit de inicio, seguido por el caracter mismo, seguido (opcionalmente) por un bit de paridad, y después un bit “1” llamado bit de paro. La lógica del bit bajo de inicio le dice al receptor que esta empezando una armazón, y la lógica del bit alto de paro denota el final de la armazón. Un ejemplo de la forma de onda del voltaje usada para transmitir un solo carácter se muestra en la figura siguiente.
Arriba formato de cadena serial de bits asíncrona. Abajo cadena serial del carácter ASCII “K” (4Bh) usando 7 bits, sin paridad.
Esta aproximación de transmitir datos seriales se llama comunicación serial asíncrona porque el receptor se resíncroniza el mismo con el transmisor usando el bit de inicio de cada armazón. Los caracteres se pueden transmitir en cualquier tiempo, con un retraso de tiempo arbitrario entre caracteres. Existen también protocolos de comunicación serial síncrona donde los caracteres se envían en bloques sin una armazón de bits circundante. En esta aproximación, el transmisor continuamente transmite señales, con un caracter de sincronización especial que se transmite si no hay datos reales disponibles para transmitir. Los bits dentro de cada carácter transmitido se envían con el bit menos significativo primero, cada bit durando un periodo baud. Los transmisores y receptores seriales se pueden instruir para enviar o recibir de 5 a 8 bits por carácter (ambos deben de estar de acuerdo en cuantos).
Después de que los bits de cada caracter se envían, puede seguir un bit de paridad opcional. El bit de paridad es útil si la línea de datos esta muy ruidosa como para proporcionar una transmisión fiel. El bit de paridad, P, se puede elegir para dar ya sea paridad par o impar. Para paridad par, P = 1 si el número de 1’s en el carácter es impar y P = 0 si el número es par. Es decir, en la paridad par P se elige tal que el número de 1’s incluyendo P es par. Para paridad impar, P se elige tal que el número de 1’s incluyendo P es impar. El receptor local checa para asegurar que la paridad es aun la misma a pesar de que el cable haya recogido ruido. Si la paridad ha cambiado, algún bit se ha perdido, y el receptor pone una bandera de error de paridad en el registro de estado. Después de los bits del carácter y paridad, el transmisor inserta uno o más bits de paro en la cadena de datos. Básicamente la línea debe venir en alto lo suficiente para permitir al receptor estar listo para el siguiente bit de inicio. Típicamente un bit de paro es suficiente, aunque los transmisores pueden ser instruidos para insertar 1, 1.5 ó 2 bits de paro. Cuando no se están transmitiendo caracteres, la línea permanece en la lógica de nivel alto del bit de paro.
No es obvio como el transmisor y receptor se sincronizan ya que tienen relojes independientes que sólo nominalmente son iguales. También los cambios de nivel lógico en el inicio de cada periodo baud pueden ser cambiados en tiempo, debido al ancho de banda limitado del medio transportador. La solución estándar a este problema es que el receptor y transmisor usen relojes internos cuyas frecuencias sean 16 veces la velocidad en baudios. Así, cuando el flanco delantero del bit de inicio se detecta, la forma de onda serial entrante se muestrea cada 16 periodos de reloj, empezando con el octavo periodo de reloj después del flanco delantero del bit de inicio. Esto asegura que la forma de onda siempre se muestrea cerca de la mitad de cada periodo baud, haciéndolo tolerante a pequeños corrimientos del flanco y diferencias de frecuencia de reloj del transmisor/receptor. Las velocidades en baudios son: 50, 110, 134.5, 150, 300, 1200, 2400, 4800, 9600, 14400, 19200, 38400, 56000, y el no estándar 115200 (no disponible en la PC original). Las PC’s, impresoras y otros dispositivos con frecuencia no pueden funcionar en la velocidad más alta. Sin embargo, si conecta dos PC’s usando el par interlink/intersvr de MS-DOS, se puede encontrar que ellas usan 115200 baudios. Usando un carácter de 8 bits sin paridad y un bit de paro, son un total de 10 bits, así una velocidad de transmisión de 115200 baudios produce un rendimiento de 11.5 K/seg.
Diagrama a bloques de un puerto serie de PC
UART y el puerto serie de la PC El transmisor receptor asíncrono universal (UART) fue desarrollado para simultáneamente transmitir y recibir datos seriales, realizar las conversiones paralelo/serial apropiadas, e insertar o checar los bits de inicio, paro y paridad usados para mantener los datos seriales sincronizados. Los bytes se envían como un dato paralelo de 8 bits a la UART, se convierten en una cadena de bits serial de formato estándar para transmisión por un transmisor dentro de la UART. La circuitería dentro de la UART que hace esto es básicamente un registro de corrimiento de entrada paralela y salida serial. Similarmente, una cadena de bits serial que llega se detecta por un receptor dentro de la UART y se convierte a paralelo por un registro de corrimiento de entrada serial y salida paralela. Los bytes resultantes aparecen como un dato paralelo de 8 bits que se puede leer de la UART.
La conversión simultánea de cadenas de datos seriales que llegan y salen se llama comunicación full duplex, la cual requiere dos líneas de señal separadas para llevar los datos. Una conexión completa se puede implementar con tres alambres: uno para la cadena de datos saliente, uno para la cadena entrante, y el tercero para una línea de tierra común. En algunas situaciones, se usa el half duplex. Esto permite comunicaciones de dos vías, pero sola esta activa una dirección a la vez. Un puerto serie en una PC es poco más que una UART que esta conectada directamente al bus de la PC. La figura 4.13 muestra como esta construido un puerto serie en la PC. Aparte de un poco de lógica y un reloj para la UART, el único hardware adicional necesario para hacer una tarjeta de adaptador de puerto serie completa para una PC es la circuitería de interface que convierte la entrada serial de nivel TTL de la UART y las señales de salida hacia las señales RS-232. La UART esta controlada por la PC a través de un conjunto de puertos E/S que leen desde o escriben hacia los registros internos de la UART.