Faut-il utiliser UART, I2C ou SPI pour votre circuit ? Le bon choix dépend du nombre d’appareils à connecter, de la vitesse requise et du nombre de broches de microcontrôleur disponibles. Cet article compare l’UART, l’I2C et le SPI en termes réels, vous aidant à choisir le meilleur protocole pour le débogage, les capteurs, les écrans, les puces mémoire et les modules embarqués.

Qu’est-ce qu’un UART ?

UART est une interface de communication série qui envoie et reçoit des données sans ligne d’horloge séparée. À la place, les deux appareils doivent utiliser le même débit en bauds et le même format de données. Une connexion UART de base utilise le TX pour transmettre les données, le RX pour la réception, et une masse partagée.
Dans la communication UART, la broche TX d’un appareil se connecte à la broche RX de l’autre appareil. Comme il n’y a pas d’horloge partagée, le timing doit être précis. Si la fréquence de bauds ou les réglages d’images sont incorrects, le récepteur peut afficher des données illisibles ou corrompues.
L’UART est courant dans le débogage série, les modules GPS, les modules Bluetooth, les modules Wi-Fi et la communication microcontrôleur-ordinateur. C’est facile à configurer et fonctionne bien lorsque seuls deux appareils doivent échanger des données.
Quilles UART
| Pin | Fonction | |
|---|---|---|
| TX | Envoie des données | |
| RX | Reçoit les données | |
| GND | Référence commune au sol | |
| VCC | Alimentation électrique, lorsque le module | en a besoin |
| Avantages | Limitations | |
| Câblage simple | Principalement utilisé pour la réduction des deux appareils | |
| Pas besoin de ligne d’horloge | Le débit en bauds doit correspondre sur les deux appareils | |
| Prend en charge la communication en duplex complet | Pas d’adressage intégré de périphérique | |
| Facile à tester avec des moniteurs série | Pas adapté à de nombreux appareils sur un seul bus partagé | |
| Largement supporté par des microcontrôleurs et des modules | L’UART à réduction logique n’est pas destiné aux câbles prolongés sans pilote |
Qu’est-ce que l’I2C ?

I2C est un bus série synchrone qui utilise deux lignes partagées : SDA pour les données et SCL pour l’horloge. Contrairement à UART, l’I2C peut connecter plusieurs appareils sur le même bus. Chaque appareil a une adresse, permettant au contrôleur de choisir avec quel appareil il souhaite communiquer.
L’I2C est utilisé lorsqu’un microcontrôleur doit se connecter à plusieurs périphériques à vitesse réduite en utilisant seulement deux broches de signal. Les capteurs, les horloges temps réel, les EEPROM, les extenseurs GPIO et les petits écrans utilisent souvent l’I2C.
L’I2C nécessite des résistances de tirage sur les lignes SDA et SCL. Ces résistances aident le bus à revenir à un état logiquement augmenté. Si les tractions manquent, sont trop faibles ou trop fortes, le bus peut devenir instable. Des fils allongés, trop d’appareils et une capacité accrue du bus peuvent également causer des problèmes de communication.
Broches I2C
| Pin | Fonction |
|---|---|
| SDA | Ligne de données série |
| SCL | Ligne d’horloge série |
| GND | Référence commune au sol |
| VCC | Alimentation pour appareils connectés |
Avantages et limitations de l’I2C
| Avantages | Limitations |
|---|---|
| Utilise seulement deux lignes de signalisation | Plus lent que SPI |
| Prend en charge plusieurs appareils sur un même bus | Nécessite des résistances de tirage vers le haut |
| Utilise l’adressage intégré des dispositifs | Des conflits d’adresses peuvent survenir |
| Sauvegarde les broches du microcontrôleur | Limites de capacité du bus : réduction du fil et nombre d’appareils |
| Bon pour les capteurs et les petits périphériques | Communication demi-duplex uniquement |
Qu’est-ce que le SPI ?

