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
Ready)
Saída
DTE avisa quando está pronto para
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
DTE
Modem
DCE
Modem
DCE
Computador
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
DTE
Computador
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
Envia caracter XOFF (0x13)
Para de
enviar dados
Envia caracter XON (0x11)
Continua a
enviar dados
Buffer de recepção
quase cheio
Processa dados e esvazia
buffer de recepção
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
Download

Comunicação Serial I