06 puerto serie

119

Upload: emmanuel-maximiliano-stark

Post on 09-Aug-2015

68 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 06 Puerto Serie
Page 2: 06 Puerto Serie

Modos de Transmisión

•• SimplexSimplex

•• Half DuplexHalf Duplex

•• Full DuplexFull Duplex

Page 3: 06 Puerto Serie

Transmisión Simplex

Estación Remota

Estación Local

• Transmisión en un solo sentido

Page 4: 06 Puerto Serie

Transmisión Half Duplex

Estación Remota

Estación Local

• Transmisión en un ambos sentidos pero no en forma simultánea.

Page 5: 06 Puerto Serie

Transmisión Full Duplex

Estación Remota

Estación Local

• Transmisión simultánea en ambos sentidos.

• Puede ser por dos vías o por multiplexa-ción de frecuencias.

Page 6: 06 Puerto Serie

• Son reglas de diálogo entre entidades.• Nos permiten especificar interfaces.• Se necesitan varios protocolos a distin-

tos niveles para mantener una comuni-cación entre sistemas.

• Se tiende a la utilización de estándares en toda clase de comunicación.

Protocolos

Page 7: 06 Puerto Serie

Modelo OSI de ISO

Aplicación

Presentación

Sesión

Transporte

Red

Datos

Física

Aplicación

Presentación

Sesión

Transporte

Red

Datos

Física

Diálogo

Interfaz

A B

Page 8: 06 Puerto Serie

• Comunica una computadora (DTE) con un modem (DCE).

• Define cables, conectores, señales, etc.• Constituye los puertos serie de las PCs• Se usa para disciplina de transferencia

de datos, simplex y full duplex.

Interfaz RS-232

Page 9: 06 Puerto Serie
Page 10: 06 Puerto Serie

• Originalmente tiene 25 cables.• Las PCs usan solo 9.• Los conectores son DB25 y DB9• Longitud máxima: 50 pies (15 metros)• Señales: Marca y Espacio

Salida EntradaESPACIO 0 (+) 5 a 15 V 3 a 15 VMARCA 1 (-) -5 a -15 V -3 a -15 V

Conectores y Cables RS-232

Page 11: 06 Puerto Serie
Page 12: 06 Puerto Serie

• En líneas de datos el valor positivo es un cero y el valor negativo es un uno, esto se denomina lógica negativa.

• En líneas de control el valor positivo es habilitante y el valor negativo es desha-bilitante. Para este caso tenemos lógica positiva.

Señales Eléctricas RS-232

Page 13: 06 Puerto Serie

• Para convertir señales RS-232 a TTL y viceversa se usa un integrado caracte-rístico, el MAX-232.

• Solamente con alimentación de 5 V. este circuito es capaz de generar seña-les con el nivel RS-232 y convertirlas en forma segura a TTL.

• Contiene dos líneas de transmisión y dos de recepción.

Convertidores TTL/RS-232

Page 14: 06 Puerto Serie

MAX-232

Page 15: 06 Puerto Serie

Comunicación Simplex

• Desde un DTE a un DCE

Page 16: 06 Puerto Serie

• Con handshaking por hardware, si DSR es positivo es posible transmitir, NO en caso contrario.

Transmisión Simplex

Page 17: 06 Puerto Serie

• Incluyendo dos líneas de handshaking por hardware.

Transmisión Simplex

Se puedetransmitirsi CTS y DSR son positivos

Page 18: 06 Puerto Serie

• El handshaking es del DTE al DCE

Recepción Simplex

Page 19: 06 Puerto Serie

2 2Transmisión

7 7

DTE DCESG

3 3Recepción

4 4

20 20

RTS

DTR

6 6DSR5 5CTS

22 22RI

8 8CD

Comunicación DCE/DTE 2 vías

Page 20: 06 Puerto Serie

• El cable null modem se necesita cuando debemos conectar dos DTE entre si.

• Hay que cruzar la transmisión con la recepción y los respectivos hand-shakings.

• Esto permite que cada uno de los ex-tremos crea que tiene un DCE en el otro.

Cable Null Modem

Page 21: 06 Puerto Serie

Diagrama Null Modem

FORMA 1

Page 22: 06 Puerto Serie

Diagrama Null Modem

FORMA 2

Page 23: 06 Puerto Serie

Diagrama Null Modem

FORMA 3

Page 24: 06 Puerto Serie