SPI est une interface de communication série synchrone qui utilise une ligne d’horloge, des lignes de données séparées et des lignes de sélection de puce. Une connexion SPI de base utilise MOSI, MISO, SCLK et CS. MOSI envoie les données du contrôleur vers le périphérique, tandis que MISO renvoie les données du périphérique au contrôleur.
Le SPI est plus rapide que l’I2C dans de nombreux systèmes embarqués car il utilise des lignes d’émission et de réception séparées. Il supporte également la communication en duplex complet, permettant l’envoi et la réception simultanés de données. Cela rend le SPI utile pour les écrans, cartes SD, mémoires flash, ADC, DAC et autres appareils nécessitant un transfert de données plus rapide.
SPI n’utilise pas d’adresses d’appareil. À la place, chaque périphérique est sélectionné via une ligne de sélection de puce. Cela rend le contrôle des appareils direct, mais cela signifie aussi que plus de broches sont nécessaires lorsque davantage de dispositifs SPI sont ajoutés.
Broches SPI
| Pin | Fonction |
|---|---|
| MOSI | Données du contrôleur vers le périphérique |
| MISO | Données du périphérique vers le contrôleur |
| SCLK | Horloge série |
| CS / SS | Sélection de puce ou sélection esclave |
| GND | Référence commune au sol |
| VCC | Alimentation pour appareils connectés |
Avantages et limitations du SPI
| Avantages | Limitations |
|---|---|
| Transfert rapide de données | Utilise plus de broches que l’UART ou l’I2C |
| Prend en charge la communication en duplex complet | Chaque appareil nécessite souvent une ligne de sélection de puce distincte |
| Bon pour les écrans et la mémoire | Pas d’adressage intégré |
| Aucune résistance de tirage vers le haut requise pour un fonctionnement normal | Le mode horloge doit correspondre à l’appareil |
| Fréquence d’horloge flexible | Le câblage devient plus complexe avec de nombreux appareils |
Différences entre UART, I2C et SPI
Câblage et nombre de goupilles
UART utilise TX et RX pour une réduction basique à deux appareils. I2C utilise SDA et SCL pour tous les appareils sur le même bus, ce qui permet d’économiser des broches. SPI utilise MOSI, MISO, SCLK et une ligne de sélection de puce par appareil, ce qui nécessite plus de broches à mesure que plus de périphériques sont ajoutés.
| Configuration des appareils | UART | I2C | SPI |
|---|---|---|---|
| Un périphérique | 2 lignes de signalisation | 2 lignes de signalisation | 4 lignes de signalisation |
| Deux périphériques | Gestion supplémentaire du port UART ou du logiciel | Même 2 lignes de signal si les adresses diffèrent | 3 lignes partagées plus 2 lignes CS |
| Quatre périphériques | Plusieurs ports UART ou une logique de contrôle supplémentaire | Même 2 lignes de signal si les adresses diffèrent | 3 lignes partagées plus 4 lignes CS |
Vitesse et débit
SPI est le meilleur choix pour un transfert de données rapide. L’I2C est meilleur pour les appareils à faible vitesse qui envoient de petites quantités de données. La vitesse de l’UART est déterminée par le débit en bauds et est souvent suffisante pour les messages série, les données de commande et le débogage.
| Protocole | Comportement de vitesse | Signification pratique |
|---|---|---|
| UART | Basé sur le débit en baud | Bon pour la réduction en série, les données GPS et les commandes de module |
| I2C | Basé sur la vitesse du bus et le comportement de traction | Bon pour les capteurs, RTC, EEPROM et données de configuration |
| SPI | En fonction de la fréquence d’horloge et des limites des appareils | Bon pour les écrans, cartes SD, ADC, DAC et mémoire flash |
Nombre d’appareils
L’I2C est l’option la plus simple lorsque plusieurs appareils à faible vitesse doivent partager un même bus. SPI peut également prendre en charge de nombreux appareils, mais chaque appareil nécessite une ligne de sélection de puce distincte. UART est principalement conçu pour une communication point à point simple.
Horloge et synchronisation
UART n’utilise pas d’horloge partagée, donc les deux appareils doivent s’accorder sur le débit en bauds. I2C et SPI utilisent une ligne d’horloge contrôlée par l’appareil principal. Cela rend le timing plus direct, mais cela signifie aussi que la ligne d’horloge doit être câblée et acheminée correctement.
Distance et tolérance au bruit
UART, I2C et SPI sont les meilleurs pour la communication à courte distance, comme les pistes PCB ou les fils courts de modules. Les signaux bruts à faible logique peuvent devenir peu fiables sur des câbles étendus ou dans des environnements bruyants. Pour une distance prolongée ou une résistance au bruit plus forte, utilisez plutôt RS-485, CAN, USB ou Ethernet.
Complexité logicielle et matérielle
UART est le plus facile à configurer pour une réduction simple. L’I2C nécessite la gestion des adresses, des résistances de pull-up et du balayage du bus lors du débogage. Le SPI nécessite une polarité d’horloge correcte, une phase d’horloge, un contrôle de sélection de puce et un timing précis.
Quel protocole choisir ?
Choisissez le protocole en fonction de la vitesse, du câblage, du nombre d’appareils et des besoins de fiabilité de votre projet. Le tableau ci-dessous donne le meilleur guide de sélection.
| Cas d’utilisation | Meilleur choix | Raison |
|---|---|---|
| Débogage en série | UART | Connexion simple TX/RX |
| Module GPS | UART | De nombreux modules GPS utilisent une sortie série |
| Module série Bluetooth | UART | Interface commune de commandes et de données |
| Commandes du module Wi-Fi | UART | Souvent utilisé pour le contrôle de commande anti-char |
| Capteurs multiples à vitesse réduite | I2C | Plusieurs appareils peuvent partager deux fils |
| Horloge temps réel | I2C | Interface RTC commune |
| EEPROM | I2C ou SPI | I2C économise les broches, SPI donne un accès plus rapide |
| Petit écran OLED | I2C | I2C économise les broches, SPI se rafraîchit plus vite |
| Affichage TFT | SPI | Mieux pour des mises à jour d’écran plus rapides |
| Carte SD | SPI | Adapté pour augmenter le transfert de données |
| Mémoire flash externe | SPI | Parfait pour un accès plus rapide à la mémoire |
| ADC rapide ou DAC | SPI | Mieux pour des débits de données accrus |
| Très limités de pins MCU | I2C | Deux lignes de signal peuvent supporter de nombreux dispositifs |
Utilisez UART lorsque la connexion est simple et directe. Utilisez I2C lorsque plusieurs appareils réduits doivent partager un bus compact. Utilisez SPI quand la vitesse compte plus que le nombre de quilles.
Conseils de performance et de conception dans le monde réel

