Welcher kleine IC könnte schaltbare I2C-Pullups ergeben?

7

Mein Ziel ist es, einen DPST an Pullup-Widerständen durch etwas Einfaches, Billiges und sehr Kleines zu ersetzen, das mit der I2C-Busspannung aktiviert werden kann. Ich dachte, dass dies eine häufig genug erforderliche Anforderung sein könnte, um einen einfachen IC für diese Aufgabe zu finden, aber nach stundenlangem Durchsuchen von Datenblättern finde ich keine Lösung, die so ideal ist, wie es mein Darm vorschlägt.

Die Frage, wie GPIO für umschaltbare Pullups von I2C verwendet werden kann, enthält die Grundlagen dessen, was ich auf einer sehr kleinen Leiterplatte erreichen möchte . Ich möchte nicht unbedingt ein GPIO verwenden, um die Klimmzüge ein- und auszuschalten. Mein Ziel ist die Flexibilität des Designs, damit die Klimmzüge von einem einzelnen Jumper oder einem GPIO eingeschaltet werden können.

schematisch

simulieren Sie diese Schaltung - Schema erstellt mit CircuitLab

Inspiriert durch den Bus Pirate das macht etwas ähnliches unter Verwendung eines CD4066BC, Quad bilaterale Schaltern ich das gefunden TC7W66F, Dual bilateralen Schalter , die meinen Preis und Raum Ziele vage passen aber ich dachte , etwas ähnlich wie bei einem SOT-23 - Gehäuse.

Die oben erwähnte Frage hat eine Antwort, die die Verwendung von FETs vorschlägt, und ich habe einige Dual-FET-Pakete mit bereits zusammengebundener Quelle gefunden , die anscheinend funktionieren könnten, aber ich bin in erster Linie ein Software-Typ und muss zugeben, dass ich mich mit so etwas nicht 100% wohl fühle ohne weiteren Rat, oder ob es weitere Komponenten erfordern würde, die meine Raumwünsche erfüllen?

DanSut
quelle
2
Gibt es einen Grund, warum Sie den Schalter überhaupt verwenden müssen und nicht einfach die Oberseite jedes Widerstands an Ihren I2C-PU-Punkt anschließen können?
Brhans
@brhans, das funktioniert gut, wenn Sie das Pullup möchten, wenn Sie es nicht tun, haben Sie effektiv R1 + R2 über Ihre SDA- und SCL-Leitungen, was nicht gerade wünschenswert ist.
DanSut
4
Warum möchten Sie manchmal nicht, dass die Klimmzüge verbunden sind? I2C ist so ziemlich darauf ausgelegt, dass die Klimmzüge immer da sind.
Das Photon
@ThePhoton die Platine enthält ein paar I2C-Komponenten und kann in andere Karten (wo MCU und / oder andere I2C-Sachen leben) eingesteckt werden, die möglicherweise bereits I2C-Pullup
bereitstellen
1
@DanSut Sie hätten immer noch ein Problem, wenn mehrere Breakout-Boards angeschlossen wären und jedes über Pull-up-Widerstände verfügt, die nicht unter Ihrer Kontrolle stehen. Hier ist eine Zusammenfassung zu diesem Thema.
Nick Alexeev

Antworten:

12

Ich würde "vorgespannte" BJTs vorschlagen

Dual-MOSFETs haben in der Regel eine hohe Drain-Source-Kapazität, was sich auf die Anstiegszeit Ihres I2C-Busses auswirkt. BJT-Schalttransistoren haben tendenziell weniger. Zum Beispiel haben diese einen Cob von nur 3pF, normalerweise bei 10 V (bei Niederspannung ist er 2-3 mal höher, was sie Ihnen nicht sagen und Sie sollten es wissen), aber das ist immer noch ziemlich bescheiden. Fügen Sie die Pullup-Widerstände zu den Kollektoren, die Emitter zu Vdd hinzu und verbinden Sie die Basen mit Ihrer / enable-Leitung, und fertig (ein Teil plus die Widerstände, und das Gehäuse ist nur 2,0 x 2,1 mm groß). Sehr billig im Volumen und nicht viel Sorge um ESD.

Geben Sie hier die Bildbeschreibung ein

schematisch

simulieren Sie diese Schaltung - Schema erstellt mit CircuitLab


Warum also nicht MOSFETs?

Sie haben einen geringeren Widerstand, oder? Nun, die gesättigten BJTs fallen höchstwahrscheinlich bei den Strömen, die Sie verwenden, um 50 bis 100 mV ab (im Vergleich zu 4066-Schaltern) und vergleichen die Ausgangskapazität eines FDS6312P-MOSFET (Coss) - typischerweise mehrere hundert pF in der Nähe von 0 V. Fast so hoch wie das Maximum von 400 pF für alle Geräte am Bus.

Geben Sie hier die Bildbeschreibung ein

