← Retour au blog

I2C, SPI et UART : ce qu'ils sont et quand utiliser chaque bus

À l'intérieur de presque n'importe quel produit électronique, les puces doivent communiquer entre elles : le microcontrôleur lit un capteur, pilote un écran ou enregistre des données dans une mémoire. Pour cette conversation, on utilise des bus de communication série, et les trois plus courants sont UART, SPI et I2C. Choisir le bon a une incidence sur le nombre de broches, la vitesse, la consommation et la complexité du firmware.

MCU UART · 2 fils (TX/RX) Périphérique SPI · 4 fils (MOSI/MISO/SCK/CS) Périphérique I2C · 2 fils (SDA/SCL) Périphérique
Les trois bus série les plus utilisés pour connecter un microcontrôleur à ses périphériques.

UART : le bus série le plus simple

UART (Universal Asynchronous Receiver-Transmitter) relie deux dispositifs point à point avec seulement deux lignes : TX (transmission) et RX (réception). Il est asynchrone : il n'y a pas de ligne d'horloge, donc les deux extrémités doivent convenir à l'avance de la vitesse (le baud rate, p. ex. 115200 bps).

  • Avantages : très simple, seulement 2 fils, idéal pour des liaisons un à un.
  • Limites : ne connecte que deux dispositifs, vitesse modérée et sensible aux erreurs si les horloges ne concordent pas.
  • Quand l'utiliser : console de débogage, GPS, modules Bluetooth/WiFi, communication avec un PC.

SPI : le plus rapide

SPI (Serial Peripheral Interface) est un bus synchrone maître-esclave à haute vitesse avec quatre lignes : MOSI, MISO, SCK (horloge) et CS (sélection de puce). Il est full-duplex : il envoie et reçoit en même temps. Chaque esclave a besoin de sa propre ligne CS, donc plus de dispositifs signifie plus de broches.

  • Avantages : très rapide (des dizaines de MHz), full-duplex, sans adressage.
  • Limites : beaucoup de broches (une CS par dispositif), conçu pour de courtes distances sur la carte.
  • Quand l'utiliser : écrans, mémoires flash, ADC rapides, cartes SD, capteurs à haut débit de données.

I2C : beaucoup de dispositifs, seulement deux fils

I2C (Inter-Integrated Circuit) est un bus synchrone adressable qui connecte de nombreux dispositifs avec seulement deux lignes partagées : SDA (données) et SCL (horloge). Chaque dispositif possède une adresse unique, et les deux lignes nécessitent des résistances de pull-up.

  • Avantages : seulement 2 fils pour de nombreux dispositifs, adressage intégré, économise des broches.
  • Limites : plus lent que SPI, half-duplex, nécessite des pull-ups et une bonne conception si le bus est long.
  • Quand l'utiliser : capteurs (température, IMU, pression), EEPROM, expandeurs d'E/S, RTC.

Tableau comparatif : I2C vs SPI vs UART

CaractéristiqueUARTSPII2C
Fils2 (TX, RX)4 (MOSI, MISO, SCK, CS)2 (SDA, SCL)
HorlogeNon (asynchrone)Oui (synchrone)Oui (synchrone)
Vitesse typiqueBasse-moyenneTrès élevée (des dizaines de MHz)Moyenne (100k–3,4M)
Nbre de dispositifs2 (point à point)Plusieurs (1 CS par esclave)Nombreux (par adresse)
DuplexFull-duplexFull-duplexHalf-duplex
Idéal pourLiaisons 1 à 1, débogageVitesse et débit de donnéesBeaucoup de capteurs avec peu de broches

Comment choisir et erreurs courantes

  • Si tu as besoin de vitesse (écran, mémoire), choisis SPI. Si tu dois connecter beaucoup de capteurs en économisant des broches, choisis I2C. Pour une liaison simple un à un ou du débogage, UART.
  • En I2C, n'oublie pas les résistances de pull-up sur SDA et SCL : c'est l'erreur la plus courante.
  • Attention aux niveaux de tension (3,3 V vs 5 V) : une incompatibilité peut endommager la puce ou empêcher la communication.
  • SPI et I2C sont prévus pour de courtes distances sur la carte ; pour de longs trajets ou entre équipements, envisage RS-485 ou CAN.

Conclusion

UART, SPI et I2C résolvent des problèmes différents : simplicité, vitesse, ou de nombreux dispositifs avec peu de broches. Bien choisir dès le départ évite les reconceptions de carte et les maux de tête côté firmware. Chez Regular Solids, nous intégrons et déboguons chaque jour des bus I2C, SPI, UART, CAN et RS-485 entre capteurs, périphériques et systèmes embarqués. Si tu as un produit avec plusieurs puces qui doivent se comprendre, parlons-en.