• Los números de pin indicados hasta ahora corresponden al conector DB25.

• Para el conector DB9 son:1 CD 2 RxD3 TxD4 DTR5 SG6 DSR7 RTS8 CTS9 RI

Conector DB9

Desdeel DTE

Page 25: 06 Puerto Serie

Conector DB-9

Lado cable

Page 26: 06 Puerto Serie

Conector DB-95

6

1

9

Lado PC

Page 27: 06 Puerto Serie

• Tabla de longitudes vs. veloc. de transm.

Velocidad Pies metros2400 200 60 4800 100 30 9600 50 15 19200 25 7.6 38400 12 3.7 56000 8.6 2.6

Tabla de longitud vs velocidad

Page 28: 06 Puerto Serie

• Los caracteres que en la computadora circulan en paralelo, de a uno o más bytes, deben ser transformados en una cadena de bits para ser transmitidos por un puerto serie.

• A diferencia del puerto paralelo, en el puerto serie los caracteres viajan de un bit por vez, los que son encolumnados en forma asíncrona.

Transmisión de Caracteres

Page 29: 06 Puerto Serie

• Síncrona: Se transmite un grupo de bytes (mensaje) en forma secuencial, después del bloque de sincronización. En general es más rápida que la asíncrona. Requiere calidad en el control de temporización.

• Asíncrona: Sincroniza byte por byte, es la que se utiliza mayoritariamente en las PCs. No es crítica en temporización. Si esta falla se produce un error de trama.

Transmisión Síncrona y Asíncrona

Page 30: 06 Puerto Serie

Descripción de una Trama

1 2 3 4 5 6 7

Stop

Bit Nro.

1 0 1 0 1 1 0 1Start

Tiempo

Debe de-tectar 1

Marca (-)

Espacio (+)

Page 31: 06 Puerto Serie

Error de Trama

1 0 1 0 1 1 0 1

Stop

1 0 1 0 1 1 1 0

Start

Receptor A

Receptor B

Tiempo

Page 32: 06 Puerto Serie

• La unidad transmitida en comunicaciones asíncronas se llama trama, y la construc-ción de esta: tramado.

• Una trama tiene:

- Bit de arranque- Bits de datos- Paridad- Bit(s) de parada

Descripción de una Trama

Page 33: 06 Puerto Serie

Elementos de una Trama

- Bit de arranque- Bits de datos 5, 6, 7, 8- Paridad N, O, E,

M, S- Bits de Parada 1, 1.5, 2

8N1

Page 34: 06 Puerto Serie

• La línea antes de la transmisión esta en MARK o (-) (1 lógico).

• Bit de arranque: Se produce cuando aparece un carácter SPACE o voltaje (+) (0 lógico)

• Bits de datos : Va de 5 a 8 pero lo más común es 7 u 8. Viajan desde el bit me-nos al más significativo.

Descripción de una Trama

Page 35: 06 Puerto Serie

• Paridad: - Even (Par)- Odd (Impar)- No Parity (Sin paridad)- Space (Siempre cero)- Mark (Siempre uno)

• Bits de parada: Pueden ser 1, 1.5 ó 2 bits, que indican el final del carácter.

Descripción de una Trama

Page 36: 06 Puerto Serie

• Break: Es bajar la línea por más tiempo que la máxima cantidad de espacios acumulables, pretende llamar la atención del sistema (p.ej. cuando está tildado).

• Baudios: Son la medida de señalización eléctrica fundamental en la línea. Si la onda posee dos estados la cantidad de bits por segundo es igual a la de baudios.

Definiciones

Page 37: 06 Puerto Serie

• Tenemos reconocimientos (handshaking) por hardware y por software.

• Hardware: Los DCE usan DSR (Data Set Ready) como línea principal de hand-shaking, CTS (Clear To Send) es la línea secundaria.

• Los DTE usan DTR como línea principal y RTS como línea secundaria.

Reconocimientos

Page 38: 06 Puerto Serie

Startdo sinfindo while NOT Carácter para enviarend-doreset contador timeoutwhile NOT timeout doif DSR altoif CTS altoEnviar carácterif EOFLevanta bandera EOFreturn( OK )

end-ifelse incrementa contador timeoutend-if

else incrementa contador timeoutend-if

end-whileif timeout > maximoreturn( error de timeout )

end-ifend-doEnd

Seudocódigo dereconocimientospor hardware

Page 39: 06 Puerto Serie

Diálogo - Diagrama de Flujo

