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:
- ž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
- ž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
| Scenarij | Korišteni I²C pinovi | Korišteni SPI pinovi |
|---|---|---|
| 1 senzor | 2 (SDA+SCL) | 4 (MOSI + MISO + SCLK + CS) |
| 2 senzora | 2 (zajednički autobus) | 5 (dijeljeni autobus + 2× CS) |
| 4 senzora | 2 (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?
Nema prednosti u svakom slučaju. Prijeđi na pitanje 2.
Dvije adrese, dvije žice. Osim ako su senzori udaljeni — onda SPI.
Osim ako ne volite čitati podatkovne tablice I²C multipleksera.
2Koliko je senzor udaljen od MCU-a?
I²C je dobar na razini ploče s čistim rasporedom.
Ili I²C s diferencijalnim međuspremnikom (PCA9615). I²C nikada nije dizajniran za kabele.
Koristite 4–20 mA ili RS-485. Na području ste industrijskih odašiljača.
3Što je EMI okruženje?
Čist raspored s premosnim poklopcima čini I²C zadovoljnim.
Push-pull drajveri i CS gating spriječit će očitavanje fantoma.
4Jeste li vi taj koji piše vozača?
Apstrakcija čini razliku zanemarivom. Koristite ono što koristi ostatak ploče.
Manje stanja, bez rastezanja sata, bez sukoba adresa.
Većina knjižnica senzora za hobiste zadano je I²C. Prvo provjerite knjižnicu.
The "Why Not Both" Card
Dualno sučeljeNeki 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
| Faktor | I²C | SPI | Pobjednik |
|---|---|---|---|
| Brojanje žica | 2 | 4 + 1 po senzoru | I²C |
| Ubrzati | Do 3,4 MHz | Do 50 MHz | Veza — ADC senzora je usko grlo |
| Multi-senzor (isti tip) | Max 2 bez muxa | Neograničeno (jedan CS po senzoru) | SPI preko 2 senzora |
| Otpornost na buku | Otvoreni odvod, RC rubovi | Push-pull CMOS, oštri rubovi | SPI |
| Složenost firmvera | State machine, ACK/NAK, timeouts | Potvrdi CS, pomakni bajtove, gotovo | SPI (goli metal); Kravata (s HAL-om) |
| Poteškoće s otklanjanjem pogrešaka | Teže — NAK lov | Lakše — jasni signali | SPI |
| Potrošnja energije | ~0,7 mA (pokretanja aktivna) | ~0 mA (bez povlačenja) | Tie — delta je picowatt-sati |
| Kabelske staze | Ne preporučuje se >200 mm | Tolerira duže tragove | SPI |
| Vanjske komponente | 2× pull-up otpornici | Nijedan | Veza — 2× 0402 otpornika ≈ 0,002 USD |
TL;DR
Ne znate trebate li uopće senzor apsolutnog, mjernog ili diferencijalnog tlaka? Pročitajte vodič na jednostavnom engleskom →
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 →



