I2C vs SPI vs UART : différences et cas d'utilisation
Ce sont les trois interfaces série que l'on rencontre en premier dans les systèmes embarqués. L'UART est une liaison point à point simple, sans horloge partagée. Le SPI est un bus rapide à quatre fils où un maître sélectionne chaque composant par une ligne chip-select. L'I2C est un bus à deux fils où de nombreux composants partagent les mêmes lignes et sont sélectionnés par leur adresse. Le compromis se joue surtout entre la vitesse (SPI), le nombre de broches (I2C) et la simplicité (UART).
| Critère | UART | SPI | I2C |
|---|---|---|---|
| Fils | Deux fils de signal (TX et RX) plus la masse | Quatre fils de signal (SCLK, MOSI, MISO) plus un chip-select (CS) par composant | Deux fils partagés (SDA et SCL) plus la masse, avec des résistances de pull-up |
| Horloge | Asynchrone : pas de ligne d'horloge, les deux côtés doivent donc s'accorder sur le débit en bauds | Synchrone : le maître génère une horloge | Synchrone : le maître génère une horloge |
| Topologie | Point à point entre deux composants | Un maître et plusieurs esclaves, chaque esclave nécessitant sa propre ligne CS | Plusieurs maîtres et esclaves partagent un même bus |
| Adressage | Aucun | La ligne chip-select sélectionne le composant | Adresse sur 7 bits (10 bits en option) envoyée au début de chaque transfert |
| Vitesse typique | De 9 600 à 115 200 bit/s jusqu'à quelques Mbit/s | Souvent de 1 à 50 MHz, et davantage sur certains composants | 100 kHz (standard), 400 kHz (fast), 1 MHz (fast-mode plus), 3.4 MHz (high-speed) |
| Sens de transmission | Full duplex | Full duplex | Half duplex |
| Contrôle d'erreurs | Bit de parité optionnel et contrôle de trame | Aucun intégré | Acquittement (ACK/NACK) après chaque octet |
| Broches quand le nombre de composants augmente | Deux broches de plus pour chaque liaison supplémentaire | Une broche CS de plus pour chaque composant supplémentaire | Aucune broche supplémentaire |
| Distance | Peut aller plus loin avec des drivers RS-232 ou RS-485 | Courte, sur la même carte | Courte, sur la même carte |
| Usages typiques | Console de débogage, modules GPS et Bluetooth, liaisons entre cartes | Mémoire flash, cartes SD, écrans, ADC et capteurs rapides | Capteurs lents, EEPROM, horloges temps réel, configuration de puces |
Les valeurs indiquées sont des ordres de grandeur typiques et varient selon la génération de procédé et le produit.