Transmisión Recepción

Page 40: 06 Puerto Serie

• Para acceder a estos servicios a través de programas de aplicación se puede utilizar el BIOS.

• Esta vía tiene ciertas limitaciones por lo que si se desea control total conviene manejar directamente la UART.

• UART: Universal Asynchronous Receiver Transmiter. Es el chip del puerto serie. Cada puerto serie es una UART.

Manejo del puerto por BIOS

Page 41: 06 Puerto Serie

• En Borland C el servicio disponible es:int bioscom(int cmd, char abyte, int port)

• Está en la biblioteca <bios.h>• cmd Tiene las siguiente posibilidades:0 Inicializar el puerto1 Enviar un carácter2 Recibir un carácter3 Devolver el estado del puerto

Manejo del puerto por BIOS

Page 42: 06 Puerto Serie

• abyte Para cmd=1 ó cmd= 2. Es el byte a enviar o recibir.

Para cmd=0Es el byte de inicialización.

• port Tiene la siguiente configuración:

0 COM1:1 COM2:2 COM3:3 COM4:

Manejo del puerto por BIOS

Page 43: 06 Puerto Serie

• El comando de inicialización para el puer-to COM1 es el siguiente:

bioscom( 0, abyte, 0 );

• abyte tiene la siguiente configuración:

7 6 5 4 3 2 1 0baudios paridad ↑ bits de datos

bits de parada

Inicialización del Puerto Serie

Page 44: 06 Puerto Serie

• baudios tiene el siguiente significado:9600 1114800 1102400 1011200 100600 011300 010150 001110 000

• paridadSin 00 ó 10Impar 01Par 11

Inicialización del Puerto Serie

Page 45: 06 Puerto Serie

• bits de paradauno 0dos 1

• bits de datossiete 10ocho 11

(las otras combinaciones no son válidas)

Inicialización del Puerto Serie

Page 46: 06 Puerto Serie

• abyte = OR bit a bit de lo siguiente:0x02 = 7 data bits 0x00 = 1 stop bit0x03 = 8 data bits 0x04 = 2 stop bits

0x00 == no parity0x08 == odd parity0x18 == even parity

0x00 110 bps 0x20 150 bps0x40 300 bps 0x60 600 bps0x80 1200 bps 0xa0 2400 bps0xc0 4800 bps 0xe0 9600 bps

Palabra de Inicialización

Page 47: 06 Puerto Serie

• Ejemplo:abyte = 0x8B = (0x80 | 0x08 | 0x00 | 0x03)

El puerto se configura a:1200 baud 0x80Paridad impar 0x081 bit parada 0x008 bits datos 0x03

0x8B

Palabra de Inicialización

Page 48: 06 Puerto Serie

unsigned _bios_serialcom( unsigned cmd,unsigned puerto, unsigned data);

• Cambia el nombre de los parámetros y su ubicación pero son los mismos que los vis-tos en el caso anterior.

Función en C de Microsoft

Page 49: 06 Puerto Serie

• Controlados por una UART

82501645016550

• Hoy lo más común es 16550, también es-tán disponibles las 16650 y 16750.

Puertos Serie en una PC

Page 50: 06 Puerto Serie

Direcciones de Puerto Serie

• Por defecto podemos llegar a tener cuatro puertos serie (aunque solo dos interrupcio-nes)

Puerto Dirección InterrupciónCOM1 0x3F8 4COM2 0x2F8 3COM3 0x3E8 4COM4 0x2E8 3

Page 51: 06 Puerto Serie

Desde Panel de Control - Windows

Page 52: 06 Puerto Serie

• Control: Recibe comandos de la CPU

• Estado: Informa a la CPU el estado de la UART

• Buffer: Mantiene caracteres entrantes y salientes en la transmisión

Registros de la UART

Page 53: 06 Puerto Serie

Registros de la UART

Line Control RegisterModem Control RegisterInterrupt Enable RegisterBaud Rate Divisor Latches

Line Status RegisterModem Status RegisterInterrupt Identification Reg.

Receive Buffer RegisterTransmitter Holding Register

Control

Estado

Buffer

Page 54: 06 Puerto Serie

Buffer delReceptor

Latch LSBDivisorLatch MSBDivisor

Buffer busde datos 0000

1000

1001

DLAB A2 A1 A0

Bus de datosinternos

REGISTROSREGISTROSDE LA UARTDE LA UART

