Microcontrôleur – Chapitre 5 – Les bus de communication

Beaucoup d’applications nécessitent de pouvoir communiquer avec d’autres périphériques ou systèmes. Selon la gamme du microcontrôleur, on peut trouver un ou plusieurs bus de communication. Nous allons parler des principaux bus et de leurs protocoles respectifs.

Qu’est ce qu’un bus ?

Un bus est une topologie de réseau où tous les nœuds sont reliés à un seul lien, appelée le bus. Ce bus peut contenir plusieurs lignes, toutes communes à chaque nœud du réseau.

Ainsi, toute donnée émise sur un bus est reçue par tous les nœuds en même temps (tant que le bus est constitué d’un lien physiquement court).

Série ou parallèle ?

Une liaison série est une liaison où les données se suivent. On l’oppose à la liaison parallèle, ou chaque bit est envoyé sur une broche, ce qui permet un débit plus important mais augmente le risque de parasites à cause d’un nombre de lignes plus élevé.

Une analogie ? Une liaison série serait une conversation avec une personne, qui épèle chaque mot lettre par lettre, tandis qu’une liaison parallèle serait une conversation avec huit personnes épelant chacune une lettre en même temps (les lettres arrivent donc 8 par 8). La première conversation serait assez limpide, par contre la seconde pourrait poser problème si :

  • une personne parle plus fort que les autres (i.e. parasite leur signal)
  • une personne est en retard sur le reste du groupe (i.e. souffre d’une latence due à la ligne).

Les principaux bus

Il existe énormément de bus, et certains ont émergés suite à de véritables guerres de standards entre les constructeurs. La plupart des composants

I²C

I²C (ou I2C) est un bus série de bas niveau développé par Philips Semiconductor en 1982. I²C signifie Inter-Integrated Circuit. Puisqu’il s’agit d’une marque déposée, beaucoup de constructeurs parlent de TWI (Two-wire interface) lorsqu’ils se réfèrent à ce bus. Il est de courte portée (quelque mètres) et fonctionne généralement à 100kb/s (des versions plus récentes fonctionnent toutefois à plus de 3Mb/s).

On utilise ici deux lignes (en plus d’une masse commune) pour communiquer sur ce bus :

  1. une ligne d’horloge, appelée SCL (Serial Clock Line, parfois abrégée SCK ou CLK)
  2. une ligne de données, appelée SDL (Serial Data Line, qu’on écrit aussi SDA ou DATA)

Le protocole utilisé par I2C est dit :

  • maitre-esclaves, car seul un nœud maitre peut communiquer avec les esclaves du réseau (1 ou tous)
  • multi-maitres, car plusieurs maitres peuvent être présents sur le réseau
  • synchrone, car on utilise un mécanisme de requête/réponse
  • half-duplex, car on peut communiquer dans les deux sens, mais pas simultanément

On utilise un adressage sur 7 bits pour identifier les nœuds, ce qui permet (en théorie) jusqu’à 128 nœuds sur le réseau. Certaines adresses sont réservées pour le broadcast (communiquer vers tous les nœuds en même temps). En pratique, les constructeurs on tendance à fixer l’adresse de certains nœuds, ce qui peut causer des collisions.

Ce protocole de communication a de nombreuses applications ; écrans, mémoires, horloges temps-réel, …

SPI

Une liaison SPI (Serial Peripheral Interface) est un bus un peu particulier car si 3 lignes sont bien communes à chaque nœud du réseau (en plus de la masse), il faut ajouter une ligne entre chaque esclave et le maitre. Par exemple un réseau entre un maitre et trois esclaves aura besoin de 6 lignes (plus la masse).

Les lignes communes sont :

  1. une ligne d’horloge, appelée SCLK (Serial Clock, ou SCK, CLK)
  2. une ligne de données maitre vers esclave : MOSI (Master Output, Slave Input ; SIMO/MDO/SDI/DO/DOUT/SI/MTSR)
  3. une ligne de données esclave vers maitre : MISO (Master Input, Slave Output ; SOMI/SDO/MDI/DI/DIN/SO/MRST)

À chaque nœud esclave est ajoutée une ligne SS : Slave Select (choix de l’esclave, souvent abrégé CS ou SYNC). On ajoute généralement une barre au dessus du sigle pour préciser qu’il s’agit d’une entrée active à l’état bas ; en effet, l’esclave n’acceptera de répondre que si sa ligne SS est mise à la masse.

Cette particularité du bus SPI rend l’adressage inutile, il est cependant envisageable d’utiliser un registre à décalage pour piloter un grand nombre d’esclave avec un nombre limité de broches sur un microcontrôleur.

