I²C vs SPI pour les capteurs de pression — Guide de sélection de l'interface

Guides d'ingénierie

I²C vs SPI pour les capteurs de pression : choisissez le bon bus ou détestez votre mise en page plus tard

Vous avez choisi votre capteur de pression. Vous connaissez la portée, la précision, le package. Ensuite, vous voyez deux variantes sur la page de commande : I²c et Spice. Même capteur. Même prix. Quatre lettres différentes. Voici comment décider – avec des chiffres réels, et non avec la théorie des manuels.


Le rappel de deux minutes

Ignorez ceci si vous avez déjà câblé les deux bus. Si ce n’est pas le cas, voici de quoi suivre le reste de l’article :

I²c
  • Fils : 2 — SDA (données) + SCL (horloge)
  • Type de signal : Drain ouvert, tiré haut avec des résistances
  • Adressage : Adresse 7 bits par appareil
  • Direction: Semi-duplex
  • Vitesse: 100 kHz / 400 kHz / 1 MHz / 3,4 MHz
  • Contrôle: Initié par le maître ; les esclaves répondent uniquement lorsqu'ils sont adressés
Spice
  • Fils : 4 — MOSI, MISO, SCLK + 1× CS par appareil
  • Type de signal : CMOS push-pull
  • Adressage : Aucun — La ligne CS sélectionne l'appareil
  • Direction: Duplex intégral
  • Vitesse: 1 MHz à 50 MHz
  • Contrôle: Le maître contrôle l'horloge ; pas d'étirement de l'horloge

À ce stade, vous pourriez penser : "SPI is faster, so SPI wins, end of article." Pas tout à fait : la vitesse n’a presque jamais d’importance pour un capteur de pression. Voici pourquoi.


L’argument de la vitesse qui n’a pas d’importance

Un capteur de pression MEMS typique effectue une lecture tous les 1 à 100 millisecondes — le temps de conversion ADC domine, pas la vitesse du bus. Même à 1 ms par échantillon (échantillonnage de 1 kHz), vous poussez peut-être 48 bits par lecture. C'est 48 kbit/s.

I²C à 400 kHz transfère ~ 320 kbps après surcharge. SPI à 1 MHz transfère 1 Mbps. L'un ou l'autre est 7× à 20× plus rapide que le débit de données du capteur. À moins que vous n'échantillonniez à des fréquences ultrasoniques – ce qui n'est pas le cas, car la pression ne change pas si rapidement – ​​la vitesse du bus n'a pas d'importance. Le capteur est le goulot d'étranglement, pas les fils.

En résumé, sur la vitesse : cela n’a pas d’importance. L'ADC du capteur est le facteur limitant. Décidez pour d’autres motifs.


Nombre de broches : l'argument qui compte réellement sur les petits tableaux

ScénarioBroches I²C utiliséesBroches SPI utilisées
1 capteur2(SDA+SCL)4 (MOSI + MISO + SCLK + CS)
2 capteurs2 (bus partagé)5 (bus partagé + 2× CS)
4 capteurs2 (bus partagé)7 (bus partagé + 4× CS)

Si votre MCU est un STM32 avec 80 GPIO, peu importe. Mais sur un ESP32-C3 avec 15 GPIO utilisables exécutant un écran, BLE, deux boutons et une carte SD, ces 2 broches supplémentaires pour SPI piquent. I²C vous enregistre les broches quel que soit le nombre de capteurs partageant le bus.

Remarque : I²C vous coûte cher deux résistances pull-up. SPI ne coûte rien. Deux résistances 0402 de 4,7 kΩ coûtent environ 0,002 $ au total et occupent 2 mm² d'espace sur la carte – ce n'est pas rien, mais presque.

Conclusion sur les broches : I²C gagne lorsque les GPIO sont serrés. Avec un MCU riche en broches, l'avantage disparaît : décidez d'autres facteurs.


Conceptions multi-capteurs : là où l'I²C brille réellement

Trois capteurs de pression sur le même PCB : une référence barométrique, un niveau de réservoir, une sortie de pompe. Avec I²C : attribuez à chaque capteur une adresse différente, câblez SDA et SCL en parallèle, c'est fait. Deux traces. Trois capteurs. Zéro broche MCU supplémentaire. Avec SPI : trois lignes CS distinctes au-dessus du MOSI/MISO/SCLK partagé — six fils au total.

Attention: Les appareils I²C ont besoin d'adresses uniques. La plupart des capteurs de pression offrent exactement deux adresses (une épingle attachée haut ou bas). Cela signifie que vous disposez de deux capteurs sur le bus avant d'avoir besoin d'un multiplexeur I²C comme le TCA9548A, ce qui ajoute environ 0,50 $ et quelques mm². SPI n’a pas une telle limite ; ajoutez simplement une ligne CS par capteur.