RetenciónTransmis. 0000

Habilitac.Interrupc. 0001

Page 55: 06 Puerto Serie

Control deModem

Estado demodem

IdentificaInterrupc.

X100

X110

X010

DLAB A2 A1 A0

Bus de datosinternos

REGISTROSREGISTROSDE LA UARTDE LA UART

Control delínea X011

Estado deLínea X101

Page 56: 06 Puerto Serie

Registro de Control de Línea

• Line Control Register: Se usa para especi-ficar los parámetros de comunicaciones.

Page 57: 06 Puerto Serie

Registros de Control

• Line Control Register: Se usa para especi-ficar los parámetros de comunicaciones.

Bit0 Word length LSB 00 5 01 61 Word length MSB 10 7 11 82 Stop bits 0 1 1 23 Parity enable 000 ninguna 101 mark4 Parity select 001 impar 111 space5 Parity one 011 par6 Break 0 off 1 on7 Divisor Latch Access Bit (DLAB)

Page 58: 06 Puerto Serie

• Cerrojo Divisor de Velocidad de Trans-misión (Baud Rate Divisor Latch): Per-mite el acceso al divisor de la frecuencia fija de reloj para seleccionar la velocidad de transmisión.

• Break: Cuando este bit se pone en 1 se coloca la señal de break en la línea de transmisión.

Registro de Control de Línea

Page 59: 06 Puerto Serie

• La frecuencia del reloj de temporización de la UART es de 1.8432 MHz.

• Esta frecuencia se divide en forma fija por 16, lo que determina la velocidad má-xima de transmisión de 115200 bps.

• Mediante dos registros se controla el di-visor de esta frecuencia que nos permite establecer las distintas velocidades de transmisión.

Temporización de la UART

Page 60: 06 Puerto Serie

• Uno de los registros es el DLL (Divisor Latch Less significant byte) y el otro es el DLM (Divisor Latch Most significant byte)

• Para velocidades que superan los 300 bps ya no se utiliza el registro más signi-ficativo, por lo que en la actualidad sólo se configura el registro DLL.

• La tabla siguiente muestra: valor del divi-sor versus velocidad de transmisión.

Temporización de la UART

Page 61: 06 Puerto Serie

Baud Rate Decimal Hex MSB LSB300 384 180 1 80

1200 96 60 0 60 2400 48 30 0 30 4800 24 18 0 18 9600 12 0C 0 0C

14400 8 08 0 08 19200 6 06 0 06 38400 3 03 0 03 57600 2 02 0 02

Temporización de la UART

Page 62: 06 Puerto Serie

Registro de Control de Línea

• Paridad: Son tres bits que definen las cin-co combinaciones posibles de paridad. El más significativo (Parity One) está en 1 cuando la paridad es fija (Mark o Space), el que le sigue (Parity Select) indica la clase de paridad seleccionada, el menos signifi-cativo (Parity Enable) está en 1 cuando se adopta alguna clase de paridad.

• Bits de Parada: Si está en 0 hay un solo bit de parada, si está en 1 tenemos 2.

Page 63: 06 Puerto Serie

Registro de Control de Línea

• Longitud de Palabra: Son dos bits que permiten seleccionar una longitud de 5, 6, 7 u 8 bits, los más comunes son 7 y 8.

• Al inicializar un puerto serie DEBE confi-gurarse el Registro de Control de Línea, caso contrario es imposible transmitir.

• Una vez seleccionada la velocidad de transmisión debe tenerse cuidado en colo-car el bit DLAB en cero para continuar con la operación normal.

Page 64: 06 Puerto Serie

Registro de Control de Modem

• Modem Control Register: Controla los re-conocimientos con el modem.

Page 65: 06 Puerto Serie

• Loop: Se utiliza para autoverificación.• Out1 y Out2: Son salidas que no se re-

flejan en el conector del puerto serie.• RTS: Request To Send, es el reconoci-

miento secundario desde el DTE.• DTR: Data Terminal Ready, es el recono-

cimiento primario del DTE. Indica que el equipo está listo.

Registro de Control de Modem

Page 66: 06 Puerto Serie

Registro de Habilitación de Interr.

• Interrupt Enable Register: Si se habilitan las interrupciones, este registro indica a la UART los eventos habilitados.

0 TBE

Cambio de estado de alguna entrada

0 0 0

Siempre en 0

7 0

Datos disponibles

Error del re-ceptor o break

