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é
Exemple d’un réseau de voiture – plusieurs protocoles différents en fonction des informations à échanger

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 SPISerial 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
  • MOSIMaster Out Slave In : données du maitre vers les esclaves
  • MISOMaster 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 I2CInter Integrated Circuit – ou CANControler 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.

Protocole I2C – Philips

Le protocole I2C, par exemple, est basé sur un architecture en bus. Seuls deux fils transitent entre les différents noeuds : SDASerial Data Line – pour les données et SCKSerial 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é

MInE Prototyper Prototyper avec Nucleo et MBED

Nucléo – Faire communiquer deux systèmes ensemble