Você está na página 1de 11

Comunicação Serial

Motivação

• Diversos dispositivos eletrônicos usam portas seriais para se


comunicar com outros dispositivos eletrônicos.
• Para muitos é a única forma de comunicação.
• A integração de equipamentos antigos aos sistemas automatizados
muitas vezes pode ser resumida à “inclusão” destes dispositivos
simples nas redes de comunicação.

Comunicação Serial – RS232


Padrão RS232C:

– Criado em 1969
– Implementações atuais não suportam o padrão original
completo.
– Os sinais implementados atualmente e sua forma de
utilização são muito pouco semelhantes à especificação
original.
– O estudo apenas do padrão, sem levar em conta a
“evolução” (darwiniana) das implementações, seria
infrutífero.

1
Comunicação Serial – RS232
UART (Universal Asynchronous Receiver Transmitter):

– Componente essencial nos subsistemas de comunicação


serial de dispositivos.
– Pega bytes de dados e transmite os bits, individualmente,
de forma sequêncial.
– No destino, um outro UART remonta os bits em bytes.
– Trabalham com nível de tensão TTL (Transistor to
Transistor Logic), ou seja, 5V.

Comunicação Serial – Sincrona x Assincrona


• Comunicação Serial Sincrona:
– Transmissor e receptor devem utilizar um “clock”
compartilhado:
• Além do sinal de dados, o transmissor deve enviar um sinal de
strobe para que o receptor saiba quando ler o próximo bit de dados.
– Mais eficiente
– Mais cara: circuitos e cabeamento para compartilhamento
de clock.

2
Comunicação Serial – Sincrona x Assincrona
• Comunicação Serial Assincrona:
– Transmissão de dados sem utilização de sinal de clock.
– Bits especiais são adicionados aos dados para sincronizar o
transmissor e o receptor:
• Start Bit: Adicionado ao início da “word” que será transmitida. Usado para
sincronizar clocks do receptor e do transmissor. (drift máximo entre clocks
de 10%).
• Bit de dados: os bits da word de dados são enviados, com o Bit menos
significativo antes (LSB). A sinalização de cada bit é realizada em período
constante, e o receptor lê (amostra) o meio físico no meio deste período.
– Ex: T =2s, receptor lê o sinal (0 ou 1), depois de 1 segundo e vai aguardar mais
2 segundo para realizar nova leitura.
• Bit de paridade: o transmissor adiciona este bit depois de enviar toda a
palavra de dados. O receptor pode utilizar este bit para verificar erros.
• Stop Bit: o transmissor envia pelo menos um bit de parada.

Comunicação Serial – Sincrona x Assincrona


• Comunicação Serial Assincrona:
– O receptor, ao receber toda o pacote de bits (Start Bit, Data
Bits, Parity Bit, Stop Bit):
• Pode verificar o bit de paridade (previamente configurado entre
transmissor e receptor – paridade par, impar ou nenhuma).
• Deve verificar o Stop Bit, se não o encontrar, então houve um erro
de transmissão e o UART deve avisar que ocorreu um “Framing
Error”, isto é, há um problema de sincronia entre transmissor e
receptor.
• O UART receptor descarta os bits de controle (Start, Paridade, Stop)
e envia ao microcontrolador host apenas os dados/palavra.

3
Comunicação Serial – RS 232 - Sinalização
• Sinalização por tensão:

– Nível lógico 0: +3V até +25V (Space)


– Nível lógico 1: -3V até –25V (Mark)

• Voltage Pump (TTL até níveis RS232):

– Transceivers: Ex: MAX232 (Dalsemi): +5V  +10V e –5V  –10V

Comunicação Serial – RS 232C - Equipamentos


• Segundo o padrão, dois equipamentos:

– DCE (Data Communication Equipment). Exemplo: modem


– DTE (Data Terminal Equipment). Exemplo: PC

Normalmente trabalhamos com DTE.

4
Comunicação Serial – RS 232C – Pinagem DB9
Pinagem do conector serial DB-9 DTE:

Pino Sinal Sentido Descrição


1 CD (Carrier Detect) Entrada DCE avisa quando receve sinal de que
dados estão a caminho
2 RD (Receive Data) Entrada Recebe dados enviados pelo DCE
3 TD (Transmit Data) Saída Transmite dados para o DCE
4 DTR (Data Terminal Saída DTE avisa quando está pronto para
Ready) comunicar
5 Signal Ground
6 DSR (Data Set Ready) Entrada DCE avisa quando conseguiu
estabelecer canal de comunicação
7 RTS (Request to Send) Saída DTE pede permissão para enviar dados
8 CTS (Clear to Send) Entrada DCE permite que DTE envie dados
9 RI (Ring Indicator) Entrada DCE avisa que telefone está tocando

Comunicação Serial – Conexão DTE -DTE


• Padrão especifica conexão DTE – DCE.

Computador Modem Modem Computador


DTE DCE DCE DTE

RS232 – cabo direto

Linha discada

• Não são raros os casos em que precisamos realizar conexões DTE-DTE.


– Utilizamos um cabo “null modem”

Computador Computador
DTE DTE

5
Comunicação Serial – Cabo Null Modem

