2.5.2 Puertos E/S: Puertos Paralelo
§1 Sinopsis
Los diseñadores del IBM PC incluyeron la posibilidad de conectar impresoras, para lo que podían instalarse hasta tres puertos de salida paralelo de funcionamiento simultaneo, numerados 0, 1 y 2, así como los servicios correspondientes en la BIOS .
Nota: Aunque internamente los puertos se identifican por sus números, empezando por el 0, se han popularizado los alias utilizados por el MS DOS: LPT1, LPT2 y LPT3, que son equivalentes a los números.
En los primeros modelos la placa-base no disponía de ningún adaptador de puerto paralelo, por lo que debían instalarse tarjetas auxiliares. Generalmente estas tarjetas eran multi-uso; montaban uno o dos puertos paralelo e incluso puertos serie. En otros casos el puerto paralelo era incluido junto con un adaptador de video.
§2 Recursos del puerto paralelo
Cada adaptador de puerto paralelo tiene tres direcciones sucesivas que se corresponden con otros tantos registros que sirven para controlar el dispositivo. Son el registro de salida de datos; el registro de estado y el registro de control. El registro de salida es la dirección en que hay que poner cualquier carácter que sea dirigido al puerto (generalmente una impresora); el de estado contiene información sobre el dispositivo conectado, en especial la ocurrencia de posibles errores. El registro de control permite inicializar el puerto y controlar la transferencia.
La dirección del registro de salida de los puertos 0, 1 y 2, denominadas dirección-base del adaptador, están contenidas respectivamente en las direcciones 00408, 0040A y 0040C de la memoria de la ROM-BIOS ( H4). Estas direccones de base son inicializadas a cero si no existe el adaptador correspondiente. En la tabla adjunta se han indicado las direcciones e interrupción usadas por cada puerto, aunque esta asignación no es siempre consistente, y debería ser investigada.
Puerto | R. de salida | R. de estado | R. de control | IRQ |
LPT1 | 378 | 379 | 37A | 7 |
LPT2 | 278 | 279 | 27A | 5 |
LPT3 | 3BC | 3BD | 3BE | 7 |
§3 Servicios BIOS de puerto paralelo
Los servicios BIOS ( H2.4.1) relacionados con el puerto paralelo, denominados servicios de impresora, se gestionan mediante el vector de interrupción 23 (17h); este servicio tiene 3 subservicios numerados del 0 al 2, que se solicitan a través del registro AH, mientras que el número de puerto debe indicarse en el registro DX.
- Subservicio 0: Envía un byte a la impresora
- Subservicio 1: Inicializar el puerto paralelo
- Subservicio 2: Leer el registro de estado del puerto
En la tabla que sigue se muestra el significado del patrón de bits del registro de estado del puerto, que es situado en el registro AH por el subservicio 2. Este subservicio debe ser utilizado después de cualquiera de los anteriores para comprobar el resultado de la operación.
76543210 |
Significado |
X....... .X...... ..X..... ...X.... ....X... .....X.. ......X. .......X |
Estado de impresora: 1 = ocupada; 0 = no ocupada Señal de reconocimiento producida por la impresora: 1 = activo; 0 = inactivo Señal de falta de papel ("Paper out"): 1 = falta papel; 0 = Ok papel correcto Impresora seleccionada: 1 = seleccionada; 0 = no seleccionada Estado de Error: 1 = Error E/S; 0 = Ok. correcto No utilizado No utilizado Temporización ("Time out"): 1 = Time out; 0 = en tiempo |
Nota: cualquier programa que gobierne un periférico debe disponer de una rutina
para controlar el tiempo que este puede tardar en completar cada orden.
Durante este tiempo el programa debe esperar, pero si se alcanza el límite, y
(en su caso) el número de reintentos establecido, debe lanzarse una
excepción ("Time out") e interpretarse que el dispositivo en
cuestión está fuera de servicio por alguna causa. Este tiempo depende
de cada circunstancia. En el caso de una impresora no es el mismo para
un salto de página que para un retorno de carro (CR).
Además de la interrupción 23 (17h) la BIOS tiene otro servicio relacionado con la impresora, el denominado servicio de impresión de pantalla que es solicitado mediante la interrupción 5. Este servicio se diseñó para ser manejado mediante interrupciones, y puede ser invocado desde cualquier programa que lo necesite.
La interrupción 5 también se genera mediante la combinación de teclas [Shift+Impr Pantalla] que envía el contenido del buffer de pantalla ("Frame buffer") al puerto de impresora 0 utilizando a su vez los servicios estándar de video y de impresora.
§4 Puerto paralelo estándar
Como puede verse, los diseñadores del PC no pensaron en la posibilidad de utilizar los puertos paralelo para recibir datos (no existe un subservicio BIOS para leer en el puerto paralelo); eran solo de salida. Este puerto original es denominado SSP ("Standard Parallel Port"), y su modo de operación modo compatible.
Aunque originalmente no estaban preparados para recibir datos, mediante ciertos artificios se consiguió que los puertos SPP también pudieran recibir datos, un nibble (4 bits) cada vez. Este tipo de operación, 8 bits de salida y 4 de entrada se denomina modo nibble.
Nota: los puertos actuales de características mejoradas (ver a continuación) tienen también los modos compatible y nibble para compatibildad con el software anterior.
§5 Nuevos puertos paralelo
§5.1 Puerto paralelo extendido
Ante la necesidad de conectar dispositivos rápidos y de recibir información por el puerto paralelo, IBM incluyó un puerto de impresora bidireccional de alta velocidad en su sistema PS/2 presentado en 1987. Esta solución fue rápidamente adoptada por la industria del PC, dando lugar un puerto bidireccional de características mejoradas respecto del SSP tradicional. El EPP ("Enhanced Parallel Port"), del que existen dos versiones ligeramente diferentes, la 1.7 (que se formalizó en el estándar IEEE 1284) y la 1.9 que es posterior.
Este tipo de puertos opera a velocidades entre 0.5 y 2 MBps, y además de impresoras puede servir para conectar dispositivos como escáneres y unidades de disco o de red externas. En los sistemas actuales suele venir incluido en el chipset de la placa-base.
§5.2 Puerto paralelo mejorado
En 1992, Microsoft y HP presentaron otra versión de puerto paralelo bidireccional de alta velocidad denominado ECP ("Extended Capabilities Port"). Este nuevo diseño, que dispone de acceso directo a memoria, utiliza generalmente el canal 3 DMA, y opera entre 2 y 4 MBps.
Los equipos modernos suelen disponer de puertos paralelo multimodales, en los que el modo de utilización puede ser establecido mediante el programa de setup de la BIOS. En estos casos la configuración por defecto suele ser compatibilidad ECP.
§5.3 Recursos de los nuevos puertos paralelo
Los puertos mejorados utilizan más recursos que los tradicionales SPP. Además de las direcciónes-base (378h, 278h, 3BCh ), utilizan cuatro direcciones adicionales. Con el fin de facilitar la operación PnP, además de las tradicionales IRQ 5 y IRQ 7 (mantenidas por compatibilidad), pueden utilizar cuatro o cinco IRQs adicionales.
Si el dispositivo utiliza acceso directo a memoria, como es el caso de los puertos ECP, pueden utilizar dos canales DMA.
§6 El cable y conectores de impresora
El cable tradicional de impresora tiene 25 hilos; el conector del lado del PC es un DB-25 macho (conocido como IEEE 1284-A), la hembra está en el PC. El lado de la impresora tiene un conector CN-36 Centronics de 36 pines macho (la hembra está en la impresora). En la tabla adjunta se muestra la distribución de pines.
|
ConectorxDBx25M |
ConectorxCNx36M |
ConectorxminixCentronics |
Actualmente se está utilizando un nuevo tipo de conexión. El conector del lado de la impresora es un micro Centronics de 36 pines, conocido como IEEE 1284-C.
Por su parte, el cable está formado por pares tranzados similares a los utilizados en redes con el fin de minimizar los efectos del ruido y las interferencias.
§7 Información relacionada
Se incluye información de dos programas que pueden ser de interés para los aficionados a la experimentación y al "cacharreo". El primero, Parallel Port Customizer, es un programa freeware (W9x/2k/XP) de Obock, que puede ser útil para controlar dispositivos mediante el puerto paralelo del PC. El segundo, de Ashish Derhgawen, permite controlar el motor paso a paso de un disquete ("stepper motor") mediante el mismo puerto [1], aunque utilizando la interfaz adecuada, puede ser utilizado con cualquier otro motor.
Obock www.obock.de/
Presentación del producto (original inglés): "I coded Parallel Port Customizer for a friend who wanted to control an external electronic device using his PC.
He told me that it would be nice to use the single pins of the parallel port to turn on / off those tiny devices like transistors and stuff like that. Cause he didn't find any tool solving his problem I offered him to code one for him.
So, if you are interested in electronics this should be a nice testing tool for you!
You may think "This GUI application isn't really supposed to be used in automated environments". Because of this Parallel Port Customizer comes with a small dynamic link library (DLL). With this DLL all you coders out there can implement the complete functionality of PPC in your own applications!
With this tool and the DLL you get a complete suite to build and test software with interfaces that can control nearly everything - use your imagination..."
Controlar motor de disquete www.codeproject.com/
[1] El disquete tiene dos motores, uno para hacer rotar el disquete y otro para accionar la cabeza de lectura. Nos referimos a este último.