Basınç Sensörleri için I²C ve SPI — Arayüz Seçim Kılavuzu

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:

I²C
  • 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
SPI
  • 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

SenaryoKullanılan I²C pinleriKullanılan SPI pinleri
1 sensör2(SDA+SCL)4 (MOSI + MISO + SCLK + CS)
2 sensör2 (paylaşılan otobüs)5 (paylaşılan veri yolu + 2× CS)
4 sensör2 (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?

Biri → Her ikisi de işe yarar

Her iki durumda da bir avantajı yok. Soru 2'ye geçin.

İki → I²C muhtemelen kazanır

İki adres, iki kablo. Sensörler birbirinden çok uzakta olmadığı sürece - o zaman SPI.

Üç veya daha fazla → SPI

I²C çoklayıcı veri sayfalarını okumaktan hoşlanmıyorsanız.

2Sensör MCU'dan ne kadar uzakta?

Aynı PCB, <100 mm → Her ikisi de

I²C, temiz düzen ile kart düzeyinde gayet iyi.

Kablo >200 mm → SPI

Veya diferansiyel tamponlu (PCA9615) I²C. I²C hiçbir zaman kablolar için tasarlanmamıştır.

>1 metre → Hiçbiri

4–20 mA veya RS-485 kullanın. Endüstriyel verici bölgesindesiniz.

3EMI ortamı nedir?

Sessiz PCB, motor yok → Her ikisi de

Baypas kapaklı temiz düzen I²C'yi mutlu eder.

BLDC, GSM, Buck dönüştürücü yakında → SPI

İtme-çekme sürücüleri ve CS geçitlemesi hayalet okumaları önleyecektir.

4Sürücüyü yazan sen misin?

HAL / kütüphane mevcut → Ya

Soyutlama, farkı göz ardı edilebilir hale getirir. Tahtanın geri kalanının kullandığı şeyi kullanın.

Sıfırdan yazmak → SPI

Daha az durum, saat uzaması yok, adres çakışması yok.

Arduino kütüphanesini taşıma → I²C

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üz

Bazı 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örI²CSPIKazanan
Tel sayısı2Sensör başına 4 + 1I²C
Hız3,4 MHz'e kadar50 MHz'e kadarBağ — sensör ADC darboğazdır
Çoklu sensör (aynı tip)Maksimum 2 mux olmadanSı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 kenarlarSPI
Firmware karmaşıklığıDurum makinesi, ACK/NAK, zaman aşımlarıCS'yi onayla, baytları kaydır, tamamSPI (çıplak metal); Kravat (HAL ile)
Hata ayıklama zorluğuDaha zor — NAK avıDaha kolay — basit sinyallerSPI
Güç tüketimi~0,7 mA (yukarı çekmeler aktif)~0 mA (yukarı çekme yok)Beraberlik – delta pikowatt-saattir
Kablo hatlarıTavsiye edilmez >200 mmDaha uzun izleri tolere ederSPI
Harici bileşenler2× çekme dirençleriHiçbiriBağ — 2× 0402 direnç ≈ 0,002 USD

TL;DR

Pin sayısı I²C daha az kablo kullanır. GPIO'lar sıkı olduğunda belirleyicidir.
Hız Önemli değil. Sensörün ADC'si her zaman darboğazdır.
Çoklu sensör I²C, ≤2 özdeş sensör için daha temizdir. SPI bunun ötesinde daha iyi ölçeklenir.
Gürültü SPI kazanır. Motorların, anahtarlayıcıların veya GSM modüllerinin yakınında belirleyicidir.
Firmware SPI daha basit bir çıplak metaldir. HAL ile bu bir yıkamadır. I²C'nin bozulduğunda hata ayıklaması daha uzun sürer.
Güç Güce göre seçim yapmayın. Aradaki fark pikowatt saattir.
Çift arayüz Her iki dünyanın da en iyisi; tek tasarım, istediğiniz zaman değiştirin. Bunu sonradan akla gelen bir düşünce olarak değil, bir özellik olarak kullanın.

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 →
Yukarıya Kaydır

Bize Ulaşın