Les Secrets de l'interface parallele

1. Pour trouver l'adresse du port

Rappel : On peut connaitre l'adresse des ports parallele en regardant le contenu de l'adresse systeme 000408H a 00040FH.

000408H a 00040FH = adresses entree- Sortie (2 octets) pour les interfaces paralleles LPT1, LPT2, LPT3, LPT4 respectivement.

  • 000408H = adresse Entree/Sortie voie logique No0 = LPT1
  • 00040AH = adresse Entree/Sortie voie logique No1 = LPT2
  • 00040CH = adresse Entree/Sortie voie logique No2 = LPT3
  • 00040EH = adresse Entree/Sortie voie logique No3 = LPT4

    Attention! : l'affectation du numero de la voie (LPTx) est realisee par le BIOS dans l'ordre des voies effectivement presentes aux adresses 03BCH, 0378H, 0278H. Par exemple s'il n'existe qu'une interface a l'adresse 0278H, celle-ci est affectee a LPT1.

  • 000478H a 00047BH = Time-out (1octet) des imprimantes No0, No1, No2, No3 respectivement.

    ******** POUR CONNAITRE L'ADRESSE DE VOTRE PORT PARALLELE : *******

    Taper debug <RETURN>
    Taper d 0:400 <RETURN>
    

    L'ecran affiche :

    C:\> debug               commande
    -d 0:400                 commande
    0000:0400  F8 03 00 00 00 00 00 00-78 03 00 00 00 00 00 00
    0000:0410  33 02 C1 80 02 00 41 80-00 00 26 00 26 00 34 05
    0000:0420  30 0B 30 0B 0D 1C 73 1F-0D 1C 64 20 65 12 62 30
    0000:0430  75 16 67 22 0D 1C 64 20-20 39 30 0B 3A 34 01 00
    0000:0440  8C 00 4B 01 07 35 00 B1-20 07 50 00 00 40 00 00
    0000:0450  00 08 00 00 00 00 00 00-00 00 00 00 00 00 00 00
    0000:0460  0C 0B 00 B4 03 29 00 03-00 00 E0 FF 17 40 16 00
    0000:0470  00 00 00 00 00 02 B1 00-14 14 14 14 01 01 01 01
    -q
    C:\>
    
    Les 8 premiers octets sont les adresses des ports serie :
    F8 03 00 00 00 00 00 00        (ici adresse 03F8 Hexa)
    COM1  COM2  COM3  COM4        il n'y a qu'un port serie
    
    Les 8 octets suivants sont les adresses des ports paralleles :
    78 03 00 00 00 00 00 00
    LPT1  LPT2  LPT3  LPT4
    

    Dans l'exemple : l'adresse de LPT1 (premier port //) est 0378 Hexa (il faut inverser les octets deux a deux). Il n'y a pas d'autre port car les autres octets sont tous a 00.

    2. Generalite

    Cette interface parallele, comprend :

  • 1 registre de donnees,
  • 1 registre de commande,
  • 1 port de controle.

    Elle occupe trois adresses :

    --------------------------------------------------------------------
    |                             |   INTERFACE PARALLELE CENTRONICS   |
    |         Adresse E/S          -------------------------------------
    |   soit      ou         ou   |Designation du registre    |Mode L/E|
    --------------------------------------------------------------------
    |  03BCH  |  0378H  |  0278H  |Registre de donnees  8 bits|   L/E  |
    |  03  H  |  0379H  |  0279H  |Port de controle 5 bits    |    L   |
    |  03  H  |  037AH  |  027AH  |Registre de commande 5 bits|    E   |
    --------------------------------------------------------------------
    

    Dans la suite nous parlerons des registres 0378H, 0379H et 037AH, mais les commentaires sont valables pour un autre port si en vous utilisez.

    Le sequencement des signaux d'echange avec l'imprimante est realise avec les registres et le port de controle ; la temporisation necessaire pour l'adaptation avec differentes vitesses de transmission est realisee au niveau du logiciel (parametre time-out); en effet, sauf pour certaines applications, le logiciel n'utilise pas l'interface parallele en mode d'interruption.

    L'avantage du port // est qu'il existe des signaux en entree et en sortie par lecture ou ecriture simplement. On peut les utiliser pour n'importe quoi, meme une imprimante !. Sur les micros PS2 IBM, les donnees D0 a D7 sont bidirectionnelles alors que sur PC/AT il est en sortie uniquement. Dans ce cas les bits de controle peuvent etre utilise comme une entree.

    2. Description des registres

    Registre de donnees : 0378H (lecture/ecriture)

    L'ecriture a cette adresse provoque la memorisation des donnees sur le port de donnees de l'imprimante. Une lecture a cette adresse provoque le transfert du port de donnees imprimante sur le bus de donnees de l'unite centrale.

    Registre de commande : 037AH (lecture/ecriture)

     -----------------------------------------------------------------------
     |             REGISTRE DE COMMANDE INTERFACE PARALLELE                |
     -----------------------------------------------------------------------
     |   b7  |   b6  |   b5  |   b4   |   b3    |   b2   |   b1   |   b0   |
     -----------------------------------------------------------------------
     |   x   |   x   |   x   |  IRQEN |SELECTIN*|  INIT* | AUTOFD*| STROBE*
     -----------------------------------------------------------------------
                                 |    -------------------------------------
                                 |               Signaux de commande
                                 |               envoyes sur
                                 |               l'interface parallele
                                 |
                           IRQEN  : (IRQ Enable : validation interruption)
                                   _0 = interruption masquee
                                   _1 = interruption valide (interrution
                                        generee sur le front montant, du
                                        signal ACK*)
    

    Port de controle : 0379H (lecture)

     -----------------------------------------------------------------
     |            PORT DE CONTROLE INTERFACE PARALLELE               |
     -----------------------------------------------------------------
     |   b7  |   b6  |   b5  |   b4  |   b3  |   b2  |   b1  |   b0  |
     -----------------------------------------------------------------
     |  BUSY |  ACK* |   PE  | SELECT| ERROR*|   x   |   x   |   x   |
     -----------------------------------------------------------------
     -----------------------------------------
                   Lecture des signaux d'etat
                   de l'interface parallele ;
                   ces bits ne sont pas memorises
    
    Un front montant du signal ACK* genere une demande d'interruption, si cette demande d'interruption n'est pas masquee (bit IRQEN* du registre de commande).

    4. Interface electrique

    Les niveaux de tous les signaux sont compatibles TTL.
                                           Connecteur type HE5 25pts femelle.
    ----------------------------------------------------    -------------
    |   BROCHAGE INTERFACE IMPRIMANTE Connecteur J13   |    |     O     |
    ----------------------------------------------------    | -------\ |
    |Broche| Signal |Mode E/S||Broche| Signal |Mode E/S|   1| |o     o| |14
    ----------------------------------------------------   2| |o     o| |15
    |   1  |PSTROBE*|    S   ||  14  |PAUTOFD*|    S   |   3| |o     o| |16
    |   2  | PDATA0 |    S   ||  15  |PERROR* |    E   |   4| |o     o| |17
    |   3  | PDATA1 |    S   ||  16  | PINIT* |    S   |   5| |o     o| |18
    |   4  | PDATA2 |    S   ||  17  |PSLCTIN*|    S   |   6| |o     o| |19
    |   5  | PDATA3 |    S   ||  18  | |      |        |   7| |o      | |
    |   6  | PDATA4 |    S   ||  19  | |      |        |   8| |o     o| |20
    |   7  | PDATA5 |    S   ||  20  | |      |        |   9| |o     o| |21
    |   8  | PDATA6 |    S   ||  21  | | masse|        |  10| |o     o| |22
    |   9  | PDATA7 |    S   ||  22  | |      |        |  11| |o     o| |23
    |  10  |  PACK* |    E   ||  23  | |      |        |  12| |o     o| |24
    |  11  |  PBUSY |    E   ||  24  | |      |        |  13| |o     o| |25
    |  12  |   PE   |    E   ||  25  | |      |        |    | --------/ |
    |  13  | PSLCT* |    E   ---------------------------    |     O     |
    --------------------------                              -------------
                  Brochage connecteur parallele
    
    • PACK* : etat actif (impulsion de quelques micro.sec) ce signal indique que la donnee a ete prise en compte par l'imprimante
    • PAUTOFD* : (Alimentation automatique) a l'etat bas, ce signal commande le moteur avance papier (saut d'une ligne a chaque impulsion). L'ecriture d'un 1 dans le bit AUTOFD* du registre de commande interface provoque un saut de ligne automatique a chaque retour chariot; ce bit doit etre mis a zero si l'imprimante gere le saut de ligne automatique ou si le fichier a imprimer contient deja un saut de ligne avec chaque retour chariot.
    • PBUSY : (Occupe) Ce signal a l'etat actif (etat haut) indique que l'imprimante est occupee et que les donnees ne peuvent pas etre prises en compte
    • PDATA0 a PDATA7 : Lignes de donnees les donnees sont transmises sur 8 bits (code ASCII etendu)
    • PERROR* : Actif a l'etat bas, ce signal indique que l'imprimante est en etat d'attente a la suite de la detection d'une erreur (par exemple fin de papier)
    • PINIT* : Actif a l'etat bas, ce signal reinitialise l'electronique de l'imprimante (50 micro.sec minimum suivant le type d'imprimante).
    • PE : (Paper End Fin de papier) a l'etat haut, ce signal indique la detection par un capteur de la fin du papier
    • PSLCTIN* : A l'etat bas, ce signal valide le fonctionnement de l'imprimante
    • PSLCT* : A l'etat haut, ce signal indique que l'imprimante est prete pour recevoir une donnee (pas d'erreur et imprimante en service).
    • PSTROBE* : Actif a l'etat bas, ce signal permet d'echantillonner la donnee presente sur les lignes de donnees

    5. Connexion d'une imprimante parallele

    ORDINATEUR                                            IMPRIMANTE
    (connecteur HE5, 25 pts)                         (connecteur 36 pts
                                                      type Centronics)
    PSTROBE*         1 ----------------------------> 1       STROBE*
    PDATA0 a 7   2 a 9 ----------------------------> 2 a 9   D0 a D7
    PACK*           10 <---------------------------- 10      ACK*
    PBUSY           11 <---------------------------- 11      BUSY
    PE              12 <---------------------------- 12      PE
    PSLCT*          13 <---------------------------- 13      SELECT*
    PAUTOFD*        14 ----------------------------> 14      AUTO FEED*
    PERROR*         15 <---------------------------- 32      ERROR*
    PINIT*          16 ----------------------------> 31      INIT*
    PSLCTIN*        17 ----------------------------> 36      SELECT IN*
    masse      18 a 25 ----------------------------- 19 a 30 masse
    
                               -------------
                               |     O     |
                               | --------- |
                               | --------- |
                     STROBE*  1| ||     || |19 masse
                       DATA0  2| ||     || |20 masse
                       DATA1  3| ||     || |21 masse
                       DATA2  4| ||     || |22 masse
                       DATA3  5| ||     || |23 masse
                       DATA4  6| ||     || |24 masse
                       DATA5  7| ||     || |25 masse
                       DATA6  8| ||     || |26 masse
                       DATA7  9| ||     || |27 masse
                        ACK* 10| ||     || |28 masse
                        BUSY 11| ||     || |29 masse
                          PE 12| ||     || |30 masse
                        SLCT 13| ||     || |31 INIT*
                  AUTO FEED* 14| ||     || |32 ERROR*
                             15| ||     || |33 masse
                       masse 16| ||     || |34
                     chassis 17| ||     || |35
                         +5V 18| ||     || |36 SLCTIN*
                               | --------- |
                               | --------- |
                               |     O     |
                               -------------
              Brochage connecteur type Centronics 36pts
    

    6. Procedure de commande de l'imprimante

    L'interface Centronics est une interface parallele entre le micro-ordinateur et une imprimante.

    Les caracteres sont envoyes a l'imprimante en code ASCII.

    La synchronisation et le dialogue sont assures par trois signaux : STROBE*, ACK* et BUSY.

    PROCEDURE DE COMMANDE
              ------------                ------------
    DONNEES --            ----------------            ----------------
              <T1><T2>                    <T1><T2>
            ------    ------------------------    --------------------
    STROBE*       ----<T3>                    ----<T3>
                     ---------------                  ------------
    BUSY    -----------------       ------------------            ----
            ------------------------  ----------------------------  --
    ACK*                           ----                          ----
                                   >--<2,5 a 30 mic.s
                                      -------                       --
    IRQ     ---------------------------     -------------------------
    

    Les valeurs de temps sont donnees a titre indicatif ; elles dependent du type d'imprimante et de son mode de fonctionnement.

    • ENVOI D'UN CARACTERE A L'IMPRIMANTE : La ligne BUSY etant a 0, l'imprimante accepte un caractere. Le code ASCII du caractere est presente en parallele sur le bus de donnees de l'imprimante.
    • Apres le temps T1 (Set Up Time = 1micro.sec au minimum), le systeme fait passer le signal STROBE* a 0. Sur le front de descente de ce signal, le code du caractere est pris en compte par l'imprimante. Le bus de donnees doit conserver le code caractere au moins pendant T2+T3 (Strobe + Hold Time) : avec T2 = 0,5 a 500micro.sec, et T3 = 0,5micro.sec minimum.
    • REPONSE DE L'IMPRIMANTE : L'imprimante repond en faisant passer la ligne BUSY a 1 pour signaler qu'elle n'accepte pas d'autre caractere. Ce signal indique l'etat de l'imprimante.
    • Par un signal ACK* (impulsion de 5 micro.s a 30 micro.s), elle signal que la donnee a ete prise en compte et qu'une autre donnee peut etre acceptee.