Aller au contenu

Interfaces matérielles — Les bus qui font parler les composants

I2C, SPI, UART, RS-485 : connaître leurs caractéristiques exactes évite les bugs de timing, les problèmes de bruit sur câble et les arrachages de cheveux à 2 h du matin.


Introduction : pourquoi plusieurs protocoles coexistent

Aucun bus ne convient à toutes les situations. Un afficheur OLED connecté à 5 cm du MCU sur un PCB n'a pas les mêmes contraintes qu'un capteur de débit installé à 50 mètres dans une armoire industrielle. La distance, la vitesse, le nombre de devices, la topologie du câblage et la tolérance au bruit déterminent le choix du protocole.


I2C — Inter-Integrated Circuit

Principe

I2C (prononcé "I-squared-C" ou "I-two-C") est un bus synchrone, half-duplex, multi-maître/multi-esclave sur deux fils : SDA (données) et SCL (horloge). Chaque esclave possède une adresse sur 7 bits (128 adresses possibles, dont quelques-unes réservées), ce qui permet de connecter jusqu'à 112 devices distincts sur le même bus.

Les lignes SDA et SCL sont open-drain : elles ne peuvent qu'être tirées à la masse. Des résistances de pull-up (typiquement 4,7 kΩ à 100 kHz, 2,2 kΩ à 400 kHz) tirent les lignes vers VCC quand aucun device n'est actif.

Débits standardisés

Mode Débit Usage typique
Standard 100 kHz Capteurs lents (BME280, DS3231)
Fast 400 kHz Afficheurs OLED, IMU
Fast+ 1 MHz Périphériques haut débit sur PCB court
High-Speed 3,4 MHz Rare en IoT, contraintes capacitives sévères

Limites pratiques

La capacité parasite du bus limite la longueur du câble. Avec une résistance de pull-up de 4,7 kΩ, la longueur maximale est approximativement 1 mètre à 100 kHz. Des extendeurs I2C (P82B715, PCA9600) permettent d'allonger les lignes jusqu'à 20 m en modifiant les niveaux de courant.

Un conflit d'adresse (deux sensors avec la même adresse I2C fixe) se résout avec un multiplexeur I2C (TCA9548A : 8 canaux, adressable).


SPI — Serial Peripheral Interface

Principe

SPI est un bus synchrone, full-duplex, point-à-point ou étoile sur quatre fils : MOSI (Master Out Slave In), MISO (Master In Slave Out), SCLK (horloge), et SS/CS (Chip Select, un par esclave). Pas d'adressage : chaque esclave est sélectionné individuellement par sa ligne CS.

Cette architecture apporte une bande passante nettement supérieure à I2C : les débits pratiques vont de 1 à 50 MHz sur PCB, selon le SoC et la longueur des pistes.

Modes SPI (CPOL / CPHA)

flowchart LR
    A["Mode 0\nCPOL=0, CPHA=0\nDonnées sur front montant"] 
    B["Mode 1\nCPOL=0, CPHA=1\nDonnées sur front descendant"]
    C["Mode 2\nCPOL=1, CPHA=0\nHorloge idle=HIGH"]
    D["Mode 3\nCPOL=1, CPHA=1\nLe plus robuste"]
    A --- B --- C --- D

Le mode 0 est le plus courant (BME280, NRF24L01, écrans TFT). Toujours vérifier dans le datasheet du composant.

Forces et limites

Forces : débits élevés, full-duplex, pas de résistances de pull-up, protocole simple à implémenter en hardware.

Limites : une ligne CS par esclave (5 capteurs = 5 GPIO), pas d'accusé de réception (ACK), pas de gestion de conflit de bus, distance limitée (< 1 m sans drivers différentiels).


UART — Universal Asynchronous Receiver/Transmitter

Principe

