Forum: Mikrocontroller und Digitale Elektronik Doppelte Pull-Ups bei i2c?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Daniel S. (sany)


Lesenswert?

Moin!

Ich arbeite öfters mit I2C und weiß, das es auf die Pull-Ups drauf an 
kommt.

Nun stellt sich mir die Frage, ich habe ein STM32F407.... nutze von 
diesem den I2C Bus 100KHz Clockrate, nun habe ich an dem I2C Bus 1.8K 
auf SCL und 1.8K auf SDA zu VCC 3.3V, bei 100 KHz. (Master)

Ich möchte aber nun an den I2C Bus 5 weitere Platinen als Slave 
anschließen mit einem STM32F103.... über RJ45 Steckverbinder.

Müsste ich an den 5 Platinen jeweils auch immer 2 Pullups bestücken, 
oder reicht es, wenn das lediglich nur der Master hat?

Bin mir da etwas unschlüssig, aber wäre dann ja bei dem selben Bus, 
doppelt gemoppelt.. würde sich das auch negativ auswirken?

Grüße,
Daniel

von Michael X. (Firma: vyuxc) (der-michl)


Lesenswert?

Nein, ein Satz Pullups genügt. Mit 1,8k bist du schon auf der sehr 
starken Seite.

von Jan (dunno)


Lesenswert?

Je mehr pull-ups, umso niedriger der pullup-widerstand 
(R-Parallelschaltung) - irgendwann kommt der Punkt, an dem die 
treiber-pins den Bus nicht mehr weit genug runter ziehen können, und es 
funktioniert nicht mehr.

Kommt auf den sink- Strom deiner Treiber an.

von Helmut -. (dc3yc)


Lesenswert?

Man könnte auch mal in die sehr vorzüglichen Applikationsschriften des 
Herstellers (Philips, jetzt NXP) schauen. Da ist alles beschrieben.

von Wastl (hartundweichware)


Lesenswert?

Helmut -. schrieb:
> Man könnte auch mal in die sehr vorzüglichen Applikationsschriften des
> Herstellers (Philips, jetzt NXP) schauen.

Ist doch sowas von Neunziger.

Und wer fragt heute noch in mikrocontroller.net wo man doch
alles mit chatGPT erschlagen kann.

von Clemens L. (c_l)


Lesenswert?

Jan schrieb:
> Kommt auf den sink- Strom deiner Treiber an.

Die I²C-Spezifikation erlaubt normalerweise bis zu 3 mA. Mit 3,3 V / 1,8 
kΩ geht das noch, mit zwei parallel nicht.

: Bearbeitet durch User
von Jobst Q. (joquis)


Lesenswert?

Die meisten Fertigmodule haben PullUps von 10K. Davon kann man 
problemlos mehrere in einem Bus haben. Es ist auch gut, auf beiden 
Seiten PullUps zu haben, besonders bei längeren Zuleitungen.

von Jörg R. (solar77)


Lesenswert?

Wastl schrieb:
> Und wer fragt heute noch in mikrocontroller.net wo man doch
> alles mit chatGPT erschlagen kann.

Viel schlimmer sind die die im mikrocontroller.net schreiben obwohl sie 
nichts zu sagen haben.

von Rainer W. (rawi)


Lesenswert?

Jobst Q. schrieb:
> Die meisten Fertigmodule haben PullUps von 10K. Davon kann man
> problemlos mehrere in einem Bus haben.

Das ist der Arduino-Kompromiss zwischen "geht nicht", weil Pull-Up 
vergessen und "geht nur mit einem Slaves", weil bei mehreren der Strom 
für die Treiber zu hoch wird.

von Stephan S. (uxdx)


Angehängte Dateien:

Lesenswert?

Clemens L. schrieb:
> Die I²C-Spezifikation erlaubt normalerweise bis zu 3 mA. Mit 3,3 V / 1,8
> kΩ geht das noch, mit zwei parallel nicht.

In der I2C-Spezifikation (S. 47 und 55) steht mindestens 3 mA, und 
auch nur im Standard Mode bzw. Fast Mode, beim Fast Mode Plus sind es 20 
mA