ModemLínea Reg. sostén

transm. vacío

Page 67: 06 Puerto Serie

Registro de Estado de Línea

• Line Status Register: Se usa para obte-ner información de los datos de transmi-sión y recepción.

7 0

0 OE

Error de Trama

TSRE THRE BD

Datos listos

Error deparidad

DRPEFE

Siempreen 0

Detecciónde break

Regs.Sostény despl.vacíos Error de

sobreescritura

Page 68: 06 Puerto Serie

Registro de Estado de Modem

• Modem Status Register: Mediante este registro conocemos el estados de las líneas externas que conectan al modem.

DCD ΔDSR

Cambio CD

RI DSR CTS

7 0

CambioCTS

CambioRI

ΔCTSΔRIΔCD

Portadoradetectada

Listo paraenviar

Indicaciónde ring

CambioDSRModem

listo

Page 69: 06 Puerto Serie

Registro Identificación de Interr.

• Interrupt Identificacion Register: Cuando se produce una interrupción, en este registro se busca la causa.

0 0 0 0

Siempre en 0

7 0

Interrupciónpendiente

0

1 1 Estado de línea1 0 Datos Disponibles0 1 Registro sostén de transmisión vacío0 0 Estado de Modem (Entrada RS-232)

Page 70: 06 Puerto Serie

8250

D0-D7

INTR

RESET

A0A1A2

CS2

CS0CS1

MR

Con-tro-lador

EIA

Conector

RS-232

BUS

CPU

SOUTSINRTSDTRDSRDCDCTSRI

1.8432 MHz

BAUD OUTRCLK

Page 71: 06 Puerto Serie

Chips UART

Page 72: 06 Puerto Serie

nnnnnnnnManejo de la UART en DOS

• Se utiliza para lectura:unsigned char inportb (unsigned portid);

portid: posición de memoria (ej. 0x3F8).

• Se utiliza para escritura:void outportb(unsigned portid,

unsigned char value);

value: valor a escribir en esa posición.

Page 73: 06 Puerto Serie

nnnnnnnnPuerto Serie en Linux

• En todos los Unix, el puerto serie ha sido una pieza fundamental, ya que en un principio toda la comunicación con el ex-terior se hacía a través de este puerto.

• Esto hace que se disponga de una can-tidad de posibilidades enorme para su control, pero también implica un proceso de selección y estudio mayor para elegir las funciones adecuadas a cada trabajo.

Page 74: 06 Puerto Serie

nnnnnnnnPuerto Serie en Linux

Page 75: 06 Puerto Serie

nnnnnnnnPuerto Serie en Linux

• La filosofía básica de Unix implica consi-derar a la comunicación como archivos especiales.

• Los puertos serie son archivos que están bajo el directorio /dev y se denominan:

/dev/ttyS0 (COM1 de Win/DOS)

/dev/ttyS1 (COM2 de Win/DOS)

/dev/ttyS2 (COM3 de Win/DOS)

/dev/ttyS3 (COM4 de Win/DOS)

Page 76: 06 Puerto Serie

nnnnnnnnManejo de Puerto Serie en Linux

• Para averiguar el estado de un puerto, usamos el comando (a nivel de SO):setserial /dev/ttySx (x = 0, 1, 2, 3)

Respuesta ejemplo:

/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4

• Averiguación más completa:setserial -a /dev/ttySx (x = 0, 1, 2, 3)

/dev/ttyS0, Line 0, UART: 16550A, Port: 0x03f8, IRQ: 4Baud_base: 115200, close_delay: 50, divisor: 0closing_wait: 3000

Flags: spd_normal skip_test

Page 77: 06 Puerto Serie

nnnnnnnnManejo de Puerto Serie en Linux

• setserial es un comando que permite in-dagar o configurar un puerto serie.

• Otro comando utilizado para el manejo del puerto desde el Sistema Operativo es sttystty -F /dev/ttySx (x = 0, 1, 2, 3)

Respuesta ejemplo:speed 2400 baud; line = 0;-brkint -imaxbel

Page 78: 06 Puerto Serie

nnnnnnnnManejo de Puerto Serie en Linux

Page 79: 06 Puerto Serie

nnnnnnnnManejo de Puerto Serie en Linux

Page 80: 06 Puerto Serie

nnnnnnnnManejo de Puerto Serie en Linux

• Para la configuración inicial (línea de transmisión) es conveniente utilizar la estructura termios y sus funciones asociadas.