Le bus SPI est :

  • à maitre unique, il n’est pas possible d’avoir plusieurs maitres sur le réseau
  • synchrone
  • full-duplex, car maitre et esclave peuvent transmettre simultanément

Sa portée est de quelques mètres également, par contre son débit est bien plus élevé ; il est possible d’atteindre 100Mbit/s en SPI. Dans notre cas, des débits de 1 à 10Mbit/s seront suffisants.

RS-232

Le RS-232 est un bus de périphériques conçu en 1962. Contrairement aux liaisons SPI et I2C, il est possible de l’utiliser sur plusieurs dizaines de mètres, au détriment du débit (de 2400 à 115200b/s et même au delà dans certaines conditions).

Si vous avez disposé d’un ordinateur avant l’avènement de l’USB, vous avez forcément branché une souris ou un modem sur un port RS-232. On l’appelait à l’époque « port série » ou « port COM ». On l’appelle parfois UART voire USART, du nom d’un composant, souvent présent dans les microcontrôleurs, qui permet de transmettre et recevoir des données sur une liaison série.

Le bus fonctionne sur au moins deux lignes (plus la ligne de masse) :

  1. une ligne d’émission TxD ou TX
  2. une ligne de réception RxD ou RX

(D’autres lignes sont disponibles pour améliorer la fiabilité de la liaison, mais ne sont pas obligatoire)

Cette topologie ne permet de lier que deux périphériques entre eux en mode duplex, car les lignes d’émission et de réception sont croisées (chaque broche d’un périphérique est connectée à l’autre broche sur le périphérique distant).

De plus, l’absence d’horloge partagée peut provoquer des erreurs ; leur probabilité augmente avec le débit souhaité.

Une liaison RS-232 fonctionne :

  • de pair-à-pair ; il n’y a ni esclave ni maitre défini au niveau du protocole
  • de façon synchrone ou asynchrone ; c’est au logiciel de gérer comment se déroule la communication
  • en full-duplex ; les deux pairs peuvent communiquer en même temps.

Du fait de sa simplicité à mettre en œuvre tant au niveau matériel (trois fils suffisent), que logiciel, et de sa disponibilité quasi immédiate sur PC, c’est un bus de choix pour des petits projets.

De plus, de nombreux périphériques se pilotent également par liaison série : GPS, lien Bluetooth, modem, …

1-Wire

Mis au point par Dallas Semiconductor Corp, le bus 1-Wire, comme son nom l’indique, fonctionne avec une seule ligne (plus une masse).

Cette caractéristique lui procure une immense portée (jusqu’à plusieurs centaines de mètres), mais ne lui permet de fonctionner qu’avec un débit réduit (16,3kbit/s). Ce bus peut supporter plusieurs dizaines de noeuds.

1-Wire fonctionne :

  • d’un maitre vers plusieurs esclaves
  • de façon synchrone
  • en half-duplex

Les nœuds sont adressés sur 64 bits (ce qui donne plus de 18 milliards de milliards d’adresses possibles). Une commande d’énumération permet de faire l’appel pour ainsi détecter tous les nœuds d’un réseau très rapidement.

1-Wire est basé sur un protocole propriétaire ; les implémentations de nœuds maitres sont libres, par contre les nœuds esclaves sont prohibés ; ceci permet à la société de décider quels sont les périphériques utilisables sur son bus. Dans la théorie, rien n’empêche d’implémenter un nœud esclave avec un microcontrôleur.

Malgré cela, il s’agit d’un bus très simple à mettre en œuvre, car une seule broche suffit, et elle peut être gérée de façon logicielle sans grand impact sur la mémoire du programme.

Plusieurs types composants sont disponibles en tant qu’esclave 1-Wire :

  • des horloges temps-réel
  • des mémoires dont certaines peuvent être chiffrées
  • des thermomètres
  • des bascules
  • des convertisseurs

USB

Hérité du port série, l’Universal Serial Bus est apparu en 1996. Contrairement à la plupart des autres bus, où il est possible de choisir une tension au sein d’une plage, l’USB ne fonctionne qu’avec une tension de 5V.

Son rayon d’action est court (quelques mètres, rarement plus de 5) et ses évolutions lui on permis d’atteindre des débits de plusieurs gigabits par seconde.

Ces performances sont atteintes par l’USB 3, et sont totalement hors de portée des microcontrôleurs d’entrée de gamme. Néanmoins, il est possible de communiquer jusqu’à quelques mégabits par seconde avec un microcontrôleur approprié.

Un port USB standard est composé de quatre lignes :

  1. la masse GND
  2. la ligne D-
  3. la ligne D+
  4. et l’alimentation VCC, à 5V

On n’abordera pas ici le cas de l’USB 3, avec ses lignes supplémentaires.

L’USB permet des communications :

  • entre pairs
  • synchrones et asynchrones
  • en half-duplex

