回答:
センサーハブの配置
このシナリオでは、2つのI²Cバスがあります。それらをローカルバスとメインバスと呼びましょう。ローカルバスの目的は、多数のセンサーをマイクロコントローラー(μC)に接続することです。μCの目的は、センサーをポーリングし、センサーから情報を集約し、特定のイベントを検出することです。このような役割のμCは、センサーハブと呼ばれます。センサーハブは、高次関数を担当しません。そのための強力なメインプロセッサがあります。メインバスは、センサーハブをメインプロセッサに接続します。そのため、センサーハブμCはローカルI²Cバスのマスターであり、I²Cメインバスのスレーブです。
SPIおよびI²C
元の投稿でリンクされているPICは、SPIとI²C間でピンを共有していません。ただし、ハードウェアSPIとI²Cに同じピンを使用する他のPICがあります。これは、両方が同じMSSPペリフェラルで実装されているためです。PICに2つの別個のMSSPペリフェラルがある場合、1つはハードウェアSPIに使用でき、もう1つはハードウェアI²Cに使用できます。
複数のバスを必要とする非常に一般的な理由は、異なる速度で動作するデバイスがあることです。元々、I²Cは最大100 kHzで動作していました。その後、速度は最大400 kHzに増加し、それ以降は1 MHz以上に増加しました。
問題は、各デバイスのアドレスがI²Cプロトコルに埋め込まれているため、同じバスに異なる速度定格のデバイスがある場合(100 kHzと400 kHzなど)、常にバスを最低速度で実行する必要があることです。同じバス上のすべてのデバイス(この場合は100 kHz)。
バスを高速(400 kHz)で実行した場合、明らかに低速デバイスは正常に動作せず、高速デバイスのアドレスを独自のものとして解釈することもあり、400 kHzデバイスは次のように失敗します。まあ。ただし、最初にバスを100 kHzで実行し、高速チップをアドレス指定した後、バスを400 kHzに高速化しようとしても、低速チップが(おそらくそうではないかもしれませんが)高速データパケットがアドレスとして誤って、バス上の通信を台無しにします。いずれの場合も、400 kHzデバイスとの交換の終わりに、100 kHzデバイスはおそらく不明な状態になります。
あなたが異なる速度で実行しているデバイスを持っている場合は、最も効率的であるそれはそうと、あなたが複数のI²Cポートを持っていると、あなたが100 kHzのデバイスに対して1人のI²Cの発言権を持っている、そのような贅沢を可能にするために予備のピンを持っている400 kHzのデバイスのための別の、および他の必要に応じて1 MHzデバイス用。
これはSPIでは問題になりません。各デバイスは、個別のチップセレクトラインによってハードウェアで有効化(アドレス指定)されるためです。そのため、同じバス上の他のチップが有効になっていないため、クロック速度を選択したチップの速度(10 MHz、20 MHzなど)に合わせることができます。
また、同じアドレスを持つ2つのデバイスをサポートできます。はい、ほとんどのデバイスでは、ストラップでアドレスの下位2ビットを選択できます。最近、4つのデバイスをサポートする必要がありましたが、各デバイスでは、アドレスのLSBを抵抗器でしか設定できませんでした。2つのポートがあれば、追加費用はかかりません。
1つを多数のデバイスのマスターにし、もう1つをスレーブポートとして提供したいので、10,000番目の温度センサーをポーリングしている間、マスターがコマンドを出すためにバスをつかむ必要はありません時間。
このスレッドには他にもたくさんの良い反応があるようで、私の2セントを追加するだけです。
速度。
2つのI2Cデバイスに同時にアクセスする必要がある場合、重大な競合が発生する可能性があります。または、一方が他方を待つ必要があります。
他の人はこれを行うための多くの理由を述べました、私は1つを追加します:
多数の5V I2Cデバイスと、多数の3V3 I2Cデバイスを入手しました。
たとえば、2つのI2Cポート、1つは5Vトレラント、もう1つは3V3のみの3.3Vマイクロがあります。