prof. Jacques Lepot
Le Port Série, UART
Introduction

Le port série permet de communiquer des données entre 2 microprocesseurs. Le circuit périférique qui gère cette fonction s'apelle un UART (pour Universal Asynchronous Receiver Transmitter). La transmission est réalisée un octet à la fois.
Le logiciel copie l'octet dans l'UART et ce dernier se charge de le transférer bit par bit vers le récepteur.
Du coté du récepteur, les bits sont capturés par un autre UART et l'orsqu'un octet complet est reçu, il est disponible pour le software du récepteur.

Chaque UART dispose d'une sortie TX et d'une entrée RX.

La transmission est asynchrone, cela signifie qu'il n'y a pas de signal d'horloge (clock) entre l'émetteur et le récepteur.
Le récepteur, pour identifier les différents bits d'un octet, se base sur la durée de ses bits qui doit être fixe et connue de l'émetteur et du récepteur.

La durée d'un bit est définie par le BAUDRATE, nombre de bits par secondes.

Une liaison série de type UART utilise donc 2 fils sans compter la masse qui doit relier les deux circuits.

Constitution d'une trame

Une trame est constituée des bits suivants :

Le niveau logique au repos entre les trames est le niveau 1 (haut).

  • un bit de start toujours à 0 : servant à la synchronisation du récepteur
  • les données : la taille peut varier (généralement entre 7 et 8 bits) mais très souvant c'est 8 bits
  • éventuellement un bit de parité paire ou impaire
  • et un bit de stop toujours à 1 (la durée peut varier entre 1, 1,5 et 2 temps bit)

 

Baud rates standard
300 bps
1 200 bps
2 400 bps
4 800 bps
9 600 bps
19 200 bps
38 400 bps
57 600 bps
115 200 bps

des vitesse plus rapides sont parfois possibles

Caractéristiques

La pluspart des microcontrôleurs modernes disposent de 1 ou plusieurs UART. C'est une technique assez simple à mettre en oeuvre.

Sa principale limitation est la vitesse de transmission maximum assez faible due à l'absence de clock entre le récepteur et l'émetteur

Par contre la distance entre les 2 appareils peut être assez importante comparée à des techniques plus rapides tels que USB.

Les niveaux électriques 0V et 5V ou 3.3V fournis par les sorties d'un microcontrôleurs ne sont pas ceux utilisés par le port série des (anciens) PCs COM1 et COM2, il faut pour cela utiliser un convertisseur de niveaux de type MAX232 ou équivalent.
Pour relier 2 microcontrôleurs il n'est pas nécessaire d'utiliser un tel circuit, il suffit de brancher le TX de l'un dans le RX de l'autre et vice versa.

Le circuit FTDI232 permet de convertir les signaux RX/TX d'un microcontrôleur vers un signal (et un protocole) USB.
Du coté du PC on parlera alors de "port série virtuel" . L'arduino est équippé d'un tel circuit.

 

Programmation

Avec l'arduino, l'utilisation du port série est particulièrement simple.

Pour initialiser l'UART, utiliser:

Serial.begin(9600); // 9600 est le baudrate choisi

Pour transmettre un octet:

int thisByte = 33;

Serial.print(thisByte, BYTE);

Pour transmettre une chaine de caractère terminée par CR,LF:

Serial.println("Salut Babar");

Pour recevoir un octet:

rx_cmd = Serial.read(); // l'octet reçu est rangé dans rx_cmd

Y a t-il un ou des octets reçus ?

if(Serial.available()) { ... }