i2cマスターがドライブできるi2cスレーブの最大数はありますか?物理的な制限要因は何ですか?
i2cマスターがドライブできるi2cスレーブの最大数はありますか?物理的な制限要因は何ですか?
回答:
ソフトウェア制限要因は、スレーブに使用されるアドレスのサイズです:7ビットまたは10ビットで、それぞれ127および1023デバイスをサポートします。物理的には、2つの制限があります。まず、バスの物理的なサイズ。これは、バスが短時間の実行(IC間の部分)専用であるためです。バスが大きすぎる場合、対処する必要がある容量性負荷と伝播遅延の影響があります。第二に、一部のデバイスはI2Cアドレスの全範囲をサポートできません。例として、MPU6050ジャイロスコープは2つのアドレスのみをサポートし、一部のデバイスは特別な目的のために特定のアドレスを予約しています。
アドレス指定によってデバイスの数が制限されます。一部のユーザーは10ビットのアドレス指定を使用できます(ほとんど使用されません)。これにより、アドレスの数が1024に制限されます。
I2C(「2線バス」または他の同様のバスを呼び出したいものとは対照的に)は、NXP(néePhilips)標準、UM10204 I2Cバス仕様およびユーザーマニュアルに従う必要があります。それは、他の場所に存在するさまざまな解釈やサブセットではなく、主要な参照文書である必要があります。
デバイスの最大数は、最も弱い出力の駆動能力(最小プルアップ抵抗を決定する)、配線と入力容量、および動作モード/周波数の影響を受けます。最大容量を超える必要がある場合は、セクション7.2 「最大許容バス容量を超える動作」を参照してください。
i2cバスは、主にバスの容量(および速度)とアクセス可能なデバイスアドレスによって制限されます。物理的なボードスペース。
ただし、バスバッファー、エクステンダー、リピーター、ハブ、マルチプレクサー、スイッチ(または複数のバス間で切り替えることができるデバイスの他の名前)を考慮する場合、実際の上限はありません。これらは、同じi2cバスを介してアクセスできるように、i2cオーバーヘッドを追加します。たとえば、PCA9548Aは8ビットのバススイッチです。
このシングルチップは、理論的には利用可能なi2cスレーブの数(127 * 8)を4倍にすることができます。また、PCA9548Aは1つのバスで最大8つのアドレスに構成できるため、8 * 8 * 127のデバイスになります。(数学はオフの場合があります)。そして、それはこのデバイスだけであり、それ以上ではありません。
率直に言って、静電容量を調整する場合、理論的な制限はありません。
I2Cは、7ビットと10ビットの 2つのアドレス長を指定します。これにより、理論上の最大アドレスはそれぞれ128と1024になります。
ただし、0x00(一般的な呼び出し)など、いくつかの予約アドレスがあります。これにより、アドレス空間がさらに制限されます。
あなたはI2Cデバイスを直接制御しているシステムを構築している場合は、できるあなた自身の使用のために予約されたアドレスを使用しますが、システムはもはやI2C規格に準拠しません。
アドレス指定に加えて、物理バスの制限があります。バス上の各デバイスは、バスの速度に応じて、特定の時間内にバスをローにプルできる必要があります。バスに多くの容量がある場合、デバイスはSDAを十分に低く引き下げることができず、プルアップによってSDAが十分に速く戻されないことがあります。
現在、ハードウェアの問題は、少しのドライバーハードウェアで克服できます。私は現在、I2Cを使用して数十メートル以上のデバイスと通信するプロジェクトに取り組んでいます。メインバスは24vを使用し、各ボードには3.3vに降圧するドライバーがあります。
ナットシェルでは、I2Cの物理的な制限を克服できます。アドレス指定は、デバイスを直接制御できる場合にのみ克服できます。
マスターが駆動できるスレーブの数の主な制限は、一般にバス容量、漏れ、駆動強度などの電気的要因に起因します。寄生容量と漏れがゼロのスレーブを構築でき、それらを接続できる場合ゼロ容量の基板トレースでは、バス容量は要因にはなりませんが、実際にはどちらの仮定も成り立ちません。
一方、お互いを「知っている」デバイスのアドレス指定は、実際には問題ではありません。1つの読み取りアドレスと1つの書き込みアドレスを使用して数十億個のチップを接続できるペリフェラルを設計するのは簡単です。すべてのデバイスに一意の4バイトIDが必要であり、常に書き込みアドレスをリッスンする必要があるが、最初の4つの送信データバイトがIDと一致しないすべてのトランザクションからドロップする必要があることを指定するだけです。さらに、最後に聞いた書き込みトランザクションがアドレスと一致した場合にのみ、デバイスが読み取りアドレスに応答できることを指定します。
接続されたすべてのスレーブのIDをマスターに決定させる機能を追加したい場合、そのような目的のために特別なID範囲を予約できます。たとえば、最初のIDバイトがFFである場合、次の4バイトはマスクになり、その後の4バイトはIDになります。マスクで指定されたIDの部分がコマンドで指定されたものと一致する場合、デバイスは接続されたままになります(最後のIDバイトを確認します)。これにより、マスターは64個のトランザクションを使用する少なくとも1つのデバイスと、それぞれ62個以下のトランザクションを使用する追加のデバイスを識別できます。おそらく、デバイスを識別するための最速の手段ではありませんが、数十億のデバイスIDの検索スペースを考えると悪くはありません。
短い答え:状況によります
最大104デバイスの7ビットアドレスを持つ(共通)デバイスがある場合(128アドレス-予約済みアドレス(0x00-0x07および0xF0-0xFFは予約済み))(特定の制限が適用されます)10ビットをサポートする(あまり一般的でない)デバイスがある場合最大1024個のデバイスをアドレス指定します(7ビットと10ビットのデバイスを混在させて、最大1136個のデバイスに到達できます)
さて、制限事項について:ほとんどの単純なデバイスは、2〜8個の異なるアドレスにのみ構成できます。これを克服するには、異なるベースアドレスを持つデバイスをカスタム注文します(ただし、これは通常、デバイスの最小量を注文することを意味します)ハードウェアの制限(主にバス容量)もありますが、これは特別なi2cドライバーで解決できます。
遠距離で多くのデバイスを接続したい場合は、とにかくフィールドバスを使用することをお勧めします!I2Cは、デバイス(テレビなど)内の通信用です。私は自分でI2Cを使用し、RaspberyPiで最大50cmの外部ケーブルを使用しています(バスシステムには絶対に必要のないT字型セクションでも)。驚くほどうまく機能します。
バスに接続されているデバイスの数は、400 pFの合計許容バス容量によってのみ制限されます。I²Cインターフェースを備えたほとんどのICは低電力、高インピーダンスのCMOSテクノロジーを使用しているため、最大容量に達する前に多くのICをI²Cバスに接続できます。
マルチプレクサチップ(TCA9544Aなど)またはバッファー(PCA9515Bなど)を追加すると、バスの容量とアドレス指定の両方のすべての制限を克服できます。
マルチプレクサの背後に同じアドレスを持つ3つのデバイスを配置し、そのうちの1つだけを選択して通信し、後で別のデバイスを選択できます。もちろん、ソフトウェアはより複雑になります。
配線が長い場合は、バッファを中央に配置して容量制限を克服できます。