最も一般的な組み込みシリアルバスは何ですか?[閉まっている]


8

シリアルバスを介してサードパーティのペリフェラルと相互運用できるようにする組み込みデバイスを設計しています。SPI、I²C、またはその他のバスを選択する必要がありますか?

周辺機器はかなり低い帯域幅(バスを介して通信し、定期的にポーリングされる一部のセンサー)であり、ほとんどの場合コントローラーから1メートル以内です。コントローラーの唯一のタスクは、センサーデータを収集し、何らかの方法でパッケージ化してから、別のバスを介してワイヤレスモジュールに送信することです(ただし、センサーバスもこれに再利用できます)。


3
これは、相互運用したい周辺機器、電圧、速度、距離によって異なります。
Toby Jaffey 2010

1
私は質問に詳細を追加しました
pfyon

1
UARTがまったく言及されていないなんて信じられません...ただ言っているだけです。
vicatcu

私が間違っている場合は修正してください。しかし、UARTがバスであるとは思いませんでした。2つのデバイス間の単なるシリアル通信だと思いました。
pfyon '19

では、バスは2つのデバイス間のシリアル通信用ではありませんか?ポイントツーポイントで使用されることもあるので、値引きしていますか?PCIe、SATA、HTは通常、すべてポイントツーポイントです。とにかく、ほとんどのUARTペリフェラルは、マルチドロップであるRS-422、RS-485、またはLINに使用できます。
Nick T

回答:


12

確信が持てず、要件がかなり曖昧な場合は、I²Cを選択します。

SPIとI²Cの主な違いは、SPIがすべてのペリフェラルにチップ選択ラインを必要とすることです。I²Cは通信の開始時にペリフェラルアドレスをブロードキャストするため、チップセレクトラインは必要ありません。チップ選択ラインは、最初の数回の後で面倒になります。

一方、SPIはおそらく実装とデバッグが簡単です。いくつかのデバイスに接続したいだけなら、勝者かもしれません。

比較的長い距離(cmではなくm)で高いデータレートが必要でない限り、USBは除外します。RS-232も1976年で、周辺機器がビットとノイズを区別するために大規模な信号を必要としない限り、私はそれを除外します。

ダラスの1線を検討するかもしれませんが、I²Cほど一般的ではないのではないかと思います。2線を必要とする「1線」バスの動作は、常に私には少し怪しいようでした。


1
非常にシンプルなコントローラーがあり、ビットバンギング(基本的には手動でクロックを操作する)を使用する必要がある場合、GPIOポートの残り4つにSPIを実装する方がはるかに簡単だと思います。
Wouter Simons

1
I2CよりもSPIをbitbangする方が簡単だと思うのですが。私はそれがビットバンギングに帰着しないことを望んでいます。
pfyon

3
+1は、「1線」として販売されている2線システムの魚のような味です。
semaj

さらに悪いことに、1線(+接地)システムを実装する多くのチップは、寄生電力で動作できないため、3番目のピン(Vcc)を必要とします。1線バスについて考えるとき、私は、電流制限されたブリッジ整流器といくつかの自己クロックラインコードを備えた、容量結合されたセットアップを想像しています。2線または3線ではありません。
ケビンフェルメール

「1-wire」は「1-data-wire」と呼ばれるべきでした。追加のワイヤはGNDであり、(場合によっては)安定した電源ラインです。
ヨハン

3

低帯域幅だとおっしゃっていたので、SPIとI2Cの両方を処理するのに十分なIOを割り当てます。また、可能であれば、CSラインを追加して、複数のSPIデバイスを実行できるようにします。また、周辺機器にどのように電力を供給するかを確認することを忘れないでください。最大の寿命を得るためにバッテリーが消耗している場合は、デバイスを低電力モードにするか、使用していないときは電源を切る必要があります。また、可能であれば、コントローラーのシリアルコントローラーモジュールを使用して、多くのコントローラーがSPI、I2C、およびシリアルを多重化します。センサーからワイヤレスを分離できる場合は、これにより、使用していないときにデバイスをシャットダウンしやすくなります。また、一部のセンサーには、サービスが必要な場合にコントローラーに通知するラインがあるため、割り込みを生成できるピンに理想的なピンに追加のIOを送りたい場合もあります。


2

定義の問題のため、問題は少し問題です。

シリアル化された通信は、基本的に、コントローラーの空いているポートを使用せずに外部周辺装置と通信する場合に必要です。基本的に、すべてのシリアル通信方法には、データ接続の処理方法に関するクロックと設定が必要です。

SPIは4線式バスです。I2Cは2線式バスです。

それぞれに異なる特徴があります。答える必要があるのは、通信の速度、信頼性、マイクロコントローラーのオプションなどです。

このウィキペディアの記事とこれリファレンスサイトでは、私が理解できるよりもはるかに明確に説明しています。また、リファレンスに従ってさらに学習してください!


2

基本的に、I2CとSPIのどちらかを選択する必要があります。

使用するバスに関係なく、センサーとサードパーティの周辺機器の電圧レベルを考慮する必要があります。これを行うには、2つのMOSFETを使用して独自のコンバーターを作成します(片道のみ-ピックアップ/変更なしまたはダウン/変更なし。センサーを3.3で実行し、1.8および5Vマスターとインターフェースする必要がある場合にのみ問題になります)。NXPのAN10441をご覧ください [PDF]を。これはSPIでも機能します(プルアップを削除するだけです)。基準電圧を確立するには、コネクターにラインを追加する必要があります(まだ行っていない場合)。

I2Cの1つの欠点は、バス上の最も遅いクロックに制限されることです。1つのセンサーが100kHzしか対応しておらず、400kHzまたは1MHz(どちらも有効な速度)でメモリと通信したい場合、遅いセンサーの動作は規定されていません。SPIを使用する場合、チップセレクトラインは、低速のセンサーがバス上のデータをリスニングすることさえないことを意味し、センサーごとに異なる速度を実行できます。


1

I2Cを使用します。センサーと同じバス上に配置したい場合は、I2Cを介して通信できるワイヤレスモジュールを入手できることを確認してください。私が見たほとんどの通信周辺機器は、I2CではなくSPIを使用しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.