Outils pour utilisateurs

Outils du site


cours:informatique:iot:iot_par_la_pratique_inria:220_bus_de_donnees

Les bus de données UART, I2C, SPI

Les micro-contrôleurs actuels proposent plusieurs types de bus de données. Leur rôle est de relier les entrées/sorties du micro-contrôleur vers les différents périphériques d'un système embarqué. Généralement, le type de périphérique impose (par sa conception/réalisation) un bus de données particulier.

Le bus de données UART

Fonctionnement

Universal Asynchronous Receiver Transmitter ou UART est un bus de communication point à point qui permet de faire transiter des données entre 2 MCUs ou 1 MCU et un circuit intégré (voir exemples ci-dessous).

L'UART utilise deux fils distincts TX et RX pour des flux de messages montants et descendants (bi-directionnels) plus un fil de référence GND relié à la masse.

La transmission est réalisée octet par octet. Le code embarqué de l'émetteur copie l'octet dans l'UART émetteur qui va le transférer bit par bit vers l'UART du récepteur. Une fois que les bits sont capturés pour reconstruire un octet complet, ce dernier est alors remonté au code embarqué du récepteur.

L'implémentation du protocole utilise deux niveaux de tension type TTL pour coder l'état d'un bit:

  • Le niveau logique haut ou “1” correspondant à 5V ou 3.3V (VCC) en fonction du niveau de voltage de l'alimentation du MCU;
  • Le niveau logique bas ou “0” correspondant à 0V (GND).

Le niveau logique par défaut est le 1 (pas de trafic). Une trame UART est décomposée en bits de la manière suivante:

  • Start: un bit à 0 servant à la synchronisation avec le récepteur
  • Données: entre 5 et 9 bits. Attention, les bits sont envoyés dans l'ordre du bit de poids faible (LSB Least Significant Bit) au bit de poids fort (MSB ou Most Significant Bit). De manière générique, les bits de données constituent un symbole. Pour la valeur 8, les données correspondent en particulier à un octet.
  • Parité (optionnelle): Paire ou Impaire;
  • Fin: nombre de bits à 1 (1, 1.5 ou 2).

La vitesse de l'UART est définie en bps, c'est à dire le nombre de bits transmis en une seconde. Cette vitesse est paramétrable avec différentes vitesses possibles, par exemple de 4800 bps jusqu'à 921600 bps.

Attention, les deux UARTS en relation doivent impérativement avoir la même configuration pour pouvoir correctement décoder les trames.

Cas d'usages

  • Interaction avec le MCU : on peut brancher via les UART un MCU à un ordinateur afin d'afficher des messages (printf) et d'attendre des messages à saisir par l'utilisateur (scanf). UART MCU ↔ UART ordinateur ↔ terminal.
  • Module GPS trames NMEA : les composants de type GPS sont typiquement branchés derrière un UART afin de remonter des trames GPS au MCU. Ces trames GPS sont utiles pour géolocaliser un objet connecté ou pour synchronisation de l'horloge interne de l'objet. UART GPS ↔ UART MCU

Le bus de données I2C

Fonctionnement

Le bus I2C1) a été développé par Philipps dans les années 1980 afin de pouvoir relier un MCU aux différents circuits intégrés d'un téléviseur moderne. Historiquement, on le retrouve donc dans énormément de circuits dédiés à l'audio/vidéo.

Il s'agit d'un bus série qui permet de faire communiquer entre eux des composants électroniques grâce à trois fils ou lignes. L'implémentation du protocole utilise deux lignes de signaux plus une de référence reliée à la masse.

  • La ligne SDA 2): sert à transférer les données;
  • La ligne SCL 3): permet de cadencer temporellement l'envoi des messages sur la ligne SDA;
  • La ligne GND (Ground ou masse): sert de référence au niveau haut et bas des lignes SDA et SCL;

Les échanges de données sont bi-directionnels, mais sur un modèle Maître-Esclave. Les messages sont toujours à l'initiative du Maître. Le bus I2C peut également être multi-maîtres. Chaque abonné (Maître ou Esclave) possède une adresse sur 7 bits autorisant un maximum de 128 adresses sur le même bus. Chaque octet transféré est acquitté.

Les débits du bus I2C peuvent atteindre 100 kbits/s (standard) pour la première version du protocole, jusqu'à 400 kbits/s (fast) et 3,4 Mbits/s (HS) pour les dernières révisions du protocole.

Les lignes SDA et SCL utilisent deux niveaux logiques: bas ou “0” et haut ou “1”. Le mode d'état au repos du bus I2C correspond à l'état niveau haut pour les lignes SDA et SCL.

Synchronisation SDA et SCL

