I²C u odnosu na SPI za senzore tlaka — Vodič za odabir sučelja

Inženjerski vodiči

I²C u odnosu na SPI za senzore tlaka — odaberite pravu sabirnicu ili mrzite svoj raspored kasnije

Odabrali ste svoj senzor tlaka. Znate raspon, točnost, paket. Zatim vidite dvije varijante na stranici za naručivanje: I²C i SPI. Isti senzor. Ista cijena. Različita četiri slova. Evo kako odlučiti - sa stvarnim brojevima, a ne teorijom iz udžbenika.


Dvominutno osvježenje

Preskočite ovo ako ste prije ožičili obje sabirnice. Ako niste, evo dovoljno da pratite ostatak članka:

I²C
  • žice: 2 — SDA (podaci) + SCL (sat)
  • Vrsta signala: Otvoreni odvod, podignut visoko pomoću otpornika
  • Obraćanje: 7-bitna adresa po uređaju
  • Smjer: Polu-dupleks
  • Ubrzati: 100 kHz / 400 kHz / 1 MHz / 3,4 MHz
  • Kontrolirati: Majstor-iniciran; robovi odgovaraju samo kad im se obrati
SPI
  • žice: 4 — MOSI, MISO, SCLK + 1× CS po uređaju
  • Vrsta signala: Push-pull CMOS
  • Obraćanje: Ništa — CS linija odabire uređaj
  • Smjer: Full-duplex
  • Ubrzati: 1 MHz do 50 MHz
  • Kontrolirati: Glavni upravlja satom; nema istezanja sata

U ovom trenutku možete pomisliti: "SPI is faster, so SPI wins, end of article." Ne baš — brzina gotovo nikad nije bitna za senzor tlaka. Evo zašto.


Argument brzine koji nije bitan

Tipični MEMS senzor tlaka očitava svakih 1 do 100 milisekundi — dominira vrijeme ADC pretvorbe, a ne brzina sabirnice. Čak i pri 1 ms po uzorku (1 kHz uzorkovanje), gurate možda 48 bita po očitanju. to je 48 kbps.

I²C na 400 kHz prenosi ~320 kbps nakon opterećenja. SPI na 1 MHz prenosi 1 Mbps. Bilo koji je 7× do 20× brže od brzine prijenosa podataka senzora. Osim ako uzorkujete na ultrazvučnim frekvencijama - što niste, jer se tlak ne mijenja tako brzo - brzina autobusa je nebitna. Senzor je usko grlo, a ne žice.

Zaključak o brzini: nije važno. ADC senzora je ograničavajući faktor. Odlučite se po drugim osnovama.


Broj pinova: argument koji je zapravo bitan na malim pločama

ScenarijKorišteni I²C pinoviKorišteni SPI pinovi
1 senzor2 (SDA+SCL)4 (MOSI + MISO + SCLK + CS)
2 senzora2 (zajednički autobus)5 (dijeljeni autobus + 2× CS)
4 senzora2 (zajednički autobus)7 (dijeljeni autobus + 4× CS)

Ako je vaš MCU STM32 s 80 GPIO-ova — koga briga. Ali na ESP32-C3 s 15 upotrebljivih GPIO-a koji pokreću zaslon, BLE, dva gumba i SD karticu — te 2 dodatne igle za SPI ubod. I²C vam štedi pinove bez obzira na to koliko senzora dijeli sabirnicu.

Napomena: I²C vas košta dva pull-up otpornika. SPI ne košta ništa. Dva otpornika od 4,7 kΩ 0402 ukupno koštaju oko 0,002 dolara i zauzimaju 2 mm² prostora na ploči — ne ništa, ali približno tome.

Zaključak o iglama: I²C pobjeđuje kada su GPIO-i tijesni. S MCU-om bogatim pin-ovima, prednost nestaje — odlučite se o drugim čimbenicima.


Dizajni s više senzora: Gdje I²C zapravo blista

Tri senzora tlaka na istoj tiskanoj ploči — jedna barometrijska referenca, jedna razina spremnika, jedan izlaz pumpe. S I²C: dodijelite svakom senzoru drugu adresu, spojite SDA i SCL paralelno, gotovo. Dva traga. Tri senzora. Nema dodatnih MCU pinova. Sa SPI: tri odvojene CS linije na vrhu zajedničkog MOSI/MISO/SCLK — ukupno šest žica.