UART est le protocole série le plus ancien et le plus simple : deux fils (TX et RX), asynchrone (pas d'horloge partagée), point-à-point. L'émetteur et le récepteur s'accordent sur un débit (baud rate) commun, le nombre de bits de données (généralement 8), la parité (None/Even/Odd), et les bits de stop (1 ou 2).

Débits courants

Les débits standardisés vont de 1 200 à 3 000 000 bauds. En IoT embarqué, 115 200 bauds est la valeur par défaut la plus répandue. Les modules GPS, GSM, ESP-AT, et presque tous les modules radio communiquent par UART.

RS-232 et RS-485 : extensions de l'UART

RS-232 change les niveaux de tension (±12 V), ce qui améliore l'immunité au bruit sur de courtes distances (< 15 m). Les puces MAX232 et MAX3232 assurent la conversion 3,3 V ↔ RS-232.

RS-485 est une version différentielle d'UART : la paire torsadée réduit le bruit, les niveaux différentiels permettent des distances jusqu'à 1 200 m à 100 kbauds, et jusqu'à 32 émetteurs/récepteurs (ou 256 avec des unités de charge 1/8) sur le même bus. C'est le protocole de terrain industriel par excellence, utilisé par Modbus RTU, DMX512, et de nombreux automates.


GPIO — Général Purpose Input/Output

Fonctions d'un GPIO

Une broche GPIO peut être configurée en :

  • Sortie numérique : piloter une LED, activer un signal CE, déclencher un reset
  • Entrée numérique : lire un bouton, un contact sec, un signal logique
  • Interruption externe : déclencher une routine sur front montant, descendant, ou les deux

Pull-up et pull-down

Une entrée GPIO non connectée ("flottante") est indéterminée. Les résistances de pull-up (vers VCC) ou pull-down (vers GND) — internes au MCU ou externes (10 kΩ typique) — maintiennent un état connu au repos.

Précautions électriques

  • Courant max par pin GPIO : 8–40 mA selon MCU. Pour piloter une LED de 20 mA directement, vérifier la fiche du MCU.
  • Tension tolérée en entrée : dépend du MCU. Un signal 5 V sur un GPIO 3,3 V peut détruire le composant. Utiliser un diviseur résistif ou un translateur de niveau.

ADC / DAC — Conversion Analogique-Numérique et Numérique-Analogique

ADC

L'ADC mesure une tension analogique et la convertit en valeur numérique sur N bits. Les caractéristiques clés :

Paramètre Typique embarqué Haute précision
Résolution 10–12 bits 16–24 bits
Taux d'échantillonnage 100 kSPS–1 MSPS 1–100 kSPS
INL (non-linéarité intégrale) ±2 LSB ±0,5 LSB
Référence interne 1,2 V typ. 2,048 V ou 4,096 V

Les MCU embarqués (STM32, ESP32) intègrent des ADC SAR (Successive Approximation Register) 12 bits, généralement suffisants pour de l'instrumentation courante. Pour de la mesure de précision (balance, analyseur de gaz), un ADC externe sigma-delta 24 bits (ADS1256, HX711) est préférable.

DAC

Le DAC fait l'inverse : convertit une valeur numérique en tension analogique. Utile pour piloter un actionneur 0–10 V, générer un signal de référence, ou contrôler un module audio. Les STM32F4 et supérieurs intègrent des DAC 12 bits sur certaines broches.


1-Wire — Un seul fil de données

Le protocole 1-Wire de Dallas (Maxim Integrated) utilise une seule ligne de données (plus la masse) pour adresser plusieurs capteurs en chaîne. Chaque composant possède une adresse unique sur 64 bits gravée en usine.

Le capteur de température DS18B20 est la référence 1-Wire en IoT : plage -55°C/+125°C, précision ±0,5°C, résolution configurable 9–12 bits, parasitic power possible (alimentation par la ligne de données sans fil VCC séparé). Le débit est lent (~1 kbps) mais amplement suffisant pour des mesures de température.


Tableau comparatif des interfaces

Interface Débit max Distance max Nb. de devices Fils requis Complexité Usage typique
I2C 1 MHz (Fast+) ~1 m (std) 112 2 (+ masse) Faible Capteurs sur PCB
SPI 50 MHz ~1 m Illimité (1 CS/device) 3 + N×CS Faible Mémoire, afficheurs
UART 3 Mbauds ~15 m (TTL) 2 (point-à-point) 2 Très faible Modules radio, GPS
RS-485 10 Mbauds 1 200 m 32–256 2 (paire diff.) Modérée Modbus, terrain
GPIO N/A (numérique) ~1 m (CMOS) 1 par pin 1 Nulle Signaux logiques
ADC Varie (SPS) < 1 m 1 par canal 1 (analogique) Faible Mesure physique
1-Wire ~1 kbps ~100 m Illimité (adressage) 1 (+ masse) Modérée DS18B20, iButton

Topologies des bus

flowchart TD
    subgraph I2C_multidrop["I2C — Multi-drop"]
        MCU1[MCU\nMaître] -->|SDA/SCL| B1[Capteur\n0x48]
        MCU1 -->|SDA/SCL| B2[Capteur\n0x68]
        MCU1 -->|SDA/SCL| B3[Afficheur\n0x3C]
    end

    subgraph SPI_star["SPI — Étoile (CS séparés)"]
        MCU2[MCU\nMaître] -->|MOSI/MISO/SCLK + CS1| C1[Flash SPI]
        MCU2 -->|MOSI/MISO/SCLK + CS2| C2[Capteur SPI]
        MCU2 -->|MOSI/MISO/SCLK + CS3| C3[Écran TFT]
    end

    subgraph UART_pp["UART — Point-à-point et RS-485"]
        MCU3[MCU] -->|TX/RX| D1[Module GPS\nUART TTL]
        MCU3 -->|TX/RX + DE| D2[Bus RS-485\nModbus RTU]
        D2 -->|A/B| D3[Esclave 1]
        D2 -->|A/B| D4[Esclave 2]
        D2 -->|A/B| D5[Esclave 3]
    end

Ce qu'il faut retenir

  • I2C : 2 fils, multi-device avec adressage, limité à ~1 m et ~1 MHz — idéal pour capteurs sur PCB.
  • SPI : 4 fils (+ 1 CS par esclave), débits élevés, full-duplex — idéal pour mémoires et afficheurs.
  • UART : le plus simple, point-à-point, vitesse fixe commune — universellement utilisé pour les modules.
  • RS-485 : UART différentiel, 1 200 m, multi-device — le protocole de terrain industriel par excellence.
  • ADC intégré (12 bits) est suffisant pour la plupart des mesures ; pour la précision, un ADC sigma-delta externe 24 bits s'impose.

Chapitre suivant : Capteurs — température, humidité, IMU, vision : comment sélectionner et câbler les transducteurs physiques d'un système IoT.