Menu Général                                                    Encore plus V24 du CCITT
Le port série des PC et Compatibles: RS232

http://www.eprat.com/DOCS/serie.htm


Le port série permet un grand nombre d'applications avec une faible contraite d'encombrement au point de vue fils de connexions. Ce petit texte de description est tiré du livre Montages Avancés Pour PC. Vous pouvez le copier à condition de le garder intact. Afin d'améliorer ce document, toutes les suggestions sont bienvenues.
  Complémént Rs232c    - com 1, 2, 3, et 4 sur PCAcrobat reader

Introduction   - 


La prise série est généralement utilisée en conjonction avec une souris ou un modem. Ce port a l'avantage d'être compact et de ne posséder que quelques signaux utiles. Plus difficile à mettre en oeuvre que le port parallèle, la prise série se révèle cependant plus puissante et plus universelle. 

Géométrie


A l'origine, tous les compatibles PC possèdent 2 ports séries: COM1 et COM2. L'un d'entre-eux se présente sous la forme d'une prise DB9 mâle et le deuxième, sous la forme d'une DB25 mâle.
DB9 Mâle (vue de devant)
-------------
\ 1 2 3 4 5 / 
 \ 6 7 8 9 / 
  --------- 
 
DB25 Mâle (vue de devant) 
------------------------------  
\ 1  2  3  4  5  7  8 ... 13 /  
 \ 14 15 16 17 18 .......25 / 
  -------------------------- 

Description et attribution des signaux


Broche DB9      Borche DB25     Nom
-----------------------------------
1               8               DCD
2               3               RX
3               2               TX
4               20              DTR
5               7               GND
6               6               DSR
7               4               RTS
8               5               CTS
9               22              RI
  • DCD (Data Carrier Detect): cette ligne est une entrée active haute. Elle signale à l'ordinateur qu'une liaison a été établie avec un correspondant.
  • RX (Receive Data): cette ligne est une entrée. C'est ici que transitent les informations du correspondant vers l'ordinateur.
  • TX (Transmit Data): cette ligne est une sortie. Les données de l'ordinateur vers le correspondant sont vehiculées par son intermédiaire.
  • DTR (Data Terminal Ready): cette ligne est une sortie active haute. Elle permet à l'ordinateur de signaler au correspondant que le port série a été libéré et qu'il peut être utilisé s'il le souhaite.
  • GND (GrouND): c'est la masse.
  • DSR (Data Set Ready). Cette ligne est une entrée active haute. Elle permet au correspondant de signaler qu'une donnée est prête.
  • RTS (Request To Send): cette ligne est une sortie active haute. Elle indique au correspondant que l'ordinateur veut lui transmettre des données.
  • CTS (Clear To Send): cette ligne est une entrée active haute. Elle indique à l'ordinateur que le correspondant est prêt à recevoir des données.
  • RI (Ring Indicator): cette ligne est une entrée active haute. Elle permet à l'ordinateur de savoir qu'un correspondant veut initier une communication avec lui.
         D'un point de vue électronique, les signaux TX et RX en sortie des prises répondent aux normes RS232C, c'est à dire:
1 logique compris entre -3 et -25V, 
0 logique compris entre +3 et +25V.

Programmation


La programmation du port série passe par la description de son fonctionnement et par une petite explication des protocoles de transmission. Les PC possèdent en général deux ports série: COM1, généralement réservé à l'indispensable souris, et COM2 utilisé parfois en conjonction avec un modem externe.

Le fonctionnement d'une liaison série

La communication série nécessite trois fils au minimum: une masse pour référencer les signaux, un fil émetteur et un fil récepteur. Notre liaison série est en effet full-duplex, c'est à dire que l'on peut émettre et recevoir en même temps (comme le téléphone par exemple).

 La différence principale entre le port parallèle et le port série est que les informations ne sont pas transmises simultanément sur des fils séparés (D0 à D7) mais les unes après les autres sur un même fil. Cela amène une économie de câble (un fil au lieu de 8) mais un montage décodeur devient nécessaire pour retransformer les données sérialisées.

 La figure ci-dessous montre comment l'octet 10110101 est transformé pour être transmis sur un seul fil. Vous voyez qu'en plus de l'information utile (10110101) se greffent d'autres bits comme le bit de start. Ces bits sont utiles pour la synchronisation de l'émetteur et du récepteur.

          LSB     1011010 en serie      MSB
           _______________________________
          /                               \