Pino Sinal
1 CD (Carrier Detect)
2 RD (Receive Data)
3 TD (Transmit Data)
4 DTR (Data Terminal Ready)
5 Signal Ground
6 DSR (Data Set Ready)
7 RTS (Request to Send)
8 CTS (Clear to Send)
9 RI (Ring Indicator)

Comunicação Serial – Interface de Loopback

Pino Sinal
1 CD (Carrier Detect)
2 RD (Receive Data)
3 TD (Transmit Data)
4 DTR (Data Terminal Ready)
5 Signal Ground
6 DSR (Data Set Ready)
7 RTS (Request to Send)
8 CTS (Clear to Send)
9 RI (Ring Indicator)

6
Comunicação Serial – Java
Pacote de Comunicação:
javax.comm
Metodos:
CommPort •Configuração de portas
•Obter streams para leitura e escrita de dados

SerialPort

Comunicação Serial – Java


Classe CommPortIdentifier

Possui um método estático sobrecarregado que devolve um


objeto da classe CommPortIdentifier:

public static CommPortIdentifier getPortIdentifier(String


portName) throws NoSuchPortException

public static CommPortIdentifier getPortIdentifier(CommPort port)


throws NoSuchPortException

7
Comunicação Serial – Java
Classe CommPortIdentifier

Possui um método estático que devolve uma enumeração de portas:


public static Enumeration getPortIdentifiers()

import java.util.Enumeration;
import javax.comm.CommPortIdentifier;
class PortLister{
public static void main(String args[]){
Enumeration ports = CommPortIdentifier.getPortIdentifiers();
while (ports.hasMoreElements()){
System.out.println(((CommPortIdentifier)(ports.nextElement())).getName());
}
}
}

Comunicação Serial – Java


Classe CommPortIdentifier

Possui um método que devolve uma CommPort:


public synchronized CommPort open(String appname,int timeout)
throws PortInUseException
Chamada ao método é bloqueada, isto é, o método somente retorna quando:
– Consegue acesso exclusivo à porta  devolve a CommPort requisitada.
– Quando o tempo (timeout – ms) expira  PortInUseException.

Para utilizar uma porta serial, devemos realizar um cast:

SerialPort sp;
sp=(SerialPort)CommPortIdentifier.getCommPortIdentifier(“com1”.)open
(“App”,1000);

Para liberar a porta, devemos chamar: sp.close()

8
Comunicação Serial – Java
Configuração da Porta Serial (SerialPort)
Possui um método para configuração de:
– Baud rate: {1200,2400,...,9600,...,19200,...,38400,...,115200}
– Número de DataBits
SerialPort.{DATABITS_5,DATABITS_6,DATABITS_7,DATABITS_8}
– Número de StopBits
SerialPort.{STOPBITS_1,STOPBITS_1_5,STOPBITS_2}
– Tipo de paridade:
SerialPort.{PARITY_EVEN,PARITY_MARK,PARITY_NONE,PARITY_ODD,PARITY_SPACE}

public void setSerialPortParams(int baudrate, int dataBits,


int stopBits, int parity)
throws UnsupportedCommOperationException

Comunicação Serial – Java


Configuração da Porta Serial (SerialPort)
Controle de Fluxo (handshake)
– Mecanismo que permite que o receptor interrompa o envio de dados pelo
transmissor quando seu buffer de entrada estiver próximo de sua
capacidade máxima (evita perda de dados por overflow do buffer)

– Modos de controle de fluxo:


• None (sem controle de fluxo, terminais enviam dados quando assim o desejarem)
• RTS/CTS (hardware flow control)
• XON/XOFF (software flow control)

9
Comunicação Serial – Java
Configuração da Porta Serial (SerialPort)
Controle de Fluxo: XON/XOFF
B A
Dados
Buffer de recepção
quase cheio
Envia caracter XOFF (0x13)
Para de
enviar dados Processa dados e esvazia
Envia caracter XON (0x11) buffer de recepção

Continua a
enviar dados
Dados

Vantagem: Controla overflow e utiliza apenas linhas 2(RD), 3(TD) e 5(GND)


Desvantagem: os caracteres 0x11 e 0x13 precisam de tratamento especial para serem
enviados, quando fazem parte dos dados.

Comunicação Serial – Java


Configuração da Porta Serial (SerialPort)
Controle de Fluxo: RTS/CTS
B A
1.Deseja enviar dados RTS = 1
2.Pronto para receber  CTS = 1

3.Envia dados enquanto CTS = 1 Dados


4.Buffer de recepção quase cheio CTS = 0
5.Para de enviar dados

6.Pronto para receber  CTS = 1

7.Envia dados enquanto CTS = 1 Dados

Vantagem: Controla overflow sem interferir nos dados


Desvantagem: Utiliza linhas 2(RD)/3(TD), 5(GND) e 7(RTS)/8(CTS)

10
Comunicação Serial – Java
Configuração da Porta Serial (SerialPort)
Possui um método para configuração de Controle de Fluxo:
– Tipo de controle de fluxo:

SerialPort.{FLOWCONTROL_NONE,FLOWCONTROL_ RTSCTS_IN,FLOWCONTROL_
RTSCTS_OUT,FLOWCONTROL_ XONXOFF_IN,FLOWCONTROL_ XONXOFF_OUT}

public void setFlowControlMode(int flowcontrol)


throws UnsupportedCommOperationException
public int getFlowControlMode()

11

Você também pode gostar