Comment faire communiquer deux systèmes ensemble ?
NIVEAU 1
Objectifs
- Expliquer le principe d’une communication numérique entre dispositifs électroniques
- Différencier les 3 types courants de bus de communication
Pré-requis
Echanger des informations numériques
La plupart des systèmes numériques ont besoin d’échanger des informations de différents types avec d’autres systèmes :
- récupérer des données d’un capteur externe
- transmettre un message à un afficheur LCD
- envoyer des commandes d’un ordinateur à un système embarqué
- …
Les données transmises entre ces systèmes sont numériques et regroupées en paquets (1 octet, 2 octets, plus…).
Il existe alors plusieurs possibilités de transfert de ces données d’un point à un autre.
Caractéristiques d’une transmission de données
Afin de pouvoir choisir le bon protocole de transfert (voir paragraphes suivants), il faut dans un premier temps s’intéresser aux caractéristiques principales de la liaison et bien définir les besoins de l’échange que l’on veut mettre en place.
Les éléments d’un réseau s’appellent des noeuds.
Les règles de communication sont différentes selon que l’on a deux noeuds qui doivent discuter entre eux ou plus de deux.
Dans tous les cas, des règles de communication sont indispensables pour que tous les noeuds du réseau se comprennent. Ces règles sont regroupées dans un protocole. Il existe une multitude de protocole en fonction de l’application visée : vitesse de transfert, nombre d’octets à transmettre, topologie du réseau…
Les protocoles de communication définissent souvent les paramètres qui vont suivre.
Canal de transmission et support physique
Les données numériques sont avant tout des signaux électriques, souvent limités à 2 niveaux de tension, selon que l’on souhaite transmettre un ‘0’ logique ou un ‘1’ logique. Il est donc nécessaire de les faire se propager dans un milieu où ces signaux sont transmissible. On parle alors de support physique. Associé à des règles de discussion, on parle alors d’un canal de transmission.
Ce support physique peut être : une paire torsadée, un cable coaxial, une fibre optique, des ondes électromagnétiques…
C’est souvent le support physique qui limite la bande-passante du signal qui peut transiter.
Nombre de noeuds / Type de réseau
Un autre paramètre important est la topologie du réseau, c’est à dire combien de noeuds (éléments du réseau) doivent être connectés entre eux et de quelle façon ils sont physiquement reliés. Les topologies les plus habituelles sont présentées ci-dessous.
Parallèle ou Série
Selon les messages à transmettre et la vitesse de transfert à atteindre, ces échanges peuvent se faire de plusieurs façons :
- de manière parallèle
- de manière série
Le transfert en parallèle des données nécessite d’avoir N fils de transmission entre les deux noeuds (où N représente le nombre de bits à transmettre en parallèle entre les deux éléments).
Le transfert en série des données ne nécessite que d’avoir 2 ou 3 fils de transmission entre les deux noeuds. Les données sont alors transmises bit par bit.
Direction des transmissions
Certains noeuds peuvent être uniquement émetteur et d’autres uniquement récepteur. Dans ce cas, on parle de liaison Simplex.
Il peut aussi arriver que les échanges puissent se faire dans les deux sens. On parle alors d’une liaison Duplex.
S’il y a un seul support physique entre les deux noeuds, on parle de liaison Half-Duplex. Les données peuvent aller dans les deux sens, mais pas en même temps. Cela impose des règles d’arbitrage particulières, i.e. savoir qui discute à quel moment… Cette solution est plus facile à mettre en oeuvre matériellement mais nécessite une partie logicielle plus évoluée.
S’il y a deux supports physiques entre les deux noeuds, on parle de liaison Full-Duplex. Les données peuvent aller dans les deux sens, en même temps. Cette solution est plus facile à mettre en oeuvre logiciellement mais nécessite une partie matérielle plus évoluée.
Vitesse de transfert
La vitesse de transfert d’un réseau est souvent donnée en bits/s.
On trouve cependant une autre unité qui est le baud. Il correspond à un nombre de symboles transmissibles par seconde par la liaison.
Certaines modulations entrainent l’envoi de plusieurs bits en une seule valeur du signal de sortie sur le support physique. C’est le cas par exemple d’une modulation 4-QAM (Modulation en quadrature – 2 bits / symbole) qui pour un débit de 1200 bauds correspond à un débit binaire de 2400 bits/s.
Attention Le débit binaire brut d’une liaison ne donne pas nécessairement le débit réel de transfert des messages. En effet, certains protocoles nécessitent de transmettre des données supplémentaires par rapport aux données utiles pour la transmission d’un message au bon destinataire (adresse dans le cas de l’I2C, START et STOP bits dans le cas du RS232…).
Synchrone / Asynchrone
Lorsqu’on envoie des données numériques à une cadence particulière, il est intéressant que les deux noeuds, émetteur et récepteur, discutent à la même vitesse.
Une solution pour garantir que les données sont bien lues par le récepteur au même rythme que l’émetteur les envoie est de transmettre également le signal d’horloge entre l’émetteur et le récepteur. On parle alors d’un protocole synchrone de transmission. L’inconvénient majeur de cette solution est qu’il faut un support physique supplémentaire entre l’émetteur et le récepteur. Cependant, dans ce type de protocole, les données peuvent souvent être transmises plus rapidement.
L’autre possibilité est de transmettre l’information de manière totalement asynchrone. Afin que l’émetteur et le récepteur se comprennent, il faut toutefois que la cadence de transfert des deux noeuds soit égale, ce qui impose l’utilisation d’oscillateurs locaux très précis.
La vitesse de transfert est souvent réduite pour ce type de protocole, car de faibles écarts de fréquence entre les deux noeuds peut entrainer un taux d’erreurs de transmission important plus cette fréquence est élevée.
Transmettre des données numériques en série
Parmi les liaisons séries, il existe différents protocoles de transfert. On peut notamment citer comme protocole très utilisé aujourd’hui :
- USB / Universal Serial Bus / Bus / Série / Full Duplex / Asynchrone / Maitre-Esclave adressable / Débit : < 5 Gbits/s – Distance : < 10 m
- Ethernet / Paire Torsadée / Série / Full Duplex / Asynchrone / Maitre-Esclave adressable / Débit : < 1 Gbits/s – Distance : < 100 m / Fonctionnement par adressage MAC
Il existe des protocoles plus faciles d’accès et plus réactifs que ceux proposés précédemment, qui sont utilisés en réseau de terrain, i.e. où le délai de transmission et le taux d’erreur de transmission doivent être le plus bas possible. En effet, les messages qui transitent dans un système embarqué sont souvent “courts” (quelques octets pour récupérer la valeur de tel ou tel capteur…) mais leur délivrance est critique pour la survie du système (contrairement à une vidéo ou une image sur Internet – via Ethernet – par exemple, si elle met quelques secondes de plus à arriver, ce n’est pas critique pour l’utilisateur).
Selon l’application, on peut vouloir faire discuter 2 noeuds ou plus ensemble, par l’intermédiaire d’un bus de données par exemple.
Nous allons voir 3 exemples de réseau dans la suite de ce tutoriel. Leur mise en oeuvre à l’aide d’une carte Nucléo sera détaillée séparément dans des tutoriels.
Transfert point à point / RS232
Le premier protocole que nous allons voir ici est le protocole nommé RS232. Il a longtemps été utilisé pour piloter des périphériques d’ordinateur (Modem, GBF, Oscilloscope…).
Il est encore utilisé pour sa simplicité de mise en oeuvre par la plupart des systèmes embarqués pour discuter avec un PC. La console Série d’Arduino par exemple passe par ce protocole, tout comme la discussion entre le PC et la carte Nucléo (voir tutoriel Déboguer son programme et utiliser l’affichage série 1).
C’est un protocole asynchrone de transfert de données point à point, c’est à dire pour que deux noeuds puissent discuter. Les échanges se font en Full-Duplex grâce à deux signaux distincts RX (réception) et TX (transmission).
Les débits maximaux admissibles sont d’environ 100 kbits/s pour des distances de l’ordre de 10 m maximum.
Un octet est envoyé à chaque fois. Le taux de transfert doit être paramétré de manière identique entre l’émetteur et le récepteur. Au repos, le signal TX est à l’état ‘1’. Lors de l’envoi d’un message, un START bit (‘0’) débute la transmission. De la même façon, un STOP bit la termine.
Transfert Maitre-Esclaves / SPI
Le protocole précédent ne permettait que de faire communiquer deux noeuds. Il peut parfois être intéressant de récupérer des informations provenant de divers sous-systèmes (capteurs, position d’actionneurs…) par le biais d’un même réseau.
La mise en réseau de plusieurs noeuds nécessitent alors d’autres règles que précédemment. C’est le cas du protocole SPI – Serial Peripheral Interface – qui est un protocole de type Maitre-Esclaves. Un des noeuds est considéré comme principal, ou maitre. C’est lui qui dirige les communications. Les autres sont considérés comme des esclaves. Ils ont le droit de parole sur le bus lorsque le maitre a besoin d’une information.
Cette liaison est synchrone, elle permet des débits jusqu’à 10 Mbits/s sur des distances d’une dizaine de mètres. Elle est Full-Duplex.
Pour cela, elle utilise 3 fils distincts :
- SCK : pour l’horloge, imposée par le maitre
- MOSI – Master Out Slave In : données du maitre vers les esclaves
- MISO – Master In Slave Out : données des esclaves vers le maitre
Les données sont souvent transmises par octet. Le choix de l’esclave avec lequel démarrer la transmission se fait par une quatrième broche, nommée CS (Chip Select) ou SS (Slave Select), active la plupart du temps à l’état bas. Le maitre doit posséder une sortie de ce type pour chacun des esclaves qu’il peut alors adresser individuellement.
L’écran LCD de type EA DOG, utilisé dans le tutoriel Utiliser un écran LCD 2, est commandé par le microcontroleur par une liaison de type SPI.
Transfert en réseau adressable / I2C
Dans l’exemple précédent, le maitre devait disposer d’un fil supplémentaire pour chacun des esclaves différents qu’il souhaite adresser. Cette structure peut vite être lourde pour l’application. D’autres protocoles du type I2C – Inter Integrated Circuit – ou CAN – Controler Area Network – passent par un adressage logiciel, i.e. inclus dans le message transmis.
Chaque esclave a un identifiant (une adresse) différente. Le maitre, qui cadence l’ensemble des discussions, envoie également dans le préambule du message à transmettre l’identifiant de l’esclave à adresser.
Le protocole I2C, par exemple, est basé sur un architecture en bus. Seuls deux fils transitent entre les différents noeuds : SDA – Serial Data Line – pour les données et SCK – Serial Clock Line – pour le signal d’horloge. Ce protocole est donc synchrone. Il est Half-Duplex. Il permet des débits de 100 kbits/s (Standard Mode), 400 kbits/s (Fast Mode) ou 1 Mbits/s (Fast plus Mode).
Tutoriel lié
- Configurer une communication point à point RS232 2
- Configurer un réseau point à point SPI 2
- Configurer un réseau adressable I2C 3
MInE Prototyper Prototyper avec Nucleo et MBED