Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
Interfaces Seriais
André R. Hirakawa
Paulo S. Cugnasca
11/2014
Conteúdo
� Introdução e princípios
� Padrões de comunicação serial
� Interfaces e barramentos de comunicação serial
� Aplicações de comunicação serial
� Especificação e projeto de interface serial
Como conectar equipamentos uns aos outros?
� Interfaces de Comunicação:
� Paralela
� Serial
�Barramentos e redes
Interface Paralela
Equipamento 1 Equipamento 2
Dados + controle
� Todos os bits de uma palavra são transmitidos simultaneamente
� Cada canal necessita de diversos fios
Vantagens:
- Maior velocidade
- Simplicidade
das interfaces
Desvantagens:
- Muitos fios, > custo
- Ruído, perda desincronismo
- Menores distâncias
Interface Paralela
Equipamento 1 Equipamento 2
Dados+
controle
Síncrona
Assíncrona
Isócrona
Interface Serial
� Transmissor e receptor utilizam o mesmo clock commesma frequência e fase
� Transferência de blocos
� Cada bloco:
� Caracteres de sincronismo
� Dados
� Checagem de erro
� Pequeno overhead:� Para cada bloco: + 3 bytes (2 sincronismo, 1 checksum)
� Ex.: tamanho do bloco = 1024 bytes + 3 bytes = 1027 bytes0,3% de tempo extra !
Tipos de Interfaces Seriais - 1
Síncrona
� Clocks do transmissor e do receptor podem estar ligeiramente diferentes
� Ressincronismo a cada byte
� Transferência de bytes
� Para cada byte mais 2 ou 3 bits:� Start bit� Bit de paridade� Stop bits (1 a 2)
� Grande overhead:� Para cada byte, + 3 bits = 11 bits
= 37,5% de tempo extra!= < velocidade
Tipos de Interfaces Seriais - 2
Assíncrona
� Clock incluído ou incorporado ao dado� Ressincronismo a cada pacote
� Transferência de pacotes
� Contínuo e sem checagem dos dados
� Útil para aplicações de transferência de grande quantidade de dados e sem precisão.
� Ex: Vídeo-conferência
Tipos de Interfaces Seriais - 3
Isócrona
Padrões de Comunicação Serial
Padrão Síncrono Assíncrono Isócrono
RS-232 X X
RS-422 X X
RS-485 X X
USB X X
IEEE-1394 X X
CAN X
Serial ATA X
Padrões de Comunicação Serial
Padrão Síncrono Assíncrono
Isócrono
ETHERNET X
SPI X
I2C X
SMbus X
Memory Stick Serial
X
� Facilidade de implementação
� Menor Custo
� Atualmente alcança velocidades compatíveis com as síncronas
Embora as interfaces seriais síncronas sejam mais rápidas, as interfaces seriais assíncronas são mais utilizadas.
� Conjunto de regras pelas quais informações ou dados (ex:
números, letras) podem ser convertidos a uma representação do código e vice-versa.
� Para transmitir a informação através de uma interface é necessário que ela esteja codificada de alguma forma.
� A unidade mais básica de informação para nós é o bit, que pode ter valores 0 ou 1. Toda informação utilizada pelos computadores é codificada de alguma forma em sequências de bits.
Comunicação Serial Assíncrona
Código:
� Abreviação de: American Standard Code for Information Interchange.
� Código universal para intercâmbio de informações, concebido especialmente para utilização em transmissão, recepção e processamento de dados.
� ASCII para 7 bits: 27 = 128 caracteres podem ser representados.
� ASCII para 8 bits: 28 = 256 caracteres diferentes.� Ex.: o código ASCII 0100 0001 = 65D = 41H representa o caractere "A" .
Comunicação Serial Assíncrona
Código ASCII:
� Bit acrescentado ao dado, destinado à detecção de erros.
� Paridade par: número par de bits no estado 1.
� Paridade ímpar: número ímpar de bits no estado 1.
� Ex.: caractere "A”em ASCII de 7 bits: 1 0 0 0 0 0 1.
� Com paridade ímpar:
� como tem-se 2 bits no estado 1, o bit de paridade também será 1, de forma que no total tem-se 3 bits em 1 (ímpar).
� Bit de paridade: 1 1 0 0 0 0 0 1.
Comunicação Serial Assíncrona
Paridade:(1)
� Ex.: dado com bit de paridade: 1 1 0 0 0 0 0 1.
� Vamos supor que por um erro de transmissão, um dos bits 0 transformou-se em 1:
1 1 0 0 0 0 0 1 -------> 1 1 0 0 1 0 0 1.
� Ao verificar a paridade, o receptor perceberá que há um número par de 1, e indicará que houve algum erro na transmissão, e que esse byte é inválido.
� E se houver um número par de mudanças?
Comunicação Serial Assíncrona
Paridade:(2)
� Ex.: Transmissão do caractere A em ASCII com paridade ímpar e dois stop bits:
1 1 0 0 0 0 0 1 = b7 b6 b5 b4 b3 b2 b1 b0
Start b0 b1 b2 b3 b4 b5 b6 b7 Stop Stop
Comunicação Serial Assíncrona
Transmissão de um Caractere:
� Quando não há dados sendo transmitidos, a linha fica em nível lógico 1.
� Paridade: par, ímpar ou sem paridade.
� Normalmente se usa 1 ou 2 stop bits. Estes devem garantir que o receptor terá tempo de receber e armazenar o caractere antes de receber o próximo.
� A quantidade de bits na informação transmitida também pode variar: de 5 a 8 bits.
� Obs: Transmissor e receptor devem ter as mesmasconfigurações quanto a velocidade, tamanho da palavra, paridade e número de stop bits!
Comunicação Serial Assíncrona
Transmissão de um Caractere:
� O receptor reconhece a borda de descida do Start Bit e sincroniza seu clock.
� Após 1 ciclo e meio, começa a fazer a leitura dos demais bits a cada clock.
� Se as frequências do transmissor e do receptor estiverem perfeitamente sincronizadas, as leituras serão efetuadas exatamente no meio de cada ciclo.
� Tolerância a pequenas variações dos clocks de Tx e Rx.
Start b0 b1 b2 b3 b4 b5 b6 b7 Stop Stop
Sincroniza demais leituras
Comunicação Serial Assíncrona
Transmissão de um Caractere:
� É o número de transições (ou eventos) por segundo.
� Cada evento pode transmitir mais de 1 bit:
Ex.: modems, onde a variação de fase da portadora poderia
representar dois ou mais bits.
� Quando cada evento representa apenas 1 bit, então o Bit Rate e o Baud Rate são iguais.
Comunicação Serial Assíncrona
Bit Rate:
� É o número de bits por segundo transmitidosatravés da interface serial.
Baud Rate:
RS-XXX
� Padrão físico e elétrico.
� Conector DB25 (no caso dos computadores PC, usa-se normalmente um DB9, com os principais sinais).
DB25 DB9 descrição do sinal
2 3 Transmit Data - TXD.
3 2 Receive Data - RXD.
4 7 Request to Send - RTS.
5 8 Clear to Send - CTS.
6 6 Data Set Ready - DSR.
7 5 Signal Ground - GND.
8 1 Data Carrier Detect - DCD.
15 Transmit Clock - TXCk.
17 Receive Clock - RXCk.
20 4 Data Terminal Ready - DTR.
24 Auxiliary Clock.
22 9 Ring Indicator - RI.
Comunicação Serial Assíncrona
RS-232:
� Null Modems: Conector simplificado, usado para transferência de dados� Hyperterminal do Windows: permite desabilitar sinais de controle de fluxo.
DB25 DB9DB25 DB9DB25 DB9DB25 DB92 3 TXD.2 3 TXD.2 3 TXD.2 3 TXD.3 3 3 3 2222 RXD.RXD.RXD.RXD.4 7 RTS.4 7 RTS.4 7 RTS.4 7 RTS.5 8 5 8 5 8 5 8 CTSCTSCTSCTS....6 6 DSR.6 6 DSR.6 6 DSR.6 6 DSR.7 5 GND.7 5 GND.7 5 GND.7 5 GND.8 1 DCD.8 1 DCD.8 1 DCD.8 1 DCD.15 15 15 15 TXCkTXCkTXCkTXCk....17 17 17 17 RXCkRXCkRXCkRXCk....20 4 DTR.20 4 DTR.20 4 DTR.20 4 DTR.24 24 24 24 22 9 RI.22 9 RI.22 9 RI.22 9 RI.
DB25 DB9DB25 DB9DB25 DB9DB25 DB93333 2222 RXD.RXD.RXD.RXD.2 3 TXD.2 3 TXD.2 3 TXD.2 3 TXD.4 7 RTS.4 7 RTS.4 7 RTS.4 7 RTS.5 8 5 8 5 8 5 8 CTSCTSCTSCTS....6 6 DSR.6 6 DSR.6 6 DSR.6 6 DSR.7 5 GND.7 5 GND.7 5 GND.7 5 GND.8 1 DCD.8 1 DCD.8 1 DCD.8 1 DCD.15 15 15 15 TXCkTXCkTXCkTXCk....17 17 17 17 RXCkRXCkRXCkRXCk....20 4 DTR.20 4 DTR.20 4 DTR.20 4 DTR.24 24 24 24 22 9 RI.22 9 RI.22 9 RI.22 9 RI.
Comunicação Serial Assíncrona
RS-232
� Padrão físico e elétrico
� Opera com tensões referenciadas ao terra.
� Nível lógico 0 : tensão entre +3 e +15V� Nível lógico 1: tensão entre - 3 e - 15V
Faixas de tensãoinválido
+ 15V
nível lógico 0
+3V
0V inválido
- 3V
nível lógico 1
- 15V
inválido
Valores típicos: + 12V e - 12V
Comunicação Serial Assíncrona
RS-232:
� "Single ended": sinal referenciado à terra
TxRxTerra = 0 V
� Problemas:
� Quedas de tensão ao longo do fio
� Susceptível a ruídos e diferenças de potencial de terras
� Limite de distância +/- 15m (depende da taxa e qualidade do cabo)
� Taxa máxima: 20Kbps
Comunicação Serial Assíncrona
RS-232:
� "Differencial Voltage Pairs": Sinal Diferencial
Tx + Va - Vb < - 0.2V = 0Tx - Va - Vb > +0,2V = 1
par trançado� Vantagens:
� Mais imune a cross-talk
� Mais resistente a quedas de tensão
� Limite de distância: +/- 1200m (depende da taxa e cabo)
� Taxa máxima: 10Mbps
� Não define conector
Comunicação Serial Assíncrona
RS-422:
� Semelhante ao RS-422, mas com drivers tri-state:
� Permite topologias de redes multiponto.� Rede do tipo “mestre-escravo”.� Até 64 dispositivos.
� Componentes para RS 422 e RS 485:
� Am26LS32 – driver.� Am26LS32 – receiver.� MAX 481 / 483 / 485 / 487 / 1487 - transceivers.
Comunicação Serial Assíncrona
RS-485:
� Exemplo de topologia de rede com RS 485
Mestre
Escravos
Tx Rx
End. 1
End. 0
Tx RxTx Rx
Comunicação Serial Assíncrona
RS-485:
End. n - 1
� Filosofia Mestre-Escravo:
� 1 mestre, n - 1 escravos, cada um com o seu endereço.
� Mestre: toma a iniciativa da comunicação.
� Escravos: só respondem às mensagens a eles endereçadas.
� TxD do mestre: Chega a todos RxD dos escravos.
� TxD dos escravos:� Em alta impedância, quando um escravo for responder,
conecta seu transmissor.� Mestre: fica ciclicamente interrogando um por um os escravos,
que respondem com seus dados, se possuírem.
� Boa solução para sistemas com poucos dispositivos, baixo tráfego ou onde a velocidade não for crítica.
Comunicação Serial Assíncrona
RS-485:
� Universal Asynchronous Receiver / Transmiter.� Conversão paralela / serial.
� Inserção / retirada automática do Start-bit e Parity bit.
� Velocidades programáveis.
� Interrupções para transmissão / recepção.
� Indicação de erros.
� Exemplos:
� 8251 e 82C51, da Intel.
� 16550 (usado nos PCs).
Comunicação Serial Assíncrona
UART:
Comunicação Serial – 80C51
� UART interna:
� Muitos microcontroladores possuem UARTs internas, como o
80C51.
� Existem modelos de 80C51 com duas UARTs, como o DS80C320 da DALLAS.
� UART do 80C51:
� Pode-se facilmente escrever ou ler dados via interface serial.
� Realiza todo o processo de serialização, adição de start bits e stop bit.
� Permite transferência via interrupções ou “wait for flag”.
Estrutura da UART do 80C51
Comunicação Serial – 80C51
� Usando a UART:
� São necessários os seguintes passos para configurar corretamente a UART interna do 80C51:
� Definir a taxa de comunicação.
� Definir a origem do clock de comunicação.
� Programar o canal serial.
� Habilitar / desabilitar interrupções, caso se deseje (a técnica de “wait for
flag” também pode ser utilizada).
Comunicação Serial – 80C51
� Usando a UART:
� Modos de Operação:
� Modo 0: Shift Register de 8 bits
� Dado: RXD e TXD
� Clock: = 1/12 clock do 80C51(fixo)
Comunicação Serial – 80C51
� Usando a UART:
� Modos de Operação:
� Modo 1: UART de 8 bits com taxa de comunicação variável.
� Dado: TXD e RXD.
� Clock: ajustável através do Timer 1 (não pode ser o Timer 0).
� 10 bits: 1 start bit, 8 bits de dado, 1 stop bit.
� Paridade: opcional, por software.
Comunicação Serial – 80C51
� Usando a UART:
� Modos de Operação:
� Modo 2: UART de 9 bits com taxa de comunicação fixa.
� Dado: TXD e RXD.
� Clock: 1/32 ou 1/64 clock do 80C51 (fixo).
� 11 bits: 1 start bit, 8 bits de dado, 9o. bit programável, 1 stop bit.
� Paridade: opcional, por software.
Comunicação Serial – 80C51
� Usando a UART:
� Modos de Operação:
� Modo 3: UART de 9 bits com taxa de comunicação variável.
� Dado: TXD e RXD.
� Clock: ajustável através do Timer 1 (não pode ser o Timer 0).
� 11 bits: 1 start bit, 8 bits de dado, 9o. bit programável, 1 stop bit.
� Paridade: opcional, por software.
Comunicação Serial – 80C51� Usando a UART:
� Modos de Operação:
� Modo 2 e Modo 3: permitem comunicação multiprocessadores.
� 1 mestre, n escravos, cada um com seu endereço.
� 9o. bit: =1 indica que a mensagem do mestre é de endereço (todos a examinam, e o escravo selecionado passa a pegar as mensagens seguintes de dados, com o 9o. bit = 0; os demais as ignoram, até o 9o. bit voltar a ser 1).
� O escravo pode também transmitir mensagens ao mestre, após estabelecida a conexão, mas para tanto não deve setar o 9o. bit.
Comunicação Serial – 80C51� Usando a UART:
� Programar o Timer1 para gerar o "Baud Rate“ (Modo 1 e Modo 3).
Comunicação Serial – 80C51� Programando o Timer
� Timer1 no modo 2 (auto-reload)
� Cálculo:
� Baud Rate = k x FreqOsc32 x 12 x [256 - (TH1)]
� se SMOD = 0, k=1 SMOD = bit 7 de PCONse SMOD = 1, k=2
� Ou seja:
� se SMOD = 0 TH1 = 256 - ((FreqOsc / 384) / Baud)
se SMOD = 1 TH1 = 256 - ((FreqOsc / 192) / Baud)
Comunicação Serial – 80C51
� Programando o Timer - exemplo:
� Ex.: cristal de 11.0592 Mhz e deseja-se 19200bps.
� Supondo SMOD = 0.
� TH1 = 256 - ((11059000 / 384) / 19200)
TH1 = 256 - 1,5 = 254.5.
� Impossível! Se usarmos para 254 teremos 14.400bps, se
setarmos para 255 teremos 28.800bps! O que fazer?
� Basta mudar SMOD para 1.
� TH1 = 256 - ((11059000 / 192) / 19200)
TH1 = 256 - 3 = 253.
Comunicação Serial – 80C51� Programando o Timer:
� Timer/Counter mode:
� TMOD (89h) – byte endereçável7------T1------4 | 3-----T0--------0
Gate C/T M1 M01 0 (modo 2)
contador out timer
TH1 (8Dh) = valor de recarga em TL1
TCON (88h) – bit endereçável
---T1---|---T0----|---T1----|---T0----
TF1 TR1TF0 TR0 IE1 IT1 IE0 IT0TF = overflowTR = liga /desligaIE = habilitação de interrupção
Timer 1: sem interrupção: 0100 xxxx
Comunicação Serial – 80C51 Programando o Canal Serial:
� Modo Serial:� SCON (98h) – bit endereçável.
7--------------------------------------0
SM0 SM1 SM2 REN TB8 RB8 TI RI0 1 0 1
modo enable receive interrupt flagsserial reception transmite interrupt flags
(devem ser limpos por software).
� SM0 e SM1 definem o modo0 0 modo 0 = 8 bit Shift Register = Oscillator / 120 1 modo 1 = 8 bit UART = Baud Rate set by Timer 11 0 modo 2 = 9 bit UART = Oscillator / 321 1 modo 3 = 9 bit UART = Set by Timer 1.
� SM2 = flag para "Multiprocessor comunication". Caso esteja setada, RI somente será setado caso o nono bit recebido seja 1. Nos usos mais comuns, SM2 = 0.
� REN = deve estar setado para que a recepção seja habilitada.
Comunicação Serial – 80C51� Programando o Canal Serial:
� Modo Serial – continuação:� SCON (98h) – bit endereçável.
7--------------------------------------0
� SM0 SM1 SM2 REN TB8 RB8 TI RI0 1 0 1
modo enable receive interrupt flagsserial reception transmite interrupt flags
(devem ser limpos por software).
� TB8 é usado nos modos 2 e 3. O nono bit a ser transmitido é o nele contido.
� RB8: idem a TB8 para recepção. O nono bit recebido será nele armazenado.
� TI: Transmit InterruptQuando TI está setado, o programa pode assumir que a porta serial está pronta para
transmitir o próximo byte.
� RI: Receive InterruptSempre que o 80C51 receber um byte completo, RI será setado, informando ao
software que o byte precisa ser lido, antes que seja recebido um novo valor.
Comunicação Serial – 80C51� Programando o Canal Serial:
� Modo Serial – continuação:� PCON (87h) – byte endereçável
7--------------------------------------0
SM0D X X X X X X X
SMOD = 0: Modo 2: divide clock do 80C51 por 64SMOD = 0: Modos 1 e 3: divide saída Timer 1 por 32
SMOD = 1: Modo 2: divide clock do 80C51 por 32SMOD = 1: Modos 1 e 3: divide saída Timer 1 por 16
Comunicação Serial – 80C51� Programando o Canal Serial:
� Interrupções.� IE (A8h) – bit endereçável.
7----------------4----------------------0
.
EA ES ET1 EX1 ET0 EX0
� Por que usar interrupções?
� Qual a alternativa? Um esquema do tipo: wait for flag, onde o programa fica em loop perguntando ao dispositivo: "- Já recebeu dado?“, ou “- Acabou de transmitir o último dado?”
� No caso do wait for flag, o tempo de processamento gasto no pooling dos dispositivos é considerável: poderia ser usado no caso de programas pequenos e simples.
� As interrupções são uma maneira mais simples e limpa de fazer o mesmo serviço...
Comunicação Serial – 80C51
� Programando o Canal Serial:
� Lendo e enviando dados:
� Os dados devem ser lidos ou escritos em SBUF (99h), por exemplo, se quisermos escrever o caractere "A" na porta serial, isso pode ser feito como a seguir:
� MOV SBUF,#'A' ou MOV SBUF, #41H
Comunicação Serial – 80C51
� Programando o Canal Serial:
� Exemplo de configuração sem interrupção:
; inicializacoes.
MOV TMOD,#00100000B ; Timer 1 no modo 2
MOV TH1,#0FDH ; configura para 9600bps
MOV TCON,#01000000B ; Ativa Timer 1
MOV PCON,#00000000B ; SMOD recebe 0 (Timer 1/32)
MOV SCON,#01000000B ; canal serial no modo 1
MOV IE,#00000000B ; desabilita interrupções
Comunicação Serial – 80C51� Usando o Canal Serial com “wait for flag”:
� Envio de caracteres - rotina CO (character output):
CO: JNB TI,$ ; lê estado TI da serial
CLR TI ; Se TI OK, limpa TI
MOV SBUF,B ; escreve dado
JNB TI,$ ; espera sua transmissao
RET
� Recebimento de caracteres - CI (character input):
CI: JNB RI,$ ; lê estado RI da serial
CLR RI ; Se RI OK dado está presente,
; limpa RI
MOV B,SBUF ; lê dado
RET
Comunicação Serial – 80C51� Usando o Canal Serial com “wait for flag”:
� Exemplo de rotina para imprimir uma mensagem (da ROM para a serial):
PRINT: MOV A,#00h
MOVC A,@A+DPTR
JZ PFIM
MOV B,A
ACALL CO
INC DPTR
SJMP PRINT
PFIM: RET
� Usando o Canal Serial com interrupções
� Recebimento de caracteres
MOV TMOD,#00100000B ; Timer 1 no modo 2
MOV TH1,#0FDH ; configura para 9600bps
MOV TCON,#01000000B ; Ativa Timer 1
MOV PCON,#00000000B ; SMOD recebe 0 (Timer 1/32)
MOV SCON,#01010000B ; canal serial no modo 1, com interrupçãoMOV DPTR,#9000H ; ponteiro para dado recebido
MOV IE,#10010000B ; habilita interrupções
CLR C ; limpa carry
JNC $ ; aguarda fim de string
LJMP 0000H ; volta ao Programa Monitor...
CIINT: JNB RI, FIM2 ; se for interrupção de transmissão, MOV A, SBUF ; lê dado
MOVX @DPTR, A ; caso contrário armazena-o
INC DPTR ; incrementa ponteiro de dados
FIM1: CLR RI ; limpa RI=pedido interrupção de recepção
FIM2: CLR TI ; limpa TI=pedido interrupção de transmissão
RETI
FIM3: SETB C ; indica fim de string
AJMP FIM1