1 _____   _____   _____   _________   _________
      |   |   |   |   |   |   |   |   |   |   |
      |   | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 1 |   |
0     |___|   |___|   |___|   |   |___|   |   |____
      \___/                               \___/
      START                               STOP        
En effet, la liaison série est totalement asynchrone. Aucune horloge n'est transmise. Il faut donc se mettre d'accord sur la vitesse de transfert des bits et rajouter des bits de synchronisation.

 Voici un petit résumé des différents paramètres rentrant en jeu lors d'une communication série:

  • longueur de mot: sur le PC, le BIOS ne permet une longueur de mot que de 7 ou 8 bits.
  • Parité: le mot transmis peut être suivi d'un bit de parité qui sert à détecter les erreurs éventuelles de transmission. Il existe deux parités: la parité paire et la parité impaire. Dans le cas de la parité paire, et pour le mot 10110101 contenant 5 états à 1, le bit de parité sera 1 amenant ainsi le nombre total de 1 à un nombre pair (6). Dans le cas de la parité impaire, le bit de parité aurait été 0 car le nombre total de 1 est déjà impair. L'intérêt de ce rajout est le suivant: si jamais lors de la transmission un état 1 est transformé en état 0 (perturbation du canal par des parasites par exemple) le nombre total de 1 change et donc le bit de parité recalculé par le récepteur ne correspond plus à celui reçu. L'erreur est donc détectée. Evidemment, si deux états à 1 passent à 0, l'erreur ne sera pas détectée mais la probabilité pour que cela arrive est très faible.
  • Bit de start: lorsque rien ne circule sur la ligne, celle-ci est à l'état haut. Pour indiquer qu'un mot va être transmis, la ligne passe à bas avant de commencer le transfert. Cette précaution permet de resynchroniser le récepteur.
  • Bits de stop: ces bits signalent la fin de la transmission. Selon le protocole utilisé, il peut y avoir 1, 1.5, ou 2 bits de stop (ces bits sont toujours à 1).
  • Vitesse de transmission: la plupart des cartes série permettent de choisir une vitesse entre 300 et 9600 bauds (par exemple à 300 bauds, un bit est transmis tout les un trois-centième de seconde). Les cartes récentes proposent des vitesses jusqu'à 115200 bauds. Ces vitesses ne vous paraissent peut-être pas énormes mais il faut garder à l'esprit que la liaison série est avant tout pensée pour les liaisons téléphoniques par modems, dont la bande passante est très limitée.

Les protocoles de transmission

On ne peut réussir une transmission qu'à partir du moment où l'émetteur et le récepteur

 se sont entendu sur la vitesse, le nombre de bit de stop, la longueur du mot et la parité. A ce niveau là, savoir à quel voltage correspond un état haut n'a aucune importance.

 D'une manière générale, la parité est toujours présente car elle permet de détecter la plus grande partie des erreurs de transmission.

Exemple de protocole: la figure ci-dessous montre la transmission du caractère " A " (01000001 en binaire) avec un protocole prévoyant 8 bits de données, un bit de stop et un contrôle de parité pair. La logique est supposée positive (à un état haut correspond un voltage positif) et la vitesse à été fixée à 1200 bauds.

       1/200 s
      <---> 
1     _____                   _____       _____
      |   |                   |   |       |
      |   |                   |   |       | 
0 ____|   |___________________|   |_______|
   |      
   |  |   |   |   |   |   |   |   |   |   |   |
   |  \_______________________________/ |   |
   |             01000001 = 'A'         |   |
   ----> Start                 Parite <--   --> Stop

Programmation du port série

L'accès aux registres contrôlant les ports série se fait par l'intermédiaire de l'interruption DOS 14h. A cette IT correspond 4 fonctions permettant de configurer et de contrôler l'interface série, dont voici les descriptions complètes.

