I²C vs SPI untuk Sensor Tekanan —Panduan Pemilihan Antarmuka

Panduan Teknik

I²C vs SPI untuk Sensor Tekanan — Pilih Bus yang Tepat atau Benci Tata Letak Anda Nanti

Anda telah memilih sensor tekanan Anda. Anda tahu jangkauannya, keakuratannya, paketnya. Kemudian Anda melihat dua varian di halaman pemesanan: I²C Dan SPI. Sensor yang sama. Harga yang sama. Empat huruf berbeda. Inilah cara memutuskannya — dengan bilangan real, bukan teori buku teks.


Penyegaran Dua Menit

Lewati ini jika Anda sudah memasang kedua bus sebelumnya. Jika belum, berikut cukup mengikuti artikel selanjutnya:

I²C
  • Kabel: 2 — SDA (data) + SCL (jam)
  • Jenis sinyal: Saluran terbuka, ditarik tinggi dengan resistor
  • Mengatasi: Alamat 7-bit per perangkat
  • Arah: Setengah dupleks
  • Kecepatan: 100kHz / 400kHz / 1MHz / 3,4MHz
  • Kontrol: diprakarsai oleh Guru; budak merespons hanya ketika dialamatkan
SPI
  • Kabel: 4 — MOSI, MISO, SCLK + 1× CS per perangkat
  • Jenis sinyal: CMOS dorong-tarik
  • Mengatasi: Tidak ada — Jalur CS memilih perangkat
  • Arah: Dupleks penuh
  • Kecepatan: 1MHz hingga 50MHz
  • Kontrol: Master mengontrol jam; tidak ada jam yang membentang

Pada titik ini Anda mungkin berpikir: "SPI is faster, so SPI wins, end of article." Kurang tepat — kecepatan hampir tidak pernah menjadi masalah bagi sensor tekanan. Inilah alasannya.


Argumen Kecepatan yang Tidak Penting

Sensor tekanan MEMS yang khas melakukan pembacaan setiap kali 1 hingga 100 milidetik — waktu konversi ADC mendominasi, bukan kecepatan bus. Bahkan pada 1 ms per sampel (1 kHz sampling), Anda mungkin mendorong 48 bit per pembacaan. Itu 48kbps.

I²C pada 400 kHz mentransfer ~320 kbps setelah overhead. SPI pada 1 MHz mentransfer 1 Mbps. Salah satunya adalah 7× hingga 20× lebih cepat daripada kecepatan data sensor. Kecuali jika Anda mengambil sampel pada frekuensi ultrasonik - padahal sebenarnya tidak demikian, karena tekanan tidak berubah secepat itu - kecepatan bus tidak relevan. Sensornya yang menjadi penghambat, bukan kabelnya.

Intinya tentang kecepatan: tidak masalah. ADC sensor adalah faktor pembatas. Putuskan dengan alasan lain.


Jumlah Pin: Argumen yang Sebenarnya Penting di Papan Kecil

SkenarioPin I²C digunakanPin SPI digunakan
1 sensor2(SDA+SCL)4 (MOSI + MISO + SCLK + CS)
2 sensor2 (bus bersama)5 (bus bersama + 2× CS)
4 sensor2 (bus bersama)7 (bus bersama + 4× CS)

Jika MCU Anda adalah STM32 dengan 80 GPIO — siapa peduli. Namun pada ESP32-C3 dengan 15 GPIO yang dapat digunakan menjalankan layar, BLE, dua tombol, dan kartu SD — 2 pin tambahan untuk sengatan SPI. I²C menghemat pin Anda terlepas dari berapa banyak sensor yang berbagi bus.

Catatan: I²C dikenakan biaya dua resistor penarik. SPI tidak dikenakan biaya. Dua resistor 4,7 kΩ 0402 berharga total sekitar $0,002 dan memakan ruang papan sebesar 2 mm² — bukan apa-apa, tetapi hampir sama.

Intinya pada pin: I²C menang ketika GPIO ketat. Dengan MCU yang kaya pin, keuntungannya hilang — tentukan faktor lain.


Desain Multi-Sensor: Dimana I²C Sebenarnya Bersinar

Tiga sensor tekanan pada PCB yang sama — satu referensi barometrik, satu level tangki, satu saluran keluar pompa. Dengan I²C: tetapkan setiap sensor alamat yang berbeda, kabel SDA dan SCL secara paralel, selesai. Dua jejak. Tiga sensor. Tidak ada pin MCU tambahan. Dengan SPI: tiga jalur CS terpisah di atas MOSI/MISO/SCLK bersama — total enam kabel.