Pazi: I²C uređaji trebaju jedinstvene adrese. Većina senzora tlaka nudi točno dvije adrese (igla pričvršćena visoko ili nisko). To znači da dobivate dva senzora na sabirnici prije nego što vam zatreba I²C multiplekser poput TCA9548A — što dodaje ~0,50 USD i nekoliko mm². SPI nema takvo ograničenje; samo dodajte CS liniju po senzoru.

Zaključak s više senzora: I²C pobjeđuje zbog jednostavnosti ožičenja do dva identična senzora. Osim toga, koristite SPI ili I²C mux — nijedno nije očito bolje, to je poziv rasporeda.


Otpornost na buku: onaj gdje SPI vuče naprijed

Senzori tlaka visoke rezolucije mjere promjene od samo 0,03 hPa — otprilike težinu komarca koji sleti na vaš stol, prevedenu u električni signal. U toj razlučivosti šum je bitan.

I²C karakteristike buke

Open-drain vodovi s pull-up otpornicima proizvode RC rubove rampe, a ne čiste CMOS prijelaze. Pull-up vrijednosti su kompromis: prejako troši snagu; preslab čini vrijeme porasta sporim i otvara prozor za spajanje šuma. U bučnom okruženju — pored pokretača motora, sklopnog regulatora ili bilo čega s PWM-om — I²C može kvariti. Protokol nema ugrađenu detekciju pogreške osim ACK bita (neki senzori dodaju CRC bajt korisnom teretu, što pomaže).

SPI karakteristike buke

Push-pull CMOS upravljački programi aktivno pokreću i visoka i niska stanja. Rubovi su oštri. CS linija ulazi točno kada bi rob trebao slušati - ignorirajući sve u autobusu ostatak vremena. Inherentno bolji SNR.

U praksi, čist raspored PCB-a s kratkim tragovima, ravninom uzemljenja i premosnim poklopcima će učiniti I²C zadovoljnim na većini dizajna. Ali ako je vaš senzor na kabelu metar udaljen od MCU-a ili dijeli kućište s bilo čim što prebacuje ampere struje — SPI-jeva otpornost na buku prava je prednost.

Zaključak o buci: SPI je sigurniji izbor u električno neprijateljskim okruženjima. Na istom PCB-u nekoliko centimetara od MCU-a, I²C je u redu.


Kompleksnost firmvera: problem o kojem nitko ne govori

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.

Bol pri uklanjanju pogrešaka: Kada SPI ne radi, testirate četiri linije logičkim analizatorom i točno vidite što se događa. Kad I²C ne radi, buljite u zaslon pun NAK-ova i pitate se jesu li to vrijednosti za povlačenje, adresa, vrijeme ili kapacitet sabirnice. Logički analizator od 8 USD rješava oboje — ali I²C će potrošiti više vašeg vremena.

Zaključak firmvera: SPI je manje neugodan goli metal. S HAL-om ili knjižnicom, to je otprilike pranje. I²C treba dulje za otklanjanje pogrešaka kada se pokvari.


Potrošnja energije: Oba su pogreške zaokruživanja

400 kHz I²C sabirnica s 4,7 kΩ pull-upima gori otprilike 00,7 mA dok je aktivan. SPI zapravo ne troši ništa na razini sabirnice — čisto CMOS sklopna struja pri ovim brzinama (mikroamperima).

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.

Zaključak o snazi: ne birajte I²C ili SPI na temelju snage. Razlika je premala da bi bila važna. Umjesto toga odlučite se za pribadače, šum ili ispravnost firmvera.


Tijek odlučivanja — četiri pitanja, bez matrice

1Koliko identičnih senzora ima na jednoj sabirnici?

Jedan → Ili radi

Nema prednosti u svakom slučaju. Prijeđi na pitanje 2.

Dva → I²C vjerojatno pobjeđuje

Dvije adrese, dvije žice. Osim ako su senzori udaljeni — onda SPI.

Tri ili više → SPI

Osim ako ne volite čitati podatkovne tablice I²C multipleksera.

2Koliko je senzor udaljen od MCU-a?

Isti PCB, <100 mm → Bilo

I²C je dobar na razini ploče s čistim rasporedom.

Kabel >200 mm → SPI

