Transmisión de datos serie/paralelo
Fulcrum Magazine #5 24 de Septiembre de 1996
Editorial
Se estaba tornando algo clásico poder leer en esta primera parte de Fulcrum reclamos y críticas al modelo o al primer idiota que se me cruzara el día en que escribía estas líneas; hoy en cambio quiero hacer público un verdadero ejemplo para todos, un ejemplo que tiene nombre y apellido: Linus Torvalds el creador del LINUX.
Este personaje recorrió velozmente nuestras pampas por tan solo unos días y fui una de las 500 personas que tuvieron la suerte de ir a una conferencia que dio, y entre preguntas, risas y cafes de por medio pude conocer a uno de los pocos que, a mi juicio, marcan un camino a seguir.
La conferencia fue con un motivo comercial (como era de esperar), es que una empresa de soft argentino empezó a sacar sus productos para LINUX y de ahi el revuelo. La cosa fue que este muchacho finlandes se paró y empezó a explicar, y siguió, y siguió, y dio cátedra durante un poco más de 4 horas. Pasó por todos los temas, detallando la programación del LINUX y explicando la filosofía con la que lo programó.
Despues de todo el barullo y de la gente había una reflexión obligada: si el LINUX nació porque un par de personas que tenían ganas de programar se juntaros por E-Mail y empezaron, sería posible que acá, Argentina, pase algo así. Que un buen programado su junte con otros, y se pongan a hacer lo que mejor saben.... sería bueno no??
[Biggs]
Fundamentos teóricos: Transmisión de datos serie/paralelo
Todos los ordenadores al ser sistemas abiertos deben tener la posibilidad de comunicarse con el exterior para ampliar su campo y potencia de operación. Por esto es que la transmisión de datos en este es muy importante y esta es de 2 tipos:
- Serie
- Paralelo
La transmisión de datos tipo serie consiste en enviar o recibir toda información por una sola entrada, en cambio la transmisión paralela se lo hace por múltiples entradas o salidas. Estos tipos de transmisión de datos llevan asociadas unas palabras de control para acondicionar el proceso del ordenador con el aparato al que se lo conecta. Esta conexión se hace mediante unos circuitos de interfaz que establecen el protocolo mediante el cual se pondrán de acuerdo. Los estándares son el CENTRONICS y el RS-232 para la transmisión paralela y serie respectivamente.
Además del tipo de transmisión se las puede agrupar por el modo de funcionamiento:
- Bidireccional
- Unidireccional
El conjunto de hilos de transmisión y de control, más el protocolo de transmisión de los datos conforman la interfaz. El protocolo es una especialización del modo de transmisión, establece el tipo de diálogo mediante el cual se establecerá la comunicación. En la transmisión en paralelo, debido a la gran cantidad de hilos que se implementan, se la limita a una transmición unidireccional de datos, además este tipo de comunicación se usa en distancias cortas ya que de otra manera se encarece y complica mucho la transmisión de datos.
En la transmisión serie, que estaba compuesta por la transmisión de información por un solo hilo, la unidad (byte) queda compuesta por varias lecturas y/o escrituras. En este caso la transmisión puede ser sincronizada mediante señales de control o no (transmisión sincrónica-asincrónica). Ente tipo de comunicación (serie) es generalmente implementada en forma bidireccional debido a su simplicidad y es utilizada para transmiciones de grandes distancias.
RS-232
Este estándar es de origen americano y fue definido por la EIA en un principio y con algunas modificaciones fue adoptado por la norma ITU-T (ex CCITT) V.24, por lo que se estandarizo en Europa y de ahí su gran difusión. El RS-232 se definió como un sistema de transmisión via serie desde un DTE (data terminal equipment) hacia un DCE (data comunications equipment), o sea que solo se podía conectar equipos periféricos, pero mediante algunos trucos en las conexiones se puede conectar cualquier tipo de aparato mediante este. Antes que nada quiero aclarar un error muy grueso que se estila cometer, es el echo de afirmar que el RS-232 es un protocolo. Esto no es así.
Cuando me dicen RS-232, debo asociar esto a una norma que me define las características mecánicas. Es decir, el protocolo propiamente dicho es el V.24 al cual lo voy a hacer funcionar bajo las características electricas definidas en el V.28 (define los niveles lógicos) y al cual le voy a aplicar unas características mecánicas definidas en el RS-232 (define el tipo de conector y que señal habrá en cada pin).
Pero lo quiero recalcar, el protocolo es V.24, RS-232 es la norma que define las características mecánicas del puerto. Antes de ver las cualidades de este quiero dejar otra cosa en claro, la diferencia entre un DTE y un DCE es que este ultimo es el que pone el clock mientras que el DTE al ser el terminal, lo recibe y vendría a ser un slave.
Las principales características de este son:
- Niveles lógicos son ñ3V y ñ12V
- La corriente máxima es de 100ma
- Soporta velocidades de hasta 20000 baudios
- Los datos se transmiten con lógica negativa
Sus señales son las siguientes:
Ú---Â------------------------Ò---Â---------------------------¿
|Pin| Señal ºPin| Señal |
Ã---Å------------------------×---Å---------------------------´
| 1 | CG º 14| STxD |
| 2 | TxD º 15| TxC |
| 3 | RxD º 16| SRxD |
| 4 | RTS º 17| RxC |
| 5 | CTS º 18| NO ASIGNADA |
| 6 | DSR º 19| SRTS |
| 7 | SG º 20| DTR |
| 8 | DCD º 21| SG |
| 9 | V+ º 22| RI |
| 10| V- º 23| SEL |
| 11| NO ASIGNADA º 24| TCK |
| 12| SDCD º 25| BSY |
| 13| SCTS º | |
À---Á------------------------Ð---Á---------------------------Ù
- CG: Masa del chasis.
- TxD: Por esta línea el DTE envía los datos hacia el DCE.
- RxD: Inversa a la anterior, por esta el DCE envía los datos hacia el DTE.
- RTS: Es la línea de petición de envío de datos desde el DCE hacia el DTE comunicando a este que se prepare para la recepción.
- CTS: Por esta el DCE comunica al DTE que está dispuesto a recibir los datos.
- DSR: El DCE indica al DTE que tiene datos disponibles para ser emitidos.
- SG: Masa de la señal.
- DCD: El DCE manda por esta línea la indicación al DTE de que está estableciendo una comunicación con este - en realidad le dice que detecta su portadora -.
- V+: Tensión positiva
- V-: Tensión negativa
- SDCD: DCD secundario.
- SCTS: CTS secundario.
- STxD: TxD secundario.
- TxC: Clock de transmisión.
- SRxD: RxD secundario.
- RxC: Clock de recepción.
- SRTS: RTS secundario.
- DTR: Por medio de esta se le indica al DCE que ya puede transmitir sus datos.
- SG: detector de calidad de señal.
- RI: Indicador de timbre.
- SEL: selector de velocidad DTE.
- TCK: selector de velocidad DCE.
- BSY: Línea ocupada.
Parte del éxito de esta interfase es la capacidad que tiene para trabajar en una extensa gama de velocidades, así como también es fácilmente configurable la longitud de palabra. Además puede funcionar en forma sincrónica o asincrónica.
La primera de estas tiene la característica que está regida en todo momento por el clock de la estación transmisora. De esta forma su par receptora sabe cuando se le van a enviar datos y conoce la longitud de estos bloques, que están predefinidos y todo el conjunto se mueve según el clock maestro.
Pero la más popular de las formas es la asincrónica, el echo de que sea asincrónica significa que cuando tengo un dato que enviar lo envío, este proceso no está regido por alguna referencia prefijada como era el caso anterior. El proceso sería mas o menos el siguiente: yo debo transmitir un dato, por medio de una señal le indico al otro extremo que le enviar estos datos, a lo cual este me contesta con otra señal indicando que recibió mi mensaje y está esperando mi transmisión. Le paso todos mis datos (longitud variable!!) y depues le dijo por medio de otra señal que ya terminé y espero por otro hilo proveniente de este terminal conformidad para dar por terminada la transferencia.
Conclusión primera: no existe una comunicación ASINCRONICA 100% así como tampoco existe otra totalmente SINCRONICA.
Todo esto me lleva a ver que el éxito del RS-232 fue su versatilidad y tan es así que se puede modificar su funcionamiento mejorándolo y adaptándolo a las necesidades ya que cambiando las señales se logran funcionamientos muy superiores a las de una simple conexión DTE-DCE.
Estas formas de conexcionado son las siguientes:
- Modem nulo: Este tipo de interconexión simula la función de dos módems, lo que hace es que cada ordenador parezca un DCE visto por el otro. De esta forma se consigue el flujo de información en ambas direcciones. - nulo.gif -
- DTE-DTE: Es una comunicación a dos hilo, de fácil implementación, que es un modem nulo reducido. A diferencia de este cada DTE si envía a si mismo las líneas de control. Esto trae por consecuencia que todos los errores que se puedan dar en la transmisión no será detectado ya que no existe interconexión entre ambos que corrija el problema. Se lo puede usar con bastante seguridad en velocidades inferiores a los 9600 bits/s. - dte-dte.gif -
- Modem Inteligente: Este tipo de conexión - intelig1.gif - se realiza el mismo conexionado que el de un dte-dte pero la conexión de las patitas TxD y Rxd se las hace como las de un DTE-DCE. Esto se puede realizar ya que los modems inteligentes no necesitan las señales de control del protocolo. No obstante si se diera el caso en que se necesitasen se podría realizar la conexión 2 - intelig2.gif - que forma un modem inteligente y por medio de algunos trucos se realiza el intercambio de las señales de control de entrada/salida.
CENTRONICS
La transmisión de datos en forma paralela consiste en la transmisión de los bits en forma separada. De esto se deduce fácilmente que en el circuito interfaz habrá tantas líneas como bits tenga la palabra que se desea transmitir. Además el circuito provee de las señales de control correspondientes para realizar la transferencia de info.
Como se necesita una gran circuitería y la cantidad de cables es bastante grande, este estandart se lo utiliza solamente en transmisiones de corta distancia.
Pero todo esto trae con sigo una serie de ventajas: al utilizar tantas líneas como datos tenga la palabra, con cada impulso se clock se transmite (en nuestro caso) 1 byte el cual es directamente ingresable al bus con lo que se consigue un flujo de datos mucho mayor que en la transmisión serie.
Otra de las ventajas es la sencillez del software necesario para controlarlo. La transmisión se realiza utilizando el ASCII de 7 bits usándose el 8§ como paridad. Las señales que este nos provee son las siguientes:
Ú---Â-------------Â---Â-------------¿
|PIN| Señal |PIN| Señal |
Ã---Å-------------Å---Å-------------´
| 1 | Strobe | 14| Autofd |
| 2 | D0 | 15| Error |
| 3 | D1 | 16| Init |
| 4 | D2 | 17| Slct in |
| 5 | D3 | 18| Masa |
| 6 | D4 | 19| Masa |
| 7 | D5 | 20| Masa |
| 8 | D6 | 21| Masa |
| 9 | D7 | 22| Masa |
| 10| Ack | 23| Masa |
| 11| Busy | 24| Masa |
| 12| Pe | 25| Masa |
| 13| Slct | | |
À---Á-------------Á---Á-------------Ù
Esta interfaz se maneja con los niveles TTL convencionales. El significado de las señales es el siguiente:
- D0-D7: Son las ocho líneas de transmisión.
- Pe: Esta señal se activa a nivel bajo cuando se detecto un error en el periferico solicitando la interrupción de la transmisión de datos.
- Strobe: Esta señal indica que los datos presentes en las líneas D' son válidos y debe aceptarlos. Esta señal se activa a nivel bajo.
- Init: Fuerza al periferico a detener la transmisión y borrar todo los datos que hay en los buffer. Tambien activa a nivel bajo.
- Slct in: Cuando esta señal se encuentre a nivel bajo indicará que el periferico ha sido seleccionado y se podrá dar lugar a la transmisión.
- Autofd: Generalmente usado para producir un retorno de carro en las impresoras, pero se le podría asignar cualquier otra función.
- Ack: Es un pulso de bajo nivel que indica que el periferico ha recibido correctamente los datos.
- Busy: Señal activa a nivel alto y representa una solicitud del periferico para detener la transmisión de datos. Se activa cuando se encuentra lleno el buffer del periferico o bien cuando se encuentra fuera de servicio.
- Slct: Señal activa a nivel alto que indica al ordenador que en la otra punta hay un periferico conectado. Generalmente es una resistencia que la polariza alimentada por la fuente del periferico.
- Error: Indica una recepción de datos mala solicitando una retransmisión. Señal activa a nivel bajo.
Creo que este interfaz es funcionalmente mucho mas simple de comprender que el RS-232, pero igual, para que quede bien claro su funcionamiento les voy a dejar un circuito ejemplificandolo. Esta es una simple placa que conectándola al bus de la pc nos entrega la interfaz Centronics. Esta muy discretamente diseñada pero es mejor así se ve bien como funciona, algo parecido a las Placas Multifunción de la decada del 80'. Todo los planos están detallados en fase-a.gif; fase-b.gif y paralelo.sch (en formato orcad).
Se tiene 3 registros (datos, control y status) los cuales se describirán más adelante pero como podrán ver la ventaja del cto. reside en que gracias al decodificador de direcciones podremos configurarla como LPT1, LPT2 o LPT3. Este fue implementado a partir de una PAL del tipo 16L8, la cual con la grabación adecuada nos proporciona 5 señales las cuales se utilizan para controlar los puertos. RP0 y WP0 son respectivamente las señales que habilitan la lectura y escritura del puerto de datos. WP2 dirige al puerto de control y se comprueba a través de RP2. En este puerto de salida tenemos un bit especial que es el 4§, mediante el cual podemos habilitar la IRQ7. Por medio de la salida de RESET se borra el contenido del puerto de control y la señal RPI habilita el puerto de status. Estas son las 5 salidas de la PAL y se logran mediante el siguiente cálculo:
RP0/= i7/ * i5/ * i10/ * i9/ * i8/ * i1/ * i2/ * i4/ * i3/
RP1/= i7/ * i5/ * i10/ * i9/ * i8/ * i1/ * i2/ * (i4*i3)/
RP2/= i7/ * i5/ * i10/ * i9/ * i8/ * i1/ * i2/ * i4/ * i3
WP0/= i6/ * i7/ * i10/ * i9/ * i8/ * i1/ * i2/ * i4/ * i3/
WP2/= i6/ * i7/ * i10/ * i9/ * i8/ * i1/ * i2/ * i4/ * i3
Con esta configuración los puertos nos quedan en las siguientes address:
Ú------Â-----Â------Â-------¿
|Puerto|Datos|Status|Control|
Ã------Å-----Å------Å-------´
| Lpt1 | 378 | 379 | 37A |
| Lpt2 | 278 | 279 | 27A |
| Lpt3 | 3BC | 3BD | 3BE |
À------Á-----Á------Á-------Ù
Podrán ver también que todas las líneas de datos y la de strobe tienen un filtro pasa bajos echo con un cto. r-c para evitar los ruidos que se puedan producir y obtener transiciones más limpias. Nos resta entonces ver las funciones de los puertos anteriormente mencionados:
DATOS: En este puerto se escriben los datos que saldrán por las salidas D0-D7. La correspondencia es entre estos bits y dichas salidas D es directa. Este puerto de salida sólo podrá se leído como verificación (carece otro sentido).
STATUS: Este es un puerto de entrada en el que se reflejarán las señales de estado del periférico. La función de cada uno de sus bits es la siguiente:
Ú---Â-------Â---¿
|Bit|Función|Pin|
Ã---Å-------Å---´
|D0 | N/A | |
|D1 | N/A | |
|D2 | N/A | |
|D3 |ERROR/ |15 |
|D4 |SLCT/ |17 |
|D5 |PE |12 |
|D6 |ACK/ |10 |
|D7 |BUSY/ |11 |
À---Á-------Á---Ù
CONTROL: En este puerto se escriben las señales que van a controlar al impresora, como en el caso anterior no se usarán todos los bits, estos son:
Ú---Â-------Â---¿
|Bit|Función|Pin|
Ã---Å-------Å---´
|D0 |STROBE | 1 |
|D1 |AUTOFD |14 |
|D2 |INIT/ |16 |
|D3 |SLCTIN/|17 |
|D4 |IRQ7 | - |
|D5 | N/A | |
|D6 | N/A | |
|D7 | N/A | |
À---Á-------Á---Ù
Como se puede ver los bits 0, 1 y 3 están invertidos en el puerto con respecto a las salidas en el conector. Estas señales pueden ser leídas para su verificación.
Un ejemplo para ilustrar el manejo de estos puertos es el siguiente:
mov dx,037ah ;dirección del puerto de ctrol.
in al,dx ;Lectura del puerto
mov ch,al ;y lo salvo
mov al,00000111b ;autofd/=0 y sin interrupción
out dx,al ;selección de los bits menores
dec dx ;dirección puerto de estado
mov cl,4 ;para que se desplace 4 veces
in al,dx ;leo el puerto
srl cl,al ;y tomo los 4 bits menores
mov ah,al ;guardandolos en ah
inc dx ;vuelvo al puerto de ctrol.
mov al,00000101 ;autofd/=1
out al,dx ;lo leo
dec dx ;y me voy al puerto de estado
in al,dx ;lo leo
and al,0f0h ;preparo el dato
or ah,al ;fusiono los 8 bits
xor ah,88h ;y lo corrijo al valor real
mov al,cl ;recupero el puerto de ctrol inicial
inc dx ;dirección de ctrol.
out al,dx ;y lo restauro
La idea de todo este ejemplo era poder aclarar el comportamiento del puerto para que si en alguna ocasión lo tienen que usar sepan lo que hay que hacer. Creo que las características de los puertos series y paralelos están bien claras. Suerte!!!
Biggs