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.