Porta Parallela
|
![]() |
La porta parallela
Ora si parlerà dell’anello di giunzione tra il computer e la scheda esterna ovvero la porta parallela. La porta parallela è una delle principali vie di comunicazione che ha il computer per comunicare con l’esterno. Originariamente è stata progettata per comunicare solamente con la stampante, ma poi ha trovato applicazioni anche per collegare altri dispositivi come scanner e unità di memoria esterne (ad esempio lo Zip e alcuni tipi di vecchi masterizzatori), o applicazioni elettroniche di vario tipo come interfacce come nel nostro caso. Il comune PC possiede una sola porta parallela che è facilmente riconoscibile guardando il computer all'esterno: appare come un connettore a 25 poli DB25 femmina (cioè con i fori), posto normalmente sul retro del PC.
I tipi di porta parallela
Le categorie che comprendono tutte le porte attuali sono sostanzialmente tre:
· La Standard Parallel Port (SPP). È il modello originario di porta parallela, installato sul primo PC XT. Pensata originariamente solo per la connessione alle stampanti, con qualche accorgimento permette una certa flessibilità anche in altri usi. Tutti gli altri tipi di porta parallela sono compatibili con questo e quindi il software e l'hardware sviluppati per questa porta sono praticamente universali.
· La Enhanced Parallel Port (EPP). Permette lo scambio bidirezionale dei dati. E' possibile raggiungere alte velocità di trasferimento, circa 10 volte maggiori della SPP.
· La Extended Capabilities Port (ECP). Permette la maggiore flessibilità di utilizzo, ha i terminali di controllo pilotati automaticamente dal computer ed una grande varietà di modalità di funzionamento. Come contropartita è piuttosto difficile progettare hardware capace di usarla.
Configurare la porta parallela
Prima di procedere alla descrizione delle porte, mi sembra opportuno indicare come configurare la porta nei vari modi di funzionamento, quando la cosa è ovviamente possibile.
· Se il PC è piuttosto vecchio (diciamo fino ad un 486 del 1994) e la porta parallela è installata su una scheda esterna connessa a quella madre, molto probabilmente la porta è una SPP e quindi non necessita di alcuna configurazione. In genere la stessa scheda che ospita il connettore stampante ha anche la funzione di controller per i dischi e le porte seriali o, in macchine molto vecchie, di scheda video.
· Se il computer è più recente per poter configurare la porta oppure per vedere di che tipo è la porta parallela che si possiede bisogna accedere al bios. al bios si accede premendo il pulsante Canc della tastiera al momento dell’accensione del computer sulla prima schermata, ovvero quando esegue il memory test per la memoria ram (un contatore parte da 640 ed arriva ad numero di Kbyte di ram, ad esempio nel mio PC a 64000) e appare sulla parte bassa dello schermo la scritta “press DEL to enter SETUP”. Una volta fatto apparirà sullo schermo una schermata con le impostazioni del computer. Senza cambiare altre cose onde evitare di guastare il computer si vanno a cercare le caratteristiche della porta parallela e si selezionano tra le tre diverse possibilità la configurazione EPP. una volta fatto si esce dal bios salvando le modifiche e riavviando il computer. Se non funziona tale configurazione dopo aver modificato correttamente il bios, si vede che bisogna anche intervenire fisicamente sulla scheda di controllo della porta parallela spostando un connettore (evento rarissimo). Se la porta permette la configurazione come EPP 1.7 oppure EPP 1.9, è consigliabile, la seconda opzione. Un dispositivo che necessita di una SPP può funzionare benissimo anche con la EPP.
I registri e l'assegnazione dei pin nella SPP
Complessivamente sono disponibili sul connettore della porta parallela 12 bit per l'output e 5 per l'input. Gli ingressi e le uscite sono TTL compatibili (alcuni possono essere a collettore aperto, in genere con resistore di pull-up integrato all'interno del PC) anche se le tensioni e le correnti effettivamente disponibili sono piuttosto variabili in funzione delle tecnologie impiegate per la costruzione della porta. Su molti PC un uno logico appare come una tensione molto vicina ai 5V, uno zero come 0V (a vuoto). Le correnti disponibili sono in genere di almeno 5 mA sia di sink che di source ma spesso molto di più (anche 20 mA e più). Non si tratta però di una regola: in genere deve essere interpretato come uno logico qualunque tensione superiore ai 2V e come zero logico qualunque tensione inferiore a 0.8V. Inoltre si potrebbe ritenere che la corrente assorbita da un'uscita (Isink) sia maggiore, anche di molto, di quella erogata (Isource). E' quindi buona norma progettare circuiti che riescano a gestire correttamente segnali che rappresentano l'uno logico sia con i 2V sia con i 5V (quali per esempio i TTL o gli HC con resistore di pull-up. E' anche opportuno evitare assorbimenti superiori a qualche mA. La seguente tabella riporta l'assegnazione dei pin, il loro nome, la direzione (Out significa che il PC invia il bit alla periferica) ed il nome del registro utilizzato per controllarli.
Pin DB25 |
Nome |
Direzione |
Registro |
1 |
Strobe |
Out * |
Control |
2 |
Data 0 |
Out |
Data |
3 |
Data 1 |
Out |
Data |
4 |
Data 2 |
Out |
Data |
5 |
Data 3 |
Out |
Data |
6 |
Data 4 |
Out |
Data |
7 |
Data 5 |
Out |
Data |
8 |
Data 6 |
Out |
Data |
9 |
Data 7 |
Out |
Data |
10 |
Ack |
In |
Status |
11 |
Busy |
In |
Status |
12 |
Paper Out |
In |
Status |
13 |
Select |
In |
Status |
14 |
Linefeed |
Out * |
Control |
15 |
Error |
In |
Status |
16 |
Inizialize |
Out * |
Control |
17 |
Select-in |
Out * |
Control |
18-25 |
Massa |
- |
- |
I pin di uscita evidenziati da un * sono utilizzabili anche come ingresso ma solo su alcune porte. In questo caso si tratta di un’uscita a collettore aperto.
Realizzando un circuito connesso alla porta parallela è opportuno collegare tutti i fili di massa, sia per diminuire gli eventuali disturbi.
Verificate con attenzione la corrispondenza dei pin leggendo sul connettore stesso la numerazione (è sempre presente, almeno per i 4 pin agli angoli), soprattutto se si usano prolunghe o simili.
Attenzione in particolare al fatto che, utilizzando un adattatore maschio la corrispondenza dei pin è, ovviamente, simmetrica, dato che deve incastrarsi in un connettore femmina. Analogamente se si guarda un connettore da dietro (cioè dal lato su cui si eseguono le saldature) i pin appaiono, ovviamente, simmetrici.
I registri di base
Ciascuna porta parallela configurata come SPP è controllabile attraverso tre registri consecutivi nello spazio di I/O del processore, chiamati data register, status register e control register, ciascuno di 8 bit. Per scrivere un byte in questi registri è necessario eseguire una istruzione di output verso l'indirizzo interessato. Per leggere un byte è necessario effettuare una istruzione di input. Non è possibile leggere o scrivere un solo bit alla volta, indipendentemente dal linguaggio adottato. Inoltre non è in genere possibile leggere un dato da un registro di sola scrittura o scrivere in una porta a sola lettura.
Il data register
Il data register è un registro di sola scrittura direttamente connesso agli otto pin di dato presenti sul connettore esterno della parallela. L'indirizzo è quello di base della porta.
Per impostare un pin alto o basso basta scrivere nel bit corrispondente di questo registro rispettivamente 1 oppure 0. Il bit meno significativo del registro corrisponde al pin Data0.
Occorre infine notare che una volta scritto il byte nel registro, i pin di uscita non cambiano più il loro valore fino alla scrittura successiva in quanto il circuito di uscita della porta è formato da otto flip-flop.
La porta EPP
I vantaggi della porta EPP rispetto ad altre modalità di funzionamento della porta parallela sono:
· Permette lo scambio bidirezionale di dati senza i problemi di compatibilità della SPP
· È sufficientemente veloce, garantendo prestazioni praticamente confrontabili a quelle del bus ISA. Normalmente ha la stessa velocità della parallela ECP ed è decisamente più veloce della SPP. In funzione del tipo di chip utilizzato per costruirla e della connessione al bus di sistema (ma sostanzialmente indipendentemente dal processore, se questo è abbastanza moderno) la velocità varia da 500 kilobyte a 2 megabyte al secondo
· È più semplice da gestire rispetto alla ECP in quanto non richiede una particolare "intelligenza" alle periferiche né l'uso di driver sul PC. Infatti la comunicazione è completamente controllata dall'hardware attraverso semplici istruzioni di I/O, senza l'uso di interrupt o DMA. In pratica il protocollo di comunicazione è un elementare bus asincrono, familiare anche ai progettisti meno esperti e facile da intrecciare alle periferiche
I segnali
La porta EPP utilizza gli stessi connettori e segnali della porta Centronics; ne ridefinisce però i nomi e la funzione, secondo la seguente tabella.
Pin |
Nome SPP |
Nome EPP |
Direzione |
Funzione EPP |
1 |
Strobe |
nWRITE |
Out |
Quando basso indica un trasferimento di dati |
2 |
Data 0 |
|
Bidirezionale |
Trasporta dati e indirizzi in ambedue le direzioni |
3 |
Data 1 |
PD 1 |
Bidirezionale |
Trasporta dati e indirizzi in ambedue le direzioni |
4 |
Data 2 |
PD 2 |
Bidirezionale |
Trasporta dati e indirizzi in ambedue le direzioni |
5 |
Data 3 |
PD 3 |
Bidirezionale |
Trasporta dati e indirizzi in ambedue le direzioni |
6 |
Data 4 |
PD 4 |
Bidirezionale |
Trasporta dati e indirizzi in ambedue le direzioni |
7 |
Data 5 |
PD 5 |
Bidirezionale |
Trasporta dati e indirizzi in ambedue le direzioni |
8 |
Data 6 |
PD 6 |
Bidirezionale |
Trasporta dati e indirizzi in ambedue le direzioni |
9 |
Data 7 |
PD 7 |
Bidirezionale |
Trasporta dati e indirizzi in ambedue le direzioni |
10 |
Ack |
Interrupt |
In |
Se abilitato, viene generato un interrupt sul fronte di salita del segnale |
11 |
Busy |
nWAIT |
In |
Usato per la sincronizzazione. E' strettamente legato al segnale IOCHRDY del bus ISA |
12 |
Paper Out |
- |
In |
Non usato |
13 |
Select |
- |
In |
Non usato |
14 |
Linefeed |
nDSTRB |
Out |
Se questo segnale è basso è in corso una scrittura (dato da PC a periferica). Altrimenti è in corso una lettura |
15 |
Error |
. |
In |
Non usato |
16 |
Inizialize |
Reset |
Out |
Attivo basso |
17 |
Select in |
nASTRB |
Out |
Quando basso indica un trasferimento di indirizzi |
18 |
Massa |
Massa |
- |
|
Per alcuni pin della modalità EPP ho indicato il nome premettendo la lettera "n" minuscola (per esempio nASTRB) per indicare che è attivo basso; a volte lo stesso pin è indicato senza tale prefisso oppure con un segmento al disopra (qualunque sia la convenzione usata non vi sono però modifiche ai livelli logici ed i diagrammi temporali sono quelle fisicamente presenti).
Come si nota tre pin di ingresso non sono usati nello standard EPP e quindi possono essere gestiti direttamente dal programma, attraverso le stesse tecniche della porta SPP (operazione però lenta e macchinosa). Purtroppo non sono presenti pin di uscita non utilizzati: ciò crea, a volte, qualche difficoltà in più nella progettazione dell'hardware.
I registri EPP
La gestione della EPP avviene attraverso otto registri consecutivi (a differenza della SPP che ne usa tre), ciascuno formato da otto bit, presentati nella tabella seguente. Con Base di intende l'indirizzo iniziale della porta parallela, in genere 0x378 oppure 0x278.
Indirizzo |
Nome |
R/W |
Base + 0 |
Data port |
W |
Base + 1 |
Status port |
R |
Base + 2 |
Control port |
W |
Base + 3 |
Address port |
R/W |
Base + 4 |
Data port |
R/W |
Base + 5 |
Data port - 16 bit |
R/W |
Base + 6 |
Data port - 32 bit |
R/W |
Base + 7 |
Data port - 32 bit |
R/W |
Le modalità a 16 e 32 bit non sono supportate da tutte le parallele EPP: in questo caso i registri corrispondenti non sono definiti.
Come riportato nella tabella i primi tre registri sono identici sia come nome che come funzione ai registri della SPP e non verranno quindi qui descritti. Questo permette di usare una porta EPP in tutte le applicazioni in cui è richiesta una porta SPP, senza alcuna modifica all'HW o al SW. L'unico problema si può presentare qualora si vogliano sfruttare alcune caratteristiche elettriche della SPP, quale la presenza di pin a collettore aperto.
Registri
Riassumendo:
Output data byte: indirizzo 378H
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
Otto linee di uscita del byte del carattere da stampare, sono dotate di latch (in altre parole mantengono l’ultimo dato scritto) e possono anche essere lette allo stesso indirizzo, ma allora restituiscono il dato memorizzato dal latch.
Il significato dei bit è il seguente.
| bit 0 1 2 3 4 5 6 7 |
segnale D0 D1 D2 D3 D4 D5 D6 D7 |
pin 2 3 4 5 6 7 8 9 |
Output segnale di controllo: indirizzo 37AH
XXXX |
|
|
|
|
INIT |
|
|
Input segnali di stato: indirizzo 379H
BUSY |
|
|
|
|
|
|
|
Bisogna tenere presente che BUSY è acquisito in forma negativa, in pratica è letto 1 quando la linea è a 0 e viceversa.