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:
- 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
- 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
| Skenario | Pin I²C digunakan | Pin SPI digunakan |
|---|---|---|
| 1 sensor | 2(SDA+SCL) | 4 (MOSI + MISO + SCLK + CS) |
| 2 sensor | 2 (bus bersama) | 5 (bus bersama + 2× CS) |
| 4 sensor | 2 (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?
Tidak ada keuntungan apa pun. Pindah ke Pertanyaan 2.
Dua alamat, dua kabel. Kecuali jika sensornya berjauhan — maka SPI.
Kecuali Anda senang membaca lembar data multiplexer I²C.
2Seberapa jauh sensor dari MCU?
I²C baik-baik saja di level papan dengan tata letak yang bersih.
Atau I²C dengan buffer diferensial (PCA9615). I²C tidak pernah dirancang untuk kabel.
Gunakan 4–20 mA atau RS-485. Anda berada di wilayah pemancar industri.
3Apa lingkungan EMI?
Tata letak yang bersih dengan penutup bypass membuat I²C tetap nyaman.
Driver push-pull dan gerbang CS akan mencegah pembacaan bayangan.
4Apakah Anda yang menulis drivernya?
Abstraksi membuat perbedaannya dapat diabaikan. Gunakan apa yang digunakan anggota dewan lainnya.
Lebih sedikit negara bagian, tidak ada perpanjangan waktu, tidak ada konflik alamat.
Sebagian besar pustaka sensor penghobi defaultnya adalah I²C. Periksa perpustakaan terlebih dahulu.
The "Why Not Both" Card
Antarmuka GandaBeberapa 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
| Faktor | I²C | SPI | Pemenang |
|---|---|---|---|
| Jumlah kawat | 2 | 4 + 1 per sensor | I²C |
| Kecepatan | Hingga 3,4MHz | Hingga 50MHz | Ikatan — sensor ADC adalah penghambatnya |
| Multi-sensor (tipe yang sama) | Maks 2 tanpa mux | Tidak terbatas (satu CS per sensor) | SPI melampaui 2 sensor |
| Kekebalan kebisingan | Saluran terbuka, tepi RC | CMOS dorong-tarik, tepi tajam | SPI |
| Kompleksitas firmware | Mesin negara, ACK/NAK, batas waktu | Tegaskan CS, geser byte, selesai | SPI (logam telanjang); Ikat (dengan HAL) |
| Kesulitan men-debug | Harder — NAK hunting | Lebih mudah — sinyal langsung | SPI |
| Konsumsi daya | ~0,7 mA (pull-up aktif) | ~0 mA (tidak ada pull-up) | Tie — delta adalah picowatt-jam |
| Kabel berjalan | Tidak direkomendasikan >200mm | Menoleransi jejak yang lebih panjang | SPI |
| Komponen eksternal | 2× resistor penarik | Tidak ada | Ikat — 2× 0402 resistor ≈ $0,002 |
TL;DR
Bingung apakah Anda memerlukan sensor tekanan absolut, pengukur, atau diferensial? Baca panduan sederhana dalam bahasa Inggris →
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 →



