Wie viele Pull-up-Widerstände pro I2C-Bus

Ich entwerfe eine Leiterplatte, die ich mit 13 ICs auf einem I2C-Bus sprechen muss. Ich frage mich, wie viele Pull-up-Widerstände ich auf den Bus setzen sollte? Die Chips sind MAX9611 und hier ist das aktuelle Layout des I2C-Board-Bereichs (Fortsetzung auf der rechten Seite):

Geben Sie hier die Bildbeschreibung ein

Wie Sie sehen können, sind R17 und R18 Strombegrenzungswiderstände und R21 und R22 sind Pull-up-Widerstände (1 für SCL und einer für SDA). Die SCL-Spur geht über die obere Schicht und SDA geht in die untere Schicht).

Ich habe gerade einige Beispiele in der TI I2C-Busanleitung gesehen und frage mich, ob das, was ich bereits entworfen habe, falsch ist, da anscheinend für jedes Gerät ein lokaler Pull-up-Widerstand auf den SDA- und SCL-Leitungen vorhanden ist:Geben Sie hier die Bildbeschreibung ein

Ich würde mich sehr über Ihren Vorschlag freuen, bevor ich an einem schlechten PCB-Layout kläglich scheitere!

Antworten (3)

Schau genauer hin...

Für jeden Bus gibt es nur ein einziges Paar Pull-up-Widerstände . Ihr Diagramm zeigt vier separate I2C-Busse. Der Multiplexer und der Repeater isolieren die Segmente.

Da Sie also nur einen Bus haben, benötigen Sie nur zwei Widerstände: einen für SCL und einen für SDA.

Eine Sache, die ich zu sehen glaube, ist, dass alle Ihre Chips so aussehen, als hätten sie denselben Footprint, was mich glauben lässt, dass sie alle derselbe Chip sind. Wenn es sich um denselben Chip handelt, müssen alle eine eindeutige Adresse haben, da sonst alle versuchen, auf dieselben gegebenen Befehle zu antworten. Das ist etwas in Ordnung, wenn sie sich alle gleichzeitig verhalten müssen, nicht so toll, wenn sie unabhängig handeln müssen. Wenn sie jedoch dieselbe Adresse haben, wenn einer von ihnen kaputt geht, fehlt, keinen Befehl erhalten hat usw., dann wird Ihr Code dies nicht bemerken.

Bei Klimmzügen ist Pipe absolut richtig, Sie möchten nur ein Paar Klimmzüge pro Bus verwenden. Das von Ihnen gepostete Bild zeigt vier vollständig separate Busse (Mikro zu Multiplexer, Multiplexer zu IO-Expandern und LED-Blinkern, Hub-Repeater zu mehr IO-Expandern und Multiplexer zu Datenkonverter, Eeprom usw.).

Abschnitt 7.1 des I2C-Standards (www.nxp.com/documents/user_manual/UM10204.pdf) zeigt, wie die Klimmzüge dimensioniert werden. Tabelle 10 in Abschnitt 6.1 gibt die Anstiegszeiten für die verschiedenen Drehzahlen an.

Ein Trick, den ich gelernt habe, um die Pull-ups richtig zu dimensionieren, besteht darin, einen Widerstand im mittleren Bereich (~ 5 k) als Pull-up anzugeben und dann die Wellenformen auf der Prototypeinheit zu erfassen. Der tatsächlich erforderliche Widerstand entspricht CurrentResistor * (TargetRiseTime / MeasuredRiseTime). Ein Widerstand, der kleiner als die angegebene Zahl ist, gibt Ihnen die Anstiegszeit, um die Spezifikationen zu erfüllen. Wenn der Widerstand kleiner ist als der minimal berechnete Pull-up (aus Abschnitt 7.1), müssen Sie Ihren Bus möglicherweise mit Repeatern, Multiplexern oder etwas anderem in mehrere Segmente aufteilen. Das Messen und anschließende Berechnen hat zwei Vorteile. Der erste ist, dass es meiner Meinung nach schneller geht, als zu versuchen, Ihre Buskapazität zu berechnen, insbesondere da viele Faktoren sie beeinflussen können, und der zweite ist, dass Sie die Wellenform tatsächlich sehen und a erhöhen können rote Flagge, wenn das Signal schlecht aussieht.

Danke. Ja, die Adressierung ist mir bekannt, ich habe den Pins 8 und 9 der Chips unterschiedliche Adressen (VCC, GND, Vcc/2 und Vcc*2/3) zugewiesen.

Es werden nur Klimmzüge am Master benötigt . (I2C ist kein schneller Bus und verwendet keine Abschlusswiderstände und ist nicht impedanzangepasst.)

ABER Sie müssen sicherstellen, dass die Bussegmente nach den Mux/Schaltern im ausgeschalteten Zustand hochgezogen bleiben. Je nachdem, wie Sie Muxes implementieren, benötigen Sie möglicherweise Pullups auf den isolierten Bussegmenten. Diese können ein hohes R sein, sie sollen die Leinen nur hoch halten, sie nicht während des Betriebs hochziehen, z. B. könnten die Master-Klimmzüge 1k5 und die Segment-Klimmzüge 100k sein. Sie sehen dies in unserer Busschalttafel: http://www.i2cchip.com/pdfs/BusSwitch_MUX3.pdf

Es gibt noch einen zweiten Grund für Segment-Pullups: Ein isoliertes Segment hat eine längere/hohe Kapazität und benötigt mehr Strom, dh einen niedrigeren R. Übrigens ist in diesem Fall - ein einziges Segment - ein sehr guter Grund, Busschalter zu verwenden, da es Probleme isoliert ( zB Rauschen) zu den Chips auf diesem Segment, während der Rest des Systems zuverlässig ist.

siehe auch: http://www.i2cchip.com/i2c_connector.html#Crosstalk