Vous êtes sur la page 1sur 12

U.A.R.T.

Universal Asynchronous Receiver Transmitter

Le Port Srie du PC

Les Circuits UART : Ce circuit permet d'changer des donnes entre ordinateurs par l'intermdiaire de liaisons srie. Ce composant convertit les donnes parallles de l'ordinateur en des donnes sries et les envoies vers un autre ordinateur, un terminal, un appareil de mesure ou encore un modem. L' U.A.R.T lui seul assure les tches telles que la vitesse de transmission, la parit , la longueur des donnes. Il existe plusieurs types d' U.A.R.T. : Le 8250 Le 16450 Le 16550 Il est apparu sur les PC-XT, Il permet des vitesses de transmission de 38.4 kbits/s sans problme, Contrairement au 16450 ou on ne pouvait lire ou crire qu'un seul octet la fois , le 16550 peut stocker en mmoire 16 octets avec un buffer pour la rception et un buffer pour l'mission. On peut alors atteindre des vitesses de transfert de 115.2 kbits/s. Une autre amlioration apporte par le 16550 tait l'utilisation du contrleur DMA

Fig. 1: UART 16550 et 8250

La Liaison srie : Le terme d'interface srie dcrit la mthode utilise pour l'envoi des donnes. En effet, celles-ci sont envoyes bit par bit, la queue les uns la suite des autres. Ce port a l'avantage d'tre compact et de ne possder que quelques signaux utiles. Pour le transfert d'informations entre 2 machines un fil est utilis pour les donnes dans chaque direction. Les autres fils servent aux "commandes" de transfert. Si ce procd a comme principal avantage de permettre tous les transferts bidirectionnels, il prsente l'inconvnient d'tre lent. Un cble parallle est, par exemple, nettement plus rapide. Plus difficile mettre en uvre que le port parallle, la prise srie se rvle cependant plus puissante et plus universelle Un autre point fort du sriel par rapport au parallle est la longueur de cble possible sans perte de donnes. Un des exemples les plus connus des cbles parallles est le cble RS-232C (Recommanded Standard 232 revision C). Les usages les plus courants du sriel sont: les modems, traceurs, souris, .... En rsum, tout ce qui ncessite une communication Fig. 2 Connexion entre deux machines bidirectionnelle.

Transmission de donnes Asynchrone Le port srie des PC (et compatibles) possde un interface srie de type asynchrone. Le terme asynchrone sous-entend qu'il n'y a aucune synchronisation ou signal d'horloge pour rythmer le transfert entre les deux appareils en communication. Les caractres sont envoys avec un temps de latence arbitraire. Il est alors ncessaire d'indiquer l'envoi et la fin de l'envoi d'un caractre (un Byte a ne pas confondre avec bit). A cet effet, chaque Byte est prcd d'un bit de dpart (start bit). Ce dernier sert indiquer au systme rcepteur que les 5-6-7 ou 8 bits qui suivent constituent les donnes. Celles si sont suivies d'un ou de deux bits de stop. Cela permet au rcepteur de clore le traitement en cours et d'effectuer les oprations requises sur le Byte.
Bit de start Donnes Bit de parit Bit de stop

1 logique 0 logique

Sens de transmission Fig : 2 Format max d'une donne asynchrone de l'UART 8250

Temps

Gomtrie A l'origine, tous les compatibles PC possdent 2 ports sries: COM1 et COM2. L'un d'entre-eux se prsente sous la forme d'une prise DB9 mle et le deuxime, sous la forme d'une DB25 mle.

6
DB9 - prise mle - Connecteur PC
Fig. 3 : Prise DB 9 et 25

14 DB25 - prise mle - Connecteur PC

Description et attribution des signaux Broche DB 9 1 2 3 4 5 6 7 8 9 Broche DB 25 8 3 2 20 7 6 4 5 22 Nom DCD RX TX DTR GND DSR RTS CTS RI E/S E E S S E S E Description Data Carrier Detect Receive Data Transmit Data Data Terminal Ready GrouND Data Set Ready Request To Send Clear To Send Ring Indicator

DCD : cette ligne est une entre active haute. Elle signale l'ordinateur qu'une liaison a t tablie avec un correspondant. RX : cette ligne est une entre. C'est ici que transitent les informations du correspondant vers l'ordinateur. TX : cette ligne est une sortie. Les donnes de l'ordinateur vers le correspondant sont vhicules par son intermdiaire. DTR : cette ligne est une sortie active haute. Elle permet l'ordinateur de signaler au correspondant que le port srie a t libr et qu'il peut tre utilis s'il le souhaite.