Conclusion sur le multi-capteur : I²C gagne en termes de simplicité de câblage jusqu'à deux capteurs identiques. Au-delà de cela, utilisez SPI ou un multiplexeur I²C – ni l'un ni l'autre n'est clairement meilleur, c'est un appel de mise en page.


Immunité au bruit : celle où SPI prend de l'avance

Les capteurs de pression haute résolution mesurent des changements aussi minimes que 0,03 hPa, soit environ le poids d'un moustique atterrissant sur votre bureau, traduit en signal électrique. À cette résolution, le bruit compte.

Caractéristiques du bruit I²C

Les lignes à drain ouvert avec des résistances de rappel produisent des bords de rampe RC, et non des transitions CMOS propres. Les valeurs de traction sont un compromis : une valeur trop forte gaspille de l'énergie ; trop faible rend le temps de montée lent et ouvre une fenêtre pour le couplage du bruit. Dans un environnement bruyant (à côté d'un pilote de moteur, d'un régulateur à découpage ou de tout autre élément doté de PWM), I²C peut avoir des problèmes. Le protocole n'a pas de détection d'erreur intégrée au-delà du bit ACK (certains capteurs ajoutent un octet CRC à la charge utile, ce qui aide).

Caractéristiques du bruit SPI

Les pilotes CMOS push-pull pilotent activement les états haut et bas. Les bords sont tranchants. La ligne CS se déclenche exactement au moment où l'esclave doit écouter, ignorant tout ce qui se passe sur le bus le reste du temps. Un SNR intrinsèquement meilleur.

En pratique, une disposition de circuit imprimé propre avec des traces courtes, un plan de masse et des capuchons de dérivation satisfera l'I²C sur la plupart des conceptions. Mais si votre capteur est sur un câble à un mètre du MCU, ou partage un boîtier avec tout ce qui commute les ampères de courant, l'immunité au bruit du SPI est un véritable avantage.

Conclusion sur le bruit : SPI est le choix le plus sûr dans les environnements électriquement hostiles. Sur le même PCB à quelques centimètres du MCU, I²C va bien.


Complexité du micrologiciel : le bris d'égalité dont personne ne parle

Micrologiciel I²C

A state machine. Start condition → send address + R/W bit → wait for ACK → read/write register pointer → read/write data → stop condition. Every step has a timeout, a retry path, and a "what if the sensor holds SDA low because it's still converting" case. Most MCU vendors provide a HAL. Most of those HALs have edge-case bugs you'll discover at 11 PM.

Micrologiciel SPI

Assert CS → shift bytes → de-assert CS. That's it. The sensor doesn't get to say "I'm not ready" by clock-stretching or NAKing. The master controls the clock; the slave responds or stays silent.

Problème de débogage : Lorsque SPI ne fonctionne pas, vous sondez quatre lignes avec un analyseur logique et voyez exactement ce qui se passe. Lorsque I²C ne fonctionne pas, vous regardez un écran rempli de NAK et vous vous demandez s'il s'agit des valeurs de pull-up, de l'adresse, de la synchronisation ou de la capacité du bus. Un analyseur logique à 8 $ résout les deux, mais I²C vous fera perdre plus de temps.

Conclusion sur le firmware : SPI est moins ennuyeux en mode nu. Avec un HAL ou une bibliothèque, c'est à peu près un lavage. I²C prend plus de temps à déboguer lorsqu'il tombe en panne.


Consommation d'énergie : les deux sont des erreurs d'arrondi

Un bus I²C de 400 kHz avec des pull-ups de 4,7 kΩ consomme environ 00,7 mA lorsqu'il est actif. SPI ne brûle pratiquement rien au niveau du bus – du courant de commutation purement CMOS à ces vitesses (microampères).

Context: the pressure sensor element and ADC draw ~5 µA at 1 Hz sampling and 0.3 µA in standby. Whether the bus burns 0.5 mA or 0.05 mA for the 2 ms it takes to read a sample — the energy difference is picowatt-hours. Your BLE radio burns more power sending one "hello" packet than the bus choice will save across the sensor's entire operating lifetime.

Conclusion sur la puissance : ne choisissez pas I²C ou SPI en fonction de la puissance. La différence est trop petite pour avoir de l’importance. Décidez plutôt des broches, du bruit ou de la santé du micrologiciel.


Flux de décision - Quatre questions, pas de matrice

1Combien de capteurs identiques sur un bus ?

Un → L’un ou l’autre fonctionne

Aucun avantage de toute façon. Passez à la question 2.

Deux → I²C gagne probablement

Deux adresses, deux fils. À moins que les capteurs ne soient éloignés les uns des autres, alors SPI.

