Conectando Sistemas Embarcados
Prof. Eduardo Augusto Bezerra
Faculdade de Informática, PUC-RS
Porto Alegre, Março de 2004
http://www.inf.pucrs.br/~eduardob/
3.a. Comunicação Paralela: IEEE 1284
Por ser bem mais rápida e simples de utilizar que a única
outra porta padrão existente na época, a serial RS-232, a porta paralela se
tornou a preferida também para acessar dispositivos externos e até mesmo para
comunicação entre dois PCs.
A porta paralela é ainda hoje a forma mais simples de
acessar dispositivos externos em um computador pessoal padrão IBM-PC.
Infelizmente, com o passar dos anos, os engenheiros não
satisfeitos com o padrão existente, acabaram criando outros padrões para a
porta paralela, e a característica de simplicidade de utilização e instalação
desse recurso se perdeu um pouco.
Basicamente existem no mercado três padrões para
conectores e quatro padrões para funcionamento da porta paralela. Combinações
dos três tipos de conectores com os quatro tipos de padrões de funcionamento
tambem existem.
A confusão gerada por esses padrões e um grande
responsavel pelos atrasos no desenvolvimento de sistemas utilizando portas
paralelas. Um sistema desenvolvido para um determinado padrão pode vir a
“quase” funcionar em um PC que utiliza uma porta paralela “um pouco”
diferente daquela onde o sistema foi desenvolvido e testado.
Antes da definição do padrão IEEE 1284, as portas
paralelas eram classificadas em 4 tipos: Standard Parallel Port (SPP), Enhanced
Parallel Port (EPP), Extended Capabilities Ports (ECP) e Bi-directional
Parallel Ports (ou PS-2).
A maioria dos computadores modernos utiliza ECP, que
consegue emular protocolos antigos.
Esse padrão possibilita tambem utilização da porta
de forma bi-direcional, o que nao era possível nos primeiros padrões
existentes. Essa caracteristica bi-direcional tornou a porta paralela uma forma
bastante simples e eficiente para acesso a dispositivos externos.
As figuras a seguir mostram a pinagem de uma porta
paralela e conector quando utilizada para envio de dados para uma impressora, e
tambem os pinos a serem conectados para a transferência de dados entre dois
computadores.
Dos 25 pinos existentes no conector, 17 são utilizados
para transferência de dados e controle, e os 8 restantes para aterramento.
A tabela a seguir mostra a pinagem do conector de
acordo com o padrão IEEE 1284-A (existem ainda os padrões B e C), em todos os
modos de operação.
Pin |
Compatibility
mode |
Nibble mode |
Byte mode |
EPP mode |
ECP mode |
1 |
nStrobe |
HostClk |
HostClk |
nWrite |
HostClk |
2 |
Data 1 |
Data 1 |
Data 1 |
AD1 |
Data 1 |
3 |
Data 2 |
Data 2 |
Data 2 |
AD2 |
Data 2 |
4 |
Data 3 |
Data 3 |
Data 3 |
AD3 |
Data 3 |
5 |
Data 4 |
Data 4 |
Data 4 |
AD4 |
Data 4 |
6 |
Data 5 |
Data 5 |
Data 5 |
AD5 |
Data 5 |
7 |
Data 6 |
Data 6 |
Data 6 |
AD6 |
Data 6 |
8 |
Data 7 |
Data 7 |
Data 7 |
AD7 |
Data 7 |
9 |
Data 8 |
Data 8 |
Data 8 |
AD8 |
Data8 |
10 |
nAck |
PtrClk |
PtrClk |
Intr |
PeriphClk |
11 |
Busy |
PtrBusy |
PtrBusy |
nWait |
PeriphAck |
12 |
Perror |
AckDataReq |
AckDataReq |
User def. 1 |
nAckReverse |
13 |
Select |
Xflag |
Xflag |
User def. 3 |
Xflag |
14 |
nAutoFd |
HostBusy |
HostBusy |
nDStrb |
HostAck |
15 |
nFault |
nDataAvail |
nDataAvail |
User def. 2 |
nPeriphRequest |
16 |
nInit |
nInit |
nInt |
nInt |
nReverseRequest
|
17 |
nSelectIn |
1284 Active |
1284 Active |
nAStrb |
1284 Active |
18 |
Pin 1 (nStrobe)
ground return |
|
|
|
|
19 |
Pins 2 and 3
(Data 1 and 2) ground return |
|
|
|
|
20 |
Pins 4 and 5
(Data 3 and 4) ground return |
|
|
|
|
21 |
Pins 6 and 7
(Data 5 and 6) ground return |
|
|
|
|
22 |
Pins 8 and 9
(Data 7 and 8) ground return |
|
|
|
|
23 |
Pins 11 and 15
ground return |
|
|
|
|
24 |
Pins 10, 12,
and13 ground return |
|
|
|
|
25 |
Pins 14, 16,
and 17 ground return |
|
|
|
|
Um problema fisico em um cabo paralelo e a interação
entre os fios. As transições bruscas nos sinais trafegando nos fios causam
interferencia no sinal Quanto mais longo o cabo, maior a degradação. Um
comprimento máximo recomendavel para um cabo paralelo e de 10 metros.
Cada porta paralela em um PC possui um endereço base
único. No PC original, IBM utilizou os endereços 03BCH, 0378H e 0278H. Esses
endereços foram mantidos e utilizados ate hoje.
Esses endereços base são normalmente ocultados do programador, e os programas e sistemas operacionais, normalmente, utilizam os labels LPT1, LPT2 e LPT3. O label PRN e associado a porta LPT1.
Os labels são atribuidos as portas paralelas pelo sistema no momento da inicialização (boot). Uma rotina na BIOS do PC procura as portas paralelas em cada um dos três endereços pre-definidos na ordem utilizada acima. A primeira porta encontrada recebe o label LPT1, e assim sucessivamente. Por exemplo, caso nao exista nenhuma porta nos endereços 03BCH e 0378H, o label LPT1 será associado a porta no endereço 0278H (se existir uma porta nesse endereço).
Cada porta paralela possui um conjunto de três registradores utilizados na sua operação. O primeiro registrador, localizado no endereço base da porta, e utilizado para armazenar dados (recebidos ou enviados). Trata-se do Registrador de Dados.
Cada um dos 8 bits desse registrador esta ligado a cada um dos 8 pinos de dados do conector da porta paralela para interface com o mundo exterior. A correspondencia e direta: o bit mais significativo do registrador esta conectado ao bit mais significativo do conector.
Quando o microprocessador (ex. Pentium) escreve um dado no endereço base de uma das portas paralelas (ex. 0378H), o registrador mantêm esse valor internamente (no registrador) e externamente (nos pinos do conector), ate que um novo dado seja escrito pelo microprocessador.
O segundo registrador de uma porta paralela e utilizado
pelo PC para monitorar o que esta acontecendo no conector. Trata-se do
Registrador de Status.
Os 5 bits mais significativos correspondem aos sinais
que aparecem no conector da porta paralela. Na sua utilização original
(impressão), o bit 7 indica a condição de impressora ocupada; o bit 6 ACK; o
bit 5 indica falta de papel; bit 4 indica select; e o bit 3 indica erro.
Os três bits menos significativos nao possuiam nenhuma função em especial na
porta paralela do PC original.
Se o endereço base da porta paralela e o 0378H, por
exemplo, entao o Registrador de Status estara no endereço 0379H.
O terceiro registrador (endereço 037AH para endereço
base 0378H), e utilizado no PC original para envio de comandos para a
impressora. O Registrador de Controle de Impressora envia comandos utilizando
seus 5 bits menos significativos.
O bit 4 desse registrador e de algum interesse para acionamento de dispositivos externos, pois pode ser utilizado na geração de interrupções. Colocando esse bit em 1 faz com que o dispositivo possa gerar uma interrupção disparada pelo sinal ACK no Registrador de Status. Ao receber essa interrupção o microprocessador, dependendo da configuração do sistema, poderá interromper um processamento para atender os eventos na porta paralela.
O padrão ECP tambem introduz um novo esquema que permite o endereçamento de ate 128 dispositivos conectados a porta paralela. Quando o PC deseja enviar dados para um determinado dispositivo, um comando e enviado para a porta paralela, contendo o endereço do dispositivo desejado. Quando um dispositivo padrão ECP recebe o comando, o endereço recebido e comparado com seu proprio endereço, ignorando o dado recebido no caso dos endereços serem diferentes.
A seguir um resumo dos dados necessarios para a utilização da porta paralela para acesso a dispositivos externos.
Pinagem da porta paralela
(femea):
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
|||||||||||
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
||||||||||||
Pino |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
Função |
C0 |
D0 |
D1 |
D2 |
D3 |
D4 |
D5 |
D6 |
D7 |
S6 |
S7 |
S5 |
S4 |
C1 |
S3 |
C2 |
C3 |
S = Registrador de Status, D = Registrador de Dados, C = Registrador de
Controle
Os pinos 18 a 25 são terra (GND)
Registrador de Controle (end. Base + 1):
Pino |
Hexadecimal |
Função |
1 |
0x01 |
Strobe |
14 |
0x02 |
Autofeed |
16 |
0x04 |
Init |
17 |
0x08 |
SelectIn |
* |
0x10 |
Inten |
* |
0x20 |
Direction |
Registrador de Status (end. Base + 2):
Pino |
Hexadecimal |
Função |
* |
0x04 |
nIRQ |
15 |
0x08 |
nError |
13 |
0x10 |
Select |
12 |
0x20 |
PaperOut |
10 |
0x40 |
nACK |
11 |
0x80 |
nBusy |
* Registradores de controle internos