Fonction 0x00: Initialisation de l'interface série Permet de fixer le protocole de transmission. Entrée: AH = 0x00                                DX = Numéro de l'interface série                         0x00 = COM1                                              0x01 = COM2                 AL = Paramètres de configuration                         Bits 0-1: longueur du mot                                 10 = 7 bits                                 11 = 8 bits                         Bit 2: nombre de bits de stop                                 0 = 1 bit de stop                                 1 = 2 bits de stop                         Bit 3-4: contrôle de parité                                 00 = aucun                                 01 = impair                                 11 = pair                         Bit 5-7: vitesse de transmission                                 000 = 110 bauds                                 001 = 150 bauds                                 010 = 300 bauds                                 011 = 600 bauds                                 100 = 1200 bauds                                 101 = 2400 bauds                                 110 = 4800 bauds                                 111 = 9600 bauds Sortie:         AH = Etat de l'interface série                         Bit 0: données prêtes                         Bit 1: données effacées                         Bit 2: erreur de parité                         Bit 3: violation de protocole                         Bit 4: interruption détectée                         Bit 5: transmission Hold Register vide                         Bit 6: transmisison Shift Register vide                         Bit 7: time out (le périphérique ne répond pas)                 AL = Etat du modem                         Bit 0: (delta) modem prêt à émettre                         Bit 1: (delta) modem activé                         Bit 2: (delta) sonnerie                         Bit 3: (delta) liaison établie                         Bit 4: modem prêt à émettre                         Bit 5: modem activé                         Bit 6: sonnerie                         Bit 7: liaison établie                 (les bits delta montrent une modification par rapport au dernier                 appel de la fonction)
Fonction 0x01: Emission de caractères Entrée: AH = 0x01                 DX = Numéro de l'interface série (voir précedemment)                 AL = Code du caractère à sortir Sortie:         AH =    Bit 7:  0 caractère transmis                                 1 erreur, d'où:                         Bit 0-6 = Etat de l'interface série                                 Bit 0: données prêtes                                 Bit 1: données effacées                                 Bit 2: erreur de parité                                 Bit 3: violation de protocole                                 Bit 4: interruption détectée                                 Bit 5: transmission Hold Register vide                                 Bit 6: transmisison Shift Register vide
Fonction 0x02: Réception de caractères Entrée: AH = 0x02                                DX = Numéro de l'interface série (voir précedemment) Sortie:         AH = Bit 7: 0 caractère reçu, d'où:                 AL = Caractère reçu                         Bit 7:  1 erreur, d'où:                         Bit 0-6: Etat de l'interface série                                 Bit 0: données prêtes                                 Bit 1: données effacées                                 Bit 2: erreur de parité                                 Bit 3: violation de protocole                                 Bit 4: interruption détectée                                 Bit 5: transmission Hold Register vide                                 Bit 6: transmisison Shift Register vide
Fonction 0x03: Tester état Entrée: AH = 0x03                 DX = Numéro de l'interface série (voir précedemment) Sortie:         AH = Etat de l'interface série                         Bit 0: données prêtes                         Bit 1: données effacées                         Bit 2: erreur de parité                         Bit 3: violation de protocole                         Bit 4: interruption détectée                         Bit 5: transmission Hold Register vide                         Bit 6: transmisison Shift Register vide                         Bit 7: time out (le périphérique ne répond pas)                 AL = Etat du modem                         Bit 0: (delta) modem prêt à émettre                         Bit 1: (delta) modem activé                         Bit 2: (delta) sonnerie                         Bit 3: (delta) liaison établie                         Bit 4: modem prêt à émettre                         Bit 5: modem activé                         Bit 6: sonnerie                         Bit 7: liaison établie Remarque: cette fonction doit être appelée avant 0x02 afin de déterminer si un caractère a été reçu. Dans ce cas le bit 0 du registre AH vaut 1.

Afin de mieux saisir l'utilisation de ces fonctions, voici un petit exemple en C effectuant le réglage du protocole à 1200 bauds, 7bits et parité paire.
        pregs.h.ah = 0x00;         /* fonction 0: réglage du protocole */
        pregs.h.al = 0x9A;         /* 7 bits, parité paire, 1200 bauds */
        pregs.x.dx = COM;
        int86(0x14,&pregs,&pregs); /* IT DOS 14 */

Auteurs: Eric Larchevêque et Laurent Lellu Menu Général