Sa mise en œuvre est plus complexe car il est nécessaire de déclarer plusieurs champs afin de pouvoir communiquer :

  • un identifiant fournisseur
  • un identifiant produit
  • un identifiant texte
  • un descripteur

L’implémentation d’une liaison USB nécessite un article plus approfondi.

Les autres

Bien sûr, il existe beaucoup d’autres type de liaisons, mais vous ne les retrouverez pas forcement au sein d’un microcontrôleur.

En voici quelques uns :

  • Ethernet : très connu en informatique, il est dédié au réseau, principalement pour les protocoles Internet (dont IP).
  • CAN : ce bus de terrain se retrouve notamment dans l’industrie et surtout dans l’automobile. Il équipe tous les véhicules automobiles depuis les années 1990, en tant que bus de pilotage et de diagnostic. L’accès au bus CAN permet de manipuler tous les composants d’un véhicule, les phares, l’injection, les serrures, les airbags,…
  • Bluetooth : liaison sans fil entre deux périphériques appairés, il peut être facile à mettre en œuvre au travers d’une liaison série. Présent dans tous les téléphones, ordinateurs portables et tablettes depuis le milieu des années 2000, il permet de connecter très facilement et sans-fil des projets avec un appareil faisant office d’interface.
  • ISM, Z-Wave, LIN, …

Limitations physiques

On a pu voir rapidement que les bus ont un champ d’action et un débit limité. Ces limitations sont généralement liées aux caractéristiques physiques des câbles ainsi qu’a leur blindage et leur agencement au sein de la ligne.

La limite électronique

La particularité d’un bus de communication est que l’ensemble d’une ligne (comprendre un câble) ne peut être qu’à un seul état électrique à un moment donné : VCC ou GND. Or, les électrons ne circulent pas instantanément dans les câbles ; par exemple on estime leur vitesse à environ 273 000 km/s dans le cuivre.

Ce qui veut dire que pour un câble de 273 000 km, un signal aura besoin d’une seconde pour être propagé de bout en bout. Si les données sont envoyées « par paquet », la latence aura peu d’impact. Mais dans le cadre de protocoles synchrones (SPI, I2C, …), la longueur du câble peut avoir une incidence sur le fonctionnement.

Bien entendu, on utilisera plus souvent des lignes beaucoup plus courtes, mais les limitations existent également en fonction des types de bus. Ainsi, un bus I2C ou SPI ne fonctionnera pas correctement au-delà de quelque mètres.

L’atténuation du signal

Lors de la circulation des électrons au sein du câble, de l’énergie est perdue sous forme de chaleur à cause de la résistance du câble ; on appelle cela l’effet Joule. S’il est négligeable en dessous d’un mètre il est important de le prendre en compte pour de plus grande distance.

L’induction et la permittivité jouent également un rôle dans l’atténuation.

On exprimera cette atténuation en décibel, et on peut la mesurer entre les tensions en entrée et en sortie du bus.

Les interférences internes

L’induction est un phénomène électromagnétique qui peut provoquer l’apparition d’un courant dans un conducteur à proximité d’un autre conducteur alimenté. Il est ainsi possible que des lignes interférent entre elles. Dans le cas de l’altération d’un signal, on parle de diaphonie. Pour éviter cela, on utilise des blindages et des paires torsadées.

Les interférences externes

Les faibles tensions utilisées en électronique sont d’autant plus sensibles lorsqu’elles sont utilisées dans des milieux assez hostiles, ou en mouvement (électrostatique).

Les hautes tensions ou les champs magnétiques à proximité peuvent fortement altérer le fonctionnement de tout dispositif électrique, dont les bus de communication.

Solutions techniques

Le blindage

Indispensable sur de longues distances, le blindage est présent principalement dans les câbles USB et dans certaines catégories de câbles Ethernet. Il s’agit le plus souvent d’un matériau métallique tressé.

Les paires torsadées

Comme son nom l’indique, une paire torsadée est constituée de deux lignes enroulées l’une autour de l’autre. Cette configuration permet de réduire de manière sensible les interférences entre les lignes.

la transmission différentielle

Au lieu de comparer la différence de potentielle entre une masse et une tension, on va comparer la différence de potentielle entre une tension et sa valeur opposée. Ce concept est très souvent utilisé notamment avec les paires torsadées : on considère en effet que les lignes sont si proches, qu’une interférence extérieure affecterait les deux lignes exactement de la même façon.

Ainsi, si au lieu de recevoir -5V et 5V, je reçois 2V et 12V, en faisant la différence des deux tensions, on obtient 10V à chaque fois.

Une réflexion au sujet de « Microcontrôleur – Chapitre 5 – Les bus de communication »

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*