Ili I²C s diferencijalnim međuspremnikom (PCA9615). I²C nikada nije dizajniran za kabele.

>1 metar → Nijedno

Koristite 4–20 mA ili RS-485. Na području ste industrijskih odašiljača.

3Što je EMI okruženje?

Tih PCB, bez motora → Nijedno

Čist raspored s premosnim poklopcima čini I²C zadovoljnim.

BLDC, GSM, buck pretvarač u blizini → SPI

Push-pull drajveri i CS gating spriječit će očitavanje fantoma.

4Jeste li vi taj koji piše vozača?

HAL / biblioteka postoji → Bilo

Apstrakcija čini razliku zanemarivom. Koristite ono što koristi ostatak ploče.

Pisanje od nule → SPI

Manje stanja, bez rastezanja sata, bez sukoba adresa.

Prijenos Arduino knjižnice → I²C

Većina knjižnica senzora za hobiste zadano je I²C. Prvo provjerite knjižnicu.


The "Why Not Both" Card

Dualno sučelje

Neki senzori se isporučuju s i I²C i SPI na istoj matrici, odabire se pomoću trake za pribadaču ili registratora. Ovo je uistinu korisno u dva scenarija:

Fleksibilnost izrade prototipova

Počnite s I²C na Arduino ili breakout ploči jer je lakše spojiti. Kada vrtite vlastitu tiskanu pločicu, prebacite se na SPI ako vaš raspored ima koristi od toga. Isti senzor, ista firmware logika, samo drugačiji HAL poziv.

Proizvodna SKU fleksibilnost

Jedan PCB dizajn, različiti SKU-ovi. Jedan SKU koristi I²C jer dijeli sabirnicu sa senzorom temperature/vlažnosti. Drugom je potreban SPI za duže praćenje na ploči udaljenog senzora. Ništa ne redizajnirate — promijenite liniju BOM-a i traku otpornika.

Ako vaš kandidat za senzor ne podržava obje sabirnice, to nije problem. Ali imati mogućnost je jedna od onih stvari koje ne cijenite dok ponovno ne zavrtite ploču u 2 ujutro.


Usporedni sažetak

FaktorI²CSPIPobjednik
Brojanje žica24 + 1 po senzoruI²C
UbrzatiDo 3,4 MHzDo 50 MHzVeza — ADC senzora je usko grlo
Multi-senzor (isti tip)Max 2 bez muxaNeograničeno (jedan CS po senzoru)SPI preko 2 senzora
Otpornost na bukuOtvoreni odvod, RC ruboviPush-pull CMOS, oštri ruboviSPI
Složenost firmveraState machine, ACK/NAK, timeoutsPotvrdi CS, pomakni bajtove, gotovoSPI (goli metal); Kravata (s HAL-om)
Poteškoće s otklanjanjem pogrešakaTeže — NAK lovLakše — jasni signaliSPI
Potrošnja energije~0,7 mA (pokretanja aktivna)~0 mA (bez povlačenja)Tie — delta je picowatt-sati
Kabelske stazeNe preporučuje se >200 mmTolerira duže tragoveSPI
Vanjske komponente2× pull-up otporniciNijedanVeza — 2× 0402 otpornika ≈ 0,002 USD

TL;DR

Broj pinova I²C koristi manje žica. Odlučujući kada su GPIO-i tijesni.
Ubrzati Nije važno. ADC senzora uvijek je usko grlo.
Multi-senzor I²C je čišći za ≤2 identična senzora. SPI se bolje skalira izvan toga.
Noise SPI pobjeđuje. Presudno blizu motora, preklopnika ili GSM modula.
Firmware SPI je jednostavniji bare-metal. S HAL-om, to je pranje. I²C treba dulje za otklanjanje pogrešaka kada se pokvari.
Vlast Ne birajte na temelju moći. Razlika je pikovat sati.
Dvostruko sučelje Najbolje od oba svijeta — jedan dizajn, zamjena po želji. Koristite ga kao značajku, a ne naknadnu misao.

Niste sigurni koje sučelje odgovara vašem dizajnu? Recite nam svoj MCU, ograničenja vaše ploče i vaše okruženje — mi ćemo vas uputiti na pravi dio, obično u roku od sat vremena.

Javite se →
Pomaknite se na vrh

Kontaktirajte nas