: Bearbeitet durch User
von Klaus H. (hildek)


Lesenswert?

Stephan S. schrieb:
> In der I2C-Spezifikation (S. 47 und 55) steht mindestens 3 mA,

Mindestens muss der I2C-Baustein können, d.h. aber andererseits, dass 
man da drunter bleiben sollte. Also die PUs auf höchstens 3mA 
dimensionieren!

Und damit ist die Aussage von Clemens L. völlig richtig.

Jobst Q. schrieb:
> Die meisten Fertigmodule haben PullUps von 10K. Davon kann man
> problemlos mehrere in einem Bus haben.
Mag ja noch gehen bei sehr kurzen Verbindungen. Ich selber würde 
trotzdem mindestens 1mA spendieren: bessere Flanken, bessere 
Störsicherheit.
Also höchstens 3k3 in 3V3-Systemen bzw. 4k7 in 5V-Systemen.

von (prx) A. K. (prx)


Lesenswert?

Wastl schrieb:
> Und wer fragt heute noch in mikrocontroller.net wo man doch
> alles mit chatGPT erschlagen kann.

Kann man: "Ja, für eine I2C-Verbindung sollten Pull-up-Widerstände an 
jedem Bus verwendet werden, nicht an jeder Karte. Diese Widerstände sind 
wichtig, um die Datenleitungen auf ein definiertes logisches Niveau zu 
ziehen und Stabilität in der Kommunikation zu gewährleisten. 
Typischerweise werden Pull-up-Widerstände zwischen den SDA- und 
SCL-Leitungen und der Versorgungsspannung platziert."

von Jobst Q. (joquis)


Lesenswert?

(prx) A. K. schrieb:
> Wastl schrieb:
>> Und wer fragt heute noch in mikrocontroller.net wo man doch
>> alles mit chatGPT erschlagen kann.
>
> Kann man: "Ja, für eine I2C-Verbindung sollten Pull-up-Widerstände an
> jedem Bus verwendet werden, nicht an jeder Karte. Diese Widerstände sind
> wichtig, um die Datenleitungen auf ein definiertes logisches Niveau zu
> ziehen und Stabilität in der Kommunikation zu gewährleisten.
> Typischerweise werden Pull-up-Widerstände zwischen den SDA- und
> SCL-Leitungen und der Versorgungsspannung platziert."

"Erschlagen" ist da ein treffender Ausdruck.

von A. F. (chefdesigner)


Lesenswert?

Michael X. schrieb:
> Nein, ein Satz Pullups genügt. Mit 1,8k bist du schon auf der sehr
> starken Seite.
Auf einer bereits gefährlich starken ...

Jan schrieb:
> Je mehr pull-ups, umso niedriger der pullup-widerstand
> (R-Parallelschaltung) - irgendwann kommt der Punkt, an dem die

irgendwann kommt der Punkt, an dem jeder merkt, dass I2C für Chip-2-Chip 
Kommunikation ausgelegt ist, bei dem die Anzahl der Teilnehmer bekannt 
ist.

Bei Board-2-Board nutzt man keinen (aktiven) I2C-Bus sondern nur die 
Spannungen und geht an Ort und Stelle über einen Treiber.

Damit ist der Bus spannungssicher und stromunabhängig.
Du brauchts nur einmal irgendwo einen Lastwiderstand gegen VDD und GND 
und nimmst so Stromeinkopplungen weg. (wegen du = R * di !)

Auf den boards baut man hinter dem Treiber sein eigenes maximal 
niederohmiges I2C-Netzwerk.

von (prx) A. K. (prx)


Lesenswert?

Jobst Q. schrieb:
> "Erschlagen" ist da ein treffender Ausdruck.

Inwiefern? Ist doch eine passende und korrekte Antwort.

von A. F. (chefdesigner)


Lesenswert?

Klaus H. schrieb:
> Also höchstens 3k3 in 3V3-Systemen bzw. 4k7 in 5V-Systemen.
... und mindestens 1k / 1,5k füge ich hinzu.

