I2C混合周波数は可能ですか?


12

400 kHz I 2 Cバスがあるとします。1つのマスターと多数のスレーブデバイスがあります。もう1つのスレーブデバイスを導入したいと思いますが、残念ながら100 kHzまでしか行きません。

確かに、確かな設計の選択肢は次のとおりです。

  • そのバスを100 kHzで実行するだけです
  • 400 kHzと100 kHzペリフェラルに別々のバスを使用する

しかし、問題はハックについてだけです。1つのバスを使用し、400 kHzで400 kHzデバイスに対処し、100 kHzスレーブと話すときにバスを100 kHzに切り替えるとどうなるでしょうか。

または、遅いスレーブは、それがアドレス指定されていると誤って判断するため、I 2 Cラインに表示される400 kHzハッシュに応答して誤動作する可能性がありますか?

100 kHzデバイスに依存して、他のスレーブ宛のメッセージを確実に無視するのに十分な400 kHz I 2 C信号を処理できるでしょうか?


4
あなたの最後の文章に関して、私はあなたが400kHzの信号を処理することができる100kHzのデバイスに依存できるとは思わない。
gbmhunter 2013年

それでも、まさにそのようなハックを実装するかどうかに依存しているため、基本的には問題外です。
Kaz

回答:


6

あなたが提案するように、そうすることは良いエンジニアリング慣行ではありません。一部のデバイスは受信できない(アンダーサンプル)トラフィックをほとんど無視しますが、他のデバイスは誤ったフレームでバスを乱雑にする可能性があります。

したがって、探している答えは、次のようなアプリケーションの詳細によって異なります。

  • I2C接続の長さ
  • プルアップ抵抗値
  • デバイスの互換性

もちろん、数年後にその仕様外で操作されたデバイスに何が起こるかを予測することは困難です。

もう1つのオプションは、シャットダウンラインを実行してデバイスを低速化するか、クロックライン(クロック信号を生成できない場合)をANDゲートに通すことです。


10

マスターから出てくる追加のI2Cバスがない場合の別のオプションは、PCA9543A / 43BなどのI2Cスイッチを使用することです。1つのブランチに400kHzスレーブを、もう1つのブランチに100kHzスレーブを配置し、必要に応じて切り替えます。


フィリップス(オリジネーター)が言ったことを見ると、まさにこれです。これらは互換性がなく、バススイッチを使用することをお勧めします。(それはアプリノートにあります)。
gbarry

6

100kHzのデバイスが400kHzのトラフィックにさらされたときに誤動作しないという保証はありません。NACKからバスのハングまで、あらゆることが可能です。

バス全体を100kHzで実行するか、低速ペリフェラル用に個別の低速バスを用意する必要があります。


3

他のオプション。2つのバスを使用する代わりに、1つの追加のラインを使用することが簡単にできます(ソフトウェア/ bitbanged I 2 Cを使用すると簡単です)。個別のクロックラインまたは個別のデータライン。または、I 2 CバッファーまたはI 2 Cスイッチを使用して、他に何も変更することなく、その単一の100MHzチップを独自のセグメントに配置します。

または、単一のバスでテストします。100kHzチップが回線に影響を与える可能性は十分にあります。4ビットごとに読み取り、対処済みだと思ってしまう可能性があります。ただし、有効な開始条件を確認し、正確なアドレスであるため、次の32ビットから4ビットごとに読み取る必要があります。その後、次の数バイトを有効な情報として読み取って、レジスタに書き込む必要があります。 、またはデータをクロックアウトしてみます。私はそれがあまりにもありそうな状況だとは思いません。最善の策は、テスト回路に簡単に配線して確認することです。

注意すべき点は2つあります。これが1回限りの回路である場合、またはいくつかの回路のみを作成している場合、それを危険にさらしたり、変更したりするのは簡単です。それが大量生産されたアイテムであるならば、あなたは2番目のバスを持ちたいと思うかもしれません。もう1つは、100kHzチップは単に元のI 2 C仕様に合わせて製造されたものであり、より高いクロック速度を十分にサポートする可能性があることを考慮する必要があることです。高速400kHz仕様ではテストされていません。


2

I2Cバスの設計は次のようなものです-

  1. SCLで立ち下がりエッジが発生すると、スレーブデバイスが特定の最小遅延なしにSDAを直ちにアサートする可能性があります。
  2. 立ち上がりエッジと立ち下がりエッジの相対的な順序は非常に重要です。

ドライバーの強度とラインキャパシタンスの違いにより、1つのデバイスがSCLのやや遅い立ち下がりエッジにSDAを非常に速く駆動して別のデバイスが最初にSDAが立ち下がるのを認識することで応答する可能性があります。

SCLで複数のロジックしきい値を定義し、SCLの立ち下がりエッジがSDAのエッジの後に来ると見なされるように指定するには、SDAのエッジが検出されたときに2/3 VDDを上回っている必要があります。ただし、デバイスは、SCLの立ち下がりエッジに応答して、SDAが1/3 VDDを下回るまでSDAをアサートしない場合がありますが、仕様はそのような用語で記述されていません。

代わりに、SDAとSCLでほぼ同時に立ち下がりエッジを検出するデバイスは、SDAのエッジが実質的に先行しない限り、通常、SCLのエッジが最初に発生したと見なします。一部のI2C実装は、SCLとSDAを外部クロックに同期し、SDAの立ち下がりエッジをSCLの立ち下がりエッジの2周期前に観測して、最初に来たと見なされるようにすることでこれを処理します。SCLとSDAの動作速度が同期クロックに比べて速すぎる場合、デバイスはSCLとSDAの任意の高信号と低信号のシーケンスを認識する可能性があります。これらのシーケンスの1つが遅いデバイスをアドレスしているように見える場合、それに応じて反応し、進行中の他の通信を押しつぶす可能性があります。

I2Cバス上のデバイスがシステムクロックへの同期に依存しなければならない特別な理由はありません(SCLで2つの個別のしきい値を検出できる方が良いでしょう)が、一部のデバイスは実際にそのように動作するというのが事実です。内部で低速に制限されていたデバイスが高速バスと共存したい場合でも、関心のあることが起こっているときは常に、少なくともクロックストレッチを使用する必要があることに注意してください。

これにより、一部の通信が他の場合よりも遅くなる可能性がありますが、速度の低下は、クロック同期設計で必要とされるほど悪くはありません(遅いデバイスがクロックをストレッチする実際の量では、おそらく同期されたクロックユニットで最悪のシナリオの障害を回避するためにクロックを遅くする必要がある量ほど悪い。

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