Trois ou plus → SPI

Sauf si vous aimez lire les fiches techniques des multiplexeurs I²C.

2À quelle distance se trouve le capteur du MCU ?

Même PCB, <100 mm → Soit

I²C convient au niveau de la carte avec une présentation propre.

Câble >200 mm → SPI

Ou I²C avec un tampon différentiel (PCA9615). I²C n'a jamais été conçu pour les câbles.

>1 mètre → Ni l'un ni l'autre

Utilisez 4 à 20 mA ou RS-485. Vous êtes sur le territoire des émetteurs industriels.

3Quel est l'environnement EMI ?

PCB silencieux, pas de moteurs → Soit

Une disposition épurée avec des capuchons de dérivation rend I²C heureux.

BLDC, GSM, convertisseur buck à proximité → SPI

Les pilotes push-pull et le gate CS empêcheront les lectures fantômes.

4Est-ce que c'est vous qui écrivez le pilote ?

HAL / bibliothèque existe → Soit

L'abstraction rend la différence négligeable. Utilisez ce que le reste du tableau utilise.

Écrire à partir de zéro → SPI

Moins d’états, pas d’étirement d’horloge, pas de conflits d’adresses.

Portage d'une bibliothèque Arduino → I²C

La plupart des bibliothèques de capteurs amateurs utilisent par défaut I²C. Vérifiez d'abord la bibliothèque.


The "Why Not Both" Card

Dual Interface

Certains capteurs sont livrés avec I²C et SPI sur la même puce, sélectionnable via une sangle à broches ou un embout de registre. Ceci est vraiment utile dans deux scénarios :

Flexibilité du prototypage

Commencez par I²C sur un Arduino ou une carte de dérivation car c'est plus facile à câbler. Lorsque vous faites tourner votre propre PCB, passez à SPI si votre configuration en bénéficie. Même capteur, même logique de firmware, juste un appel HAL différent.

Flexibilité des références de production

Une conception de PCB, différents SKU. Un SKU utilise I²C car il partage le bus avec un capteur de température/humidité. Un autre a besoin de SPI pour des tracés plus longs vers une carte de capteur distant. Vous ne modifiez rien : modifiez une ligne de nomenclature et une sangle de résistance.

Si votre candidat capteur ne prend pas en charge les deux bus, ce n'est pas un problème. Mais avoir cette option est une de ces choses que vous n'appréciez pas jusqu'à ce que vous relanciez un tableau à 2 heures du matin.


Résumé côte à côte

FacteurI²cSpiceGagnant
Nombre de fils24 + 1 par capteurI²c
VitesseJusqu'à 3,4 MHzJusqu'à 50 MHzTie - le capteur ADC est le goulot d'étranglement
Multi-capteur (même type)Max 2 sans multiplexeurIllimité (un CS par capteur)SPI au-delà de 2 capteurs
Immunité au bruitBords RC à drain ouvertCMOS push-pull, bords netsSpice
Complexité du micrologicielMachine à états, ACK/NAK, délais d'attenteAffirmer CS, décaler les octets, c'est faitSPI (sans système d'exploitation) ; Cravate (avec HAL)
Difficulté de débogagePlus dur — Chasse au NAKPlus facile – des signaux simplesSpice
Power consumption~0,7 mA (pull-ups actifs)~0 mA (pas de tractions)Cravate - le delta est en picowattheures
Chemins de câblesNon recommandé >200 millimètresTolère des traces plus longuesSpice
External components2 × résistances de rappelAucunCravate — 2 × résistances 0402 ≈ 0,002 $

TL;DR

Nombre de broches I²C utilise moins de fils. Décisif lorsque les GPIO sont serrés.
Vitesse Cela n'a pas d'importance. L'ADC du capteur est toujours le goulot d'étranglement.
Multi-capteur I²C est plus propre pour ≤2 capteurs identiques. SPI évolue mieux au-delà de cela.
Bruit SPI gagne. Décisif à proximité des moteurs, des commutateurs ou des modules GSM.
Micrologiciel SPI est un système nu plus simple. Avec un HAL, c'est un lavage. I²C prend plus de temps à déboguer lorsqu'il tombe en panne.
Pouvoir Ne choisissez pas en fonction du pouvoir. La différence est de picowattheures.
Dual-interface Le meilleur des deux mondes : un seul design, échangeable à volonté. Utilisez-le comme une fonctionnalité, pas après coup.

Vous ne savez pas quelle interface correspond à votre conception ? Dites-nous votre MCU, les contraintes de votre carte et votre environnement : nous vous indiquerons la bonne partie, généralement dans un délai d'une heure.

Contactez-nous →
Retour en haut

Contactez-nous