• Para el control de modem utilizamos la función ioctl() (Input/Output ConTroL).

• Para lectura y escritura utilizamos las funciones read() y write(). Estas trabajan a bajo nivel.

Page 81: 06 Puerto Serie

nnnnnnnnEstructura termios

• termios es una estructura que contiene los parámetros de control del puerto, tie-ne la siguiente configuración:struct termios {

tcflag_t c_iflag; /* parámetros de modo entrada */tcflag_t c_oflag; /* parámetros de modo salida */tcflag_t c_cflag; /* parámetros de modo control */tcflag_t c_lflag; /* parámetros de modo local */cc_t c_line; /* disciplina de la línea */cc_t c_cc[NCCS]; /* caracteres de control */

};

Page 82: 06 Puerto Serie

nnnnnnnnEstructura termios

• c_iflag: controla la forma en que la ter-minal maneja la entrada. Es un OR inclu-sivo de 11 banderas.

• c_oflag: controla la forma en que la ter-minal maneja la salida. Es un OR inclu-sivo de 4 banderas.

• c_cflag: especifica información de control de hardware para la terminal (ej. pari-dad). Es un OR inclusivo de 7 banderas

Page 83: 06 Puerto Serie

nnnnnnnnEstructura termios

• c_lflag: controla las funciones de edición de la terminal (ej. eco). Es un OR inclusivo de 9 banderas.

• c_cc[NCCS]: Mantiene los valores de caracteres que tienen un significado especial para los drivers de la terminal. Es un OR inclusivo de 9 banderas.

Page 84: 06 Puerto Serie

nnnnnnnnBanderas de c_cflag

• c_cflag tiene las banderas siguientes, para el control de línea:

Page 85: 06 Puerto Serie

nnnnnnnnEstructura termios

• termios también es un conjunto de fun-ciones que modifican los parámetros de la estructura configurando el puerto.

Obtener la estructura termios de un puertoint tcgetattr( int fd, struct termios *termios_p );

Escribir la estructura termios a un puertoint tcsetattr( int fd , int optional_actions,

struct termios *termios_p );

Page 86: 06 Puerto Serie

nnnnnnnnEstructura termios

Obtención de la velocidad de un puertospeed_t cfgetospeed( struct termios *termios_p );

Fijación de la velocidad en baudios de un puertoint cfsetospeed( struct termios *termios_p,

speed_t speed );

Envío de break a puerto con duración duration en ms.int tcsendbreak( int fd, int duration );

Acciones opcionales:TCSANOW - el cambio ocurre inmediatamenteTCSADRAIN - el cambio se produce no bien termina la salida actualCTSAFLUSH - el cambio se produce no bien termina la salida actual

toda la entrada recibida pero no leida se descarta antes del cambio.

Page 87: 06 Puerto Serie

nnnnnnnnEstructura termios

Datos de transmisión Ejemplo 8N1:struct termios opciones;opciones.c_cflag &= ~PARENB; // Sin paridadopciones.c_cflag &= ~CSTOPB; // 1 bit de paradaopciones.c_cflag &= ~CSIZE; // \opciones.c_cflag |= CS8; // / 8 bits de datos

Ejemplo 7E1:struct termios opciones;opciones.c_cflag |= PARENB; // Con paridadopciones.c_cflag &= ~PARODD; // Paridad paropciones.c_cflag &= ~CSTOPB; // 1 bit de paradaopciones.c_cflag &= ~CSIZE; // \opciones.c_cflag |= CS7; // / 7 bits de datos

Page 88: 06 Puerto Serie

nnnnnnnnActivación y desactivación de flags

• El objetivo es activar o desactivar una se-ñal en particular sin afectar el resto.

• Poner en cero un bit:opciones.c_cflag &= ~CSTOPB;

• Poner en uno un bit:opciones.c_cflag |= CSTOPB;

• Conmutar un bit:resultado ^= TIOCM_RTS;

Page 89: 06 Puerto Serie

nnnnnnnnBibliotecas utilizadas

#include <termios.h> /* Estructura de control termios */

#include <sys/ioctl.h> /* Constantes para la función ioctl */

#include <fcntl.h> /* Definiciones de control de archivos */

#include <errno.h> /* Definiciones de control de errores */

Page 90: 06 Puerto Serie

U01.c

Page 91: 06 Puerto Serie

Función fcntl()

Page 92: 06 Puerto Serie
Page 93: 06 Puerto Serie

