domingo, 15 de julio de 2007
Puertos
Puertos en Serie
En la actualidad, los fabricantes tienden a emplear medios de conexión más modernos, como el bus USB. Pero, sin embargo, todavía existe multitud de dispositivos diseñados para trabajar a través del puerto serie, incluyendo modems, equipos de medida, receptores GPS, plataformas de sincronización para PDA, etc.
En general, una característica básica del puerto serie hace referencia a la velocidad de transferencia de datos que es capaz de ofrecer: muy reducida. La mayoría de puertos serie son capaces de ofrecer relaciones de transferencia de hasta 115 kbps. En consecuencia, el puerto serie resulta una elección acertada para la comunicación a velocidades no muy exigentes. Por ejemplo, el funcionamiento de un ratón exige enviar información al PC a una velocidad nada llamativa en comparación con muchos otros periféricos. Por tanto, emplear un puerto serie es una solución más que suficiente, y de hecho es la solución típica (emplear un canal más rápido implicaría desaprovechar sus posibilidades).
Básicamente, el puerto serie define un conector y un protocolo para el intercambio de información. Tal y como su nombre indica, la información se transmite y recibe en serie. En otras palabras, toda la información a intercambiar circula por un único cable, moviendo un bit en cada ciclo de transferencia. Por tanto, para enviar una palabra digital de 8 bits, se enviará un bit tras otro, cubriendo un total de 8 ciclos de transferencia. La ventaja fundamental radica en que sólo es necesario un cable para el intercambio de información, lo que reduce costes. La desventaja principal ya ha sido introducida: la velocidad de transferencia es reducida. De hecho, si se emplearan 8 cables en lugar de uno, la transferencia de un byte requeriría tan sólo de un ciclo de reloj (léase, se trabajaría 8 veces más rápido).
Es importante destacar que los puertos serie son bidireccionales, es decir, permiten enviar y recibir información simultáneamente. Por ello, realmente existen dos cables dedicados al intercambio de información: uno de ellos se emplea para enviar datos y otro para recibirlos. El funcionamiento del puerto serie se implementa, al completo, mediante un chip llamado UART (Universal Asynchronous Receiver/Transmitter). Este chip toma palabras digitales procedentes del bus del sistema, las convierte a formato serie, y las envía al dispositivo de destino aplicando el protocolo pertinente. A su vez, la UART recibe los datos serie del dispositivo externo, y los entrega al sistema en forma de palabras digitales. Por tanto, la CPU no se debe preocupar de los detalles del protocolo de envío/recepción, quedando libre de dicha carga. La CPU tan sólo entrega la información a enviar a la UART y ésta se encarga de hacer efectivo el envío serie. Para leer datos, se acude a la UART en el momento deseado -que no tiene por qué ser el momento en que los datos están siendo enviados por el periférico externo-. Este modo de trabajo exige la existencia de dos elementos de memoria (buffers): uno se emplea para escribir la información que la UART debe enviar, mientras que al otro se acude para obtener los datos recibidos. Esto permite, por tanto, escribir los datos a enviar mientras se recibe información, y viceversa. La capacidad de dichos elementos de memoria suele oscilar entre 16 y 64 kB.
Los conectores correspondientes al puerto serie se presentan en versiones de 9 y 25 terminales, cuyas denominaciones estándares son DB-9 y DB-25, respectivamente.
Señales Empleadas por el Puerto Serie
Los conectores DB9 y DB25, a pesar de presentar un diferente número de terminales, transportan los mismos tipos de señales. El uso principal para el que fue diseñado el puerto serie consistía en la conexión de un módem, hecho que se refleja claramente en la disposición de los terminales.
En primer lugar, se encuentra el cable dedicado al envío de datos en serie hacia el módem (Transmit Data, TxD), así como el correspondiente a la recepción de datos procedentes del módem (Receive Data, RxD).
Para inicializar las comunicaciones, el módem emplea la señal Data Set Ready (DSR) para comunicar que éste se encuentra preparado para iniciar el proceso de intercambio de datos. De forma análoga, la UART utiliza la señal Data Terminal Ready (DTR) para indicar que el PC se encuentra listo.
Una vez iniciada la comunicación serie, la UART envía la señal Request to Send (RTS) al módem para consultar si éste está preparado para recibir información. El módem utiliza la señal Clear to Send (CTS) para contestar, indicando que la UART puede enviar datos. Generalmente, los modems actuales trabajan a 56 kbps, mientras que la conexión entre PC y módem suele ser mucho más rápida (típicamente 115 kbps). Aun teniendo en cuenta que el módem dispone de una memoria para almacenar los datos procedentes del PC, dicha memoria se llena muy rápidamente, mientras que el módem procesa los datos (es decir, vacía la memoria) con mayor lentitud. Es ahí donde se centra la utilidad principal de las señales RTS y CTS: el módem puede detener la recepción de datos, y reanudarla cuando es preciso, de forma que la memoria del módem no se desborde.
La señal Ring Indicator (RI) se emplea para detectar la recepción de una llamada. Por otro lado, la señal Carrier Detect (CD) indica si el módem se halla conectado a una línea telefónica. Todas las señales arriba expuestas presentan una naturaleza digital, y por tanto sólo pueden presentar dos estados lógicos (“1” o “0”). Todas las señales se hallan referidas a una misma referencia de tensión (masa), accesible mediante el terminal Signal Ground (GND).
Puerto Paralelo
Las impresoras recuerdan inmediatamente la imagen mental del puerto paralelo, ya que es ésta la interfaz mayormente empleada para la conexión de dicho periférico. Durante el diseño de los primeros PC, IBM introdujo dicho puerto, con el objetivo de conectar una impresora.
Además de las impresoras, el puerto paralelo ha sido un medio eficaz para la conexión de muchos otros periféricos, como escáneres, algunas grabadoras de CD, discos duros externos, discos ZIP, etc. El funcionamiento del puerto paralelo se basa en el envío de un byte completo en cada transferencia, siendo necesarios, por tanto, 8 cables dedicados al intercambio de información. El puerto serie necesita 8 operaciones de transferencia para enviar un byte, lo cual sugiere que el puerto paralelo puede trabajar a una velocidad notablemente superior. Como dato práctico, el puerto paralelo estándar alcanza velocidades entre 50 y 100 kB por segundo.
El conector vuelve a ser el DB-25. Las señales disponibles se muestran en la Figura. Otra variante muy conocida es el conector Centronics de 36 terminales que, a pesar de la diferencia en el número de terminales, presenta las mismas señales que el conector DB-25.
El puerto paralelo original era unidireccional, y por tanto las señales viajaban desde el PC hacia la impresora, nunca en el sentido opuesto. Tras el lanzamiento del PS/2, IBM ofreció una nueva versión del puerto paralelo (denominado Standard Parallel Port o SPP). Este nuevo diseño era bidireccional, y consiguió reemplazar al puerto paralelo original. En principio, los terminales 2-9 se usan para el envío de datos, lo que implica que en cada transferencia los datos viajan del PC al dispositivo externo o viceversa, pero no es posible la transferencia simultánea en ambos sentidos. En otras palabras, la comunicación es half duplex. Por fortuna, los terminales 18 al 25, originalmente empleados como masas, pueden usarse también como terminales de datos, permitiendo la comunicación bidireccional simultánea (full-duplex).
Con el paso del tiempo, nuevas variantes del puerto paralelo han ido apareciendo, como el puerto EPP (Enhanced Parallel Port), que permite enviar entre 500 kb y 2 Mb de datos cada segundo.
Señales Empleadas por el Puerto Paralelo
Al igual que las señales del puerto serie están orientadas al uso de un módem, las señales del puerto paralelo se encuentran particularmente en línea con el control de una impresora. A continuación se describe el propósito de las señales mostradas en el gráfico.
Strobe. Esta señal produce un cambio de tensión cada vez que el PC envía un byte de datos. De esta forma, la impresora detecta que ya se han establecido los estados lógicos deseados en las 8 líneas de datos, y por tanto se puede leer la información (un byte).
Data0 - Data7. Contienen los datos enviados a la impresora (8 bits cada vez).
Acknowledge. La impresora indica que ha recibido el byte enviado, y está lista para recibir un nuevo byte.
Busy. Al igual que ocurría en el puerto serie (señales CTS y RTS), la impresora utiliza esta señal para indicar que aún no está preparada para recibir más datos.
Paper end. La impresora indica que se ha quedado sin papel.
Select. La impresora indica que se encuentra en línea.
Auto Feed. Cuando se recibe un retorno de carro, existen dos formas de interpretarlo. Algunas impresoras simplemente retornan al comienzo de la línea. Sin embargo, otras añaden -además- un avance de línea. La señal auto feed permite conmutar entre dichos modos de funcionamiento.
Error. La impresora emplea esta señal para notificar cualquier tipo de error detectado.
Init. Ante un cambio de estado lógico en esta señal, la impresora se reinicializa.
Select In. Esta señal permite poner a la impresora fuera de servicio.
GND. Terminales de masa (referencia de tensión para todas las demás señales).
Puerto USB
A pesar de que han persistido desde los inicios del PC, y de su conveniencia para multitud de aplicaciones, los puertos serie y paralelo presentan claras limitaciones en cuanto a capacidad de expansión y rendimiento se refiere. A mediados de los 90, un consorcio formado por multitud de empresas -incluyendo Compaq, IBM, Microsoft, NEC, etc.- desarrolló una nueva interfaz estándar para la conexión de dispositivos externos al PC.
Dicha interfaz, bautizada como USB (Universal Serial Bus, Bus Serie Universal), tenía como objetivo conectar periféricos relativamente lentos (ratones, impresoras, cámaras digitales, unidades ZIP, etc.) de una forma realmente sencilla, rápida y basada en comunicaciones serie. El éxito de la interfaz USB ha sido tal que, actualmente, resulta difícil imaginar un PC que no disponga de al menos un puerto USB. Como prueba adicional de dicho éxito, cabe destacar que actualmente la gran mayoría de periféricos existentes en el mundo del PC están disponibles también en versión USB (por ejemplo, en www.usbgear.com están disponibles una infinidad de dispositivos USB).
Una importante característica de los puertos USB es la sencillez con la que se instala un dispositivo. Tan sólo hay que conectar un extremo del cable USB al periférico, y el extremo opuesto se inserta directamente sobre un conector USB, situado en la parte exterior del PC. No es necesario instalar ninguna tarjeta adaptadora ISA o PCI, lo que ahorra multitud de esfuerzo y problemas.
El bus USB ha sido concebido teniendo en mente la filosofía Plug & Play. Por tanto, tras conectar el dispositivo al bus USB, el sistema operativo se encarga del resto: si el software controlador se encuentra instalado, lo emplea directamente, y en caso contrario lo solicita. El bus USB admite la conexión de hasta 127 dispositivos, algo impensable usando puertos serie o paralelo. Cada dispositivo puede trabajar con un ancho de banda de hasta 6 Mbps, velocidad más que suficiente para la mayoría de periféricos. El ancho de banda total soportado por el bus es de 12 Mbps, a repartir entre todos los dispositivos conectados (incluyendo al propio PC, que actúa como dispositivo anfitrión). De ahí se deduce que si se trabaja a 6 Mbps, tan sólo se podrá conectar un dispositivo al bus.
Otra importante característica es que los dispositivos se pueden conectar y desconectar sin necesidad de apagar el PC (hot-swapping).
El estándar USB define dos tipos de conectores, denominados en nuestro gráfico “A” y “B”. En cuanto a terminales se refiere, las características de ambos son totalmente análogas. La diferencia radica en que los conectores tipo “A” llevan la información desde los dispositivos hacia la computadora, y los conectores tipo “B” llevan la información en sentido opuesto. Esta diferenciación evita toda confusión al efectuar conexiones: los conectores tipo “A” irán a parar a receptáculos tipo “A”, y lo equivalente para los conectores tipo “B”, sin miedo alguno a realizar conexiones incorrectas.
El bus USB permite el flujo de información en ambos sentidos (del PC a los dispositivos o de los dispositivos hacia el PC), lo que abre un gran abanico de posibilidades de expansión. Entre otras, es posible conectar altavoces compatibles USB para escuchar audio procedente del PC (sin necesidad de emplear una tarjeta de sonido) o recibir información del mundo físico que rodea al PC mediante una tarjeta de adquisición de datos USB.
La mayoría de los PC actuales incorporan “de serie” una o dos ranuras USB, lo que permite la conexión de uno o dos dispositivos. Considerando la elevada oferta de dispositivos USB existente en el mercado, es fácil que en muy poco tiempo ya se hayan agotado las ranuras disponibles. Entonces, ¿cómo se puede ampliar el número de ranuras, siendo posible llegar hasta 127?
La respuesta la proporciona un dispositivo económico, que forma parte del estándar USB y se denomina comúnmente hub USB. Éste contiene un terminal que se conecta al PC (o a otro hub), y varios terminales (normalmente 4, aunque pueden ser más) que permiten conectar dispositivos USB adicionales. Cualquiera de estos últimos dispositivos puede ser otro hub, creando una jerarquía multicapa que incrementa el número de conectores disponibles.
Los hub USB pueden ser alimentados o no alimentados. Los dispositivos conectados a estos últimos toman la alimentación del propio bus USB, lo que simplifica el diseño. Estos dispositivos se caracterizan por consumir poca energía (por ejemplo, ratones o cámaras digitales). Los dispositivos con mayores requerimientos de energía (impresoras, escáneres, etc.) incorporan su propia fuente de alimentación, ya que la energía que puede proporcionar el bus USB no es suficiente. Si se conecta un número elevado de dispositivos alimentados directamente del bus, es probable que sea necesario proporcionar energía externa para lograr una correcta alimentación. En ese caso, será preciso emplear los hub alimentados, que vienen acompañados de una fuente de alimentación externa.
Funcionamiento del Bus USB
Un buen punto de partida para abordar este tema es el cableado del bus. Cada cable USB contiene, a su vez, 4 cables en su interior. Dos de ellos están dedicados a la alimentación (5 voltios) y la referencia de tensión (masa). La corriente máxima que el bus puede proporcionar es de 500 mA a 5 voltios de tensión.
Los dos cables restantes forman un par trenzado, que transporta la información intercambiada entre dispositivos, en formato serie. Tras su encendido, el dispositivo anfitrión -el PC- se comunica con todos los dispositivos conectados al bus USB, asignando una dirección única a cada uno de ellos (este proceso recibe el nombre de “enumeración”). Además, el PC consulta qué modo de transferencia desea emplear cada dispositivo: por interrupciones, por bloques o en modo isócrono.
La transferencia por interrupciones la emplean los dispositivos más lentos, que envían información con poca frecuencia (por ejemplo teclados, ratones, etc.). La transferencia por bloques se utiliza con dispositivos que mueven grandes paquetes de información en cada transferencia. Un ejemplo son las impresoras.
Finalmente, la transferencia isócrona se emplea cuando se requiere un flujo de datos constante y en tiempo real, sin aplicar detección ni corrección de errores. Un ejemplo es el envío de sonido a altavoces USB. Como se puede intuir, el modo isócrono consume un ancho de banda significativo. Por ello el PC impide este tipo de transferencia cuando el ancho de banda consumido supera el 90% del ancho de banda disponible.
Para la temporización, el bus USB divide el ancho de banda en porciones, controladas por el PC. Cada porción mueve 1.500 bytes, y se inicia cada milisegundo. Ante todo, el PC asigna ancho de banda a los dispositivos que emplean transferencias isócronas y por interrupciones, garantizando el ancho de banda necesario. Las transferencias por bloques emplean el espacio restante, quedando en última prioridad.
La Versión 2.0 de USB
Todo lo comentado en los anteriores apartados corresponde a la versión 1.1 del bus USB. La versión actual del estándar USB es la 2.0. En primer lugar, esta nueva versión es totalmente compatible con la versión 1.1. Por tanto, desde el punto de vista del usuario no hay cambios: los dispositivos para la versión 1.1 seguirán funcionando sin problemas.
Se puede, por tanto, combinar periféricos para ambas versiones, pero hay que tener en cuenta que, en caso de emplear dispositivos USB 2.0, será necesario introducir hubs USB 2.0, además de los USB 1.1. La ventaja para el usuario aparece al utilizar dispositivos diseñados para la versión 2.0: el ancho de banda aumenta hasta un factor 40 (lo que implica alcanzar 480 Mbps). Esto hace posible ampliar el abanico de periféricos USB disponibles, siendo posible conectar dispositivos con elevados requerimientos de ancho de banda, como discos duros, grabadoras de CD, lectores DVD, etc. De hecho, ahora es posible trabajar con periféricos de alto rendimiento sin necesidad de emplear interfaces como SCSI, aprovechando así todas las ventajas de USB y reduciendo costes.Otra ventaja interesante se centra en la concepción de los dispositivos USB 2.0: no requieren esfuerzo de diseño adicional respecto a la versión 1.1. Todas estas características anticipan -cada vez más- que el PC del futuro tan sólo necesitará conectores externos USB. A corto plazo, la tendencia apunta a que USB 2.0 reemplazará completamente a USB 1.1 en todo PC.
La Interfaz FireWire
El término FireWire resulta familiar, sobre todo, para los usuarios de PC interesados en el campo del vídeo digital. Pero, más allá de este campo concreto, se trata de un bus serie similar al USB, que admite la conexión de una gran variedad de dispositivos.
El bus FireWire fue introducido por Apple (con antelación a USB), y más tarde fue estandarizado bajo la especificación IEEE 1394, referido como un bus serie de altas prestaciones. FireWire alcanza velocidades de transferencia de 400 Mbps y permite la conexión de hasta 63 dispositivos.
La mayoría de ventajas comentadas para USB están presentes en FireWire (Plug & Play, conexión/desconexión sin apagar el PC, alimentación incluida en el bus, etc.). Una primera diferencia se encuentra en el cable, que empaqueta un total de 6 cables internos (2 para alimentación, y dos pares trenzados para datos). Otra diferencia fundamental hace referencia a la topología del bus: en lugar de emplear hubs, se emplea una configuración “en cadena”. En otras palabras, los dispositivos se unen uno a otro formando una cadena, en la cual es posible insertar más de un PC (haciendo posible que varias computadoras accedan a los dispositivos conectados).
En términos de velocidad de transferencia, FireWire supera con creces a USB 1.1, pero es muy similar a USB 2.0. FireWire esta orientado a dispositivos con elevados requerimientos de ancho de banda. En cambio, no resultaría rentable fabricar dispositivos lentos para este bus, algo que lo pone en desventaja respecto a USB 2.0 (que admite ambos tipos con un reducido coste). En términos de coste, hay que señalar que la implementación de FireWire resulta más cara que en el caso de USB.
Finalmente, es muy importante notar que FireWire trabaja con una filosofía peer-to-peer, lo que significa que -en oposición a USB- no precisa de la presencia de un dispositivo anfitrión (el PC). Por ejemplo, es perfectamente posible interconectar dos cámaras mediante FireWire sin necesidad de un PC.