UART, I2C et SPI peuvent tous bien fonctionner lorsque le câblage est court, que la tension réduite est correcte et que la disposition est propre. La plupart des problèmes surviennent lorsque les fils sont trop longs, que la terre est mauvaise, que la vitesse est trop élevée ou que le bus n’est pas conçu correctement.
Pour l’UART, connectez toujours le TX au RX et le RX au TX. Les deux dispositifs doivent partager une masse et utiliser le même débit en bauds. Si la connexion doit passer par un câble étendu, utilisez une interface appropriée telle que RS-232 ou RS-485 au lieu d’un UART à réduction logique brute.
Pour l’I2C, gardez les SDA et SCL courtes et utilisez des résistances pull-up appropriées. Trop de capacité due à des fils étendus ou à de nombreux appareils peut réduire les bords du signal et provoquer des manques de communication. Si le bus est instable, réduisez la vitesse, raccourcissez les fils ou utilisez un tampon I2C.
Pour SPI, gardez les lignes d’horloge et de données courtes et propres. Le SCLK est sensible au timing, donc un mauvais routage peut entraîner des données incorrectes à des vitesses élevées. Si la communication SPI échoue, réduisez la fréquence d’horloge et vérifiez le timing de sélection de la puce.
Problèmes courants et dépannage
| Protocole | Problème courant | Cause probable | Fix |
|---|---|---|---|
| UART | Texte brouillé | Mauvais taux de bauds | Correspondance du débit de bauds sur les deux appareils |
| UART | Aucune donnée reçue | TX et RX non croisés | Connecter TX à RX et RX à TX |
| UART | Données aléatoires | Mauvaise référence au sol | Reliez les terrains ensemble |
| UART | La communication s’arrête | Désaccord de tension logique | Vérifiez la compatibilité 3,3 V et 5 V |
| I2C | Appareil non détecté | Mauvaise adresse | Vérifier la fiche technique ou scanner le bus |
| I2C | Bus bloqué réduit | SDA ou SCL maintenu réduit | Réinitialisez l’appareil ou redémarrez le bus |
| I2C | Lectures instables | Tractions manquantes ou faibles | Ajouter des résistances de tirage adaptées |
| I2C | Conflit d’adresses | Deux appareils partagent la même adresse | Changer de broche d’adresse ou utiliser un multiplexeur |
| SPI | Pas de réponse | Mauvaise broche de sélection de puce | Vérifiez le câblage et le code CS |
| SPI | Données erronées | Mauvais mode d’horloge | Associez le CPOL et le CPHA à la fiche technique |
| SPI | Fonctionne uniquement à vitesse réduite | Problème de synchronisation ou de disposition des feux | Réduire la fréquence d’horloge ou améliorer le routage |
| SPI | Plusieurs appareils répondent | Plus d’un CS actif | Garder les appareils inactifs désélectionnés |
Un analyseur logique est utile pour vérifier les trames UART, les adresses I2C, les signaux ACK, le mode d’horloge SPI et le comportement de sélection de puce.
Conclusion
Le choix entre UART, I2C et SPI dépend de la vitesse de votre projet, du câblage et du nombre d’appareils. Utilisez UART pour une communication simple entre deux appareils et un débogage, I2C pour plusieurs périphériques à vitesse réduite avec moins de broches, et SPI pour des appareils plus rapides tels que les écrans, cartes SD, mémoire flash et convertisseurs à vitesse accrue. Pour obtenir le meilleur résultat, adaptez le protocole aux exigences de l’appareil, maintenez le câblage court, vérifiez la réduction de la tension et vérifiez les réglages de timing avant de finaliser la conception.
Foire aux questions [FAQ]
Q1. Lequel est meilleur : UART, I2C ou SPI ?
UART est idéal pour une communication simple entre deux appareils. L’I2C est idéal pour connecter plusieurs appareils à vitesse réduite avec moins de broches. Le SPI est meilleur lorsque le transfert de données est plus rapide.
Q2. SPI est-il plus rapide que I2C et UART ?
Oui, SPI est souvent plus rapide car il utilise une ligne d’horloge et des lignes de données séparées. L’I2C est réduit mais économise les broches. La vitesse de l’UART dépend du débit en bauds sélectionné.
Q3. Quand devrais-je utiliser I2C au lieu de SPI ?
Utilisez l’I2C lorsque vous devez connecter plusieurs capteurs ou petits périphériques en utilisant seulement deux lignes de signal. Il est utile pour les RTC, EEPROM, extensions GPIO et petits écrans. Assurez-vous simplement que les résistances de tirage sont correctes.
Q4. Quand devrais-je utiliser l’UART ?
Utilisez UART pour des modules GPS simples, des modules Bluetooth et des interfaces de commande Wi-Fi réduites de point à point. C’est facile à câbler et à tester. Il n’est pas adapté à de nombreux appareils sur un seul bus partagé.
Q5. L’UART, l’I2C ou le SPI peuvent-ils fonctionner sur des câbles étendus ?
Ils sont meilleurs pour les pistes courtes de PCB ou les fils courts de module. Les câbles allongés peuvent provoquer du bruit, des problèmes de synchronisation et des signaux instables. Pour de longues distances, utilisez RS-485, CAN, USB ou Ethernet.
Q6. Comment puis-je dépanner les problèmes d’UART, I2C ou SPI ?
Pour l’UART, vérifiez le câblage TX/RX, la masse et le débit en bauds. Pour l’I2C, vérifiez l’adresse, les résistances de tirage et les lignes SDA/SCL. Pour SPI, vérifiez la sélection de puce, le mode d’horloge et la fréquence d’horloge.