Comunicaciones serie. 9.0 El puerto serie. EL principal enlace de comunicaciones en el IBM PC es el puerto serie. Su nombre t‚cnico es RS-232-C, y fu‚ desarrollado por Electronics Industries Association (EIA). En las comunicaciones serie, los datos se trasmiten como una serier de pulsos el‚ctricos que son enviados a trav‚s de una £nica linea de comunicaci¢n. En esto se diferencia del m‚todo de comunicaci¢n paralela (a trav‚s de multiples lineas). El estandard RS-232-C. Para que la comunicaci¢n serie se lleve a cabo con ‚xito, se han de establecer una serie de par metros entre los dos puertos. Ambos dispositivos deben de haberse configurado a la misma velocidad de transferencia, el mismo n£mero de bits de control y el mismo n£mero de bits utilizados en la codificaci¢n del dato que se est  transmitiendo. Estos par metros reciben el nombre de protocolo de comunicaci¢n. En el mundo de las comunicaciones serie se utilizan las siguientes definiciones: 1. Baudio: es la medida utilizada en la velocidad de transmisi¢n. Realmente se refiere a la cantidad de veces que la se¤al alterna pasa por su valor cero sobre la linea de transmisi¢n en un segundo, aunque normalmente se entiende como la cantidad de bits por segundo que son capaces de transmitirse. Dependiendo de si la informaci¢n se modula o no para transmitirse, los baudios son iguales a los bits por segundo, o no lo son. 2. Bit de comienzo: se trata de un pulso electrico que marca el comienzo de la transmisi¢n de datos. 3. Bits de caracter: son un grupo de 5,6,7 u 8 bits encargados de codificar el caracter que se est  transmitiendo. 4. Bit de paridad: es un bit que se coloca opcionalmente como un pulso m s, para averiguar si durante la transmisi¢n de los bits de caracter se ha producido alg£n error, comprobando su paridad. Se habla de paridad par, impar y ninguna (ning£n bit se transmite). El hardware serie del microcomputador IBM. El puerto serie nos lo podemos encontrar instalado en la placa madre de nuestro ordenador, o sobre una tarjeta de expansi¢n. Una m quina puede ser equipada con m s de un puerto serie, enumarados del 0 en adelante, as¡ hasta 4 puertos serie seg£n la BIOS del PC y en MS-DOS, designamos los puertos serie COM1, COM2 COM3 y COM4. Esto puede dar lugar a errores de programaci¢n. 9.1. M‚todos para las comunicaciones serie. Las comunicaciones serie son normalmente as¡ncronas. Esto significa que para la transmisi¢n de un caracter tambi‚n se han de enviar bits para llevar a cabo la sincronizaci¢n de los puertos. Los bits de sincronismo (bits de comienzo) tienen adem s la utilidad de no machacar la informaci¢n del caracter anterior que normalmente se ha cargado sobre un registro de desplazamiento con carga de datos serie. De esta forma, mientras llega el bit de comienzo del siguiente caracter tenemos tiempo para extraer en paralelo el caracter almacenado. Veamos a continuaci¢n las diferentes t‚cnicas utilizadas en la implementaci¢n de las comunicaciones serie as¡ncronas. Polling. Esta palabra en comunicaciones describe una t‚cnica de programaci¢n que constantemente (siempre a una determinada frecuencia) est  chequeando si se ha recibido alg£n dato. La frecuencia de muestreo debe de ser lo suficientemente alta como para que el siguiente caracter que pueda venir no pise el que ahora acabamos de recibir. Las t‚cnicas de polling tienen exito en entornos con baja velocidad de comunicaci¢n. Esta es la t‚cnica empleada en esta pr tica, en la que se ha implementado la emisi¢n y recepci¢n de caracteres creados desde teclado y enviados a trav‚s del puerto serie. Otra limitaci¢n de esta t‚cnica es que el receptor debe de ser un dispositivo inteligente para que pueda estar corriendo un programa que realice el muestreo. No se aplica por lo tanto en impresoras serie, ni en terminales tipo dumb. Handshaking. En este caso, la transmisi¢n del siguiente caracter no se produce hasta que el receptor puede recivirlo. Por ejemplo, si el receptor es una impresora, el siguiente caracter no ser  transmitido hasta que el el anterior caracter haya sido impreso, para lo cual la impresora notifica al emisor que el siguiente caracter puede ser recivido. En el RS-232-C, dos l¡neas f¡sicas se dedican a este prop¢sito. Son las l¡neas DSR (mierda... y DTR (data terminal ready). En este caso, la impresora pondr  un 1 sobre la l¡nea DTR para informar a la computadora de que est  lista para recibir, el ordenador pondr  un 1 en DSR para indicar que est  listo para enviar el siguiente caracter. Cuando los dos est n deacuerdo, se produce la transmisi¢n. Handshake software. !!!!!!!!!!! En estos casos el apret¢n de manos (handshake) se lleva a cabo mediante la transmisi¢n de c¢digos especiales. Uno de los protocolos m s populares es el XON/XOFF. En este, el caracter 13H (XOFF) se utiliza para indicar que debe de cesar el envio de caracteres, mientras que el c¢digo 17H (XON) indica lo contrario. En la tabla ASCII los caracteres de control comienzan en el 0H y acaban en el 20H. El resto de los caracteres son imprimibles. Debido a esta raz¢n, la transmisi¢n de ficheros binarios (que no contienen texto legible) deben de ser transmitidos con otro protocolo distinto. A pesar de esto, es posible la transmisi¢n de informaci¢n binaria tal y como lo hace el protocolo XMODEM. En este, el fichero binario se divide en bloque de 128 bytes, y cada 128 bits se espera un caracter de control. Dentro de los paquetes no buscamos caracteres de control. Comunicaci¢n mediante interrupciones. Este es el m‚todo que se utiliza en los computadores IBM. Es el m s elaborado pero el que mejores resultados proporciona debido a que la CPU s¢lo atiende al puerto serie cuando debe de enviar o recibir un caracter, y el resto del tiempo se dedica a la ejecuci¢n del resto de los programas. 9.2 La conexi¢n serie de los computadores IBM. El estandar RS-232-C especifica un conector llamado D-shell o DB-25, pero sobre el PCjr se emplea un conector de 16 pines, mientras que en el IBM AT se emplea un conector de 9 pines. DB-25 (PC, PC XT y PS/2) 1 13 * * * * * * * * * * * * * * * * * * * * * * * * * 14 25 DB-9 (PC AT) 1 5 * * * * * * * * * 6 9 16 pin BERG (PCjr) A1 A8 +-+-+-+-+-+-+-+-+ |*|*|*|*|*|*|*|*| +-+-+-+-+-+-+-+-+ |*|*|*|*|*|*|*|*| +-+-+-+-+-+-+-+-+ B1 B8 El esquema de conexi¢n m s simple que se puede realizar para conectar dos computadoras se llama conexi¢n en modem nulo. Esta es la conexi¢n necesaria para realizar la comunicaci¢n en esta pr ctica. En la siguiente talbla se muestran las lineas utilizadas en una conexi¢n de modem nulo. CONECTOR FUNCION DIRECCION DB-25 DB-9 BERG 2 3 A4 Transmisi¢n de datos Salida 3 2 A8 Recepci¢n de datos Entrada 5 8 A7 Limpia para enviar Entrada 7 5 B1 Chasis de tierra 8 1 A5 Detector de portadora 20 4 A2 Terminal de datos listo Salida Y en el siguiente esquema se muestra la interconexi¢n en modem nulo: Computadora A Transmit data *---- ----* Transmit data \ / X / \ Receive data *---- ----* Receive data Ground *-----------* Ground Clear to send *--| |--* Clear to send Carrier detect *--| |--* Carrier detect Data terminal *--| |--* Data terminal ready ready 9.3 Programaci¢n de las comunicaciones serie. En el IBM PC podemos acceder directamente al hardware o utilizarlo a trav‚s de la BIOS. Sevicios serie de la BIOS. Existen 4 servicios que son accesibles a trav‚s de la interrupci¢n 14H. Han sido dise¤ados para programas que no exceden su velocidad de transmisi¢n de los 1200 baudios. El registro DX marca el puerto serie que va a programarse. Estos son los servicios: 1. N£mero 0. Inicializa en puerto serie de acuerdo con el estandard de comunicaci¢n RS-232-C. El set-up especifica los baudios, la paridad, la cantidad de bits de stop y la longitud de la palabra. 2. N£mero 1. Sirve para transmitir un caracter a trav‚s del puerto serie. El siguiente trozo de c¢digo env¡a el caracter 'A'. MOV AL,'A' ; Caracter a enviar MOV AH,1 ; Servicio de la INT 14H MOV DX,0 ; COM1 INT 14H ; Interrupci¢n serie de la BIOS Se retorna sobre AH el resultado de la transmisi¢n (el bit 7 de AH es 1 si la transmisi¢n no se ha producido). 3. N£mero 2. Se usa para recibir un caracter a trav‚s del puerto serie. El puerto de entrada se especifica en DX y el caracter se almacena en AL. 4. N£mero 4. Usado para obtener el estado del puerto serie. AH almacena el estado del puerto serie, y AL el estado del modem. Adem s de la lentitud inherente a la BIOS, esta plantea un segundo problema. Supongamos por ejemplo, que estamos utilizando el servicio 1 de la INT 14H, para enviar un caracter. La BIOS espera a que DSR y CTS est‚n activos antes de enviar el caracter. Si las dos computadoras se han conectado mediante una conexi¢n modem nulo, la linea CTS est  anulada y DTS no est  usada. Esto significa que el servicio de la BIOS fallar  porque estas se¤ales no se comportan adecuadamente. Para soslayar este problema, en esta pr ctica se accede directamente al hardware del puerto serie. Acceso directo al puerto serie. El componente electr¢nico de los puertos serie de los computadores IBM es el Transmisor Receptor As¡ncrono Universal i8250 (UART). La operaci¢n de este controlador del puerto puede ser descrita de la siguiente forma: 1. La secci¢n transmisora convierte el valor de 8 bits (tal y como lo entrega el microprocesador) en una serie de bits formateados de acuerdo al protocolo RS-232-C. Durante la transmisi¢n se intercalan convenientemente los bits de start, stop y bits de paridad. 2. El controlador simultanemente decodifica una posible fila de bits de un caracter que llega a trav‚s de la linea Receive Data (extrae los bits de control) para que la CPU s¢lo tenga que leer en paralelo (8 bits) el contenido de uno de sus registros internos. El i8250 se encarga de averiguar si se han producido errores. ( Escaneo de la figura 9.4) Direcciones del puerto serie. Algunas microcomputadoras IBM pueden tener m s de un puerto serie por lo que se asume que diferentes puertos pueden estar direccionados sobre direcciones f¡sicas distintas. Podemos obtener las direcciones a trav‚s de la BIOS. La direcci¢n base del COM1 se almacena en la direcci¢n de memoria 400H durante la inicializaci¢n de la BIOS. Lo mismo ocurre con el puerto COM2 (402H), COM3 (404H) y COM4 (406H). Para saber si el puerto no existe, comprobamos si la direcci¢n correspondiente` est  a cero. Por ejemplo: PUSH ES ; Guarda el registro ES del programa XOR AX,AX ; AX = 0 MOV ES,AX ; ES = Segmento base MOV DX,ES:0400H ; Direcci¢n base del COM1 POP ES ; Restauramos el registro ES. Con el anterior c¢digo almacenamos la direcci¢n base del COM1 en DX. Registros del i8250.