Mühendislik Kılavuzları
Basınç Sensörleri için I²C ve SPI Karşılaştırması — Doğru Veriyolunu Seçin veya Daha Sonra Düzeninizden Nefret Edin
Basınç sensörünüzü seçtiniz. Aralığı, doğruluğu ve paketi biliyorsunuz. Daha sonra sipariş sayfasında iki varyant görürsünüz: I²C Ve SPI. Aynı sensör. Aynı fiyat. Farklı dört harf. Ders kitabı teorisiyle değil, gerçek sayılarla nasıl karar verileceği aşağıda açıklanmıştır.
İki Dakikalık Tazeleme
Daha önce her iki otobüsün kablolarını bağladıysanız bunu atlayın. Eğer yapmadıysanız, makalenin geri kalanını takip etmeniz yeterli:
- Teller: 2 — SDA (veri) + SCL (saat)
- Sinyal türü: Açık drenaj, dirençlerle yükseğe çekildi
- Adresleme: Cihaz başına 7 bit adres
- Yön: Yarı çift yönlü
- Hız: 100 kHz / 400 kHz / 1 MHz / 3,4 MHz
- Kontrol: Master tarafından başlatılan; köleler yalnızca adreslendiğinde yanıt verir
- Teller: 4 — Cihaz başına MOSI, MISO, SCLK + 1× CS
- Sinyal türü: İtme-çekme CMOS
- Adresleme: Yok — CS satırı cihazı seçer
- Yön: Tam çift yönlü
- Hız: 1 MHz'den 50 MHz'e
- Kontrol: Master saati kontrol eder; saatin uzaması yok
Bu noktada şunu düşünebilirsiniz: "SPI is faster, so SPI wins, end of article." Pek değil; basınç sensörü için hız neredeyse hiçbir zaman önemli değildir. İşte nedeni.
Önemli Olmayan Hız Argümanı
Tipik bir MEMS basınç sensörü her seferinde bir okuma alır. 1 ila 100 milisaniye — Veri yolu hızı değil, ADC dönüşüm süresi baskındır. Örnek başına 1 ms'de bile (1 kHz örnekleme), okuma başına belki 48 bit itiyorsunuz. bu 48 kbps.
400 kHz'de I²C, ek yükten sonra ~320 kbps aktarır. 1 MHz'deki SPI, 1 Mbps aktarır. Ya biri 7× ila 20× daha hızlı sensörün veri hızından daha fazladır. Ultrasonik frekanslarda örnekleme yapmadığınız sürece (ki öyle değilsiniz çünkü basınç o kadar hızlı değişmez) veri yolu hızının bir önemi yoktur. Sensör darboğazdır, kablolar değil.
Hız konusunda son nokta: önemli değil. Sensörün ADC'si sınırlayıcı faktördür. Başka gerekçelerle karar verin.
Pin Sayısı: Küçük Tahtalarda Gerçekten Önemli Olan Argüman
| Senaryo | Kullanılan I²C pinleri | Kullanılan SPI pinleri |
|---|---|---|
| 1 sensör | 2(SDA+SCL) | 4 (MOSI + MISO + SCLK + CS) |
| 2 sensör | 2 (paylaşılan otobüs) | 5 (paylaşılan veri yolu + 2× CS) |
| 4 sensör | 2 (paylaşılan otobüs) | 7 (paylaşılan veri yolu + 4× CS) |
MCU'nuz 80 GPIO'lu bir STM32 ise kimin umurunda. Ancak bir ekran çalıştıran 15 kullanılabilir GPIO'ya, BLE'ye, iki düğmeye ve bir SD karta sahip bir ESP32-C3'te - SPI için bu 2 ekstra pin. I²C, veri yolunu kaç sensörün paylaştığına bakılmaksızın pinlerden tasarruf etmenizi sağlar.
Not: I²C'nin size maliyeti vardır iki çekme direnci. SPI'nin hiçbir maliyeti yoktur. İki adet 4,7 kΩ 0402 direncin toplam maliyeti yaklaşık 0,002 ABD dolarıdır ve 2 mm² kart alanı kaplar - hiçbir şey değil, ama ona yakın.
Pimlerde sonuç olarak: GPIO'lar sıkı olduğunda I²C kazanır. Pin açısından zengin bir MCU ile avantaj ortadan kalkar; diğer faktörlere karar verin.
Çoklu Sensör Tasarımları: I²C'nin Gerçekten Parladığı Yer
Aynı PCB üzerinde üç basınç sensörü — bir barometrik referans, bir tank seviyesi, bir pompa çıkışı. I²C ile: her sensöre farklı bir adres atayın, SDA ve SCL'yi paralel bağlayın, tamam. İki iz. Üç sensör. Sıfır ekstra MCU pini. SPI ile: Paylaşılan MOSI/MISO/SCLK'nin üzerinde üç ayrı CS hattı — toplam altı kablo.
Dikkat: I²C cihazlarının benzersiz adreslere ihtiyacı vardır. Çoğu basınç sensörü tam olarak iki adres (yukarıdan veya aşağıdan bağlanan bir pim). Bu, TCA9548A gibi bir I²C çoklayıcıya ihtiyaç duymadan önce veri yoluna iki sensör alacağınız anlamına gelir; bu da ~0,50 ABD doları ve birkaç mm² ekler. SPI'nin böyle bir sınırı yoktur; sensör başına bir CS hattı eklemeniz yeterli.
Çoklu sensörde sonuç: I²C, iki özdeş sensöre kadar kablolama kolaylığı açısından kazanır. Bunun ötesinde, SPI veya I²C mux kullanın; ikisi de kesinlikle daha iyi değildir, bu bir düzen çağrısıdır.
Gürültü Bağışıklığı: SPI'nin Öne Çıktığı Nokta
Yüksek çözünürlüklü basınç sensörleri, 0,03 hPa kadar küçük değişiklikleri ölçer; bu, kabaca masanıza konan bir sivrisineğin ağırlığıdır ve elektrik sinyaline dönüştürülür. Bu çözünürlükte gürültü önemlidir.
I²C gürültü özellikleri
Yukarı çekme dirençli açık drenaj hatları temiz CMOS geçişleri değil, RC rampa kenarları üretir. Yukarı çekme değerleri bir uzlaşmadır: çok güçlü olması gücü boşa harcar; çok zayıf yükselme süresini yavaşlatır ve gürültü bağlantısı için bir pencere açar. Gürültülü bir ortamda (bir motor sürücüsünün, anahtarlama regülatörünün veya PWM'li herhangi bir şeyin yanında) I²C arızalanabilir. Protokolün ACK bitinin ötesinde yerleşik bir hata algılaması yoktur (bazı sensörler yüke bir CRC baytı ekler ve bu yardımcı olur).
SPI gürültü özellikleri
İtme-çekme CMOS sürücüleri aktif olarak hem yüksek hem de düşük durumları yönlendirir. Kenarlar keskindir. CS hattı, kölenin tam olarak dinlemesi gereken zamanda kapıları açar; geri kalan zamanda otobüsteki her şeyi göz ardı eder. Doğası gereği daha iyi SNR.
Pratikte, kısa izli, zemin düzlemli ve baypas kapaklı temiz bir PCB düzeni çoğu tasarımda I²C'yi memnun edecektir. Ancak sensörünüz MCU'dan bir metre uzakta bir kablo üzerindeyse veya akımın amperini değiştiren herhangi bir şeyle aynı muhafazayı paylaşıyorsa, SPI'nin gürültü bağışıklığı gerçek bir avantajdır.
Gürültü konusunda son nokta: SPI, elektriksel açıdan düşmanca ortamlarda daha güvenli bir seçimdir. Aynı PCB'de MCU'dan birkaç santimetre uzakta, I²C iyidir.
Firmware Karmaşıklığı: Kimsenin Bahsetmediği Eşitliği Bozan
I²C ürün yazılımı
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 ürün yazılımı
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.
Hata ayıklama ağrısı: SPI çalışmadığında, bir mantık analizörüyle dört satırı inceler ve tam olarak ne olduğunu görürsünüz. I²C çalışmadığında, NAK'larla dolu bir ekrana bakarsınız ve bunun çekme değerleri, adres, zamanlama veya veri yolu kapasitansı olup olmadığını merak edersiniz. 8 dolarlık bir mantık analizörü her ikisini de çözer - ancak I²C zamanınızın daha fazlasını harcar.
Ürün yazılımının özeti: SPI daha az sinir bozucu çıplak metaldir. Bir HAL veya kütüphane ile kabaca bir yıkamadır. I²C'nin bozulduğunda hata ayıklaması daha uzun sürer.
Güç Tüketimi: Her İkisi de Yuvarlama Hatasıdır
4,7 kΩ çekmeli 400 kHz I²C veri yolu yaklaşık olarak yanıyor 00,7 mA aktifken. SPI, veri yolu seviyesinde esasen hiçbir şey yakmaz; bu hızlarda (mikroamper) yalnızca CMOS anahtarlama akımı.
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.
Güç konusunda son nokta: güce dayalı olarak I²C veya SPI'yi seçmeyin. Fark önemli olamayacak kadar küçük. Bunun yerine pinlere, gürültüye veya ürün yazılımının akıl sağlığına karar verin.
Karar Akışı - Dört Soru, Matris Yok
1Bir veri yolunda kaç tane aynı sensör var?
Her iki durumda da bir avantajı yok. Soru 2'ye geçin.
İki adres, iki kablo. Sensörler birbirinden çok uzakta olmadığı sürece - o zaman SPI.
I²C çoklayıcı veri sayfalarını okumaktan hoşlanmıyorsanız.
2Sensör MCU'dan ne kadar uzakta?
I²C, temiz düzen ile kart düzeyinde gayet iyi.
Veya diferansiyel tamponlu (PCA9615) I²C. I²C hiçbir zaman kablolar için tasarlanmamıştır.
4–20 mA veya RS-485 kullanın. Endüstriyel verici bölgesindesiniz.
3EMI ortamı nedir?
Baypas kapaklı temiz düzen I²C'yi mutlu eder.
İtme-çekme sürücüleri ve CS geçitlemesi hayalet okumaları önleyecektir.
4Sürücüyü yazan sen misin?
Soyutlama, farkı göz ardı edilebilir hale getirir. Tahtanın geri kalanının kullandığı şeyi kullanın.
Daha az durum, saat uzaması yok, adres çakışması yok.
Hobi sensör kitaplıklarının çoğu varsayılan olarak I²C'dir. Önce kütüphaneyi kontrol edin.
The "Why Not Both" Card
Çift ArayüzBazı sensörler birlikte gönderilir aynı kalıpta hem I²C hem de SPI, bir pin kayışı veya kayıt biti aracılığıyla seçilebilir. Bu, iki senaryoda gerçekten faydalıdır:
Prototipleme esnekliği
Kablolama daha kolay olduğundan Arduino veya devre kartı üzerinde I²C ile başlayın. Kendi PCB'nizi döndürdüğünüzde, düzeniniz bundan faydalanıyorsa SPI'ye geçin. Aynı sensör, aynı donanım yazılımı mantığı, yalnızca farklı bir HAL çağrısı.
Üretim SKU'su esnekliği
Tek PCB tasarımı, farklı SKU'lar. Bir SKU, veri yolunu bir sıcaklık/nem sensörüyle paylaştığı için I²C kullanır. Bir başkasının uzak sensör kartına daha uzun izleme çalışmaları için SPI'ye ihtiyacı var. Hiçbir şeyi yeniden tasarlamazsınız; bir malzeme listesi hattını ve bir direnç kayışını değiştirin.
Sensör adayınız her iki veri yolunu da desteklemiyorsa, bu bir anlaşma bozucu değildir. Ancak seçeneğe sahip olmak, gece saat 2'de tahtayı yeniden döndürene kadar takdir etmeyeceğiniz şeylerden biridir.
Yan Yana Özet
| Faktör | I²C | SPI | Kazanan |
|---|---|---|---|
| Tel sayısı | 2 | Sensör başına 4 + 1 | I²C |
| Hız | 3,4 MHz'e kadar | 50 MHz'e kadar | Bağ — sensör ADC darboğazdır |
| Çoklu sensör (aynı tip) | Maksimum 2 mux olmadan | Sınırsız (sensör başına bir CS) | 2 sensörün ötesinde SPI |
| Gürültü bağışıklığı | Açık drenajlı, RC kenarları | İtme-çekme CMOS, keskin kenarlar | SPI |
| Firmware karmaşıklığı | Durum makinesi, ACK/NAK, zaman aşımları | CS'yi onayla, baytları kaydır, tamam | SPI (çıplak metal); Kravat (HAL ile) |
| Hata ayıklama zorluğu | Daha zor — NAK avı | Daha kolay — basit sinyaller | SPI |
| Güç tüketimi | ~0,7 mA (yukarı çekmeler aktif) | ~0 mA (yukarı çekme yok) | Beraberlik – delta pikowatt-saattir |
| Kablo hatları | Tavsiye edilmez >200 mm | Daha uzun izleri tolere eder | SPI |
| Harici bileşenler | 2× çekme dirençleri | Hiçbiri | Bağ — 2× 0402 direnç ≈ 0,002 USD |
TL;DR
İlk etapta mutlak, gösterge veya diferansiyel basınç sensörüne ihtiyacınız olup olmadığı konusunda kafanız mı karıştı? Sade İngilizce kılavuzu okuyun →
Hangi arayüzün tasarımınıza uyduğundan emin değil misiniz? Bize MCU'nuzu, pano kısıtlamalarınızı ve ortamınızı söyleyin; sizi genellikle bir saat içinde doğru kısma yönlendireceğiz.
İletişime Geçin →