Hati-Hati: Perangkat I²C memerlukan alamat unik. Kebanyakan sensor tekanan menawarkan hal yang sama dua alamat (pin diikat tinggi atau rendah). Itu berarti Anda mendapatkan dua sensor di bus sebelum memerlukan multiplekser I²C seperti TCA9548A — yang menambahkan ~$0,50 dan beberapa mm². SPI tidak memiliki batasan seperti itu; cukup tambahkan jalur CS per sensor.

Intinya pada multi-sensor: I²C unggul dalam kesederhanaan pengkabelan hingga dua sensor identik. Selain itu, gunakan SPI atau mux I²C — tidak ada yang lebih baik, ini adalah panggilan tata letak.


Kekebalan Terhadap Kebisingan: Yang Menjadi Keunggulan SPI

Sensor tekanan resolusi tinggi mengukur perubahan sekecil 0,03 hPa — kira-kira setara dengan berat nyamuk yang hinggap di meja Anda, yang diterjemahkan ke dalam sinyal listrik. Pada resolusi tersebut, kebisingan menjadi penting.

Karakteristik kebisingan I²C

Saluran pembuangan terbuka dengan resistor pull-up menghasilkan tepi ramp RC, bukan transisi CMOS yang bersih. Nilai-nilai pull-up adalah sebuah kompromi: terlalu kuat akan membuang-buang tenaga; terlalu lemah membuat waktu naik menjadi lamban dan membuka jendela untuk penggabungan kebisingan. Di lingkungan yang bising — di samping driver motor, pengatur switching, atau apa pun dengan PWM — I²C dapat mengalami gangguan. Protokol tidak memiliki deteksi kesalahan bawaan selain bit ACK (beberapa sensor menambahkan byte CRC ke payload, yang membantu).

Karakteristik kebisingan SPI

Driver CMOS push-pull secara aktif menggerakkan status tinggi dan rendah. Tepinya tajam. Gerbang jalur CS tepat pada saat budak harus mendengarkan - sepanjang waktu mengabaikan semua yang ada di bus. SNR yang secara inheren lebih baik.

Dalam praktiknya, tata letak PCB yang bersih dengan jejak pendek, ground plane, dan penutup bypass akan membuat I²C tetap nyaman di sebagian besar desain. Namun jika sensor Anda berada pada kabel yang berjarak satu meter dari MCU, atau berbagi wadah dengan apa pun yang mengalihkan amp arus — kekebalan kebisingan SPI adalah keuntungan yang nyata.

Intinya mengenai kebisingan: SPI adalah pilihan yang lebih aman di lingkungan yang tidak bersahabat dengan aliran listrik. Pada PCB yang sama beberapa sentimeter dari MCU, I²C baik-baik saja.


Kompleksitas Firmware: Tiebreaker yang Tidak Dibicarakan Siapa Pun

Firmware I²C

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.

Firmware SPI

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.

Men-debug rasa sakit: Ketika SPI tidak berfungsi, Anda menyelidiki empat baris dengan penganalisis logika dan melihat apa yang sebenarnya terjadi. Ketika I²C tidak berfungsi, Anda menatap layar yang penuh dengan NAK dan bertanya-tanya apakah itu nilai pull-up, alamat, waktu, atau kapasitansi bus. Penganalisis logika seharga $8 menyelesaikan keduanya — tetapi I²C akan menghabiskan lebih banyak waktu Anda.

Intinya pada firmware: SPI tidak terlalu mengganggu bare-metal. Dengan HAL atau perpustakaan, kira-kira seperti mencuci. I²C membutuhkan waktu lebih lama untuk di-debug jika rusak.


Konsumsi Daya: Keduanya Kesalahan Pembulatan

Bus I²C 400 kHz dengan pull-up 4,7 kΩ menyala 0,7 mA saat aktif. SPI pada dasarnya tidak membakar apa pun di tingkat bus - arus peralihan CMOS murni pada kecepatan ini (microamps).

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.

Intinya tentang daya: jangan memilih I²C atau SPI berdasarkan daya. Perbedaannya terlalu kecil untuk menjadi masalah. Tentukan pin, noise, atau kewarasan firmware.


Alur Keputusan - Empat Pertanyaan, Tanpa Matriks

1Berapa banyak sensor identik dalam satu bus?

Satu → Keduanya berfungsi

Tidak ada keuntungan apa pun. Pindah ke Pertanyaan 2.

Dua → I²C mungkin menang

Dua alamat, dua kabel. Kecuali jika sensornya berjauhan — maka SPI.

Tiga atau lebih → SPI

Kecuali Anda senang membaca lembar data multiplexer I²C.

2Seberapa jauh sensor dari MCU?

PCB yang sama, <100 mm → Baik

I²C baik-baik saja di level papan dengan tata letak yang bersih.

