Technische gidsen
I²C versus SPI voor druksensoren — Kies de juiste bus of haat uw lay-out later
U heeft uw druksensor gekozen. Je kent het bereik, de nauwkeurigheid, het pakket. Dan zie je op de bestelpagina twee varianten: I²C En Spi. Dezelfde sensor. Dezelfde prijs. Verschillende vier letters. Hier leest u hoe u kunt beslissen - met reële getallen, niet met de theorie uit het leerboek.
De twee minuten durende opfriscursus
Sla dit over als je beide bussen eerder hebt aangesloten. Als je dat nog niet hebt gedaan, is hier genoeg om de rest van het artikel te volgen:
- Draden: 2 — SDA (gegevens) + SCL (klok)
- Signaaltype: Open drain, hoog getrokken met weerstanden
- Adressering: 7-bits adres per apparaat
- Richting: Half-duplex
- Snelheid: 100 kHz / 400 kHz / 1 MHz / 3,4 MHz
- Controle: Master-geïnitieerd; Slaven reageren alleen als ze worden aangesproken
- Draden: 4 — MOSI, MISO, SCLK + 1× CS per apparaat
- Signaaltype: Push-pull-CMOS
- Adressering: Geen — CS-lijn selecteert het apparaat
- Richting: Full-duplex
- Snelheid: 1 MHz tot 50 MHz
- Controle: Master bestuurt klok; geen klok die zich uitstrekt
Op dit punt zou je kunnen denken: "SPI is faster, so SPI wins, end of article." Niet helemaal: snelheid doet er bijna nooit toe voor een druksensor. Dit is waarom.
Het snelheidsargument dat er niet toe doet
Een typische MEMS-druksensor voert elke keer een meting uit 1 tot 100 milliseconden — de ADC-conversietijd domineert, niet de bussnelheid. Zelfs bij 1 ms per sample (1 kHz sampling) push je misschien 48 bits per meting. Dat is 48 kbps.
I²C bij 400 kHz draagt ~320 kbps over na overhead. SPI op 1 MHz draagt 1 Mbps over. Een van beide is dat 7× tot 20× sneller dan de datasnelheid van de sensor. Tenzij je op ultrasone frequenties samplet - wat niet het geval is, omdat de druk niet zo snel verandert - is de bussnelheid niet relevant. De sensor is de bottleneck, niet de draden.
Kortom, snelheid: maakt niet uit. De ADC van de sensor is de beperkende factor. Beslis op andere gronden.
Pintelling: het argument dat er echt toe doet op kleine borden
| Scenario | I²C-pinnen gebruikt | SPI-pinnen gebruikt |
|---|---|---|
| 1 sensor | 2(SDA+SCL) | 4 (MOSI + MISO + SCLK + CS) |
| 2 sensoren | 2 (gedeelde bus) | 5 (gedeelde bus + 2× CS) |
| 4 sensoren | 2 (gedeelde bus) | 7 (gedeelde bus + 4× CS) |
Als uw MCU een STM32 is met 80 GPIO's, wat maakt het dan uit. Maar op een ESP32-C3 met 15 bruikbare GPIO's met een display, BLE, twee knoppen en een SD-kaart - die 2 extra pinnen voor SPI-steek. I²C bespaart u pinnen, ongeacht hoeveel sensoren de bus delen.
Let op: I²C kost je twee pull-up-weerstanden. SPI kost niets. Twee 0402-weerstanden van 4,7 kΩ kosten in totaal ongeveer $ 0,002 en nemen 2 mm² aan bordruimte in beslag - niet niets, maar dichtbij.
Kort gezegd over pinnen: I²C wint als GPIO's krap zijn. Met een pin-rijke MCU verdwijnt het voordeel – beslis over andere factoren.
Ontwerpen met meerdere sensoren: waar I²C echt uitblinkt
Drie druksensoren op dezelfde printplaat: één barometrische referentie, één tankniveau, één pompuitlaat. Met I²C: wijs elke sensor een ander adres toe, SDA en SCL parallel aansluiten, klaar. Twee sporen. Drie sensoren. Geen extra MCU-pinnen. Met SPI: drie afzonderlijke CS-lijnen bovenop de gedeelde MOSI/MISO/SCLK – zes draden in totaal.
Let op: I²C-apparaten hebben unieke adressen nodig. De meeste druksensoren bieden precies twee adressen (een speld die hoog of laag is vastgemaakt). Dat betekent dat je twee sensoren op de bus krijgt voordat je een I²C-multiplexer zoals de TCA9548A nodig hebt – wat ongeveer $ 0,50 en een paar mm² toevoegt. SPI kent een dergelijke limiet niet; voeg gewoon een CS-lijn per sensor toe.
Kort gezegd over multi-sensoren: I²C wint wat betreft de eenvoud van bedrading tot twee identieke sensoren. Gebruik daarnaast SPI of een I²C-mux. Geen van beide is duidelijk beter, het is een kwestie van lay-out.
Geluidsimmuniteit: degene waar SPI voorop loopt
Druksensoren met hoge resolutie meten veranderingen zo klein als 0,03 hPa – ongeveer het gewicht van een mug die op uw bureau landt, vertaald in een elektrisch signaal. Bij die resolutie is ruis van belang.
I²C-ruiskarakteristieken
Open drain-lijnen met pull-up-weerstanden produceren RC-hellingsranden, geen schone CMOS-overgangen. Pull-up-waarden zijn een compromis: te sterk verspilt kracht; te zwak maakt de stijgtijd traag en opent een venster voor ruiskoppeling. In een luidruchtige omgeving – naast een motordriver, schakelende regelaar of iets anders met PWM – kan I²C haperen. Het protocol heeft geen ingebouwde foutdetectie buiten de ACK-bit (sommige sensoren voegen een CRC-byte toe aan de payload, wat helpt).
SPI-ruiskarakteristieken
Push-pull CMOS-stuurprogramma's sturen actief zowel hoge als lage toestanden aan. Randen zijn scherp. De CS-lijn geeft precies aan wanneer de slaaf moet luisteren en negeert de rest van de tijd alles in de bus. Inherent betere SNR.
In de praktijk zal een strakke PCB-lay-out met korte sporen, een aardvlak en bypass-kappen ervoor zorgen dat I²C bij de meeste ontwerpen tevreden is. Maar als uw sensor zich op een kabel op een meter afstand van de MCU bevindt, of een behuizing deelt met iets dat stroomsterktes schakelt, is de ruisimmuniteit van SPI een echt voordeel.
Kort gezegd over ruis: SPI is de veiligere keuze in elektrisch vijandige omgevingen. Op dezelfde printplaat, een paar centimeter van de MCU, is I²C prima.
Firmware-complexiteit: de tiebreaker waar niemand over praat
I²C-firmware
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.
SPI-firmware
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.
Pijn debuggen: Als SPI niet werkt, onderzoek je vier lijnen met een logische analysator en zie je precies wat er gebeurt. Als I²C niet werkt, staar je naar een scherm vol NAK's en vraag je je af of het de pull-up-waarden, het adres, de timing of de buscapaciteit zijn. Een logica-analyzer van $ 8 lost beide op, maar I²C zal meer tijd verspillen.
Kort gezegd over firmware: SPI is minder irritant bare-metal. Met een HAL of bibliotheek is het grofweg een wasbeurt. Het duurt langer om I²C te debuggen als het kapot gaat.
Stroomverbruik: beide zijn afrondingsfouten
Een 400 kHz I²C-bus met 4,7 kΩ pull-ups brandt rond 00,7 mA terwijl actief. SPI verbrandt in wezen niets op busniveau - puur CMOS-schakelstroom bij deze snelheden (microampère).
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.
Kort gezegd over vermogen: kies niet voor I²C of SPI op basis van vermogen. Het verschil is te klein om er iets toe te doen. Beslis in plaats daarvan over pinnen, ruis of firmware-gezondheid.
Beslissingsstroom: vier vragen, geen matrix
1Hoeveel identieke sensoren op één bus?
Geen enkel voordeel trouwens. Ga naar vraag 2.
Twee adressen, twee draden. Tenzij de sensoren ver uit elkaar staan – dan SPI.
Tenzij u graag datasheets van I²C-multiplexers leest.
2Hoe ver is de sensor verwijderd van de MCU?
I²C is prima op bordniveau met een strakke lay-out.
Of I²C met een differentiële buffer (PCA9615). I²C is nooit ontworpen voor kabels.
Gebruik 4–20 mA of RS-485. Je bevindt je in industrieel zendergebied.
3Wat is de EMI-omgeving?
Een strakke lay-out met bypass-doppen zorgt ervoor dat I²C tevreden is.
Push-pull-drivers en CS-poorten voorkomen fantoommetingen.
4Ben jij degene die de chauffeur schrijft?
De abstractie maakt het verschil verwaarloosbaar. Gebruik wat de rest van het bord gebruikt.
Minder toestanden, geen oprekken van de klok, geen adresconflicten.
De meeste sensorbibliotheken voor hobbyisten zijn standaard ingesteld op I²C. Kijk eerst eens in de bibliotheek.
The "Why Not Both" Card
Dubbele interfaceSommige sensoren worden meegeleverd zowel I²C als SPI op dezelfde dobbelsteen, selecteerbaar via een pinriem of registerbit. Dit is echt nuttig in twee scenario's:
Flexibiliteit bij het prototypen
Begin met I²C op een Arduino- of breakout-bord, omdat dit gemakkelijker te bedraden is. Wanneer u uw eigen printplaat draait, schakel dan over naar SPI als uw lay-out daar baat bij heeft. Dezelfde sensor, dezelfde firmwarelogica, alleen een andere HAL-oproep.
Flexibiliteit van productie-SKU's
Eén PCB-ontwerp, verschillende SKU's. Eén SKU gebruikt I²C omdat deze de bus deelt met een temperatuur-/vochtigheidssensor. Een ander heeft SPI nodig voor langere trace-runs naar een sensorbord op afstand. U hoeft niets opnieuw te ontwerpen - verander een BOM-lijn en een weerstandsband.
Als uw sensorkandidaat niet beide bussen ondersteunt, is dit geen dealbreaker. Maar het hebben van de optie is een van die dingen die je pas op prijs stelt als je om 02.00 uur een bord opnieuw draait.
Samenvatting naast elkaar
| Factor | I²C | Spi | Winnaar |
|---|---|---|---|
| Aantal draden | 2 | 4 + 1 per sensor | I²C |
| Snelheid | Tot 3,4 MHz | Tot 50 MHz | Gelijkspel - sensor ADC is het knelpunt |
| Multisensor (zelfde type) | Max 2 zonder mux | Onbeperkt (één CS per sensor) | SPI voorbij 2 sensoren |
| Immuniteit voor lawaai | Open afvoer, RC-randen | Push-pull CMOS, scherpe randen | Spi |
| Firmware-complexiteit | Toestandsmachine, ACK/NAK, time-outs | CS bevestigen, bytes verschuiven, klaar | SPI (blank metaal); Stropdas (met HAL) |
| Moeilijkheidsgraad voor het opsporen van fouten | Moeilijker - NAK-jacht | Gemakkelijker – duidelijke signalen | Spi |
| Stroomverbruik | ~0,7 mA (pull-ups actief) | ~0 mA (geen pull-ups) | Gelijkspel — delta is picowattuur |
| Kabel loopt | Niet aanbevolen >200 mm | Verdraagt langere sporen | Spi |
| Externe componenten | 2× pull-up-weerstanden | Geen | Gelijkspel — 2× 0402-weerstanden ≈ $ 0,002 |
TL; DR
Weet u niet zeker of u überhaupt een absolute, manometer- of verschildruksensor nodig heeft? Lees de duidelijke Engelse gids →
Weet u niet zeker welke interface bij uw ontwerp past? Vertel ons uw MCU, uw boardbeperkingen en uw omgeving. Wij wijzen u meestal binnen een uur naar het juiste onderdeel.
Neem contact op →