Les signaux entre SDA et SCL sont synchronisés. Une donnée de la ligne SDA est considérée comme valide si la ligne SCL est au niveau haut. La ligne SDA maintient la donnée (0 ou 1) tant que le SCL est au niveau haut. Une fois SCL repassé au niveau bas, SDA peut alors changer de valeur pour le bit suivant de l'octet à transférer.

Déroulement d'une communication sur le bus I2C

  1. Prise de parole sur le bus par le Maître
  2. Condition de départ (Start) par le Maître: passage de SDA de 1 à 0 tout en gardant SCL à 1. La ligne SCL est cadencée par le Maître.
  3. Envoi de l'adresse du destinataire (7 bits) + mode d'accès lecture/écriture (1 bit) par le Maître
  4. Acquittement par l'Esclave
    1. Transfert des données en lecture par l'Esclave puis Acquittement du Maître
    2. Transfert des données en écriture par le Maître puis Acquittement de l'Esclave
  5. Condition d'arrêt (Stop) par le Maître : passage de SDA de 0 à 1 tout en gardant SCL à 1.

Cas d'usages

  • Interroger un capteur I2C par le MCU
  • Relier deux MCU en filaire pour échanger des données. Attention, la communication est uniquement à l'initiative du Maitre. Par exemples:
    • Deux MCUs identiques : Arduino UNO ↔ Arduino UNO
    • Deux MCUs différents : Arduino UNO ↔ Raspberry Pi
  • Lire et écrire des données dans une Mémoire Flash EEPROM reliée en I2C avec le MCU

Le bus de données SPI

Fonctionnement

Le bus Serial Peripheral Interface ou SPI a été conçu dans les années 1980 par Motorola. La liaison SPI 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 bus SPI est composé de deux lignes de données et deux lignes de signal, toutes unidirectionnelles:

  • MOSI 4): cette ligne permet au maître de transmettre des données à l’esclave;
  • MISO (Master In Slave Out)): cette ligne permet à l'esclave de transmettre des données au maître;
  • SCK5): Signal d’horloge, généré par le maître, qui synchronise la transmission. La fréquence de ce signal est fixée par le maître et est programmable.
  • SS 6): Ce signal 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.

Au niveau du déroulement des échanges de messages:

  • Le Maître active le cadencement de l'horloge;
  • Le Maître sélectionne un Esclave par la ligne SS (convertisseur, registre à décalage, mémoire, ..). Chaque esclave n’est actif que lorsqu’il est sélectionné.
  • Les données peuvent alors être échangées dans les deux entre le Maître et l'Esclave en utilisant les lignes MISO et MOSI.

Tout comme le bus I2C, SPI fonctionne en mode Maître-Esclave. Par contre il ne propose pas de manière standardisée un mécanisme d'acquittement entre le Maître et l'Esclave. SPI est aussi plus flexible que I2C sur les nombres de bits à transmettre par message et propose un débit plus important jusqu'à 20 Mbits/s.

Cas d'usages

  • Échanger des données entre le MCU et une puce radio;
  • Lire et écrire des données dans une Mémoire Flash EEPROM reliée en SPI avec le MCU.

Synthèse et éléments de choix

L'UART offre la souplesse d'une communication point à point bi-directionnelle pouvant être à l'initiative de chacune des extrémités. Cependant le format des trames est relativement rigide et le débit peut être insuffisant dans certains cas.

A l'opposé de l'UART, les bus I2C et SPI proposent des échanges de données sur des débits beaucoup plus importants. Cependant ils imposent un mode de fonctionnement Maître/Esclave pouvant être bloquant pour initier une communication. Le protocole I2C spécifie le format des données et sécurise les échanges grâce à des acquittements. A l'opposé, SPI n'impose aucun format particulier de message qui est à la discrétion du concepteur de l'application. SPI procure donc une plus grande souplesse pour le transport des données et un meilleur débit.

Au niveau du nombre de composants supportés, I2C supporte 128 adresses, réparties en série de trois lignes. Le Maître du bus SPI devra posséder autant de broches nécessaires pour les lignes SS dédiées vers chacun de ses Esclaves.

Quiz

A quoi sert un bus de donnée ?

  • A échanger des données entre un MCU et un composant (par ex. un capteur);
  • A échanger des données entre deux MCU identiques;
  • A échanger des données entre deux MCU différents;
  • A échanger des données entre un MCU et Internet via une puce communicante branchée sur un bus de communication.

Quel est le bus de donnée d'un objet connecté contraint autorisant les transferts les plus rapides ?

  • SPI

Quel est le bus de donnée fiable qui acquitte les échanges de données?

  • I2C
1)
Inter-Integrated Circuit
2)
Serial DAta
3)
Serial CLock
4)
Master Out Slave In
5)
SPI Serial ClocK
6)
Slave Select
cours/informatique/iot/iot_par_la_pratique_inria/220_bus_de_donnees.txt · Dernière modification : 2023/03/20 22:44 de yoann