Kabel >200mm → SPI

Atau I²C dengan buffer diferensial (PCA9615). I²C tidak pernah dirancang untuk kabel.

>1 meter → Tidak keduanya

Gunakan 4–20 mA atau RS-485. Anda berada di wilayah pemancar industri.

3Apa lingkungan EMI?

PCB senyap, tanpa motor → Baik

Tata letak yang bersih dengan penutup bypass membuat I²C tetap nyaman.

BLDC, GSM, konverter uang terdekat → SPI

Driver push-pull dan gerbang CS akan mencegah pembacaan bayangan.

4Apakah Anda yang menulis drivernya?

HAL / perpustakaan ada → Salah satunya

Abstraksi membuat perbedaannya dapat diabaikan. Gunakan apa yang digunakan anggota dewan lainnya.

Menulis dari awal → SPI

Lebih sedikit negara bagian, tidak ada perpanjangan waktu, tidak ada konflik alamat.

Porting perpustakaan Arduino → I²C

Sebagian besar pustaka sensor penghobi defaultnya adalah I²C. Periksa perpustakaan terlebih dahulu.


The "Why Not Both" Card

Antarmuka Ganda

Beberapa sensor dikirimkan bersama I²C dan SPI pada cetakan yang sama, dapat dipilih melalui tali pin atau bit register. Ini benar-benar berguna dalam dua skenario:

Fleksibilitas pembuatan prototipe

Mulailah dengan I²C di Arduino atau papan breakout karena lebih mudah untuk dihubungkan. Saat Anda memutar PCB Anda sendiri, beralihlah ke SPI jika tata letak Anda mendapat manfaat darinya. Sensor yang sama, logika firmware yang sama, hanya panggilan HAL yang berbeda.

Fleksibilitas SKU Produksi

Satu desain PCB, SKU berbeda. Satu SKU menggunakan I²C karena berbagi bus dengan sensor suhu/kelembaban. Yang lain membutuhkan SPI untuk penelusuran yang lebih lama ke papan sensor jarak jauh. Anda tidak perlu mendesain ulang apa pun — mengganti jalur BOM dan tali resistor.

Jika kandidat sensor Anda tidak mendukung kedua bus, itu bukan masalah. Namun memiliki pilihan adalah salah satu hal yang tidak Anda hargai sampai Anda memutar ulang papan pada jam 2 pagi.


Ringkasan Berdampingan

FaktorI²CSPIPemenang
Jumlah kawat24 + 1 per sensorI²C
KecepatanHingga 3,4MHzHingga 50MHzIkatan — sensor ADC adalah penghambatnya
Multi-sensor (tipe yang sama)Maks 2 tanpa muxTidak terbatas (satu CS per sensor)SPI melampaui 2 sensor
Kekebalan kebisinganSaluran terbuka, tepi RCCMOS dorong-tarik, tepi tajamSPI
Kompleksitas firmwareMesin negara, ACK/NAK, batas waktuTegaskan CS, geser byte, selesaiSPI (logam telanjang); Ikat (dengan HAL)
Kesulitan men-debugHarder — NAK huntingLebih mudah — sinyal langsungSPI
Konsumsi daya~0,7 mA (pull-up aktif)~0 mA (tidak ada pull-up)Tie — delta adalah picowatt-jam
Kabel berjalanTidak direkomendasikan >200mmMenoleransi jejak yang lebih panjangSPI
Komponen eksternal2× resistor penarikTidak adaIkat — 2× 0402 resistor ≈ $0,002

TL;DR

Jumlah pin I²C menggunakan lebih sedikit kabel. Menentukan kapan GPIO ketat.
Kecepatan Tidak masalah. ADC sensor selalu menjadi hambatan.
Multi-sensor I²C lebih bersih untuk ≤2 sensor identik. Skala SPI lebih baik dari itu.
Kebisingan SPI menang. Sangat menentukan di dekat motor, switcher, atau modul GSM.
Firmware SPI adalah bare-metal yang lebih sederhana. Dengan HAL, itu adalah pencucian. I²C membutuhkan waktu lebih lama untuk di-debug jika rusak.
Kekuatan Jangan memilih berdasarkan kekuasaan. Perbedaannya adalah pikowatt-jam.
Antarmuka ganda Yang terbaik dari kedua dunia — satu desain, tukar sesuka hati. Gunakan itu sebagai fitur, bukan sekedar renungan.

Tidak yakin antarmuka mana yang sesuai dengan desain Anda? Beritahu kami MCU Anda, batasan dewan direksi Anda, dan lingkungan Anda — kami akan mengarahkan Anda ke bagian yang tepat, biasanya dalam waktu satu jam.

Hubungi →
Gulir ke Atas

Hubungi kami