Spehro Pefhany
quelle
2
+1 zum Vergleichen der FET-Ausgangskapazität mit dem I2C-Busmaximum. Gut gemacht.
Bitsmack
2
+1 Interessanter Vergleich. Auf jeden Fall eine Überlegung über die MOSFETs wert. Da sie eine nahezu identische Größe / Pinbelegung haben, können Sie ein Design erstellen und leicht auswählen, welches den Anforderungen am besten entspricht. Dieser Ansatz würde auch jeden notwendigen Pull-up-Widerstand eliminieren, der die Schaltung auf nur eine Komponente reduziert
Tom Carpenter
Ich habe noch nie über den Kapazitätsfaktor nachgedacht, daher wird diese Antwort bei der Aufklärung sehr geschätzt. Die CBT3306-Schalter, die ich mir angesehen habe, zeichnen die Kapazität nicht wie folgt auf. Nehme ich also an, dass sie bei der Verwendung von FETs das gleiche Problem in der Art und Weise sehen, wie ich sie verwenden würde?
DanSut
1
@DanSut Eigentlich sehen sie überhaupt nicht schrecklich aus 6,45pF typisch für 3V, sollten also bei niedriger Spannung (vielleicht ~ 20pF) noch tolerierbar sein. Sehr niedrige Serienimpedanz (5 Ohm), aber das ist hier irrelevant - nicht so, wenn der Schalter in Reihe geschaltet ist. Das Problem ist, dass viele Dual-MOSFETs so ausgelegt sind, dass sie sehr niedrige Rds (Ein) haben und Stromstärken führen, sodass sie nicht geeignet sind. Es werden nicht so sehr MOSFETs verwendet (4066 sind auch MOSFETs), sondern es handelt sich um große MOSFETs. Sie können sich diese als Partituren kleiner MOSFETs parallel vorstellen, sodass der Widerstand mit 1 / n abnimmt und die Kapazität proportional zu n ist.
Spehro Pefhany
5

Eine Option sind zwei P-Kanal-MOSFETs. Diese können wie folgt angeschlossen werden:

schematisch

simulieren Sie diese Schaltung - Schema erstellt mit CircuitLab

Wenn Sie MOSFETs mit Logikpegel verwenden, können Sie das Signal EN_n (nicht aktivieren) grundsätzlich mit + V Volt versorgen, um die Pull-up-Widerstände zu deaktivieren, und mit 0 V, um sie zu aktivieren. Wenn deaktiviert, sind die Widerstände im Wesentlichen nicht vorhanden. Sie haben Body-Dioden von den I2C-Leitungen zu V +, aber diese sollten keine Probleme verursachen.

Wie @bitsmack hervorhebt, können Sie dem EN_n-Pin auch einen optionalen Pull-up-Widerstand (R3) hinzufügen, der die MOSFETS deaktiviert, wenn der Pin schwebend bleibt. Dies würde es ermöglichen, dass der Eingang offen ist - einfach kurz nach Masse, um ihn zu aktivieren, oder schwebend, um ihn zu deaktivieren.

Es ist möglich, sehr kleine (SOT23-6 oder SOT23-5) Gehäuse zu erhalten, die zwei P-Ch-MOSFETs (z. B. diese ) enthalten, die dann wie oben gezeigt verdrahtet werden können - normalerweise sind sie so angeordnet, dass das Routing recht einfach ist. Sie können die Tore und Quellen zusammenfügen, um ein sehr kleines, im Wesentlichen 4-poliges Gehäuse zu erhalten. Selbst wenn Sie den Pull-up-Widerstand wie beispielsweise einen 0603 einwerfen, wäre die gesamte Schaltung wahrscheinlich kleiner als ein 2x2pin 0,1 "-Jumper.

Tom Carpenter
quelle
@dansut Wenn Sie dies tun, schlage ich vor, einen Pullup-Widerstand von jedem MOSFET-Gate auf V + zu setzen ... Auf diese Weise werden die I2C-Pullups nicht eingeschaltet, bevor Ihr EN_n-Signal aktiviert wird (dh bevor der Mikrocontroller seinen Pin-Status konfiguriert und bestätigt).
Bitsmack
@bitsmack würde man tun, da die Tore direkt verbunden wären. Ich werde es der Schaltung hinzufügen, da dies bedeuten würde, dass das Ganze auf eine Art offener Art und Weise gesteuert werden könnte.
Tom Carpenter
Ja, sehr wahr :)
bitsmack
4

Praktischer Ansatz

Alle Breakout-Boards, die ich zusammenstecke, sind unter meiner Kontrolle [...]

Halte es einfach. Ziehen Sie die I2C-Pull-up-Widerstände von jedem Breakout-Board heraus, das Sie haben. Installieren Sie Pull-up-Widerstände mit angemessenen Werten auf der Mikrocontroller-Platine.

Mein grundlegender Wunsch ist es, die PU dort einzuschalten, wo ich sie mit einem einzigen Jumper anstatt mit 2 haben möchte

Der Versuch, die Anzahl der Springer von 2 auf eins zu reduzieren, geht weit über die Verringerung der Rendite hinaus, wenn ich es selbst sagen darf.

Wenn ein praktischer Ansatz nicht anspricht

Sie können etwas in der Art einer aktiven Konstantstrom-Pull-up-Schaltung tun.

aktiver I2C-Pull-up mit konstantem Strom

ich=V.Z.- -0,65R.307

R.307=R.308

Jeder Allzweck-Kleinsignal-PNP-Transistor würde dies tun.

Nick Alexeev
quelle
Im Hinterkopf wusste ich, dass ich wahrscheinlich eine Antwort wie Ihre praktische bekommen würde - ich schätze Ihre Antwort und Argumentation und es könnte die Richtung sein, die ich schließlich einschlagen werde. Vielen Dank auch für die Bereitstellung der Alternative. Wenn ich dies untersuche, wird sich mein Wissen auf diesem Gebiet zweifellos verbessern.
DanSut
1

Wie wäre es einfach mit einem I2C-Busbeschleuniger mit einer Freigabe wie dem LTC4300A-1 Geben Sie hier die Bildbeschreibung ein

Dies kann Teile des Busses isolieren und soll dies tun. Der Nachteil ist, dass Sie Ihre Klimmzüge auf beiden Seiten benötigen. Der Vorteil ist, dass Sie sich nicht wundern müssen!

Scott Seidman
quelle