2. Comunicação Serial
Transferência de um bit por vez
Usada em dispositivos de rede, teclados,
mouse, MODEMs e terminais
Velocidade de transmissão expressa em bps
(bits-por-segundo) ou “baud-rate”
Padrão RS-232:
Padrão elétrico definido pela EIA (Eletronic
Industries Association)
Existem 3 categorias: A, B e C, sendo RS-232C
a mais usada
Rômulo C. Silva
3. RS-232
DTE (Data Terminal Equipment):
equipamento que faz o processamento dos
sinais.
DCE (Data Circuit-terminating Equipment modem ): equipamento que faz a conexão
Um cabo de conexão entre dispositivos DTE
e DCE contém ligações em paralelo, não
necessitando mudanças na conexão de
pinos.
Rômulo C. Silva
5. RS-232
Sinal
Significado
SG ou GND
Terra
TD ou TX
Tranmissão de dados
RD ou RX
Recepção de dados
DTR
Terminal de dados pronto
DSR
Conjunto de dados pronto
RTS
Pronto p/ enviar (computador)
CTS
Envie os dados (modem)
DCD
Portadora detectada
RI
Indicador de telefone tocando
FG
Frame Ground
Rômulo C. Silva
8. RS-232
Os sinais de temporização de transmissão e
recepção são utilizados somente quando o
protocolo de transmissão utilizado for
síncrono.
Para protocolos assíncronos, padrão 8 bits,
os sinais de temporização externos são
desnecessários.
Rômulo C. Silva
9. Etapas da Comunicação Serial
Abertura da porta de comunicação
Configuração da porta
Transmissão de dados
Recepção de dados
Rômulo C. Silva
10. Comunicação Serial em Unix
Como todos os dispositivos, a porta serial é
tratada como um arquivo (diretório padrão
/dev)
Rômulo C. Silva
11. Abertura da Porta Serial
fd = open(arquivoPorta, flags);
Função retorna um file descriptor que
permite o acesso à porta.
Flags:
O_NOCTTY : programa não será um terminal
controlador da porta. Evita que o processo seja
afetado por interrupção via teclado.
O_NDELAY : programa não irá cuidar da linha do
sinal DCD. Evita que o processo seja colocado
para “dormir” até haja sinal na linha DCD
O_RDWR : porta será aberta para leitura e
gravação
Rômulo C. Silva
12. Abertura da Porta Serial em Unix
#include
#include
#include
#include
#include
#include
<stdio.h> /* Standard input/output definitions */
<string.h> /* String function definitions */
<unistd.h> /* UNIX standard function definitions */
<fcntl.h> /* File control definitions */
<errno.h> /* Error number definitions */
<termios.h> /*POSIX terminal control definitions */
/* * 'open_port()' - Open serial port 1. * * Returns the
file descriptor on success or -1 on error. */
int open_port(void) {
int fd; /* File descriptor for
fd = open("/dev/ttyS0", O_RDWR
O_NDELAY);
if (fd == -1) { /* * Could not
perror("open_port: Unable to
}
else fcntl(fd, F_SETFL, 0);
return (fd);
}
the port */
| O_NOCTTY |
open the port. */
open /dev/ttyS0 - ");
Rômulo C. Silva
13. Escrever na Porta Serial
Uso da chamada de sistema write:
n = write(fd, "ATZr", 4);
if (n < 0)
fputs("write() of 4 bytes failed!n", stderr);
Rômulo C. Silva
14. Leitura de dados da Porta Serial
Uso da chamada de sistema read
Retorna a quantidade de bytes disponíveis
no buffer da porta serial
Se não há bytes disponíveis, o programa
fica bloqueado até haja dados disponíveis
O comportamento da função read pode ser
alterado para retornar imediatamente
quando não houver dados através da
chamada:
fcntl(fd, F_SETFL, FNDELAY);
P/ restaurar o comportamento de read:
fcntl(fd, F_SETFL, 0);
Rômulo C. Silva
15. Leitura da Porta Serial
n=read(fd, buf, 5); /*tenta 5 bytes colocando
na variável buf */
if(n < 0) {
perror(“Sem dadosn”);
}
Rômulo C. Silva
16. Fechar a porta Serial
Chamda de sistema close.
close(fd);
Rômulo C. Silva
17. Configuração da Porta Serial
No arquivo <termios.h> encontra-se
definida uma estrutura (struct) que guarda
informações de configuração da porta serial
As funções tcgetattr e tcsetattr permite
ler e atribuir uma configuração à porta
serial, respectivamente
Rômulo C. Silva
19. Configuração da Porta Serial
Em difentes SOs, a taxa de transmissão e
recepção (baud-rate) é armazenada em
locais diferentes.
As funções cfsetospeed e cfsetispeed
permitem configurar a taxas de
transmissão e recepção, independente do
SO.
Rômulo C. Silva
20. Configuração da Porta Serial
struct termios options;
/* * Get the current options for the port... */
tcgetattr(fd, &options);
/* * Set the baud rates to 19200... */
cfsetispeed(&options, B19200);
cfsetospeed(&options, B19200);
/* * Enable the receiver and set local mode... */
options.c_cflag |= (CLOCAL | CREAD);
/* * Set the new options for the port... */
tcsetattr(fd, TCSANOW, &options);
Rômulo C. Silva