4.4. Hardware Serie

RS-232 es actualmente el estándar más común para comunicaciones serie en el mundo de los PC. Emplea una serie de circuitos para transmitir bits de uno en uno, así como para sincronización. Otras líneas adicionales pueden ser empleadas para señalar la presencia de un portador (empleadas por módems) y para negociación (handshaking). GNU/Linux acepta una amplia variedad de tarjetas serie que usan el estándar RS-232.

La negociación por hardware es opcional, pero muy útil. Permite a cualquiera de las dos estaciones avisar si está preparada para recibir más datos, o si la otra estación debería esperar mientras se procesan los datos recibidos. Las líneas usadas para esto se llaman “Clear to Send” (CTS) y “Ready to Send” (RTS), respectivamente, lo que explica el nombre coloquial para negociación por hardware: “RTS/CTS.” El otro tipo de negociación con el que quizá esté usted familiarizado es la negociación “XON/XOFF” XON/XOFF utiliza dos caracteres concretos, convencionalmente Ctrl-S y Ctrl-Q, para indicar al extremo remoto que debería parar o comenzar la transmisión de datos, respectivamente. A la par que este método es simple de implementar y válido para uso con terminales sin procesamiento, también es cierto que crea una gran confusión cuando los datos son binarios, ya que probablemente se quisieran transmitir esos caracteres como parte del flujo de datos que enviamos, en lugar de que fueran interpretados como caracteres de control del flujo. Por otra parte, la rapidez con que toman efecto es menor que con negociación por hardware. La negociación hardware es limpia, rápida y se recomienda sobre XON/XOFF si existe la posibilidad de elegir.

En el IBM PC original, el interfaz RS-232 era manejado por un chip UART llamado 8250. Los PCs de la época del 486 emplearon una versión más moderna del UART, llamada 16450. Era ligeramente superior al 8250. Casi todas las máquinas basadas en procesadores Pentium contienen otra versión aún más moderna del UART, llamada 16550. Ciertas marcas (particularmente módems internos equipados con el chipset Rockwell) utilizan chips completamente distintos que emulan el comportamiento del 16550 y pueden ser tratados de forma similar. GNU/Linux acepta todos ellos con su manejador estándar de puerto serie.[1]

El 16550 fue una mejora significativa sobre el 8250 y el 16450, ya que proporciona un búfer FIFO de 16 bytes. En realidad, el 16550 es una familia de dispositivos UART, que comprende el 16550, el 16550A y el 16550AFN (posteriormente llamado PC16550DN). Las diferencias radican en si el FIFO funciona realmente o no; el 16550AFN es el único en el que es seguro que funciona. También existió un NS16550, pero su FIFO nunca funcionó.

Los UARTs 8250 y 16450 tenían un buffer simple de 1 byte. Esto significa que un 16450 genera una interrupción por cada carácter transmitido o recibido. Cada interrupción se procesa en un corto período de tiempo, y esta pequeña demora limita a los 16450 a una velocidad de bits máxima y fiable de 9.600 bps en una máquina de arquitectura ISA típica.

En su configuración por defecto, el núcleo comprueba los cuatro puertos serie estándar, desde COM1: a COM4:. El núcleo también puede detectar qué tipo de UART se emplea en cada uno de los puertos serie estándar, y hará uso del búfer FIFO mejorado del 16550, si está disponible.

Notas

[1]

¡Nótese que no estamos hablando sobre WinModem™ aquí! Los WinModems tienen una circuitería muy simple y dependen por completo de la CPU principal de su ordenador, en lugar de hardware específico que haga todo el trabajo duro. Si ha decidido comprar un módem, le recomendamos encarecidamente que no compre un módem de ese tipo; consiga un módem de verdad. Quizá encuentre soporte para WinModems en GNU/Linux, pero eso sólo los convierte en una solución marginalmente más atractiva.