Académique Documents
Professionnel Documents
Culture Documents
Introduction
Malgré son grand âge, le port série est très largement utilisé par les ordinateurs pour communiquer avec des périphériques
(imprimante, souris, modem...) car il est très simple à utiliser et ne nécéssite que peu de fils. Plus difficile à mettre en oeuvre
que le port parallèle, il se révèle cependant plus puissant et plus universel.
Quelque soit le type de connecteur utilisé, une liaison série comporte 8 signaux différents, plus une ou deux masses :
DTE signifie Data Terminal Equipment et correspond en général au PC, alors que DCE signifie Data Communication
Equipement et correspond au périphérique.
D'un point de vue électrique, les différents signaux présents sur le port série sont définis par la norme RS232. Afin d'avoir une
plus grande immunité au parasites, on utilise des tensions comprises entre -25 et +25V. Une tension comprise entre -3V et
-25V représente un 1 logique (mark), alors qu'une tension comprise entre +3V et +25V représente un 0 logique (space).
Certains périphériques comme des microprocesseurs utilisent une logique TTL, bien connue des électroniciens. Afin de passer
d'une logique RS232, dite inversée, à une logique TTL, certains fabricants ont développé des circuits intégrés spécifiques. Par
exemple, le fabricant Maxim produit un composant appelé MAX232 pour adapter ces niveaux.
Le protocole utilisé
L'interruption 14H du BIOS
L'interruption 14h du BIOS propose plusieurs fontions pour la communication série du PC. A chaque appel, le registre AH doit
contenir le numéro de l'interface. La première interface (COM1) possède le numéro 0. Notez que l'interruption vérifie la validité
de la valeur passée à DX. Les fonctions ne sont pas executées si le numéro de l'interface n'est pas valide.
Sortie :
AH = état de l'interface
AL = état du modem
Les paramètres de configuration (octet dans AL lors de l'appel) sont les suivants :
Le bit 7 fournit une information particulière qui n'est pas associée à une ligne de communication. En effet si une erreur est
détectée, l'interruption 14h exécute un certain nombre de nouvelles tentatives avant de reandre son véritable verdict. Si toutes
les tentatives échouent, l'état de l'interface série est alors retourné dans AH, dont le bit 7 est mis à 1 pour signaler que le
temps imparti est dépassé.
Sortie :
AH = état de l'interface (voir fonction 0)
Sortie :
AH = état de l'interface (voir fonction 0)
AL = caractère reçu (si le bit 7 de AH est à 0)
Sortie :
AH = état de l'interface (voir fonction 0)
AL = état du modem (voir fonction 0)
Remarque 1 : Les fonctions 1, 2 et 3 de l'interruption 14h peuvent affecter le registre de contrôle du modem de l'UART. Si
vous souhaitez gérer ce registre de manière spécifique, il est préférable de manipuler directement l'UART, sans passer par
l'interruption 14h. Voir paragraphe suivant.
Remarque 2 : Cette interruption est maintenant dépassée, il faut l'utiliser uniquement dans le cadre d'une programmation sous
DOS. Dans le cas contraire, il est conseillé d'utiliser la fonction du système d'exploitation utilisé ou un accès direct à l'interface
série via les ports d'entrée/sortie. Pour un système POSIX (par exemple GNU/Linux), voir le paragraphe programmation
POSIX avec TERMIOS.
Cette interface se programme à l'aide de huit registres différents. Si le PC possède plusieurs ports série, il y aura autant de
groupe de huits registres que de nombre de ports série.
En général, le première interface série est associée au ports 3f8h à 3ffh, et la seconde aux ports 2f8h à 2ffh. Néanmoins, ces
valeurs ne sont pas universelles. Pour en connaître la valeur, le BIOS possède une table à l'adresse 0040h:0000h comportant
les adresses de base des quatres interfaces série :
En écriture, ce registre est un tampon, dans lequel doit être placé un caractère à émettre.
Notez que, sur le PC, l'UART n'exécute une demande d'interruption que si le bit 3 du registre de contrôle du modem est mis à
1. Voir le commentaire concernant ce registre.
• bit 3 : parité
0 = pas de parité
1 = un bit de parité
• bit 2 : nombre de bits de stop
0 = 1 bit de stop
1 = 2 bits de stop si la taille de données es supérieure à 5
1 = 1,5 (un et demi) bit de stop si la taille des données est 5
• bits 1 - 0 : taille des données
00 = 5 bits
01 = 6 bits
10 = 7 bits
11 = 8 bits
Remarque : L'interface du PC utilise la ssortie OUT2 pour valider l'autorisation des interruptions électronique par les UART
(compatibilité Hayes). Le bit 3 doit donc être mis à 1 pour activer les demandes d'interruption.
Remarque : Les bits 1 à 4 signalent des états d'erreur et peuvent provoquer une demande d'interruptions si le bit 2 du registre
d'autorisation des interruptions est à 1. Les bits 0 et 5 peuvent également déclencher une demade d'interruption si le registre
d'autorisation des interruptions le permet.
• bit 7 : état de CD
• bit 6 : état de RI (détection de sonnerie)
• bit 5 : état de DSR
• bit 4 : état de CTS
• bit 3 : CD a changé d'état
• bit 2 : RI a changé d'état
• bit 1 : DSR a changé d'état
• bit 0 : CTS a changé d'état
Remarque : Les bits 0 à 3 signalent des changement d'état et peuvent provoquer une demande d'interruption si le bit 3 du
registre d'autorisation des interruptions est à 1.
Le but de ce paragraphe n'est pas de fournir une description complète de termios : vous pouvez pour cela vous référer au man
termios ou au divers documents consacrés au sujet.
Le premier exemple ci-dessous permet de forcer le raccrochage (hangup) d'un modem en faisant chuter le signal DTR. Dans
la définition de l'interface POSIX des terminaux, cela s'effectue simplement en positionnant la vitesse à 0 (valeur B0) :
#include <fcntl.h>
#include <termios.h>
Par défaut, une ligne série est ouverte en mode canonique. Le mode canonique consiste à traiter les entrées d'un terminal
comme une ligne terminée par un séparateur (le plus souvent LF : line-feed correspondant à la touche Entrée). Cela signifier
que le programme applicatif ne pourra disposer de la saisie que lorsque le séparateur sera reçu. Dans le mode canonique, un
certain nombre de caractères de contrôle sont disponibles (effacement, etc.).
Ce comportement est adapté au traitement d'un terminal réel avec un dialogue opérateur mais il n'est pas utilisable dans le cas
du dialogue avec un équipement de type modem, par exemple. Le deuxième exemple permet donc de positionner une ligne
série en mode direct (raw) et donc d'inhiber le mode canonique :
Un descripteur de fichier sur un port série sera ouvert par une ligne du type fd = open(device_name, OR_RDWDR). Par défaut
cette ligne est ouverte en mode bloquant, ce qui peut parfois poser des problèmes dans le cas de l'utilisation du device
/dev/ttySx. On peut alors ouvrir le device en mode non bloquant par l'appel :
fd = open(device_name, OR_RDWDR | O_NDELAY).
Les modems
La plupart des modems se laissent commander par le jeu de commande HAYES. Chaque ligne de commande commence par
AT, suivie d'une des nombreuses commandes listées ici et d'un retour chariot. Cette liste n'est pas exhaustive ; la plupart des
modems ont leur propres commandes, mais celles listées ici sont disponibles avec la plupart des modems.
A/
Répéter la dernière commande (non précédé de AT)
A
Décrocher - Engager une connexion sans appel
B
Selectionner le standard de communication :
• B0 - CCITT
• B1 - Bell
C
Active ou désactive la porteuse :
• C0 - porteuse activée
• C1 - porteuse désactivée
D
Composer un numéro. Normallement suivi par :
• T - numérotation par tonalités
• P - numérotation par impulsions
• rien - numérotation en fonction de la configuration (voir ATP/ATT)
E
Active ou désactive l'écho local
• E0 - commandes sans écho
• E1 - commandes avec écho
H
Raccrocher
• L : Contrôle du volume ; suivi par 0-3 (0 pour le volume le plus faible, 3 pour le plus élevé)
• M : Monitor
M0 - Speaker off
M1 - Speaker on while dialing and establishing a connection
M2 - Speaker always on
M3 - Speaker on while establishing a connection
• P : Pulse dial
• T : Tone dial
• Y : Break setting
Y0 - Don't hang up when break signal is detected
Y1 - Hang up when break is detected (&D2, &M0)
• Z : Initialize modem
Z - Default parameters
Z0 - Setting 0
Z1 - Setting 1
• &T : Test
&T0 - normal operation (no test)
&T1 - local analog loopback
&T3 - local digital loopback
&T4 - accept distant digital loopback
&T5 - ignore distant digital loopback
&T6 - start distant digital loopback
&T7 - start distant digital loopback and self test
&T8 - start distant analog loopback and self test
• &Wn : Save actual configuration (some modems only). Setting can be restored with ATZn. n normally ranges between 0
and 1. The following parameters are stored:
B, C, E, L, M, /T, Q, V, X, Y, &C, &D, &G, &R, &S, &T4/&T5, S0, S14, S18, S21, S22, S25, S26, S27