i2cマスターはいくつのi2cスレーブをサポートできますか?


17

i2cマスターがドライブできるi2cスレーブの最大数はありますか?物理的な制限要因は何ですか?


1
7ビットのアドレスがあります。つまり、最大127個のスレーブに対応できます。
ボトニック

ありがとう。電流駆動、静電容量、またはスレーブの数が最大127に達するのを妨げるような何かのような物理的な制限要因はありますか?
-user768421

1
@Botnicは、i2cスイッチ、ハブ、バッファー、リピーター、およびバスを拡張できるi2cデバイスを完全に無視します。
通行人

回答:


22

ソフトウェア制限要因は、スレーブに使用されるアドレスのサイズです:7ビットまたは10ビットで、それぞれ127および1023デバイスをサポートします。物理的には、2つの制限があります。まず、バスの物理的なサイズ。これは、バスが短時間の実行(IC間の部分)専用であるためです。バスが大きすぎる場合、対処する必要がある容量性負荷と伝播遅延の影響があります。第二に、一部のデバイスはI2Cアドレスの全範囲をサポートできません。例として、MPU6050ジャイロスコープは2つのアドレスのみをサポートし、一部のデバイスは特別な目的のために特定のアドレスを予約しています。


2
off-by-oneエラーがあります。7ビットアドレッシングは128個のアドレス(0〜127)をサポートします。10ビットアドレッシングは1024個のアドレス(0〜1023)をサポートします。
CurtisHx

3
これは、1つのエラーだけではありません。1つだけではなく7つの予約アドレスがあるため、「off by 6エラー」です。
クルーミ

アドレス指定スキームは、バス、マスター、またはスレーブ上のデバイスによって決定されます。一部のデバイスには、事前設定されたアドレス範囲と予約アドレスがあります。他のデバイス、たとえば多くのマイクロコントローラーには予約アドレスがなく、指定されたビットスキームで任意のアドレスを使用できます。
vini_i

これらの数値は多少正しいですが、注意が必要です。1111 XXXや0000 XXXなどの予約済みアドレスがいくつかあります。これは、7ビット= 2 ^ 7-16 = 112使用可能なアドレス、10ビットが完全な2 ^ 10 1024であることを意味します。8ビットは、通常はR / Wビットを含みません7ビットで。nxp.com/docs/en/user-guide/UM10204.pdf
busfault

@busfault 8ビットアドレスは事実上問題ではないことを認めます。回答から削除しました。ほとんどのマイクロコントローラーは、予約されたアドレスの一部またはすべてを無視し、アドレス範囲全体を使用することを選択できます。私の答えでは、これはデバイス固有であることに注意してください。
vini_i

10

ノードの最大数は、アドレス空間と400 pFの合計バス容量によって制限され、実際の通信距離は数メートルに制限されます。

I²Cで詳細を読む


9

アドレス指定によってデバイスの数が制限されます。一部のユーザーは10ビットのアドレス指定を使用できます(ほとんど使用されません)。これにより、アドレスの数が1024に制限されます。

I2C(「2線バス」または他の同様のバスを呼び出したいものとは対照的に)は、NXP(néePhilips)標準、UM10204 I2Cバス仕様およびユーザーマニュアルに従う必要があります。それは、他の場所に存在するさまざまな解釈やサブセットではなく、主要な参照文書である必要があります。

デバイスの最大数は、最も弱い出力の駆動能力(最小プルアップ抵抗を決定する)、配線と入力容量、および動作モード/周波数の影響を受けます。最大容量を超える必要がある場合はセクション7.2 「最大許容バス容量を超える動作」を参照してください。

ここに画像の説明を入力してください


7

i2cバスは、主にバスの容量(および速度)とアクセス可能なデバイスアドレスによって制限されます。物理的なボードスペース。

ただし、バスバッファー、エクステンダー、リピーター、ハブ、マルチプレクサー、スイッチ(または複数のバス間で切り替えることができるデバイスの他の名前)を考慮する場合、実際の上限はありません。これらは、同じi2cバスを介してアクセスできるように、i2cオーバーヘッドを追加します。たとえば、PCA9548Aは8ビットのバススイッチです。

このシングルチップは、理論的には利用可能なi2cスレーブの数(127 * 8)を4倍にすることができます。また、PCA9548Aは1つのバスで最大8つのアドレスに構成できるため、8 * 8 * 127のデバイスになります。(数学はオフの場合があります)。そして、それはこのデバイスだけであり、それ以上ではありません。

率直に言って、静電容量を調整する場合、理論的な制限はありません。


5

I2Cは、7ビットと10ビットの 2つのアドレス長を指定します。これにより、理論上の最大アドレスはそれぞれ128と1024になります。

ただし、0x00(一般的な呼び出し)など、いくつかの予約アドレスがあります。これにより、アドレス空間がさらに制限されます。

あなたはI2Cデバイスを直接制御しているシステムを構築している場合は、できるあなた自身の使用のために予約されたアドレスを使用しますが、システムはもはやI2C規格に準拠しません。

アドレス指定に加えて、物理バスの制限があります。バス上の各デバイスは、バスの速度に応じて、特定の時間内にバスをローにプルできる必要があります。バスに多くの容量がある場合、デバイスはSDAを十分に低く引き下げることができず、プルアップによってSDAが十分に速く戻されないことがあります。

