Le port série

Introduction

Cet article est paru dans le magazine PC Team numéro 66, mars 2001, au sein de la rubrique “Team pratik” sous rubrique “Électronique”.

pcteam_65

Article

Après le port parallèle, voyons comment fonctionne un autre grand ancien : le port série. Même s’il est aujourd’hui de moins en moins utilisé, il reste encore un standard, notamment dans l’industrie.

Avec le port parallèle, tous les signaux sont transmis les uns à côté des autres dans un câble qui prend bien souvent l’allure d’une nappe. Ce procédé est rapide mais on remarque que la mise en parallèle de fils très proches induit entre eux un couplage par capacité. Pour réduire cet effet, il est possible d’intercaler des fils reliés à la masse entre les fils acheminant les signaux. De plus, un câble représente une charge non négligeable et il est bien souvent utile d’avoir recours à des circuits buffers pour fournir plus de puissance. Ainsi, sur des grandes longueurs, la tension peut chuter au point de ne plus correspondre à la logique TTL (0-5V). Le port série tire là son épingle du jeu : dans le protocole de communication RS232C, les données sont transmises en série (donc sur un seul fil) avec un calibre de tension plus élevé (-12V/+12V).

Brochage et performances

Chaque ordinateur possède deux ports série. Il prennent la forme de deux connecteurs mâles à 9 broches (pour les PC un peu plus anciens, un des deux possède 25 broches), nommés en standard COM1 et COM2. Le schéma ci-contre montre le brochage. A l’origine, le port série était destiné à être connecté à un modem, c’est de là que le nom des broches sont tirés. En effet, seulement trois broches sont nécessaires pour communiquer avec un périphérique (TxD, RxD et la masse), les autres broches n’étant que des signaux de contrôle et d’état.

pcteam_63

Prise DB9 mâle vue de devant

Le port série est très bien protégé contre les courts-circuits (avec une intensité de 20mA) et les broches sont limitées en courant. Ainsi, il est tout à fait possible d’alimenter un petit montage électronique (par exemple les souris séries sont alimentées par la ligne RTS) mais il est quand même préférable d’avoir recourt à une alimentation externe.

Le protocole RS232C

C’est par cette norme qu’il vous est possible de relier deux ordinateurs ensemble (la connexion directe par câble sous Windows), ou encore de communiquer avec un modem, imprimante etc. Ce protocole est dit full duplex car il peut transmettre des données et en recevoir en même temps, via les lignes RxD et TxD. Il est tout à fait possible de n’utiliser que ces deux bornes en plus de la masse (pour la référence), en veillant bien sûr à relier la borne TxD du premier ordinateur à la broche RxD du second et vice versa. Le contrôle du flux de données sera alors totalement logiciel car les bornes annexes du port ne sont pas utilisées. Le mode de communication dit Xon/Xoff est très répandu (avec les imprimantes séries par exemple) et permet de contrôler l’écoulement des données en fixant dans la mémoire deux limites, haute et basse.

Le schéma ci-contre montre un câblage compatible avec la fonction connexion directe par câble intégrée à Windows.

pcteam_63

Un montage simple de test

Pour ce qui est du protocole proprement dit, un exemple de chronogramme possible est présenté ci-contre. On envoie l’octet “11010001” en commençant par le bit de poids faible, sachant que le protocole RS232 peut communiquer un mot compris entre 5 et 8 bits. Viennent ensuite se greffer plusieurs autres bits : le ou les bit(s) de stop (logique 1), l’éventuel bit de parité (parité paire ou impaire, non représenté sur le chronogramme) et enfin le bit de start (logique 0). Ce dernier est nécessaire afin de synchroniser les horloges des deux organes communicants. En effet, il n’y a aucun signal d’horloge pour cadencer la transmission, il faut donc que chaque entité ait été configurée avec la même horloge de référence (le fameux baud). Il est possible de configurer tous ces paramètres sous Windows en allant dans les propriétés du port série. Si vous souhaitez connecter deux PC ensemble, il faut que ces données soient identiques sur les deux ordinateurs.

Les registres et la programmation

Tout comme le port parallèle, le port série possède un certain nombre de registres. Ces registres configurent ce que l’on nomme l’UART (Universal Asynchronous Receiver / Transmitter), le composant qui gère totalement le port série. Vous trouverez la documentation complète de l’UART 16550 sur le CD-Pro. Chaque port série possède une adresse de base (lisible encore une fois dans les paramètres du port) qui est généralement 0x3F8 pour le COM1 et 0x2F8 pour le COM2. Les registres sont, comme à l’accoutumée, accessibles via un offset par rapport à cette adresse de base, ce qui est représenté dans le tableau ci-contre. La documentation (en anglais malheureusement) sur le CD montre en détail le contenu de ces registres ; il est ainsi possible de paramétrer entièrement le port série. La programmation peut se faire dans la plupart des langages.

pcteam_63

Un exemple de câblage et son chronogramme

Le C fournit en standard les fonctions outportb() et inportb() (ou inp et outp dans le compilateur de Microsoft) par l’intermédiaire des librairies conio.h ou pc.h suivant les compilateurs. Pour Visual Basic, il suffit d’inclure la dll Outpout.dll dans un projet pour bénéficier de ces fonctions dans ce langage. Commençons sans plus tarder notre première expérience. On réalise le petit câblage selon le schéma présenté ci contre ; il consiste en une LED que l’on placera où l’on souhaite visualiser l’état d’une sortie et un bouclage entre une sortie et une entrée. L’absence de résistance de limitation peut paraître d’un premier abord dangereux mais celle-ci est inutile car comme nous l’avons dit plus haut, le port série limite les broches de sorties en courant ; point de danger donc. Démarrons ensuite le programme TestSérie.exe qui est une véritable tour de contrôle pour notre port série. Le contenu de tous les registres est affiché en permanence, et, par l’intermédiaire de quelques masquages sur le registre MSR, nous en déduisons l’état des broches de sortie. Quant aux broches d’entrées, il est possible de fixer leur potentiel en cochant simplement la case correspondante. L’état de ces broches contrôle dans le registre MCR. Voici en exemple la procédure permettant de mettre à ‘1’ et à ‘0’ la broche RTS (7).

1
2
3
4
5
If RTS.Value = 1 Then
        Out MCR, Inp(MCR) Or &H2
    Else
        Out MCR, Inp(MCR) And &HFD
End If

Tout le programme est sur la même logique de masquage, toujours pour éviter de changer les autres bits du registre. Pour ceux qui ne programment pas en Visual Basic, sachez que vous pouvez éditer le .frm pour en reprendre les algorithmes. Le Visual Basic est suffisamment clair pour en recopier le principe sans trop de peine. Dans tous les cas, n’hésitez pas à réaliser le maximum de manipulations afin de bien comprendre le fonctionnement du port.

pcteam_63

Notre programme de test

Conclusion

Voilà un très bref aperçu du fonctionnement du port série. Bien des choses restent encore à dire tant le sujet est vaste. Nous vous recommandons comme tous les mois à découvrir le CD-Pro qui contient tous les programmes et les sources, ainsi que quelques documentations supplémentaires pour ceux désirant en apprendre plus. Là encore, Internet peut vous fournir tous les renseignements possibles.

Encarts

Le nom de chaque broche

Nom Broche (DB 9) Sens
DCD 1 Entrée
RxD 2 Entrée
TxD 3 Sortie
DTR 4 Sortie
GND 5 -
DSR 6 Entrée
RTS 7 Sortie
CTS 8 Entrée
RI 9 Entrée