GND : c'est la masse. DSR . Cette ligne est une entre active haute. Elle permet au correspondant de signaler qu'une donne est prte. RTS : cette ligne est une sortie active haute. Elle indique au correspondant que l'ordinateur veut lui transmettre des donnes. CTS : cette ligne est une entre active haute. Elle indique l'ordinateur que le correspondant est prt recevoir des donnes. RI : cette ligne est une entre active haute. Elle permet l'ordinateur de qu'un correspondant veut initier une communication avec lui. D'un point de vue lectronique, les signaux TX et RX en sortie des prises rpondent aux normes RS232, c'est dire:1 logique compris entre -3 et -25V0 logique compris entre +3 et +25V Exemple de connexion La communication srie ncessite trois fils au minimum: une masse pour rfrencer les signaux, un fil metteur et un fil rcepteur. Notre liaison srie est en effet full-duplex, c'est dire que l'on peut mettre et recevoir en mme temps (comme le tlphone par exemple).

Les registres
registre de contrle de ligne bloc de LCR configuration

Registre : LCR DLR

intitul : Line Control register Divisor Latch Register

COM1 : 3FB 3F8 3F9

COM2 : 2FB 2F8 2F9 2FD 2FA 2F9 2FC 2FE 2F8 2F8

regis tre de gestion de la vitesse DLR de transfert bloc de gestion des interruptions

registre de validation IER des interruptions registre d'identification des inter- IIR ruptions

LSR IIR
DCD DTR DSR RTS CTS

Line Status Register Interrupt Identification Register Interrupt Enable Register Modem Control Register Modem Status Register Receiver Buffer Register Transmitter Holding Register

3FD 3FA 3F9 3FC 3FE 3F8 3F8

bloc de registre de contrle gestion MCR du modem du modem bus systme (PC) registre d'tat du modem registre d'tat de la ligne RBR registre de rception des donnes T HR registre d'attente de transmission MSR

IER MCR MSR RBR

LSR blocs de rception et de transmission RDR registre dcalage RD de rception T DR TD

registre dcalage de transmission

THR

Fig. 4 : Les registres du 8250

Tableau 1 : Adresses des registres du 8250

Registre

0 DLAB =0 Receiver Buffer Bit No. Register (Read Only) RBR 0 Data bit 0

0 DLAB =0 Transmitter Holding Register (Write Only) THR Data bit 0

1 Interrupt Enable Register IER Active linterruption de rception Active linterruption Transmitter Holding Register lorsquil est vide Active linterruption Receiver Line Status Active linterruption Modem Status 0 0 0 0

2 Interrupt Ident. Register (Read Only) IIR 0 if interrupt pending

3 Line Control Register LCR Longueur de Mot Bit 0

4 Modem Control Register MCR

5 Line Status Register LSR

6 Modem Status Register MSR

0 1 DLAB DLAB =1 =1

Scratch Divisor Divisor Register Latch Latch (16550) (LSB) (MSB) SCR Bit 0 DLL DLM Bit 0 Bit 8

Terminal de Rception de Change ltat Donne Prt donne prts prt envoyer (DTR)

Data bit 1

Data bit 1

Interrupt ID Bit 0

Longueur de Mot Demande Bit 1 denvois(RTS)

Donne prts

Bit 1

Bit 1

Bit 9

Data bit 2

Data bit 2

Interrupt ID Bit 1

Nombre de bits de stop

Erreur de Parit

Bit 2

Bit 2 Bit 10

Data bit 3

Data bit 3

Active la parit Even Parity (1) Odd Parity(0)

Changement Dtection de porteuse Prt a envoyer(CTS) Donne prtes(DSR) Transmetteur Indicateur de Vide sonnerie(RI) Dtection de porteuse(DCD)

Bit 3

Bit 3 Bit 11

4 5 6 7

Data bit 4 Data bit 5 Data bit 6 Data bit 7

Data bit 4 Data bit 5 Data bit 6 Data bit 7

0 0 0 0

Bit 4 Bit 5 Bit 6 Bit 7

Bit 4 Bit 12 Bit 5 Bit 13 Bit 6 Bit 14 Bit 7 Bit 15

