Port parallèle sur PC
On a vu l’utilisation de liaison série sur un PC. On sait qu’elle s’accompagne de limitations de débit et de distance. => Pour améliorer la distance, on utilise des modems.
=> Pour améliorer le débit, la solution simple consiste à faire passer plusieurs bits en parallèle.
Toutefois cela pose des problèmes de diaphonie ( interférences électromagnétiques entre fils ), ce qui limite encore plus la distance. En outre il faut disposer d’un nombre de fils plus élevés d’où un coût plus élevé.
On verra dans un premier temps le port parallèle des origines du PC ( SPP ) puis les différentes évolutions permettant l’utilisation de modes de fonctionnement plus performants.
I) Historique
En 1981, IBM inclut un port parallèle sur le PC pour des transmissions plus rapides que les liaisons séries. Il est utilisé pour envoyer des données à une imprimante, donc pour une transmission unidirectionnelle : Mode standard : SPP.
Ensuite on a connecté d’autres périphériques demandant des liaisons entrantes en utilisant des astuces ( utilisation de lignes de gestion entrantes pour lire des données ) : Mode quartet ( Nibble mode ).
Puis on a développé des circuits électroniques permettant aussi les données entrantes sur les lignes de données : Mode octet ( Byte mode ).
Mais la transmission est limitée en débit ( 150 ko/s sortant ), demande beaucoup de traitement logiciel ( pas de DMA ), n’est pas définie par un standard électrique ce qui pose des problèmes d’interopérabilité, est limitée en distance par la puissance des drivers de ligne électroniques.
En 1991, un
nouveau standard ( IEEE1284 ) est développé incluant un lien bidirectionnel
haut débit ( plus du Mo/s ). Il demande de nouveaux circuits mais doit aussi
être compatible avec les anciens fonctionnements : Mode EPP.
S’il reste inférieur au débit du bus ISA (8Mo/s), il permet néanmoins la réception de données depuis des périphériques tels que des lecteurs de CD-ROM ou disques durs. En plus du débit supérieur, les ports EPP sont bidirectionnels.
Encore plus récent, le port ECP (Extended Capacity Port) possède la particularité d'être Plug and Play ( branchez et utilisez). Il dérive du port EPP et en possède les mêmes caractéristiques. Sa particularité est qu'il permet au périphérique branché sur celui-ci de s'identifier à la machine dès le démarrage. Ainsi l'imprimante peut s'autoconfigurer lors du lancement du système d'exploitation (à condition que ce dernier et le BIOS soient eux aussi compatibles Plug and Play).
Chaque mode définit une méthode de transfert des données :
Sens de transfert |
Mode |
|
Unidirectionnel ( SPP ) |
PC vers périphérique |
Mode standard |
Périphérique vers PC |
Mode quartet |
|
Mode octet |
||
Bidirectionnel ( semiduplex ) |
|
Mode EPP |
Mode ECP |
Les modes Standard et quartet peuvent être utilisés sur tout circuit parallèle. On crée ainsi un lien bidirectionnel. Les autres modes demandent que le circuit électronique soit prévu pour ces fonctionnements.
Le choix du mode de
fonctionnement SPP, EPP ou ECP se fait dans le BIOS.
II) Description du port parallèle
Le port parallèle sur PC est fait de 17 signaux et 8 broches à la masse. Les signaux sont de 3 catégories :
+
Signaux de contrôle ( 4 ) :
Contrôle de liaison ( Handshake = enchaînement de requêtes/réponses pour le
déroulement de la transmission ).
+ Signaux d’état ( 5 ) : Indication de l’état des appareils, de cause de problème.
+
Signaux de données ( 8 ) : Envoi de données du PC vers le périphérique seulement
à l’origine.
Dans la définition originale ( SPP : Standard Parallel Mode ), le port parallèle du PC servait à la connexion avec des imprimantes. C’est pourquoi on trouve des noms de broches liés à l’impression :
Groupe |
SPP Signal |
In/Out
|
Signal Description
|
Contrôle |
/STROBE |
Out |
Actif bas. Le PC indique la présence
certaine de données valides sur la ligne ( elles le sont avant ). |
/AUTOFEED |
Out |
Actif bas. Indique à l’imprimante
d’insérer automatiquement un saut de ligne en plus du retour chariot à chaque
return. |
|
/SELECT IN |
Out |
Actif bas. Indique à l’imprimante
qu’elle est sélectionnée. |
|
/INIT |
Out |
Actif bas. Utilisé pour envoyer un
reset à l’imprimante. |
|
Etat |
/ACK |
In |
L'imprimante envoie une impulsion à 0
sur cette ligne pour indiquer à l'ordinateur qu'elle a bien reçu le caractère
transmis et qu’il peut continuer la
transmission. |
BUSY |
In |
Cette ligne est
mise à 1 par l'imprimante lorsque son buffer de réception est plein (
contrôle de flux matériel ). Le PC doit attendre que cette ligne
revienne à 0 pour ré-émettre. |
|
PE |
In |
L’imprimante indique qu’il n’y a plus
de papier ( Paper Error ) |
|
SELECT |
In |
Cette ligne indique
à l'ordinateur si l'imprimante est "on line" ou "off
line". |
|
/ERROR |
In |
L’imprimante indique une erreur au
PC. |
|
Données |
DATA[8:1] |
Out |
8 lignes de données- seulement en
sortie en SPP. |
Remarque: Ce tableau présente les broches dans le cas de l’échange de données. Elles peuvent être utilisées à autre chose dans le cas de procédures de gestion de la liaison ( phases de transition demandant l’échange d’information de contrôle ). On peut aussi envisager l’utilisation du port parallèle pour une liaison avec un autre périphérique qu’une imprimante.
Remarque: /A ou nA indique « Complément de A ». Ici cela indique des variables actives sur niveau bas.
Le lien entre le matériel et le logiciel se fait par des registres : Le port parallèle est installé à une adresse de base ADR ( 378h ou 278h habituellement ). Les registres du port parallèles sont au nombre de 3 :
Adresse |
Nom |
Read/Write |
Description |
ADR + 0 |
Registre de données (Data
Register) |
R/W |
Data port ( lecture/écriture de données ) |
ADR + 1 |
Registre d’état (Status
Register) |
R |
Contient les bits d’état ( Status bits ) |
ADR + 2 |
Registre de contrôle (Control Register) |
W |
Utilisé pour imposer les valeurs des bits de contrôle |
Le brochage sur une prise DB25 sur le PC est le suivant :
BROCHE NOM Sortie du
PC Entré dans le PC
-------------------------------------------------------------------------
1 /STROBE X X
2 D0 X X si EPP (voir après )
3 D1 X X si EPP
4 D2 X X si EPP
5 D3 X X si EPP
6 D4 X X si EPP
7 D5 X X si EPP
8 D6 X X si EPP
9 D7 X X si EPP
10 /ACK X
11 BUSY X
12 PE X
13 SELECT X
14 /AUTOFEED X X
15 /ERROR X
16 /INIT X X
17 /SELECT IN X X
18-25 MASSE X X
Le détail du registre de données en ADR est :
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
D7 =
MSB |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 =
LSB |
Il n’est accessible qu’en écriture dans les premiers modes SPP.
Le détail du registre d’état en ADR+1 est :
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
BUSY |
/ACK |
PE |
SELECT |
/ERROR |
Non défini |
Non défini |
Non défini |
Il n’est accessible qu’en lecture.
Le détail du registre de contrôle en ADR+2 est :
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Non défini |
Non défini |
DIR |
IRQ
ENABLE |
SELECT IN |
/INIT |
AUTOFEED |
/STROBE |
Il est accessible en lecture et en écriture.
Le bit 4 autorise ou non une interruption lorsque ACK passe à 0 ( l’imprimante valide la
Réception d’un caractère ).
Le bit 5 ne sert que pour les modes bidirectionnels : Ce bit à 1 rend le port accessible en écriture.
III) Mode normaux : SPP ( standard parallel port )
Mode standard ( Mode Centronics ou Compatibility mode )
C’est le mode utilisé pour le fonctionnement normal du port SPP : Les données sont placées sur les lignes de données.
1. Ecrire les données dans le registre de données ( => Elles sont sur les fils de sortie )
2. Lire le registre d’état pour vérifier que l’imprimante n’est pas occupée ( BUSY )
3. Si elle ne l’est pas, écrire le registre de contrôle pour mettre /STROBE = 0.
4. Ecrire le registre de contrôle pour changer /STROBE et pouvoir passer à la donnée suivante.
On
arrive à des débits de l’ordre de 150 ko/s. C’est suffisant pour les veilles
imprimantes mais pas pour les lecteurs CD amovibles ou les imprimantes lasers.
En outre c’est un mode unidirectionnel, du PC vers le périphérique.
Mode Quartet ( Nibble mode )
Le mode Nibble est le moyen simple d’obtenir en SPP des données du périphérique vers le PC. Il est combiné avec le mode précédent pour obtenir une liaison bidirectionnelle ( voir norme IEEE1284 ).
On va utiliser comme entrées de données les entrées de status. Un périphérique enverra un octet de données en envoyant 2 quartets ( nibbles ) à la suite.
Comme le /ACK est utilisé pour les interruptions, on utilise les 4 autres entrées restantes ( BUSY, PE, SELECT, /ERROR ). Les bits sont donc éparpillés dans le registre d’état ce qui oblige à des traitements pour récupérer un quartet puis l’octet
Signal SPP |
Nom en mode quartet |
In/Out |
Description – Utilisation
lors d’un transfert entrant en mode quartet |
/STROBE |
/STROBE |
Out |
Pas utilisé en transfert entrant. |
/AUTOFEED |
HostBusy |
Out |
Signal de handshake du PC en mode quartet. Mis bas pour indiquer que le PC est prêt au mode quartet. Mis haut pour indiquer au périphérique qu’un quartet a été reçu. |
/SELECTIN |
1284Active |
Out |
Mis à l’état haut pour indiquer un transfert entrant ( 1284 ) |
/INIT |
/INIT |
Out |
Pas utilisé en transfert entrant. |
/ACK |
PtrClk |
In |
Au
niveau bas, indique une donnée entrante valide, Mis à l’état haut en réponse à HostBusy passant au niveau haut. |
BUSY |
PtrBusy |
In |
Utilisé pour le bit de donné entrant 3, puis 7 |
PE |
AckDataReq |
In |
Utilisé pour le bit de donné entrant 2, puis 6 |
SELECT |
Xflag |
In |
Utilisé pour le bit de donné entrant 1, puis 5 |
/ERROR |
/DataAvail |
In |
Utilisé pour le bit de donné entrant 0, puis 4 |
DATA[8:1] |
Non utilisés |
|
En SPP les circuits électroniques n’acceptent pas le sens entrant. |
1. Le PC indique sa capacité à recevoir un quartet en mettant HostBusy au niveau bas.
2. Le périphérique répond en plaçant le premier quartet sur les lignes d’état utilisées pour les données.
3. Le périphérique indique la validité du quartet en passant PtrClk à bas.
4. Le PC met HostBusy à haut pour indiquer qu’il a reçu le quartet et qu’il n’est pas prêt pour le suivant.
5. Le périphérique met PtrClk haut pour acquitter cette information.
6. On recommence les étapes 1 à 5 pour le second quartet.
Le mode quartet permet une liaison bidirectionnelle de données malgré un circuit électronique unidirectionnel pour ses lignes de données. Mais le débit est limité à 50 ko/s.
Mode Octet ( Byte mode )
Des fabriquants ont installé un port parallèle bidirectionnel électroniquement. Mais la gestion reste la même qu’auparavant. On parle de "enhanced bi-directional" port à ne pas confondre avec Enhanced Parallel Port (EPP) qui va introduire des éléments de gestion plus performants.
Ici on a une évolution électronique ( entrées de données bidirectionnelles dont le sens est commandé par le bit 5 DIR du registre de contrôle ) mais la gestion du transfert reste la même ( lire les signaux d’état en attendant jusqu’à ce qu’ils prennent l’état souhaité, établir les niveaux des signaux de contrôle selon la procédure ).
Signal
SPP |
Nom en mode Octet |
In/Out |
Description – Utilisation
lors d’un transfert entrant en mode octet |
/STROBE |
HostClk |
Out |
Signal d’acquittement. Mis bas pour indiquer que l’octet a été reçu. |
/AUTOFEED |
HostBusy |
Out |
Signal de Handshake. Mis bas pour indiquer que le PC est prêt pour un octet. Mis haut pour indiquer que l’octet a été reçu. |
/SELECTIN |
1284Active |
Out |
Mis à l’état haut pour indiquer un transfert entrant ( 1284 ). |
/INIT |
/INIT |
Out |
Pas utilisé, laissé haut. |
/ACK |
PtrClk |
In |
Mis bas pour
indiquer des données valides sur les lignes de données, Mis haut en réponse à HostBusy passant au niveau haut. |
BUSY |
PtrBusy |
In |
Signal Busy du PC. |
PE |
AckDataReq |
In |
Suit /DataAvail |
SELECT |
Xflag |
In |
Drapeau d’extensibilité. Pas utilisé en mode octet. |
/ERROR |
/DataAvail |
In |
Mis bas par le périphérique pour indiquer qu’une donnée entrante est disponible. |
DATA[8:1] |
DATA[8:1] |
Bi-Di |
Envoi des données du périphérique au PC. |
1. Le PC signal qu’il est prêt à recevoir en mettant HostBusy bas
2. Le périphérique répond en plaçant les données sur les lignes de données
3. Le périphérique indique que l’octet est valide en passant PtrClk à bas
4. Le PC met HostBusy haut pour indiquer qu’il a reçu et qu’il n’est pas encore prêt pour un suivant
5. Le périphérique met
PtrClk haut pour acquitter cette information. Le PC applique une impulsion
pour
acquitter à son tour.
6. On recommence les étapes 1 à 5 pour le second octet.
Le mode octet de lire un octet sur les lignes de données. On y arrive par des entrées électroniques bidirectionnelles, le sens de transmission est choisi par un bit de direction dans le registre de contrôle : DIR.
On a donc en fait une liaison unidirectionnelle dont le sens est paramétrable. On devra adapter par programmation logicielle les signaux de gestion au sens choisi => gestion lourde et pénible.
=>Débit encore limité ou consommation de ressources du système.
Les modes étendus développés en 1991 donnent des circuits électroniques améliorés par des machines d’état ( circuits logiques séquentiels ) qui génèrent automatiquement les signaux de contrôle.
=> Le circuit devient aussi contrôleur de l’échange parallèle.
IV) Modes étendus
Mode EPP ( Enhanced Parallel Port )
Le mode EPP donne en plus du circuit électronique d’échange parallèle un système de contrôle de l’échange selon le protocole EPP alors qu’avant on devait programmer ce système de handshake. On l’a trouvé à partir du chipset Intel 386SL ( chip d’I/O 82360 ). On a en fait un contrôleur de communication parallèle.
Remarque : Sur les PC actuels on un contrôleur AIP ( Advanced Integrated Peripherical = Intel ) qui intègre contrôleur de port série, port parallèle, de disquette,…
Le protocole EPP fournit 4 types de cycles de transfert de données :
- Ecriture de données ( Data_Write cycle )
- Lecture de données ( Data_Read cycle )
- Ecriture d’adresse ( Address_Write cycle )
- Lecture d’adresse ( Address_Read cycle )
Les cycles de transfert de données sont ceux de SPP bidirectionnel précédent. On a en plus les cycles de transfert d’adresse. On passe en fait des adresses, commandes ou informations de contrôle. Ce sont en fait 2 cycles de transfert de données qui s’enchaînent automatiquement.
Signaux SPP |
Nom du signal EPP |
In/Out |
Description – Utilisation
lors d’un transfert EPP |
/STROBE |
/WRITE |
Out |
Actif bas, Indique
une opération d’écriture. Il doit être haut pour un cycle de lecture. |
/AUTOFEED |
/DataStrobe |
Out |
Actif bas, il indique qu’une opération Data_Read ou Data_Write est en cours. |
/SELECTIN |
/ADDRStrobe |
Out |
Actif bas, il indique qu’une opération Address_Read ou Address_Write est en cours. |
/INIT |
/RESET |
Out |
Reset du périphérique, Actif bas. |
/ACK |
/INTR |
In |
Interruption créée par périphérique. Utilisé pour générer une interruption sur le PC. |
BUSY |
/WAIT |
In |
Signal de Handshake. Bas, il indique que l’on peut démarrer un cycle ( appelle un strobe ). Haut, il indique que l’on peut terminer un cycle ( permet au strobe de conclure ). |
D[8:1] |
AD[8:1] |
Bi-Directionnel |
Lignes bidirectionnelles de données, d’adresse |
PE |
Défini par l’exploitant |
In |
Usage selon le périphérique |
SELECT |
Défini par l’exploitant |
In |
Usage selon le périphérique |
/ERROR |
Défini par l’exploitant |
In |
Usage selon le périphérique |
La figure suivante est un exemple d’écriture d’une donnée : Data_Write cycle . Le signal /IOW de la CPU est montré juste pour mettre en évidence que tous les contrôles du port parallèle ( les autres signaux ) se font en un seul cycle d’écriture CPU.
Cycle d’écriture de données EPP : Data_Write Cycle
1. Le programme demande une écriture ( I/O CYCLE ) à l’adresse du port parallèle ADR+4 (EPP Data Port)
2. La ligne /write de la liaison parallèle est activée et les données placées en ligne.
3. Le /DataStrobe est activée pour signaler leur validité, en conséquence /WAIT est mis bas automatiquement par le périphérique
4. Le port parallèle attend la remontée de /WAIT comme acquittement par le périphérique.
5. Le /DataStrobe est désactivé ce qui est la fin du cycle EPP.
6. Le cycle ISA d’I/O est fini d’où l’évolution de /IOW
7. /WAIT est mis bas par le périphérique pour indiquer qu’un nouveau cycle peut commencer.
La nouveauté importante est dans le fait que le transfert complet d’une donnée ( avec gestion de validité, acquittement ) se déroule sur un seul cycle d’entrée/sortie ISA. Ainsi on arrive à 2Mo/s. On est proche du fonctionnement d’une carte interne ISA ( 6 Mo/s ). Avec les handshakes imbriqués, la vitesse sera fixée par le terminal le moins rapide.
La
notion de Handshakes imbriqués signifie que chaque transition d’un signal de
contrôle est acquittée par un signal de l’autre côté de l’interface. Sur le
diagramme précédent, on voit que
/DataStrobe évolue parce que /WAIT est bas,
/WAIT remonte en réponse à la descente de /DataStrobe,
/DataStrobe remonte en réponse à la remontée de /WAIT,
/WAIT descend en réponse à la remontée de /DataStrobe.
Remarque : On trouve des composants EPP qui ne respectent pas
exactement la norme IEEE1284 définissant EPP
( Au début du cycle, /DataStrobe ou /AddrStrobe prendra son état sans
s’occuper de /WAIT. Le périphérique ne peut pas bloquer le début de cycle en
maintenant /WAIT. C’est la version EPP des premiers contrôleurs Intel 82360 ).
Exemple
d’un cycle Address_Read.
On retrouve les 3 registres de SPP auxquels on en ajoute 2 autres . Pour un port // installé à l’adresse ADR :
Nom |
Adresse |
Mode |
Read/Write |
Description |
Registre de données SPP |
ADR |
SPP/EPP |
W |
Port de données
standard SPP. Pas de gestion automatique ( autostrobing ). |
Registre d’état
SPP |
ADR+1 |
SPP/EPP |
R |
Lecture des entrées d’état de l’interface. |
Registre de contrôle SPP |
ADR+2 |
SPP/EPP |
W |
Ecriture des sorties de contrôle. |
Registre
d’adresse EPP |
ADR+3 |
EPP |
R/W |
Lance un cycle d’écriture ou de lecture d’adresse avec gestion automatique. |
Registre de données EPP |
ADR+4 |
EPP |
R/W |
Lance un cycle d’écriture ou de lecture de données avec gestion automatique. |
Non défini |
ADR+5 à +7 |
EPP |
N/A |
Utilisé selon fabricants de périphériques. Peut être utilisé pour entrées/sorties 16 ou 32 bits. |
En générant une simple
instruction d’écriture en ADR+4, le contrôleur EPP génère automatiquement les
signaux de Handshake et de Strobe nécessaires pour que le transfert suive le
cycle EPP Data_Write.
Des accès aux registres
SPP ( en ADR, ADR+1, ADR+2 ) amènent un comportement identique au modes définis
auparavant. Cela garantit la
compatibilité avec les vieux systèmes.
Un accès au registre
d’adresse EPP ( ADR+3 ) créera un cycle de lecture ou écriture
d’ « adresse » selon /WRITE.
Le mode EPP en plus d’automatiser par le matériel la gestion de liaison ce qui permet des débits plus élevés, des logiciels moins lourds, permet aussi le mélange facile de cycles de lecture et d’écriture ainsi que le transfert de blocs par les cycles d’adresse.
Mode ECP ( Extended
Capability Port )
Le port ECP proposé par HP et Microsoft permet en plus des performances de transmission du mode EPP de définir un protocole d’échange d’informations de gestion du matériel.
Le protocole ECP autorise les cycles suivants dans les 2 sens :
- Cycle de données
- Cycle de commandes -> Comptage RLE ( Compression Run Lenght Encoding ).
-> Adressage de canal.
La
réalisation est standardisée, définie dans le document Microsoft "The IEEE 1284 Extended Capabilities Port
Protocol and ISA Interface Standard".
ECP introduit la possibilité de
compression RLE avant transmission, d’utilisation de mémoires FIFO et
d’utilisation de transfert DMA ( Direct Memory Access ).
La compression en temps réel
permet d’atteindre des taux de 64 pour les liaisons avec imprimante ou scanner
( image présentant des parties de pixels similaires ).
L’adressage de canal permet
d’adresser plusieurs appareils logiques sur une seule liaison physique ( exemple d’un appareil faisant
fax/modem/imprimante ou scanner/imprimante ). On peut utiliser les différentes
fonctions de l’appareil en même temps.
Signal SPP |
Nom
du signal ECP |
In/Out |
Description – Utilisation
lors d’un transfert ECP |
/STROBE |
HostClk |
Out |
Utilisé avec PeriphAck pour transférer information sortante concernant donnée ou adresse. |
/AUTOFEED |
HostAck |
Out |
Fourni Command/Data status en sortie. Utilisé avec PeriphClk pour transférer des données entrantes. |
/SELECTIN |
1284Active |
Out |
Mis haut quand le PC est en mode de transfert 1284. |
/INIT |
/ReverseRequest |
Out |
Mis bas pour mettre le canal en direction inverse. |
/ACK |
PeriphClk |
In |
Utilisé avec HostAck pour transférer des données entrantes. |
BUSY |
PeriphAck |
In |
Utilisé
avec HostClk pour transférer information sortante concernant donnée ou adresse. Fourni Command/Data status en entrée. |
PE |
/AckReverse |
In |
Mis bas pour acquitter /ReverseRequest. |
SELECT |
Xflag |
In |
Drapeau d’extensibilité ( Extensibility flag ). |
/ERROR |
/PeriphRequest |
In |
Mis bas par le périphérique pour indiquer qu’une donnée entrante est disponible. |
Data[8:1] |
Data[8:1] |
Bi-Directionnel |
Echange des données. |
Quand HostAck est haut, cela indique un cycle de données.
Quand HostAck est descendu, cela indique un cycle de
commandes.
Les données sont alors soit un comptage RLE ( si bit8=0 ),
soit une adresse de canal ( Si bit8=1 ).
Transitions dans un transfert sortant:
1. Le PC place les données sur les lignes de données, indique qu’il lance un cycle de données avec HostAck à 1.
2. Le PC descend HostClk pour indiquer que les données en ligne sont valides.
3. Le périphérique acquitte en montant PeriphAck.
4. Le PC monte HostClk. Le front montant déclenche la lecture par le périphérique.
5. Le périphérique descend PeriphAck pour indiquer qu’il est prêt à un octet suivant.
6. Le cycle recommence sauf que cette fois c’est un cycle de commandes car HostAck est bas.
1. Le PC demande un canal entrant en descendant /ReverseRequest.
2. Le périphérique donne son accord en descendant /AckReverse.
3. Le périphérique place les données sur les lignes de données et indique un cycle de données en montant PeriphAck.
4. Le périphérique descend PeriphClk pour indiquer que les données en ligne sont valides.
5. Le PC acquitte en montant HostAck.
6. Le périphérique monte PeriphClk. Sur le front montant, le PC lit la données.
7. Le PC descend HostAck pour indiquer qu’il est prêt à un octet suivant.
8. Le cycle se répète sauf que c’est un cycle de commandes car PeriphAck est bas.
Contrairement à EPP, les signaux I/O READ ou WRITE ne sont
pas représentés sur les schémas précédents car ECP utilise des FIFO qui
permettent de découpler les transfert internes au PC ( bus ISA, DMA,… ) avec
les transferts sur la liaison parallèle.
On constate aussi que contrairement à EPP où l’on peut
mixer entrées et sorties sans dialogue ou ajout de données, en mode ECP, un
changement de direction doit être négocié. Le PC demande un transfert sur canal
entrant en descendant /ReverseRequest et attend ensuite l’acquittement du
périphérique par mise à 0 de /AckReverse. C’est une complication du logiciel de
gestion surtout si on interrompt une liaison DMA. ECP n’est donc pas fait pour
les alternances de direction sur des petits transferts mais pour des gros.
On
définit différents modes de fonctionnement à l’intérieur du mode ECP :
Mode |
Description |
000 |
SPP mode |
001 |
Mode Bidirectionnel (Byte mode) |
011 |
Mode ECP |
110 |
Test mode |
111 |
Configuration mode |
Autres |
Selon
l’utilisation de FIFO |
Le registre ECR ( Extended Control Register ) permet de définir le mode de fonctionnement. Il permet aussi de savoir si le matériel est apte au mode ECP.
Bit
7 |
Bit
6 |
Bit
5 |
Bit
4 |
Bit
3 |
Bit
2 |
Bit 1 |
Bit 0 |
Mode ( selon tableau
précédent ) |
Interruption ECP |
Autorisation mode DMA |
Bit de service ECP |
FIFO pleine |
FIFO Vide |
Description des registres en mode ECP d’un port installé en ADR :
Offset |
Nom |
Read/Write |
Mode de fonctionnement |
Fonction |
ADR |
Données |
R/W |
000-001 |
Registre de données |
ADR |
EcpAfifo |
R/W |
011 |
FIFO d’adresses ECP |
ADR+1 |
dsr |
R/W |
Tous |
Registre d’état |
ADR+2 |
Dcr |
R/W |
Tous |
Registre de contrôle |
ADR+400h |
CFifo |
R/W |
010 |
FIFO des données du port parallèle |
ADR+400h |
EcpDfifo |
R/W |
011 |
FIFO des données ECP |
ADR+400h |
Tfifo |
R/W |
110 |
FIFO de test |
ADR+400h |
CnfgA |
R |
111 |
Registre de configuration A |
ADR+401h |
CnfgB |
R/W |
111 |
Registre de configuration B |
ADR+402h |
Ecr |
R/W |
Tous |
Registre ECR ( Extended Control Register ) |
Le mode ECP est défini par le BIOS.
Puis un mode de fonctionnement est défini dans le registre ECR ( bits 7 à 5 ).
V) Aspects électriques d’une liaison bidirectionnelle
Comme pour n’importe quelle liaison on doit assurer un minimum de perturbations afin d’atteindre le meilleur débit ( pas trop de résistances internes, d’effets capacitifs qui font un filtrage RC ).
L’autre problème est la gestion du sens de transmission. En liaison série, on dispose d’un fil RX de réception, d’un fil TX d’émission. En revanche la liaison parallèle bidirectionnelle consiste à gérer le sens sur une même fil.
Le port parallèle de PC originel n’avait pas de spécification ( ni driver, terminaison de ligne, capacité ) permettant de garantir la compatibilité.
Les dernières normes IEEE1284 concernant le port parallèle de PC définissent 2 niveaux d’interface.
- Niveau I : Pour les liaisons bas débit mais nécessitant les 2 sens de transmission.
- Niveau II : Pour les hauts débits, les longs câbles.
Nous verrons ici seulement le
niveau II, le plus exigeant. Les caractéristiques sont :
Pour l’émetteur :
- En circuit
ouvert, le niveau haut ne doit pas dépasser +5,5V, le niveau bas –0,5V.
- VOH
> 2,4V pour I = 14mA, VOL < 0,4V pour I = 14mA,
-
La résistance de sortie après connecteur Ro = 50 +/- 5 W
-
Le slew rate doit être entre 0,05 et 0,40 V/ns.
Pour le récepteur :
- Le récepteur
doit accepter des pics de tension entre –2V et +7V sans dommage.
- Les
niveaux de décisions doivent être tels que
VIH < 2V et VIL > 0,8V.
-
Le récepteur doit avoir en entrée une hystérésis de plus de 0,2V, de moins de
1,2V.
- Le
courant de fuite au niveau haut ne dépasse pas 20µA à 2V.
-
Le courant d’entrée au niveau bas ne dépasse pas 20µA à 0,8V.
-
La capacité équivalente d’entrée doit être inférieure à 50pF.
La figure suivante présente la terminaison recommandée. Ro représente l’impédance de sortie après connecteur. On suppose qu’il y a adaptation d’impédance avec le câble ( Rs sert à arriver à ce résultat ).
Si l’on intègre la liaison bidirectionnelle, on arrive à la liaison
suivante :
VI) Négociation du type de liaison parallèle
Comme un périphérique n’est pas sensé supporter tous les modes de fonctionnement du port parallèle, il va falloir détecter les modes possibles et se mettre d’accord sur l’utilisation d’un d’eux.
Pour cela on réalise une négociation initiée par l’hôte : Séquence d’événements auxquels un ancien périphérique ne répondra pas alors qu’un périphérique supportant les modes récents répondra..
Durant la négociation, l’hôte place une requête ( code = extensibility data byte ) sur les fils de donnée et lance la séquence :
Différentes phases lors de la négociation IEEE1284:
1. L’hôte place la requête ( extensibility data byte ) sur les fils de données.
2. Il met /SelectIn à l’état haut /AutoFeed bas pour indiquer une séquence de négociation.
3. Un périphérique 1284 répondra en mettant /Ack bas, /Error, PE et Select hauts.
Un périphérique ancien ne répondra pas.
4. L’hôte met /Strobe à l’état bas. Cela sert à indiquer que l’Extensibility byte peut être lu.
5. L’hôte met /Strobe et /AutoFeed à l’état haut pour dire au périphérique qu’il l’a reconnu comme capable des modes 1284.
6. Le périphérique répond en mettant PE bas, /Error bas si il peut émettre des données ( canal entrant l’hôte ) et Select à l’état haut si le mode demandé par l’hôte est réalisable ou Select bas sinon.
7. Le périphérique met /Ack à l’état haut pour indiquer la fin de la négociation et sa capacité à communiquer dans le mode choisi.
Remarque: XFlag ( Select ) sert au périphérique à indiquer que le
mode demandé est possible. Il sera toujours à 1
si c’est le cas
( Etape 6 de la figure précédente ) sauf pour un canal de retour en mode
quartet ( Nibble ).
En effet tout
appareil doit le supporter de toute façon, c’est le mode de base du canal de
retour..
Le code émis ( extensibility byte ) permet de demander un mode de transfert mais aussi de demander au périphérique de s’identifier.
Négociation et identification d’un périphérique permettent d’avoir un système performant permettant un rattachement facile des périphériques par le port parallèle.
Remarque : Il est déjà prévu de nouvelles évolutions par des liaisons améliorées ( Extensibilty link ).
Valeurs possibles l’octet d’extensibilité ( extensibility byte ) :
Description |
Valeurs valides |
|
Demande une liaison
« améliorée » (
Extensibility Link ) |
1000 0000 |
|
Demande de mode EPP |
0100 0000 |
|
Demande de mode ECP
avec RLE |
0011 0000 |
|
Demande de mode ECP
sans RLE |
0001 0000 |
|
Réservé |
0000 1000 |
|
Demande
d’identification ( Device ID ) |
Avec retour des données par le mode: |
|
Quartet ( Nibble ) |
0000 0100 |
|
Octet ( Byte ) |
0000 0101 |
|
ECP sans RLE |
0001 0100 |
|
ECP avec RLE |
0011 0100 |
|
Réservé |
0000 0010 |
|
Mode Octet |
0000 0001 |
|
Mode quartet |
0000 0000 |
VI) Câble parallèle direct
Un cas particulier de liaison parallèle est la connexion directe comme le NULL MODEM en liaison série. Le but est de supprimer toute la procédure de contrôle.
Voir td