Das Interessante ist dann, wenn der Teilnehmer versucht, 
Clock-Stretching oder ähnliche Spässe zu machen und mit seinen 3mA 
maximum auf die manche Chips ausgelegt sind, gegen die vielen pulls 
kämpft.

von Daniel S. (sany)


Lesenswert?

A.ndi F. schrieb:
> Klaus H. schrieb:
>> Also höchstens 3k3 in 3V3-Systemen bzw. 4k7 in 5V-Systemen.
> ... und mindestens 1k / 1,5k füge ich hinzu.
>
> Das Interessante ist dann, wenn der Teilnehmer versucht,
> Clock-Stretching oder ähnliche Spässe zu machen und mit seinen 3mA
> maximum auf die manche Chips ausgelegt sind, gegen die vielen pulls
> kämpft.

Warum das denn?
meine 1.8K waren eigentlich schon laut Datenblatt falsch, denn im 
Datenblatt von meinem STM32F407 stehen 2x 4k7 Widerstände drin.

von Sebastian W. (wangnick)


Lesenswert?

Daniel S. schrieb:
> meine 1.8K waren eigentlich schon laut Datenblatt falsch, denn im
> Datenblatt von meinem STM32F407 stehen 2x 4k7 Widerstände drin

Die Minimal- und Maximalwerte der I2C-Pullup-Widerstände berechnet man 
aus den Stromgrenzen und der Gesamtkapazität am Bus. Ich kann mir nicht 
vorstellen, dass das Datenblatt des STM32F407 4k7-Widerstände 
VORSCHREIBT. Wo soll das genau stehen?

LG, Sebastian

von Jobst Q. (joquis)


Lesenswert?

(prx) A. K. schrieb:
> Jobst Q. schrieb:
>> "Erschlagen" ist da ein treffender Ausdruck.
>
> Inwiefern? Ist doch eine passende und korrekte Antwort.

"Ja, für eine I2C-Verbindung sollten Pull-up-Widerstände an
jedem Bus verwendet werden, nicht an jeder Karte."

Das ist falsch. Mit PullUp-Widerständen an jeder Karte werden kapazitive 
und induktive Einstreungen auf die Leitung reduziert. Deshalb sind sie 
zu empfehlen.

von Manfred P. (pruckelfred)


Lesenswert?

A.ndi F. schrieb:
> irgendwann kommt der Punkt, an dem jeder merkt, dass I2C für Chip-2-Chip
> Kommunikation ausgelegt ist, bei dem die Anzahl der Teilnehmer bekannt
> ist.

Ka, die Anzahl sollte konstant sein.

> Bei Board-2-Board nutzt man keinen (aktiven) I2C-Bus sondern nur die
> Spannungen und geht an Ort und Stelle über einen Treiber.

Das ist mir zu pauschal vereinfacht. Ich nutze Arduino und Boards mit 
z.B. D/A-Wandler oder Strommessung, läuft einwandfrei. Die liegen 
allerdings im selben Gehäuse, der gesamte I2C ereicht maximal 30cm - das 
finde ich unkritisch und dürfte im Rahmen seiner Spezifikationen 
bleiben.

Jobst Q. schrieb:
> "Ja, für eine I2C-Verbindung sollten Pull-up-Widerstände an
> jedem Bus verwendet werden, nicht an jeder Karte."
>
> Das ist falsch. Mit PullUp-Widerständen an jeder Karte werden kapazitive
> und induktive Einstreungen auf die Leitung reduziert. Deshalb sind sie
> zu empfehlen.

Ich denke auch, dass das nicht schadet. Es bleibt aber zu beachten, dass 
die Summe aller nicht zu niederohmig wird. In der Praxis bekommt man 
einen echten Bus mit Abschluß an den beiden Enden kaum umgesetzt, das 
wird eher ein Stern oder Baum.

von Spess53 .. (hardygroeger)


Lesenswert?

Hi

Was soll eigentlich das ganze geeiere hier?

Es gibt die AppNote

UM10204 I2C-bus specification and user manual

Da findet man die Berechnungen Rpmax und Rpmin und noch vieles anderes 
zu I2C.

MfG Spess

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.