Chapitre 1 Communication Série - UART SPI I2C
Chapitre 1 Communication Série - UART SPI I2C
Chapitre 1 Communication Série - UART SPI I2C
SYNCHRONE ET ASYNCHRONE
1-LIAISON SERIE ASYNCHRONE (NORME 232)
1.1- Généralités
Dans une liaison en série, les données sont envoyées bit par bit sur la voie de transmission. Toutefois,
étant donné que la plupart des processeurs traitent les informations de façon parallèle, il s'agit de
transformer des données arrivant de façon parallèle en données en série au niveau de l'émetteur, et
inversement au niveau du récepteur.
Ces opérations sont réalisées grâce à un contrôleur de communication (la plupart du temps une
puce UART, Universal Asynchronous Receiver Transmitter). Le contrôleur de communication
fonctionne de la façon suivante :
1
- Parité paire
- 2 bits de stop
Remarques : Le poids faible de la donnée est transmis en premier.
Le caractère transmis nécessite 11bits. Avant l’envoi de caractère suivant, le système doit attendre un
temps tm de l’ordre de 3, 4,5 Tb avec Tb : durée d’un bit.
Bit de parité
stop
2
1.2-Format d’une trame électrique (norme RS232) d’une liaison série asynchrone
Les niveaux de tension appliqués sur la ligne de transmission sont imposés par des circuits « pilote de
ligne » et lus au niveau du récepteur par des circuits « récepteurs de ligne ». Le circuit le plus
couramment utilisé est :
Le MAX232 qui combine à la fois 2 émetteurs de lignes et 2 récepteurs de ligne, La norme RS232
prévoit la conversion logique électrique suivante :
Trame logique
Trame Electrique
Ci-dessus la correspondance entre la trame logique et la trame électrique pour la même transmission
que précédemment (envoi de 0x45).
La liaison série asynchrone est un moyen de communication entre deux systèmes électroniques facile à
mettre en œuvre. Ainsi, la plupart des microcontrôleurs modernes disposent d'un circuit spécialisé
(UART) leur permettant d'échanger des données avec l'extérieur de cette manière.
Sur cette liaison, une tension de 0v correspond à un 0 logique. Une tension de +Vcc (+3,3 V ou +5 V
selon la tension nominale du circuit) correspond à un 1 logique.
A titre de rappel, en RS-232, un 1 logique correspond à une tension entre -3 V et -25 V et un 0 logique
à une tension entre +3 V et +25 V. Par conséquent, si vous souhaitez connecter une sortie série
utilisant les niveaux TTL à votre ordinateur, il vous faudra un adaptateur spécialisé. Soit série TTL
vers RS-232.
1.3-Schéma de câblage entre deux microcontrôleurs
Communication directe entre deux MCU
3
Communication série avec la norme RS232
• 110 baud
• 220 baud
• 300 baud
• 1 200 baud
• 2 400 baud
• 4 800 baud
• 9 600 baud
• 19 200 baud
• 38 400 baud
• 57 600 baud
• 115 200 baud
• 230 400 baud (selon la fréquence
d'oscillation employée)
• 460 800 baud
• 921 600 baud (« environ 1
L’UART est responsable de l'envoi et de la réception d'une séquence de bits. »)
mégabaud A la sortie d'un UART,
ces bits sont généralement représentés par des tensions de niveau• logique.
1 843 200Ces bits peuvent devenir
baud
• 3 686RS-232
RS-232, RS-422, RS-485, ou peut-être des spécifications propriétaires. 400 baudspécifie les niveaux de
tension . Un microcontrôleur UART ne peut pas générer de tels niveaux de tension par lui-même. Cela
se fait à l'aide d'un composant supplémentaire: le pilote de ligne RS-232. Le MAX232 est un exemple
classique de pilote de ligne RS-232. D’après la fiche technique, on peut remarquer que ce circuit
intégré a une pompe de charge qui génère ± 10V à partir de + 5V.
L'UART permet de convertir les données parallèles des lignes de bus PC en données série pour la
transmission via des pilotes de ligne vers des périphériques RS-232, RS-422 et RS-485 . Les trois
interfaces série RS-232, RS-422 et RS-485 offrent différentes possibilités pour des communications
série robustes sur de courtes et longues distances. Les UART constituent la base des trois normes et
facilitent l'ajout de communications série à des conceptions, notamment celles destinées à des
environnements industriels difficiles.
4
2-LIAISON SERIE ASYNCHRONE (NORME RS485)
2.1- Définition
Elle précise les caractéristiques des émetteurs et des récepteurs pour une utilisation dans les systèmes
multipoints en mode symétrique. La transmission se fait sur une ligne électrique paire torsadée en
mode différentiel (immunité aux bruits).
RS-485 : c'est une liaison série, de type asynchrone, différentielle qui permet un débit élevé (jusqu'à
10 Mb/s) sur une distance importante (jusqu'à 1200m). Elle dispose de 2 bornes d'émission polarisées
notées Tx(+), Tx(-) ou et de 2 bornes de réception polarisées notées Rx(+), Rx(-)
Les médias de type RS485 sont souvent en half duplex c’est-à-dire la transmission s’effectue via 2 fils.
La longueur peut aller jusqu'à 1200 mètres et peut transférer des données jusqu'à 10 Mbps (10
mégabits par secondes) mais pas les deux à la fois. Sur 1200 mètres, on peut transférer 90 kbps. Sur
100 mètres, on peut arriver à 1 Mbps. Pour atteindre 10 Mbps, la longueur ne doit pas dépasser 15
mètres. Si on souhaite créer une ligne plus longue, il faut utiliser des répéteurs qui régénèrent le signal
et débutent une nouvelle ligne.
Débit
Même si le standard RS485 ne dit rien sur les protocoles, la plupart des liaisons RS485 utilisent un
protocole asynchrone (existant sur les UARTs dans les PC). Un mot transmis est constitué d'un bit de
start, des données, d'un éventuel bit de parité et d'un bit de stop. Pour les microcontrôleurs,
n'importe quel port série peut se relier sur une interface RS485.
2.2-Topologie RS 485
5
RS485 en HALF DUPLEX
6
2.3-Niveaux de tension en mode différentiel
7
Tableau comparatif entre les liaisons série asynchrones (RS232 et RS485/RS422)
8
Synchronisation et transmission SSI
Les mots-clés suivants seront utiles pour comprendre la procédure de transmission des données SSI.
• « tm» représente le délai de transfert. C'est le temps minimum requis par l'esclave pour se
rendre compte que la transmission des données est terminée.
Après tm, la ligne de données passe au repos et l'esclave commence à mettre à jour ses données
dans le registre à décalage.
• «tp» représente le temps de pause. Il s'agit du délai entre deux séquences d'horloge
consécutives du maître.
• «tw» représente le temps de répétition. C'est le temps minimum écoulé entre les
retransmissions des mêmes données et est toujours inférieur à tm.
• «T» représente la largeur de chaque cycle d'horloge. C'est le temps écoulé entre deux fronts
descendants ou montants dans une séquence d'horloge continue.
• MSB: bit le plus significatif
• LSB: bit le moins significatif Interface série synchrone.
9
10
Système à deux séquences
11
Le bus I2C permet d’échanger des informations sous forme série avec un débit pouvant atteindre 100
kilobits/s ou 400 kilobits/s pour les versions les plus récentes. Ses points forts sont les suivants :
• C’est un bus série bifilaire utilisant une ligne de donnée SDA et une ligne d’horloge SCL ;
• Le bus est multi maîtres ;
• Chaque abonné dispose d’une adresse codée sur 7 bits, on peut donc connecter simultanément
128 abonnés d’adresses différentes sur le même bus (sous réserve de ne pas le surcharger
électriquement =la charge) ;
• Un acquittement est généré pour chaque octet de donnée transféré ;
• Le nombre maximal d’abonné n’est limité que par la charge capacitive maximale du bus qui
peut être de 400 pF ;
• Les niveaux électriques permettent l’utilisation des circuits en technologies CMOS, NMOS ou
TTL.
5.2-PRISE DE CONTROLE DE BUS
• Le bus doit être au repos avant la prise de contrôle des signaux. [SDA=1 et SCL=1]
• Pour transmettre des données, il faut surveiller :
➢ La condition de départ SDA passe à 0 et SCL reste à 1
➢ La condition d’arrêt SDA passe à 1 et SCL reste à 1
• Après avoir vérifié que le bus est libre, puis pris le contrôle de celui-ci, le circuit en devient le
maître : c’est lui qui génère le signal d’horloge
5.3-CONDITIONS DE DEPART ET D’ARRET
Remarque :
12
Lorsqu’un maître désire effectuer plusieurs échanges à destination d’esclaves d’adresses différentes, il
n’est pas obligé de terminer le premier échange par une condition d’arrêt mais peut les enchaîner en
générant une condition de départ dès la fin d’un échange.
Exemple :
Avant de placer les bits qui forment l'octet à transmettre sur le bus, le maître doit placer la ligne
d'horloge SCL à 0. Tant que la ligne SCL est au niveau haut, la ligne SDA ne doit pas changer d'état,
sinon cette condition sera interprétée comme la condition d'arrêt. La condition arrêt peut survenir
même au milieu de la transmission d'un octet, pour abandonner la transmission et libérer le bus pour
les autres circuits. Pour transmettre correctement les bits sur la ligne SDA, le maître doit donc tout
d'abord placer la ligne SCL à 0. Ensuite, le maître peut placer la ligne SDA au niveau correspondant au
bit à transmettre et replacer la ligne SCL au niveau 1 pour indiquer que le bit est présent sur la ligne
SDA. La même opération va se répéter autant de fois que nécessaire pour transmettre les 8 bits de
données. Notez que c'est le bit de poids fort qui est transmis en premier.
Une fois les 8 bits transmis, le circuit qui vient de recevoir les données doit imposer un bit
d'acquittement ACK sur la ligne SDA. Pour cela, pendant que la ligne SCL est au niveau bas, le maître
place sa propre sortie au niveau haut, tandis que le récepteur (aussi appelé l'esclave) place sa sortie au
niveau bas. Puisque les sorties sont à collecteur ouvert, la ligne SDA restera au niveau bas à cause de
13
l'esclave. Le maître relit ensuite la ligne SDA une fois qu'il a passé la ligne SCL au niveau haut. Si la
valeur lue pour le bit ACK est 0, c'est que l'esclave s'est bien acquitté de l'octet reçu, sinon c'est qu'il y
a une erreur et le maître doit générer la condition arrêt.
Remarque :
Le 8èmebit d’adresse spécifie le mode d’accès : R/W
Le nombre maximal de circuits est de 128
14
Les adresses paires sont des adresses de d’écriture alors que les adresses impaires sont des adresses de
lecture.
5.6-Ecriture d’une donnée
1-Envoi de l’adresse de destination Remarque : Il faut attendre le signal ACK avant de
poursuivre l’écriture dans la mémoire
2-Sélection du mode écriture (R/W=0
3-Envoi de la donnée
15
5.8-Gestion de conflits
Le bus I2C est de conception destiné à accueillir plusieurs maîtres => problème commun à tous les
réseaux utilisant un canal de transmission unique : Comment arbitrer ?
En effet, chaque maître peut prendre possession du bus dès que celui-ci est libre : possibilité que deux
maîtres prennent la parole en même temps.
Pas de problème électrique => collecteur ouvert
Problème logique => Eviter la corruption des données due à la collision des bits transmis.
Principe :
Prise de contrôle du bus
▪ Vérifier que le bus est libre
▪ Condition d’arrêt envoyée depuis au moins 4.7us
▪ Prise de contrôle effectif, mais vérification de l’état des lignes SDA et SCL, plusieurs cas
sont possibles :
➢ Différents maîtres envoient en même temps => aucun conflit cas rare
➢ Un maitre impose un 0 : il relie obligatoirement un 0 et continuera à transmettre
ses données
➢ Un maitre cherche à appliquer un 1 sur le bus :
▪ S’il relit un 1, il continu à transmettre les données
▪ S’il relit un 0 => un autre maitre à pris le contrôle de bus : il perd alors
l’arbitrage => arrête d’émettre et continue à lire les données
Exemple.1
Exemple.2
16
Qu’il est le maître qui a pris le contrôle du bus ?
Remarque :
Pour certains circuit l’adresse codée sur 7 bits est divisée en deux partie, une partie fixe
physique(A2A1A0) te une partie logique.
Lorsque l’adressage de la mémoire nécessite plus de 7 bits d’adresse, on distingue les 8 bits de la partie basse
de l’adresse (Ad7 à AD0) et la partie haute comprenant 3 bits (Ad8 à Ad10). Le protocole I2C fait appel à un
code spécifique (1010) lorsqu’il s’agit de communiquer avec une mémoire compatible I2C.
Principe d’écriture dans une mémoire avec adressage effectué sur 2 octets : Le maître pointe l’adresse de la
mémoire (2 octets) en mode écriture, puis écrit la donnée (1 octet).
17
6-COMMUNICATION SERIE SPI
La liaison SPI (Serial Périphérique Interface) est un bus série utilisé pour la transmission synchrone de
données entre un maître et un ou plusieurs esclaves (multipoints). La transmission a lieu en full duplex.
Le maître génère l’horloge et initialise la transmission de données en sélectionnant l’esclave
(convertisseur, registre à décalage, mémoire, …) avec qui il veut communiquer.
Chaque esclave est sélectionné par une ligne ‘SS’ (Slave Select) et n’est actif que lorsqu’il est
sélectionné.
Le bus SPI est composé de deux lignes de données et deux lignes de signal, toutes unidirectionnelles
MOSI (Master Out Slave In) : Sur la ligne MOSI le maître transmet des données à l’esclave.
MISO (Master In Slave Out) : Sur la ligne MISO l’esclave transmet des données au maître.
SCK (SPI Serial ClocK) : Signal d’horloge, généré par le maitre, qui synchronise la transmission.
La fréquence de ce signal est fixée par le maître et est programmable.
SS (Slave Select) : Ce signal placé au niveau logique ‘0’ permet de sélectionner (adresser)
individuellement un esclave. Il y a autant de lignes SS que d’esclaves sur le bus. Le nombre possible
de raccordements SS du maître limitera donc le nombre d’esclaves.
18
A chaque front d’horloge, le maître envoie un bit sur la ligne MOSI. De même il peut recevoir à
chaque front d’horloge, sur la ligne MISO, un bit transmis par l’esclave.
La transmission commence par le MSB.
La transmission de données est terminée dès que la ligne SS est remise au niveau logique ‘1’.
19
Un transfert SPI s’effectue de la manière suivante :
• Le maître active la ligne SS de l’esclave avec lequel il veut parler.
• Le maître génère le signal d’horloge pour 8 bits
➢ Pendant une montée ou une descente, le maître et l’esclave mettent une donnée sur MOSI
et MISO respectivement.
➢ Pendant la descente ou la montée qui suit, le maître et l’esclave lisent la donnée sur MISO
et MOSI respectivement.
• Le maître désactive la ligne SS de l’esclave avec lequel il veut parler
Remarque :
Si on veut on recevoir des données en mode maître, il faut transmettre des données pour activer
l’horloge, même si ce que l’on transmet n’a pas de sens.
La vitesse typique d’un lien SPI est 10 Megabits par seconde (10Mbps). Certains périphériques SPI
sont plus rapides que 10Mbps, mais 10Mbps est une vitesse maximum fréquente.
20
6.3-Avantages et inconvénients de bus SPI
21