Comunicação Serial
em Unix usando
linguagem C
Prof. Rômulo Silva

Abr/2008
Rômulo C. Silva
Comunicação Serial
Transferência de um bit por vez
Usada em dispositivos de rede, teclados,
mouse, MODEMs e terminais
Velo...
RS-232
DTE (Data Terminal Equipment):
equipamento que faz o processamento dos
sinais.
DCE (Data Circuit-terminating Equipm...
RS-232C

Rômulo C. Silva
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 ...
RS-232 C

Rômulo C. Silva
RS-232
Especifica um conector de 9 ou 25 pinos

Rômulo C. Silva
RS-232
Os sinais de temporização de transmissão e
recepção são utilizados somente quando o
protocolo de transmissão utiliz...
Etapas da Comunicação Serial
Abertura da porta de comunicação
Configuração da porta
Transmissão de dados
Recepção de dados...
Comunicação Serial em Unix
Como todos os dispositivos, a porta serial é
tratada como um arquivo (diretório padrão
/dev)

R...
Abertura da Porta Serial
fd = open(arquivoPorta, flags);
Função retorna um file descriptor que
permite o acesso à porta.
F...
Abertura da Porta Serial em Unix
#include
#include
#include
#include
#include
#include

<stdio.h> /* Standard input/output...
Escrever na Porta Serial
Uso da chamada de sistema write:
n = write(fd, "ATZr", 4);
if (n < 0)
fputs("write() of 4 bytes f...
Leitura de dados da Porta Serial
Uso da chamada de sistema read
Retorna a quantidade de bytes disponíveis
no buffer da por...
Leitura da Porta Serial
n=read(fd, buf, 5); /*tenta 5 bytes colocando
na variável buf */
if(n < 0) {
perror(“Sem dadosn”);...
Fechar a porta Serial
Chamda de sistema close.
close(fd);

Rômulo C. Silva
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 –
struct termios

Rômulo C. Silva
Configuração da Porta Serial
Em difentes SOs, a taxa de transmissão e
recepção (baud-rate) é armazenada em
locais diferent...
Configuração da Porta Serial
struct termios options;
/* * Get the current options for the port... */
tcgetattr(fd, &option...
Configuração da Porta Serial
Flags para função tcsetattr:

Rômulo C. Silva
Próximos SlideShares
Carregando em…5
×

Comunicação Serial Linux

1.743 visualizações

Publicada em

Publicada em: Educação
0 comentários
4 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
1.743
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
0
Comentários
0
Gostaram
4
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Comunicação Serial Linux

  1. 1. Comunicação Serial em Unix usando linguagem C Prof. Rômulo Silva Abr/2008 Rômulo C. Silva
  2. 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. 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
  4. 4. RS-232C Rômulo C. Silva
  5. 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
  6. 6. RS-232 C Rômulo C. Silva
  7. 7. RS-232 Especifica um conector de 9 ou 25 pinos Rômulo C. Silva
  8. 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. 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. 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. 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. 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. 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. 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. 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. 16. Fechar a porta Serial Chamda de sistema close. close(fd); Rômulo C. Silva
  17. 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
  18. 18. Configuração da Porta Serial – struct termios Rômulo C. Silva
  19. 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. 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
  21. 21. Configuração da Porta Serial Flags para função tcsetattr: Rômulo C. Silva

×