Divisor Latch Access Bit (DLAB)

Registre de contrle de la ligne


DLAB EPS PEN STB WLS0-WLS1

avec : WLS0-WLS1 : Word Length Select Bits, nombre de bits utiles composant le caractre chang. 00 01 10 11 : : : : 5 6 7 8

STB : Stop Transmission Bit, 0 1 bit d'arrt et 1 1,5 bit d'arrt. PEN : Parity Enable, activation du contrle de parit, 0 pas de contrle et 1 contrle de parit.

EPS : Even Parity Select, mode de contrle de parit, 0 parit impaire et 1 parit paire. DLAB : Divisor Latch Access Bit, si DLAB=1 slection de vitesse de transfert par lecture de DLR. Registres de slection de la vitesse de transfert (DLR) ou (DLH & DLL) Il s'agit de deux registres de huit bits dont les adresses sont fournies dans le tableau 2. Le contrleur gre une horloge fonctionnant f0=1,8432 MHz, et dlivre une frquence de base f1, gale f0/16. Pour parvenir une vitesse de transfert v (en bps), on divise f1 par v et on convertit le rsultat en hexadcimal. Le tableau 2 donne l'quivalence entre le contenu des registres (16 bits) et la valeur de la vitesse en bits par secondes. vitesse choisie : 50 75 110 150 300 600 1200 2400 4800 9600 contenu de DLR : 0900 0600 0417 0300 0180 00C0 0060 0030 0018 000C

Tableau 2 : programmation du dbit en bps Exemple : pour programmer une cadence de 4800 bps, on force le bit DLAB 1 (masquage), puis on place 0x00 dans le registre (DLR)H et 0x18 dans le registre (DLR)L. Registre d'tat de la ligne (LSR)
T SR THR BE FE PE OR DR

7 6 5 4 Ce registre indique l'tat de la ligne de transmission :

DR : Data Received. Lorsqu'il est positionn 1, ce bit indique qu'un caractre est totalement reu et transfr dans le registre RBR. Il est gnralement remis zro par lecture du contenu de RBR. OR : Overrun, bit qui traduit l'engorgement des donnes quand il est positionn 1. Ce problme survient quand une donne arrive dans RBR alors que la lecture de la donne prcdente n'a pas encore t effectue. Il est remis zro par simple lecture du registre d'tat. PE : Parity Error, mis 1 sur erreur de parit. FE : Frame Error, ou erreur de trame. BE : Break Error, erreur de type break. THR : Transmission Holding Register bit, ou tat du registre d'attente de transmission. Une valeur de 1 prvient que le registre THR est vide. TSR : Transmission Shift Register bit, ou tat du registre dcalage pour mission qui passe zro quand la donne+bits de contrle a t expulse du registre vers la ligne. Registre d'attente de transmission (THR) Ce registre not THR, correspond l'adresse 0x3F8, avec DLAB=0 et accs exclusif en criture. Il contient la donne envoyer sur la ligne, et l'criture dans ce registre marque le dbut de l'mission.

Registre tampon de rception (RBR) On accde ce registre par l'adresse 0x3F8, le bit DLAB tant mis zro et l'accs s'excute exclusivement en lecture. Le programme utilisateur peut lire le caractre reu dans ce registre. Registre d'autorisation d'interruption (IER)
MSM LSM THRE CR

Nous nous intresserons aux quatre bits poids faible qui permettent, lorsqu'ils sont positionns 1 d'autoriser la gnration d'une interruption pour chacun des vnements associs, tel que : RDA : Received Data Available, toute arrive d'un caractre produira une interruption. THRE : Transmit Holding Register Empty, qui gnre une interruption ds que ce registre est vide. LSM : Line Status Modification. Une modification de l'tat de la ligne sera source d'une interruption. MSM : Modem Status Modification, identique au bit prcdent, mais dans le cas d'un changement d'tat du modem. Registre de cause d'interruption (IIR)
IIB0-IIB1

Nous nous limiterons l'analyse des bits 1 et 2 qui prcisent la raison pour laquelle une interruption a t gnre, avec la correspondance : IIB1 IIB0 = 00 01 10 11 : : : : modification de l'tat du modem registre de transmission vide rception d'un caractre modification de l'tat de la ligne

Registre de contrle de l'tat du modem (MCR)


OUT2 RTS DTR

