I2C minimale Taktrate und Zuverlässigkeit

12

Gibt es eine von I2C festgelegte Mindesttaktrate? Ich weiß, dass die am häufigsten verwendete Taktrate 100 kHz ist und es einen "schnellen" Modus von 400 kHz gibt, der von einigen Geräten unterstützt wird, und einen schnelleren Modus, der von anderen Geräten unterstützt wird (ich denke 1 MHz?). Da das SCK-Signal vom Master erzeugt wird, könnte man vermutlich viel langsamer arbeiten als alle anderen - gibt es in der Praxis eine Untergrenze? Inwieweit kümmern sich Slave-Geräte um die Taktrate (z. B. kommt es häufig zu kurzen Timeouts)? Der Grund, den ich frage, ist, dass ich mich frage, ob ich I2C möglicherweise über eine längere Distanz (z. B. 20 Fuß) betreiben könnte, um I2C-EEPROMs zuverlässig in einem Produktionstester-Setup zu programmieren. Ich gehe davon aus, dass es über diese Distanz bei den Standarddatenraten nicht zuverlässig funktioniert.

vicatcu
quelle
Der Hi-Speed-Modus ermöglicht einen 3,4-MHz-Takt bei max. 100 pF Buskapazität.
Stevenvh

Antworten:

16

Nein, es gibt keine Mindestfrequenz, die Mindesttaktfrequenz ist 0 oder DC. Siehe Spezifikation , Seite 48.

Sie müssen jedoch auf die Anstiegs- und Abfallzeiten achten. Das sind maximal 1000 ns bzw. 300 ns. Ein längeres Kabel mit einer gewissen Kapazität beeinflusst die Flanken unabhängig von der Frequenz.

Diese Kapazität bestimmt zusammen mit den Pull-up-Widerständen die Anstiegszeit. Die Abfallzeit ist kein Problem, da der FET, der die Leitung nach unten zieht, einen sehr niedrigen Widerstand hat und die Abfallzeitkonstante dann ebenfalls sehr niedrig ist. Also bleibt uns die Aufstiegszeit. Um eine Anstiegszeit von 1000 ns für ein 200 pF-Kabel zu erhalten, sollten die Pull-up-Widerstände nicht größer als 2,2 kΩ sein. (Anstiegszeit auf 90% des Endwertes.)

Bildbeschreibung hier eingeben

Das Diagramm zeigt den maximalen Pull-up-Widerstand (in Ω) gegenüber der Kabelkapazität (in pF), um 1000 ns ansteigende Flanken zu erhalten. Beachten Sie, dass I2C-Geräte nicht mehr als 3 mA aufnehmen müssen. Daher sollte die Buskapazität bei 3,3 V nicht höher als etwa 395 pF sein, da sonst der Pull-up-Widerstand kleiner als 1100 Ω sein und mehr zulassen müsste als die 3 mA. Das sind die grünlich gestrichelten Linien. Für 5-V-Betrieb beträgt die zulässige Kapazität sogar 260 pF bei einem Pull-up-Wert von 1667 Ω (die violetten gestrichelten Linien).

stevenvh
quelle
Wer sagt, dass I2C-Gerät max 3mA sinken kann? Meine I2C-Geräte haben VOL = 0,4 V für IOL = 20 mA. Dies bedeutet, dass es viel mehr Strom verbrauchen kann und die Pull-up-Widerstände auch kleiner sein können. Dies führt dazu, dass mehr Kapazität gehandhabt werden kann. @ stevenvh
Kono
Ein Beispiel sind Arduino-Sklaven. Sie können bis zu 10mA vor VOL = 0,4-0,5V sinken. Dies bedeutet, dass sie viel höher beladene Busse fahren können.
Kono
Die meisten I2C-Geräte können zwar nur 3 mA aufnehmen, aber heutzutage gibt es viel mehr Geräte mit mehr Aufnahmefähigkeiten. Glücklich!
Kono
4

Ich habe I2C mit ungefähr 100Hz ohne Problem laufen lassen. Wie @stevenvh sagte, sorgen Sie sich nur um maximale Geschwindigkeit und Leitungskapazität.

Sérgio Sena
quelle
2
Ich habe einstufige i2c. Das garantiert nicht, dass jedes Gerät, das Sie finden, auf diese Weise hergestellt wird, aber es gibt technisch nichts, was es daran hindert, dass es "auf DC" funktioniert.
Gbarry
4

Sie sollten in der Lage sein, die Leitungslängenprobleme durch sorgfältige Auswahl der Treiber und Impedanzanpassung zu lösen.

Eine andere Möglichkeit, vorausgesetzt, die Langzeitdauer ist Teil des Setups und nicht des Produkts, besteht möglicherweise darin, etwas zu verwenden, das mit Entfernungen gut zurechtkommt, z. Das würde dann i2c über eine ziemlich kurze Distanz zum Ziel sprechen.

Oder Sie könnten dies wahrscheinlich ohne die Intelligenz tun, indem Sie eine kleine Platine verwenden, die ein differentielles Signalisierungsprotokoll mit Schmidt-Triggerempfängern zu und von der i2c-Signalisierung am Ziel überbrückt.

Ihre Läufe sind wahrscheinlich nicht lang genug, damit die Signallaufzeiten (ohne Abrechnungsprobleme) besonders langsame Taktraten erfordern, um ein Umdrehen des Busses zu vermeiden, während alte Daten noch im Flug sind.

Natürlich möchten Sie eine Rückleseverifizierung der soeben programmierten Daten durchführen.

Zum Vergleich: IIRC-VGA-Monitore verfügen über eine i2c-ID-Anzeige (oder eine i2c-ähnliche ID-Anzeige), die wahrscheinlich auch dann noch funktioniert, wenn Sie ein 6-Fuß-Verlängerungskabel an das standardmäßige 3-Fuß- oder 4-Fuß-Kabel anschließen.

Chris Stratton
quelle