Antes de configurar:/dev/ttyS0: 8N1 9600 bps

Después de configurar:/dev/ttyS0: 8N1 2400 bps

Ej. de Salida

Page 94: 06 Puerto Serie
Page 95: 06 Puerto Serie
Page 96: 06 Puerto Serie

nnnnnnnnFunción ioctl()

• ioctl() permite controlar los parámetros del dispositivo representado por un archivo especial (en nuestro caso el puerto serie).#include <sys/ioctl.h>int ioctl(int d, int request, ...);

Ejemplo:ioctl(fd, TIOCSERGETLSR, (int) &resultado);

fd: entero descriptor de archivoTIOCSERGETLSR: requerimiento al dispositivoresultado: puntero void a área de memoria

Page 97: 06 Puerto Serie

nnnnnnnnFunción ioctl()

Page 98: 06 Puerto Serie

nnnnnnnnControl de Modem en Linux

• Usamos ioctl() con los comandos siguientes:

• TIOCMGET: se usa para conocer el estado de las líneas de control de modem (DTR y RTS)

• TIOCMBIS: se usa para activar el valor indicado en el tercer argumento (DTR óRTS)

• TIOCMBIC: se usa para desactivar el valor indicado en el tercer argumento. (DTR....)

Page 99: 06 Puerto Serie

nnnnnnnnControl de Modem en Linux

• Usamos ioctl() con los comandos siguientes (cont.):

• TIOCMSET: se usa para establecer el estado de las líneas de control de modem (DTR y RTS)

• TIOCSBRK: coloca un break en TxD (lleva la línea a positivo)

• TIOCCBRK: cancela un break en TxD (lleva la línea a negativo)

Page 100: 06 Puerto Serie

nnnnnnnnControl de Modem en Linux

• Constantes utilizadas (3er. argumento)

Page 101: 06 Puerto Serie

U03.c

Page 102: 06 Puerto Serie
Page 103: 06 Puerto Serie
Page 104: 06 Puerto Serie

nnnnnnnnLectura y escritura en Linux

• Usamos para lectura:ssize_t read(int fd, void *buf,

size_t count);

fd: file descriptor (abierto con open()).buf: puntero a memoria para almacenar.count: cantidad de elementos a leer.

read devuelve el número de bytes leídos.

Biblioteca: <unistd.h>

Page 105: 06 Puerto Serie

nnnnnnnnLectura y escritura en Linux

• Usamos para escritura:ssize_t write(int fd, const void *buf,

size_t count);

fd: file descriptor (abierto con open()).buf: puntero a memoria desde donde se lee.count: cantidad de elementos a escribir.

write devuelve el número de bytes escritos. Biblioteca: <unistd.h>

Page 106: 06 Puerto Serie

nnnnnnnnLectura y escritura en Linux

• Programa que lee y escribe simultánea-mente en un puerto serie, modo no canó-nico.

• Se especifica en la línea de comandos:nombre puerto disciplina velocidad

ej.: U06 0 8N1 9600

• Observar la función kbhit(), que emula su homónima de Borland y Turbo C, esta función no existe en forma nativa en Unix

Page 107: 06 Puerto Serie

U06.c

Page 108: 06 Puerto Serie
Page 109: 06 Puerto Serie
Page 110: 06 Puerto Serie
Page 111: 06 Puerto Serie
Page 112: 06 Puerto Serie
Page 113: 06 Puerto Serie
Page 114: 06 Puerto Serie
Page 115: 06 Puerto Serie
Page 116: 06 Puerto Serie

Caja de Conexiones

2 3 4 5 6 7 8 20 22

2 3 4 5 6 7 8 20 22

Break Out Box

Parte Anterior

+-

Page 117: 06 Puerto Serie

Caja de Conexiones

Break Out Box

Parte Posterior

1 13

14 25

ConectorMacho

ConectorHembra

13 1

1425

Page 118: 06 Puerto Serie

• Básicamente es similar al RS-232, pero permite más distancia y tiene menos modulación cruzada.

• Describe las especificaciones mecáni-cas y los circuitos, pero no las señales eléctricas.

• Usa un conector DB-37, ya que permite circuitos balanceados y no balancea-dos.

Norma RS-449

Page 119: 06 Puerto Serie

• Las especificaciones eléctricas están cubiertas por las normas RS-422-A y RS-423-A, para circuitos balanceados y no balanceados.

Norma RS-449