Vous êtes sur la page 1sur 30

Cours 8-Le protocole de

communication UART ou
USART
Prof Hacine BENCHOUBANE
1. Introduction

 Le protocole UART (Universal asynchronous receiver transmitter) est un protocole de


transmission série et de type asynchrone.
 Ce protocole a été développé dans les années 60 comme outil de communication série.
 Ce protocole est très utilisé dans les communications ente microcontrôleurs et
capteurs, mémoires, cartes SIM etc..
 A titre de rappel, une communication entre 02 dispositifs peut se faire en série ou en
parallèle (voir figure suivante)
 Les avantages de la transmission parallèle sont: une vitesse de transmission plus
rapide et un coût plus élevé de l’infrastructure.
 En revanche la transmission série est moins dispendieuse et moins rapide.
 La transmission série est plus immune aux phénomènes de couplage dans les débits
élevés que la transmission parallèle.
 D’une manière générale, une communication série peut être de type synchrone ou
asynchrone, c’est-à-dire possédant une transmission dépendante ou non d’un signal
d’horloge.
2. Description du protocole UART

 Le schéma de 02 dispositifs communiquant par deux dispositifs UART est comme suit:
 Le protocole UART est de type Half-Duplex car il ne permet pas la transmission et la
réception des données d’une manière simultanée.
 A l’opposé, un protocole est dit Full-Duplex lorsque la transmission et la réception des
données se fait d’une manière simultanée.
 Nous retrouvons un certain nombre d’éléments dans une trame UART et qui sont:
- Synch bit (bit de synchronisation): il peut être soit le bit Start soit le bit Stop. Il signale
le début et la fin d’une trame. Pour commencer la transmission, ce bit Synch (mode start)
est mis à 0 et pour mettre fin à la transmission, ce bit Synch (mode Stop) est mis à 1.
- Parity (ou bit de parité): il s’agit d’un moyen pour vérifier l’intégrité de la transmission
et la détection d’erreur. En effet, lorsque le nombre de ``1`` dans un octet est pair, le bit de
parité est 0. Par contre lorsque le nombre de ``1`` dans un octet est impair, le bit de parité
est 1. Ce bit est optionnel.
 Ainsi une trame UART aura pour représentation:
 On définit aussi le Baud rate comme étant le nombre de bits transmis/reçus par
seconde.
 Donc une transmission à 9600 Baud =9600 bits transmis en une seconde, soit une
durée de 104 microsecondes par bit. Cette information est cruciale pour la détection
d’un bit.
 Pour une communication de type série et câblée, il est courant d’utiliser une
transmission standard à 9600 Baud mais ce paramètre peut être augmenté à 115200
Baud.
 Exemples:
-Qu’elle est la durée de transmission d’un fichier de 1Mb avec une vitesse de transmission
de 9600 Baud ?. Réponse:
- Donner la valeur du bit de Parity pour 1111 1110 ?.
 Réponse :109 s soit 1min 49s.

 Réponse2 = 1
 Une trame UART se présentera comme suit:
 Si on transmet à 9600 Baud et la taille de la trame UART est de 11 bits, alors on transmettra
approximativement 872 trame/seconde, soit 1.14 ms par trame.
 Il faudra noter que la transmission commence par le bit LSB.
 Exemple: supposons que nous avons un fichier contenant 1 million de bits de données.
Calculer le temps nécessaire pour le transmettre à 9600 Baud sachant que nous avons des
trames de 11 bits?
 Réponse: Nous avons dans ce cas 11 bits à transmettre, donc 872 trame/s, soit 1.146
ms/trame.
En plus, le nombre de trame de 8 bits(données) est : 1.000.000/8 = 125.000 trames de 8
bits utiles.
Or, il faut 1.146 ms pour transmettre une trame, donc le temps total est: 125.000 x 1.146
= 143,25s, soit 2min 23s.
 Exercice: calculer le temps nécessaire pour transmettre 1 million de bits avec 115200
Baud ?
 Réponse: environ 12s
 Pour la carte Arduino Uno, c’est le microcontrôleur Atmega 16U2 qui est utilisé à cette
fin.
3. Le protocole UART et Arduino

 Pour la carte Arduino Uno, le pin 0 est le récepteur Rx et le transmetteur est la pin 1
(Tx).

 Pour le Atmega 328P, celles-ci sont respectivement les broches 2 et 3 du MCU ou les
pin 0 et 1 de la carte Arduino.
 Les instructions relatives à l’UART sont disponibles dans la rubrique Serial
(communication).
 Considérons l’exercice suivant où deux cartes Arduino vont être reliées et où chaque
carte va transmettre l’état d’une entrée à l’autre carte.
 Voici les instructions utilisées pour implémenter l’UART dans l’Arduino Uno:
Functions Used for Serial Communication
•Serial.begin (baud rate)
This function is used to initiate the serial communication
with baud rate.
e.g. Serial.begin(9600)
•Serial.print (data, format type (optional))
It sends ASCII character on serial port so human can read
it easily. This function converts the data to ascii character
and then send (print) it.
e.g. Serial.print (123);
Serial.print (“123”);
Serial.print (12, HEX)
•Serial.println (data, format type (optional))
It sends ASCII character on serial port followed by
carriage return.
•Serial.write()
This function writes binary data to the serial port. It
returns number of byte written.
e.g. Serial.write (65); // it writes actual byte to serial port
•Serial.available ()
This function returns the number of bytes available to
read.
•Serial.read()
This function is used to read data serially.
e.g. received_data = Serial.read()
•Serial.readString()
This function is used to read the received string.
e.g. String received_data = Serial.readString()
 Exercice1: soit le montage suivant réalisé entre deux cartes Arduino Uno:
 Les pins 8 sont programmées en PULL-UP et chaque appui sur un bouton poussoir génère
un front descendant.
 Lorsque l’état de la pin 8 passe à 0 à travers le bouton poussoir, la Led sur la pin 13 (LED-
BUILTIN) de la carte opposée s’allume.
 L’enseignant vous remettra le code.
 Télécharger le code vers chaque carte. Faire en sorte que chaque carte est branchée toute
seule lors du téléchargement et que les liaisons Tx-Rx entre les cartes soient déconnectées
lors du téléchargement.
 Une fois les téléchargements faits, appuyer sur la touche Reset de chaque carte.
 Exercice 2: Dans cet exercice, les données série vont être introduites à travers le port
série et vont être lues par la carte Arduino et affichés sur le moniteur série.
 Voir le code remis par l’enseignant.
 Exercice3: Dans cet exercice, nous allons recevoir un string pour ensuite le
transmettre via le moniteur série.
 Voir le code remis par l’enseignant.
 Exercice4 : Dans cet exercice, une donnée (0 ou 1) va être transmise sur PC dans le
port série et lu par l’Arduino. La Led de la sortie 13 s’activera en conséquence.
 Voir le code remis par l’enseignant.
 Exercice 5:
- En utilisant la fonction random(), générez des ondes de durées HAUT et Bas
aléatoires.
- Utilisez ce type d’ondes dans l’exercice 1.
 Pour la transmission de caractères, il est important d’utiliser la codification ASCII.
 Consulter pour cela le lien: https://www.rapidtables.com/code/text/ascii-table.html

Vous aimerez peut-être aussi