エンジニアリングガイド
圧力センサーの I²C と SPI — 適切なバスを選択するか、後でレイアウトを気に入らないか
圧力センサーを選択しました。射程、精度、パッケージをご存知でしょう。次に、注文ページに 2 つのバリエーションが表示されます。 i²c そして spi。同じセンサーです。同じ価格です。異なる 4 文字。教科書的な理論ではなく、実際の数字を使って決定する方法を次に示します。
2 分間のおさらい
以前に両方のバスを配線したことがある場合は、これをスキップしてください。まだ読んでいない場合は、この記事の残りの部分に従うだけで十分です。
- ワイヤー: 2 — SDA (データ) + SCL (クロック)
- 信号の種類: オープンドレイン、抵抗でハイにプルアップ
- アドレッシング: デバイスごとに 7 ビットのアドレス
- 方向: 半二重
- スピード: 100kHz / 400kHz / 1MHz / 3.4MHz
- コントロール: マスターが開始。スレーブはアドレス指定された場合にのみ応答します
- ワイヤー: 4 — MOSI、MISO、SCLK + 1× CS (デバイスあたり)
- 信号の種類: プッシュプルCMOS
- アドレッシング: なし — CS ラインがデバイスを選択します
- 方向: 全二重
- スピード: 1MHz~50MHz
- コントロール: マスターはクロックを制御します。時計の伸びがない
この時点で、次のように思うかもしれません。 "SPI is faster, so SPI wins, end of article." 完全ではありません。圧力センサーにとって速度はほとんど重要ではありません。その理由は次のとおりです。
重要ではない速度の議論
一般的な MEMS 圧力センサーは、次の間隔で読み取りを行います。 1~100ミリ秒 — バス速度ではなく、ADC 変換時間が支配的です。サンプルあたり 1 ミリ秒 (1 kHz サンプリング) であっても、読み取りあたりおそらく 48 ビットを押し出すことになります。それは 48kbps。
400 kHz の I²C は、オーバーヘッド後に最大 320 kbps を転送します。 1 MHz の SPI は 1 Mbps を転送します。どちらかが 7 倍から 20 倍高速 センサーのデータレートよりも。超音波周波数でサンプリングを行っている場合を除き、圧力はそれほど速く変化しないため、サンプリングを行っているわけではありませんが、バス速度は無関係です。ボトルネックとなるのはワイヤーではなくセンサーです。
速度に関する結論: 重要ではありません。センサーの ADC が制限要因になります。他の理由で決定してください。
ピン数: 小型基板で実際に重要となる議論
| シナリオ | 使用される I²C ピン | 使用されるSPIピン |
|---|---|---|
| 1センサー | 2(SDA+SCL) | 4 (MOSI + MISO + SCLK + CS) |
| 2センサー | 2(乗合バス) | 5 (共用バス + 2× CS) |
| 4つのセンサー | 2(乗合バス) | 7 (共用バス + 4× CS) |
あなたの MCU が 80 GPIO を備えた STM32 であるとしても、気にする必要はありません。ただし、ディスプレイ、BLE、2 つのボタン、SD カードを実行する 15 個の使用可能な GPIO を備えた ESP32-C3 では、SPI 用の追加の 2 つのピンが使用されます。 I²C は、バスを共有するセンサーの数に関係なく、ピンを節約します。
注: I²C には費用がかかります 2つのプルアップ抵抗。 SPI には費用はかかりません。 2 つの 4.7 kΩ 0402 抵抗のコストは合計約 0.002 ドルで、基板スペースは 2 mm² を占めます。何もないわけではありませんが、それに近いスペースです。
ピンに関する結論: GPIO が逼迫している場合、I²C が優先されます。ピンが豊富な MCU では、利点がなくなり、他の要素を決定します。
マルチセンサー設計: I²C が実際に輝く場所
同じ PCB 上に 3 つの圧力センサー - 1 つの気圧基準、1 つのタンクレベル、1 つのポンプ出口。 I²C の場合: 各センサーに異なるアドレスを割り当て、SDA と SCL を並列に配線して完了です。跡が2つ。 3つのセンサー。余分な MCU ピンはゼロです。 SPI の場合: 共有 MOSI/MISO/SCLK の上に 3 つの個別の CS ライン (合計 6 本のワイヤ)。
気をつけて: I²C デバイスには一意のアドレスが必要です。ほとんどの圧力センサーは正確な結果を提供します 2つのアドレス (ピンを高い位置または低い位置に固定する)。つまり、TCA9548A のような I²C マルチプレクサが必要になる前に、バス上に 2 つのセンサーを搭載できることになります。これにより、約 0.50 ドルと数 mm² が追加されます。 SPI にはそのような制限はありません。センサーごとに CS ラインを追加するだけです。
マルチセンサーの結論: 2 つの同一センサーまでの配線の簡素化では、I²C が優れています。さらに、SPI または I²C マルチプレクサを使用します。どちらが優れているというわけではありません。これはレイアウト呼び出しです。
ノイズ耐性: SPI が先を行くもの
高解像度の圧力センサーは、0.03 hPa という小さな変化を測定します。これは、電気信号に変換される、机に止まった蚊の重さにほぼ相当します。その解像度ではノイズが問題になります。
I²Cノイズ特性
プルアップ抵抗を備えたオープン ドレイン ラインは、きれいな CMOS 遷移ではなく、RC ランプ エッジを生成します。プルアップ値は妥協案です。強すぎると電力が無駄になります。弱すぎると立ち上がり時間が遅くなり、ノイズ結合の窓が開きます。ノイズの多い環境 (モーター ドライバー、スイッチング レギュレーター、または PWM を備えたものの隣) では、I²C に不具合が生じる可能性があります。このプロトコルには、ACK ビットを超えるエラー検出機能が組み込まれていません (一部のセンサーでは、ペイロードに CRC バイトが追加されており、これが役に立ちます)。
SPIノイズ特性
プッシュプル CMOS ドライバーは、ハイ状態とロー状態の両方をアクティブに駆動します。エッジは鋭利です。 CS ラインは、スレーブがリッスンすべきタイミングを正確にゲートし、残りの時間はバス上のすべてを無視します。本質的に優れた SNR。
実際には、短い配線、グランド プレーン、およびバイパス キャップを備えたクリーンな PCB レイアウトにより、ほとんどの設計で I²C を満足させることができます。ただし、センサーが MCU から 1 メートル離れたケーブル上にある場合、または電流のアンペアを切り替えるものとエンクロージャを共有している場合、SPI のノイズ耐性は真の利点です。
ノイズに関する結論: 電気的に厳しい環境では SPI がより安全な選択です。 MCU から数センチ離れた同じ PCB 上では、I²C は問題ありません。
ファームウェアの複雑さ: 誰も語らないタイブレーカー
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.
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.
デバッグの苦痛: SPI が機能しない場合は、ロジック アナライザーで 4 行を調べて、何が起こっているかを正確に確認します。 I²C が動作しないときは、NAK でいっぱいの画面を見つめて、それがプルアップ値なのか、アドレスなのか、タイミングなのか、それともバス容量なのか疑問に思います。 8 ドルのロジック アナライザは両方を解決しますが、I²C の方が多くの時間を費やします。
ファームウェアの結論: SPI はベアメタルの煩わしさが軽減されます。 HAL またはライブラリを使用すると、大まかに言うと洗浄です。 I²C が壊れると、デバッグに時間がかかります。
消費電力: どちらも丸め誤差です
4.7 kΩ プルアップを備えた 400 kHz I²C バスは約 00.7mA アクティブな間。 SPI はバス レベルでは本質的に何も消費せず、これらの速度 (マイクロアンペア) では純粋に CMOS スイッチング電流を消費します。
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.
電力に関する結論: 電力に基づいて I²C または SPI を選択しないでください。その差は小さすぎて問題になりません。代わりに、ピン、ノイズ、またはファームウェアの健全性を決定します。
意思決定フロー — 4 つの質問、マトリックスなし
11 台のバスには同一のセンサーが何個ありますか?
どちらにしてもメリットはありません。質問 2 に進みます。
2 つのアドレス、2 つのワイヤ。センサーが遠く離れていない限り、SPI を使用します。
I²C マルチプレクサのデータシートを読むのが好きでない限り。
2センサーから MCU までの距離はどれくらいですか?
I²C は、きれいなレイアウトでボード レベルで問題ありません。
または、差動バッファを備えた I²C (PCA9615)。 I²C は決してケーブル用に設計されたものではありません。
4 ~ 20 mA または RS-485 を使用します。ここは産業用送信機の領域です。
3EMI環境とは何ですか?
バイパスキャップを備えたクリーンなレイアウトにより、I²C の満足度が維持されます。
プッシュプルドライバーとCSゲートによりファントム読み取りを防止します。
4ドライバーを書いているのはあなたですか?
抽象化により、違いは無視できます。ボードの残りの部分で使用されているものを使用します。
状態が少なく、クロック ストレッチやアドレスの競合はありません。
ほとんどの愛好家向けセンサー ライブラリはデフォルトで I²C に設定されています。まずは図書館をチェックしてみてください。
The "Why Not Both" Card
デュアルインターフェース一部のセンサーは同梱されています I²C と SPI の両方を同じダイ上に搭載、ピンストラップまたはレジスタービットで選択可能。これは、次の 2 つのシナリオで非常に役立ちます。
プロトタイピングの柔軟性
配線が簡単なため、Arduino またはブレークアウト ボード上の I²C から始めます。独自の PCB を作成する場合、レイアウトに SPI のメリットがある場合は、SPI に切り替えてください。同じセンサー、同じファームウェア ロジック、ただ異なる HAL 呼び出し。
実稼働SKUの柔軟性
1 つの PCB 設計で異なる SKU。 1 つの SKU は、バスを温度/湿度センサーと共有するため、I²C を使用します。もう 1 つは、リモート センサー ボードへの長いトレース実行のために SPI を必要とします。何も再設計する必要はありません。BOM ラインと抵抗ストラップを変更するだけです。
センサーの候補が両方のバスをサポートしていない場合でも、それは問題にはなりません。しかし、オプションがあるということは、午前 2 時にボードを再スピンするまでは感謝しないことの 1 つです。
並べてまとめた概要
| 要素 | i²c | spi | 勝者 |
|---|---|---|---|
| ワイヤー数 | 2 | センサーあたり 4 + 1 | i²c |
| スピード | 最大3.4MHz | 最大50MHz | 同点 — センサー ADC がボトルネック |
| マルチセンサー(同型) | マルチプレクサなしで最大 2 | 無制限(センサーごとに 1 つの CS) | 2 つのセンサーを超える SPI |
| ノイズ耐性 | オープンドレイン、RC エッジ | プッシュプルCMOS、シャープなエッジ | spi |
| ファームウェアの複雑さ | ステートマシン、ACK/NAK、タイムアウト | CSをアサート、バイトをシフト、完了 | SPI (ベアメタル);ネクタイ(HAL付き) |
| デバッグの難易度 | より困難 — NAK ハンティング | より簡単 – わかりやすい信号 | spi |
| 消費電力 | ~0.7 mA (プルアップがアクティブ) | ~0 mA (プルアップなし) | 同点 — デルタはピコワット時です |
| ケーブル配線 | 推奨されません >200mm | より長いトレースを許容します | spi |
| 外部コンポーネント | 2×プルアップ抵抗 | なし | 接続 — 2× 0402 抵抗器 ≈ $0.002 |
TL;DR
そもそも絶対圧センサー、ゲージ圧センサー、差圧センサーのどれが必要か迷っていませんか? わかりやすい英語のガイドを読む→
どのインターフェースが自分のデザインに適しているかわからないですか?ご使用の MCU、ボードの制約、環境についてお知らせください。通常 1 時間以内に適切な部分をご案内します。
お問い合わせ →