Ce port contrle l'tat du modem. Pour ces indicateurs, l'tat 1 reprsente la remise zro de l'tat de la ligne, tandis que l'tat 0 force l'indicateur concern. Registre d'tat du modem(MSR)
DTRH CTSH DSRU CTSU

Les bits suivants reprsentent : CTSU : Clear To Send Updated, qui signale que CTS a chang d'tat. DSRU : Data Set Ready Updated, spcifie que DSR est modifi. CTSH : Clear To Send High, le Flag CTS est pass l'tat haut (0). DTRH : Data Terminal Ready, le Flag DTR est pass l'tat haut (0).

Remarque : lorsque le flag CTSH est 0, cela indique que la ligne CTS est l'tat haut.

Programmation du port srie En effectuant la programmation partir du C (borland) vous avez deux instructions principales utiliser pour accder ces diffrents registres sont : inportb & outportb (voir la documentation dans le help). Nous donnons titre indicatif des exemples pour obtenir une communication sur le port srie. Le premier encadr reprsente les fonctions de bases pour : Configurer le port srie: INIT_COM Envoyer un caractre : TRANS_CAR Transmettre un caractre : RECEPT_CAR Et des variables pour la lisibilit du programme.
#include #include #include #include #define #define #define #define #define #define #define <dos.h> <stdio.h> <conio.h> <stdlib.h> COM1 0 COM2 1 COM3 2 COM4 3 PAIRE 24 IMPAIRE 8 SANS 0

#define COM COM2 /* definition des registres du 8250 int RBR[4]={0x3F8, 0x2F8, 0x370, THR[4]={0x3F8, 0x2F8, 0x370, DLL[4]={0x3F8, 0x2F8, 0x370, DLH[4]={0x3F9, 0x2F9, 0x371, IER[4]={0x3F9, 0x2F9, 0x371, IIR[4]={0x3FA, 0x2FA, 0x372, LCR[4]={0x3FB, 0x2FB, 0x373, MCR[4]={0x3FC, 0x2FC, 0x374, LSR[4]={0x3FD, 0x2FD, 0x375, MSR[4]={0x3FE, 0x2FE ,0x376, */ 0x270}, 0x270}, 0x270}, 0x271}, 0x271}, 0x272}, 0x273}, 0x274}, 0x275}, 0x276};

void INIT_COM(char port, long vitesse, int longueur, char parite, char stop) { unsigned char tempo; outportb(IER[port], 0); outportb(LCR[port], 128); tempo = (unsigned char)((115200 / vitesse)&0x000000FF); outportb(DLL[port], tempo); tempo = (unsigned char)(((115200 / vitesse)&0x0000FF00)>>8); outportb(DLH[port], tempo); switch(parite) { case 'P': tempo = PAIRE; break; case 'T': tempo = IMPAIRE; break; case 'S': tempo = SANS; break; } if (stop == 2) tempo = tempo | 0x04; tempo = tempo | (longueur - 5); outportb(LCR[port], tempo); } // Transmission d'un caractre void TRANS_CAR(char port, char car) { while ((inportb(LSR[port])&32)!=32); outportb(THR[port],car); }

//Rception d'un caractre unsigned RECEPT_CAR(char port) { if ((inportb(LSR[port])&0x01)==1) return(inportb(RBR[port])); else return(0); }

Ces diverses fonctions sont utilisables dans le main() en faisant les appels suivants :
Pour transmettre un caractre void main(void) { INIT_COM(COM2, 2400, 8, 'P', 2); TRANS_CAR(COM2,'a'); } Pour transmettre une suite de caractre void main(void) { int i; INIT_COM(COM2, 2400, 8, 'P', 2); for (i=1;i<27;i++) TRANS_CAR(COM2,'a'+i); }

Pour rceptionner un caractre void main(void) { char reception; int i; INIT_COM(COM2, 2400, 8, 'P', 2); reception =RECEPT_CAR(COM2); printf("%c",reception); }

Vous aurez raliser le travail suivant :

Travaux Pratiques : liaison srie 1 & 2

DUT informatique 2ime Anne TP N 5 & 6


Le TP est rendre sous forme informatique avec une pice jointe de type word. Noubliez pas que dans le compte rendu doit apparatre le nom des personnes qui ont travaills sur le TP. (seul les noms y figurant peuvent tre nots !!!) Le mail doit contenir dans le subject : 2AGx (x = A ou B ou C ou D) pour leur classement automatique dans ma bote au lettre, et contenir le nom des tudiants dans le corps de texte.

