Material sobre porta serial e porta paralela

Transcrição

Material sobre porta serial e porta paralela
Comunicação Paralela
Meio de transferência de dados onde a informação é transferida os 8 bits ao mesmo tempo.
Porta Paralela do PC
Foi concebida originalmente para transferir dados para uma impressora, sendo portanto uma porta
unidirecional, ou seja, os dados somente poderiam trafegar no sentido computador => impressora. Porém
com a evolução da tecnologia de dispositivos periféricos, houve a necessidade de colocar dispositivos para
leitura conectado à porta paralela, como o scanner, o zip drive, etc... Assim a porta paralela passou a ser
uma porta bidirecional. Mas a porta paralela continua a ser conhecida como LPT - Line PrinTer.
Padrões de Porta Paralela no PC :
- SPP (Standard Parallel Port): Porta paralela no IBM PC original, ou qualquer porta que emule a
porta original, também é chamada SPP, porta paralela padrão, tipo AT ou ISA-compatível.
A porta paralela no PC original era baseada na interface para impressora Centronics existente.
Pode transferir dados de oito bits para um periférico, usando um protocolo semelhante ao
usado pela interface Centronics original, que permite apenas transferência unidirecional (PCpara-periféricos), não permitindo entrada de dados.
Porém existe um modo que possibilita a leitura de 4 bits de cada vez. Este modo é lento, mas
ficou popular como um modo de usar a porta paralela para entrada
Possui 3 endereços de registradores para acesso da CPU (ex: 378H, 379H e 37AH).
- Tipo PS/2 (Porta Paralela do IBM PS/2): A melhoria inicial desta porta paralela utilizada no
modelo PS/2 da IBM, foi a porta de dados bidirecionais. Esta porta bidirecional habilita a
transferência de oito bits entre um PC e um periférico. O termo “Tipo PS/2” se refere a
qualquer porta paralela bidirecional que não suporte os modos EPP ou ECP.
- EPP (Enhanced Parallel Port): Porta desenvolvida originalmente pela Intel (fabricante de chips),
Zenith (fabricante de PCs), e Xircom (fabricante de produtos para portas paralelas de redes)
que possui as linhas de dados bidirecionais, como na porta Tipo PS/2, porém uma EPP pode
ler ou escrever um byte em um ciclo do barramento ISA (aproximadamente 1µs, incluindo
handshake). A porta SPP e a porta Tipo PS/2 necessitam de quatro ciclos para realizar acesso.
Uma EPP pode inverter a direção do fluxo de dados rapidamente, sendo muito eficiente
quando usada com drives de disco ou fita ou outros dispositivos que transferem dados em
ambas as direções.
Uma EPP também pode emular portas SPPs, e algumas EPPs podem emular portas Tipo PS/2.
Possui 8 endereços de registradores para acesso da CPU (ex: de 378H a 37FH).
- ECP (Extended Capabilities Port): Porta inicialmente proposta pela HP (Hewlett Packard) e pela
Microsoft que possui as linhas de dados bidirecionais e pode transferir dados na velocidade do
barramento ISA, como na porta EPP. Mas a ECP têm buffers que permitem transferências por
DMA (acesso direto à memória) e compressão de dados. Transferências de ECP são úteis para
impressoras, scanners, e outros periféricos que transferem grandes blocos de dados.
Uma ECP também pode emular portas SPP ou Tipo PS/2, e muitas ECPs podem emular EPP.
Possui 6 endereços de registradores para acesso da CPU.
Endereços usuais para a Porta Paralela da PC
378 a 37F
278 a 27F
3BC a 3BF
Configuração no BIOS
0040:0008 - Endereço de LPT1
0040:000A - Endereço de LPT2
0040:000C - Endereço de LPT3
2
Existem 3 meios de acesso à porta paralela do PC (SPP):
- Através do DOS: Utilizando a função 5 da INT 21H
- Através da BIOS: Utilizando a INT 17H
função 0 - Saída para a impressora;
função 1 - Inicializa porta de impressão;
função 2 - Status da impressora
- Diretamente no hardware: através de instruções IN e OUT nos endereços relativos às portas.
1° End - data byte
2° End - Status
/BUSY
ACK
PE
3° End - Controle
SLCT
ERROR
X
X
X
IRQ
enable
/SLCT IN
/INIT
/AUTO
FEED
/STROB
E
Conectores
DB25 fêmea - utilizado para conexão ao computador
Sinal
Direção
Centronics - utilizado para conexão à impressora
Pino
Pino
Descrição
DB-257 Centronics-36
STROBE Saída
1
1
Indica que os dados estão prontos para serem transmitidos;
D0 a D7
Saída
2a9
2a9
Dados para a impressora;
ACK
Entrada
10
10
Indica que a impressora está preparada para receber dados;
BUSY Entrada
11
11
Indica que a impressora não está preparada para receber
dados porque seu buffer interno está cheio;
PE
Entrada
12
12
Indica que a impressora está sem papel;
SLCT
Entrada
13
13
Indica que a impressora está em estado “on line”, pronta
para receber dados;
AUTO
Saída
14
14
Avanço de linha;
FEED
ERROR Entrada
15
32
Indica erro (fim de papel, impressora desativada, etc...);
INIT
Saída
16
31
Reinicializa a impressora e limpa o buffer de impressão;
SLCT IN Saída
17
36
Somente transfere dados para a impressora quando estiver
ativo, selecionando estado “on line” ou “off line”;
GND
Saída
18 a 25
19 a 30
Terra
3
Comunicação Serial
Porta utilizada originalmente para comunicação de dados (Portas COM), e apesar de sua função
continuar praticamente a mesma, foi adicionada outras funções como a utilização do mouse.
A comunicação serial do PC é uma comunicação half duplex, porque usa o mesmo meio físico
tanto para transmissão, como para recepção, só podendo trafegar uma informação de cada vez.
A comunicação serial pode ser feita de dois modos:
Modo Assíncrono
Pode ser considerado o modo mais simples de se fazer uma transmissão de dados. Cada vez que
for acessado o meio físico, são transmitidos de 8bits a 12bits de cada vez. O PC usa este modo.
repouso start bit
b0
b1
b2
b3
b4
b5
b6
b7
paridade stop bit repouso
Pode ser definido por software:
- a quantidade de bits para a transmissão: de 5bits a 8bits;
- a existência e o tipo de paridade: par ou ímpar;
- a quantidade de stop bits.
Modo Síncrono
É um método de comunicação mais rápido e eficiente que o modo assíncrono, mas exige maior
qualidade do hardware, pois necessita que o clock de recepção seja exatamente igual ao clock de
transmissão, ou seja, o mesmo sincronismo. Cada vez que for acessado o meio físico, são transmitidos
vários bytes (300bytes, 500bytes, etc...). Este modo necessita de uma linha física e circuitos de acesso ao
transmissor e receptor especiais.
repouso
caracteres de
sincronismo
dados
fim de repouso
bloco
Os caracteres de sincronismo devem ser idênticos, e servem para sinalizar o inicio da transmissão.
Porta Serial do PC
No PC a porta serial foi implementada com uma UART (Universal Assincronous Receiver
Transmitter), originalmente o 8250, e atualmente substituto pelo 16550, que tem como principal vantagem
a existência de uma fila interna de 16 bytes.
Endereços usuais:
3F8 a 3FF
2F8 a 2FF
3E8 a 3EF
2E8 a 2EF
Configuração no BIOS:
0040:0000 - Endereço da COM1
0040:0002 - Endereço da COM2
0040:0004 - Endereço da COM3
0040:0008 - Endereço da COM4
Processo de comunicação serial:
Sinais utilizados:
Tx - Linha pela qual os dados saem do computador (DTE);
Rx - Linha pela qual os dados entram no computador (DTE);
DTR - Data Terminal Ready - Sinal de saída do DTE que indica “DTE on line”;
DSR - Data Set Ready - Sinal de entrada do DTE que indica “DCE on line”;
RTS - Request To Send - Requisição para enviar dados do DTE ao DCE;
CTS - Clear to Send - Autorização para o DTE enviar dados para o DCE;
DCD ou CD - Data Carrier Detect - Indica que um sinal de portadora foi detectado na linha telefônica;
RI - Ring Indicator - Indica sinal de chamada.
4
Inicialmente é necessário que ocorra o hanshake DTR-DSR, para indicar que tanto computador
como modem estão operacionais. E também que a conexão telefônica esteja estabelecida.
Quando o DTE1 deseja enviar um caracter ao DTE2, ativa o sinal RTS. O DCE então coloca
portadora na linha e ativa CTS. Ao receber CTS a porta serial do DTE envia o dado serial pelo pino Tx.
No modem, os bits seriais são modulados e transmitidos via linha telefônica.
Quando o DCE2 detecta a presença de portadora na linha telefônica, avisa ao DTE2 através do
DCD. Quando os dados chegarem, o DCE2 demodula os bits seriais e os conduz ao DTE pelo pino Rx.
Obs: Não ocorre nenhuma indicação ao DTE1 que o DTE2 recebeu o dado corretamente, e o único meio
de saber disso é se o DTE2 transmitir ao DTE1 um sinal de resposta.
Acesso à porta serial do PC:
- Através da BIOS: Utilizando a INT 14H
função 0 - Inicializa a porta serial;
AH = 00h
AL = parâmetros
DX = porta serial
retorna:
AH = status da porta
AL = status do modem
função 2 - leitura da porta serial;
AH = 02h
DX = porta serial
retorna:
AH = status da porta
AL = caracter recebido
parâmetros
BAUD
BAUD
Rate
Rate
0 0 0 = 110
0 0 1 = 150
0 1 0 = 300
0 1 1 = 600
1 0 0 = 1200
1 0 1 = 2400
1 1 0 = 4800
1 1 1 = 9600
BAUD
Rate
função 1 - escreve na porta serial;
AH = 01h
AL = caracter
DX = porta serial
retorna:
AH = status da porta
função 3 - Status da porta serial;
AH = 03h
DX = porta serial
retorna:
AH = status da porta
AL = status do modem
Even Parity
Parity
Select
Enable
0 0 = nenhuma
0 1 = ímpar
1 0 = nenhuma
1 1 = par
Stop Bits
0 = 1 bit
1 = 2 bits
tamanho do tamanho do
caracter
caracter
0 0 = 5 bits
0 1 = 6 bits
1 0 = 7 bits
1 1 = 8 bits
status da porta = registrador de Status de Linha (LSR - Line Status Register)
status do modem = registrador de Status do MODEM (MSR - Modem Status Register)
- Diretamente no hardware: através de instruções IN e OUT nos endereços relativos à porta:
16550
5
Estrutura interna:
6
Tabela de registradores do 16550:
DLAB
0
A2
0
A1
0
A0
0
1
1
0
X
X
X
X
X
X
0
0
0
0
0
0
1
1
1
0
0
0
1
1
1
0
0
1
0
1
1
0
0
1
0
1
0
RBR
THR
DLL
DLH
IER
IIR
FCR
LCR
MCR
LSR
MSR
Registrador
Receiver Buffer (read),
Transmitter Holding Register (write)
Divisor Latch Low (least significant byte)
Divisor Latch High (most significant byte)
Interrupt Enable Register
Interrupt Identification Register (read),
FIFO Control Register (write)
Line Control Register
MODEM Control Register
Line Status Register
MODEM Status Register
End base + 0: Acesso ao registrador do Buffer de Recepção (para leitura);
ou ao registrador de espera da Transmissão (para escrita);
End base + 3: Acesso ao registrador de controle de linha (escrita ou leitura no Line Control Register);
Divisor Latch
Break
Stick
Even
Parity
Stop
tamanho
tamanho
Access Bit
Control Bit
Parity
Parity
Enable
Bits
do caracter do caracter
bit 0 e bit 1: Definem o tamanho do caracter: (00 = 5 bits, 01 = 6 bits, 10 = 7 bits e 11 = 8 bits);
bit 2: Define a quantidade de stop bits (0 = 1 Stop Bit e 1 = 2 Stop Bits);
bit 3: Define a existência do bit de paridade na comunicação (1 = com paridade);
bit 4: Define paridade par (1 = paridade par);
bit 5: Mantém o bit de paridade com um valor fixo (0 quando bit 4 for 0 e 1 quando bit 4 for 1);
bit 6: Break Control Bit - com 1 coloca a saída serial em nível baixo (transmissão bloqueada);
bit 7: DLAB - Bit que permite acesso ao Registrador do Latch do Divisor do Gerador de Baud Rate.
End base + 5: Acesso ao registrador de Status de Linha (leitura do Line Status Register);
Error
TEMP
THRE
Break
Framing
Parity
Overrun
RDR
Indicator
Interrupt
Error
Error
Error
bit 0: Receiver Data Ready - Indica a existência de um dado na entrada serial (no RBR ou na FIFO);
bit 1: Indica erro por Sobreposição. Este erro ocorre quando um novo caracter chega ao RBR (ou à
FIFO) sem que o caracter anterior tenha sido lido pela CPU, ocasionando perda do dado.
bit 2: Indica erro de Paridade. Este erro ocorre quando a paridade do dado recebido é diferente da
paridade definida no LCR;
bit 3: Indica erro de falta de Stop bit;
bit 4: Indica a ocorrência de break na entrada serial (recepção bloqueada pelo transmissor);
bit 5: Transmitter Holding Register Empty - Indica registrador de espera vazio;
bit 6: Transmitter Empty - Indica saída serial vazia;
bit 7: Indica a ocorrência de algum tipo de erro na recepção.
End base + 4: Acesso ao registrador de controle de MODEM;
0
0
0
Loop
Out2
Out1
RTS
DTR
bit 0: Data Terminal Ready - Ativa o sinal DTR;
bit 1: Request to Send - Ativa sinal RTS, que significa que a porta serial deseja transmitir um byte;
bit 2: Ativa saída Out1;
bit 3: Ativa saída Out2;
bit 4: Habilita modo para diagnóstico LOCAL. O pino SOUT fica em 1, o pino SIN fica
desconectado, a saída do Registrador de deslocamento do transmissor fica conectado
internamente à entrada do Registrador de deslocamento do receptor, os quatro sinais de status
do Modem (DSR, CTS, RI e DCD) ficam desconectados externamente (e com nível 1) e ligados
internamente aos quatro sinais controle de Modem (DTR, RTS, OUT1 e OUT2). Neste modo o
dado transmitido é recebido imediatamente.
7
End base + 6: Acesso ao registrador de Status do MODEM (leitura);
DCD
RI
DSR
CTS
DDCD
TERI
DDSR
DCTS
bit 0: Delta Clear to Send - Indica variação no sinal CTS;
bit 1: Delta Data Set Ready - Indica variação no sinal DSR;
bit 2: Trailing Edge Ring Indicator - Indica borda no sinal RI;
bit 3: Delta Data Carrier Detect - Indica variação no sinal DCD;
Obs: Sempre que o bit0, bit1, bit2 ou bit3 for 1 é gerada uma interrupção de Status do Modem;
bit 4: Clear to Send - Indica estado do CTS;
bit 5: Data Set Ready - Indica estado do DSR;
bit 6: Ring Indicator - Indica estado do RI;
bit 7: Data Carrier Detect - Indica estado do DCD.
End base + 1: Acesso ao registrador de habilitação de Interrupção;
0
0
0
0
EDSSI
ELSI
ETHEI
ERDAI
bit 0: ERDAI - Enable Received Data Available Interrupt - Habilita que ocorra interrupção quando o
RBR receber um dado serial. Interrupção de segundo nível de prioridade.
bit 1: ETHEI - Enable Transmitter Holding Register Empty Interrupt - Habilita que ocorra interrupção
quando o THR ficar vazio. Interrupção de terceiro nível de prioridade.
bit 2: ELSI - Enable Receiver Line Status Interrupt - Habilita que ocorra interrupção quando o
registrador de controle de linha sinalizar algum tipo de erro (Paridade, Overrun, Framing ou
break). Interrupção de primeiro nível de prioridade.
bit 3: EDSSI - Enable MODEM Status Interrupt - Habilita que ocorra interrupção quando ocorrer
variação de DCD, RI, DSR ou CTS.
End base + 2: Acesso para leitura, do registrador de Identificação de Interrupção (IIR)
FIFOs
FIFOs
0
0
Interrupt
Interrupt
Interrupt ``0'' if Interrupt
Enabled
Enabled
ID Bit(2)
ID Bit(1) ID Bit (0)
Pending
bit 0: Quando seu valor for 0 indica que existe interrupção pendente. A origem da interrupção é dada
pelos bits 1, 2 e 3.
bit 1 e bit 2: Indica a prioridade da interrupção
bit2 bit1
Nível de
Tipo e Origem
Cancelamento
prioridade
11
Mais alto Receiver Line Status - ocorrência de erro (Paridade, leitura do LSR;
Overrun, Framing ou break).
10
Segundo Dado Recebido disponível ou nível de gatilho da leitura do RBR ou
FIFO alcançado.
da FIFO;
01
Terceiro Registrador de Espera do Transmissor vazio
escrita no THR;
00
Quarto
Modem Status - variação de DCD, RI, DSR ou CTS leitura do MSR.
bit 3: Indica fim do tempo de espera para leitura da FIFO. É desativado com a leitura da FIFO;
bit 6 e bit 7: Ficam em 1 quando em modo FIFO
End base + 2: Registrador de Controle da FIFO (para escrita em FCR);
RCVR
RCVR
Reservado Reservado
DMA
XMIT
RCVR
FIFO
Trigger
Trigger
Mode
FIFO
FIFO
Enable
Reset
Reset
bit 0: Habilita operação de transmissão e de recepção com a FIFO;
bit 1: Reseta todos os bytes da FIFO de recepção;
bit 2: Reseta todos os bytes da FIFO de transmissão;
bit 3: Define modo de transferência de DMA. No modo 0 um único byte é transferido de cada vez e
no modo 1 vários bytes são transferidos de cada vez.
bit 6 e bit 7: Definem o nível de gatilho da FIFO:
Bit 7 e Bit6 Nível de gatilho
00
1 byte
01
4 bytes
10
8 bytes
11
14 bytes
End base + 7: Acesso ao registrador Scratch
8
End base + 0 e DLAB = 1: Acesso ao Latch do Divisor do Baud Generator (8 bits menos significativos);
End base + 1 e DLAB = 1: Acesso ao Latch do Divisor do Baud Generator (8 bits mais significativos);
Gerador de Baud Rate
Tabela de velocidade x valores dos registradores de baud rate
Velocidade
50
110
150
300
600
1200
2400
4800
9600
19200
38400
56000
MSB
09H
06H
03H
01H
00H
00H
00H
00H
00H
00H
00H
00H
LSB
00H
00H
00H
80H
C0H
60H
30H
18H
0CH
06H
03H
02H
Procedimento de programação da
porta serial:
1° setar DLAB (bit7 do LCR)
2° carregar LSB
3° carregar MSB
4° resetar DLAB, definir tamanho do
caracter, número de stop bits e
paridade. (LCR)
5° transmitir e/ou receber
RS232C
Conectores: Existem dois tipos de conectores que podem
ser usados na comunicação serial, o DB25 macho e o
DB9 macho no computador. O cabo de conexão requer
DB9 e DB25 fêmea.
Pinagem dos conectores
DB9
Tx
Rx
RTS
CTS
DTR
DSR
DCD
RI
comum
DB25
2
3
4
5
20
6
8
22
7
DB9 macho
DB25 macho
12
Níveis de Tensão: O padrão RS232C utiliza um padrão de tensões diferentes dos níveis TTL utilizados
internamente.
TTL
RS 232C
Hi (alto)
2V a 5V
-3V a -15V
Lo (baixo) 0V a 0,8V
3V a 15V
Cabos de Conexão
Conexão micro-modem
Conexão micro-micro - null modem (2)
Conexão micro-micro - null modem (1)
Conexão micro-micro - null modem simples
13
Erros na Transmissão:
Com o objetivo de detectar erros, foi adicionado um nono bit ao byte, que traz uma informação
sobre a paridade do byte, ou seja, a informação (com 9 bits) deve ter sempre a mesma paridade (que pode
ser par ou ímpar). Caso ocorra um valor com a paridade invertida, significa que existe pelo menos um bit
invertido na informação, o que, dependendo do caso, pode significar que toda a informação (que pode
variar de um byte a um arquivo) está perdida.
A geração do bit de paridade, se dá da seguinte forma (considerar paridade ímpar):
- caso o byte tenha a paridade par, o nono bit deve valer 1 para tornar a paridade ímpar;
- caso o byte tenha a paridade ímpar, o nono bit deve valer 0 para manter a paridade ímpar.
A primeira limitação do bit de paridade é que se ocorrer erros em dois bits, a paridade vai ser
mantida, e o byte terá erro que não será detectado.
A segunda limitação do bit de paridade é a possibilidade de apenas detectar erros, sem corrigi-los.
Para tornar possível a correção de erros foram implementadas muitas técnicas, e uma das mais
simples é o uso do CRC (Caracter de Redundância Cíclica), que consiste em transmitir a cada oito bytes,
um byte com uma informação de paridade, conforme o exemplo abaixo (considerar paridade ímpar):
Dado
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
35H
6AH
E8H
01H
F9H
46H
DFH
44H
bit de
paridade
1
1
1
0
1
0
0
1
0
0
1
0
1
0
1
0
0
1
1
0
1
1
1
1
1
1
1
0
1
0
0
0
1
0
0
0
1
0
1
0
0
1
1
0
1
0
1
0
1
0
0
0
0
1
1
1
0
1
0
0
0
1
1
0
1
0
0
1
1
0
1
0
CRC
0
0
1
1
0
1
1
1
1
Ex: Caso ocorra um erro no bit 2 do 3° byte (de 0 passa para 1), o bit de paridade vai informar que
existe erro no 3°, e o CRC vai informar que existe erro no bit 2, assim é só inverter o bit 2 do 3° byte que
o byte ficará correto.
Com este método, podemos corrigir um bit a cada oito byte, que significa ter um erro a cada 81
bits transmitidos (corrige erros, se a taxa de erros não ultrapassar 1,23%). Se houver mais de um erro neste
bloco, poderemos apenas detectar que ocorreu erro, sem corrigi-lo.
Porém existem métodos mais avançados de correção de erros que permite correção de erros de
taxas mais altas. Porém isto implica em enviar cada vez mais informação redundante para ser possível a
correção de erros.