現在、ハードウェアの問題は、少しのドライバーハードウェアで克服できます。私は現在、I2Cを使用して数十メートル以上のデバイスと通信するプロジェクトに取り組んでいます。メインバスは24vを使用し、各ボードには3.3vに降圧するドライバーがあります。

ナットシェルでは、I2Cの物理的な制限を克服できます。アドレス指定、デバイスを直接制御できる場合にのみ克服できます。


非常に長いi2cバスで作業してから3年近くになります。彼らは大丈夫でしたか?
ウォリック

1
@wallyk私はその回答を投稿した直後にその会社を辞めました。適切なハードウェアがあれば、I2Cをより長い距離で通信させることができます。ただし、長距離用に設計された他の通信プロトコルがあり、おそらくI2Cよりも良い選択です。
CurtisHx

5

マスターが駆動できるスレーブの数の主な制限は、一般にバス容量、漏れ、駆動強度などの電気的要因に起因します。寄生容量と漏れがゼロのスレーブを構築でき、それらを接続できる場合ゼロ容量の基板トレースでは、バス容量は要因にはなりませんが、実際にはどちらの仮定も成り立ちません。

一方、お互いを「知っている」デバイスのアドレス指定は、実際には問題ではありません。1つの読み取りアドレスと1つの書き込みアドレスを使用して数十億個のチップを接続できるペリフェラルを設計するのは簡単です。すべてのデバイスに一意の4バイトIDが必要であり、常に書き込みアドレスをリッスンする必要があるが、最初の4つの送信データバイトがIDと一致しないすべてのトランザクションからドロップする必要があることを指定するだけです。さらに、最後に聞いた書き込みトランザクションがアドレスと一致した場合にのみ、デバイスが読み取りアドレスに応答できることを指定します。

接続されたすべてのスレーブのIDをマスターに決定させる機能を追加したい場合、そのような目的のために特別なID範囲を予約できます。たとえば、最初のIDバイトがFFである場合、次の4バイトはマスクになり、その後の4バイトはIDになります。マスクで指定されたIDの部分がコマンドで指定されたものと一致する場合、デバイスは接続されたままになります(最後のIDバイトを確認します)。これにより、マスターは64個のトランザクションを使用する少なくとも1つのデバイスと、それぞれ62個以下のトランザクションを使用する追加のデバイスを識別できます。おそらく、デバイスを識別するための最速の手段ではありませんが、数十億のデバイスIDの検索スペースを考えると悪くはありません。


2

短い答え:状況によります

最大104デバイスの7ビットアドレスを持つ(共通)デバイスがある場合(128アドレス-予約済みアドレス(0x00-0x07および0xF0-0xFFは予約済み))(特定の制限が適用されます)10ビットをサポートする(あまり一般的でない)デバイスがある場合最大1024個のデバイスをアドレス指定します(7ビットと10ビットのデバイスを混在させて、最大1136個のデバイスに到達できます)

さて、制限事項について:ほとんどの単純なデバイスは、2〜8個の異なるアドレスにのみ構成できます。これを克服するには、異なるベースアドレスを持つデバイスをカスタム注文します(ただし、これは通常、デバイスの最小量を注文することを意味します)ハードウェアの制限(主にバス容量)もありますが、これは特別なi2cドライバーで解決できます。

遠距離で多くのデバイスを接続したい場合は、とにかくフィールドバスを使用することをお勧めします!I2Cは、デバイス(テレビなど)内の通信用です。私は自分でI2Cを使用し、RaspberyPiで最大50cmの外部ケーブルを使用しています(バスシステムには絶対に必要のないT字型セクションでも)。驚くほどうまく機能します。


0

バスに接続されているデバイスの数は、400 pFの合計許容バス容量によってのみ制限されます。I²Cインターフェースを備えたほとんどのICは低電力、高インピーダンスのCMOSテクノロジーを使用しているため、最大容量に達する前に多くのICをI²Cバスに接続できます。


1
これは、OPの質問に完全に対応するものではありません。おおよその値を使用している場合でも、質問のすべての側面に答えるようにしてください。情報源へのリンクを指定および/または残してください。
Sparky256

0

マルチプレクサチップ(TCA9544Aなど)またはバッファー(PCA9515Bなど)を追加すると、バスの容量とアドレス指定の両方のすべての制限を克服できます

マルチプレクサの背後に同じアドレスを持つ3つのデバイスを配置し、そのうちの1つだけを選択して通信し、後で別のデバイスを選択できます。もちろん、ソフトウェアはより複雑になります。

配線が長い場合は、バッファを中央に配置して容量制限を克服できます。


いいえ、制限はあります。4チャネル/マルチプレクサ、チャネルごとに4つのサブチャネルがあり、サブサブチャネル、サブサブサブチャネルなどがあります。チャネルスイッチャーごとに3つのアドレス行があります:4 ^(2 ^ 3)= 65536チャネルです。チャネルごとに、2 ^ 8-7-8 + 2 ^ 10 = 1265デバイス/チャネル(バッファも使用する場合)があります(-7は予約アドレス用で、-8は多重アドレス用です)。1265 * 65536 = 82903040最大デバイス。
12431234123412341234123

編集:申し訳ありませんがエラーが発生しました:2 ^ 7-7-8 + 2 ^ 10 = 1137デバイス/チャネル=> 1137 * 65536 = 74514432デバイスです。ただし、IO-Expanderを使用して一部のバッファのオンとオフを切り替えると、より多くの可能性があります(これは、実用的ではありませんが、理論上の可能性です)。
12431234123412341234123
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.