Le matriel : Vous disposerez de deux micro-ordinateurs de type PC chacun muni dune interface srie asynchrone et dun connecteur RS232. Dun environnement de dveloppement en langage Borland C, Microsoft C, Watcom C, C sous Windows. Application raliser : Refaire la commande TALK qui existe sous UNIX sur 2 PCs.

P artie de l'utilisateur distant

P artie de l'utilisateur loc al

Les frappes de lutilisateur local sont envoyes vers lutilisateur distant et affiches dans la partie basse de lcran Les frappes de lutilisateur distant sont affiches dans la partie haute de lcran Travail ncessaire raliser: Programmation dans une bibliothque personnelle pour la communication srie : Dfinition des adresses port srie (COM1 et COM2 et ventuellement COM3 COM4) Dfinition de nom spcifique comme PAIRE, IMPAIRE, SANS pour la parit etc... Ecrivez une procdure/fonction dinitialisation de lU.A.R.T 8250, [INIT_COM()], Ecrivez une procdure/fonction denvoie dun caractre [TRANS_CAR()], Ecrivez une procdure/fonction de rception dun caractre [RECEPT_CAR()] Programmation dans une seconde bibliothque de linterface en mode texte uniquement. Dfinition de lcran, Gestion de lcran, Utilisation des touches (ventuellement de la souris), Aide, Gestion des erreurs, etc...

Mcanisme de fonctionnement ECHOPLEX


Le but de ce TD est de scuriser la transmission dinformations entre deux entits communicantes, en tant certain que ce qui est reu du cot rcepteur correspond bien ce qui t envoy depuis le cot metteur. Pour cela nous allons utiliser le mode ECHOPLEX qui correspond un moyen simple, mais efficace, de rendre une transmission fiable 100%. Le principe de fonctionnement de ce mcanisme est donn par le schma cidessous :

Cot Emetteur

Cot Rcepteur

Frappe de T

T T T R R R A I Err A A Err A Problme I


M morisation du caractre reu (R) Affichage de T M morisation du caractre reu (T)

Test
Frappe de R

Test
Frappe de A

Test

M morisation du caractre reu (I)

Affichage de R

Annulation M morisation du caractre reu (A) M morisation du caractre reu (N) Affichage de A Affichage de N

Frappe de N

N N N Fin Fin

Test
Frappe de ESC

temps

temps

Principe de fonctionnement du mode Echoplex. Pour illustrer ce fonctionnement vous raliserez partir du TD sur le Talk les modifications ncessaires votre programme pour que les envois de caractres entre lmetteur et le rcepteur soient sans erreur. Aide : Vous devrez dans un premier temps ajouter votre programme les 2 caractres spcifiques qui vous permettront de grer les erreurs et la fin du programme : #define Err 1 #define Fin 2 ... Dans votre gestion globale vous ne devrez pas modifier de manire fondamentale lensemble de votre programme, mais ajouter uniquement les quelques lignes de code correspondant votre gestion ECHOPLEX.

Stucture globale de votre programme : if (kbhit()) { car1 = getch() if (car1 ESC) { affichage de car1 dans lcran bas calcul de la position du prochain caractre dans la fentre basse etc trans_car(car1) } else trans_car(ESC) } else if (car1=recept_car()) { if (car1 ESC) { affichage de car1 en haut calcul de la position du prochain caractre dans la fentre haute etc } } La partie jaune est donc remplacer par lorganigramme de transmission La partie bleu est remplacer par une procdure avec lorganigramme de rception.
Dbut

Dbut

Trans_car(Car1)

Car1 recept_car()
Car2 recept_car()

oui

Car1 Err

non

non

Car1 Car2

Car1 recept_car()
oui Trans_car(Err)

non Trans_car(Car1)

Car1 = Err

oui

Trans_car(Car1)

Car2 recept_car()

Attente = Car1

Fin
Fin

Organigramme de transmission

Organigramme de Rception

Principe daffichage

P artie de l'utilisateur distant

P artie de l'utilisateur loc al

Les frappes de lutilisateur local sont envoyes vers lutilisateur distant et affiches dans la partie basse de lcran

Les frappes de lutilisateur distant sont affiches dans la partie haute de lcran