I2C-slave - clock-stretching
Tun Sie Jungs wissen, wie man aktivieren der clock-stretching für den I2C-slave?
Ist es genug, nur setzen Sie diese Funktion I2C_StretchClockCmd(I2C2, ENABLE)
bei der Initialisierung von I2C?
Wie funktioniert clock-stretching funktioniert das genau?
InformationsquelleAutor kai | 2014-07-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheint ja für mich, das ist genug. Hier ist ein hintergrund:
Uhr Generation
Den SCL-clock entsteht immer durch den I2C-master. Die Spezifikation erfordert minimale Zeiten für die low-und high-Phasen des clock-Signals. Daher ist die tatsächliche Taktfrequenz niedriger sein kann als die nominelle Taktfrequenz z.B. I2C-Busse mit großen anstiegszeiten aufgrund der hohen Kapazitäten.
Uhr Stretching
I2C-Geräte verlangsamen kann die Kommunikation durch das SCL-stretching: Während SCL low-phase, jeder I2C-Gerät am bus kann zusätzlich gedrückt halten SCL um zu verhindern, dass es zu hoch steigen wieder, wodurch Sie verlangsamen den SCL-clock-rate oder halt die I2C-Kommunikation für eine Weile. Dies ist auch bekannt als clock-Synchronisation.
Hinweis: Die I2C-Spezifikation nicht angeben timeout-Bedingungen für clock stretching, d.h. jedes Gerät gedrückt halten, SCL, solange es mag.
In einer I2C-Kommunikation das master-Gerät bestimmt die Geschwindigkeit. Im Gegensatz zu RS232 am I2C-bus stellt eine explizite clock-signal, das entlastet master-und slave-Synchronisierung exakt auf eine vordefinierte Baudrate.
Allerdings gibt es Situationen, wo ein I2C-slave ist nicht in der Lage, die Zusammenarbeit mit der clock-Geschwindigkeit durch die master-und muss ein wenig langsamer zu gehen. Dies geschieht durch einen Mechanismus, bezeichnet als clock-stretching.
Einen I2C-slave darf, halten Sie die Uhr, wenn es braucht, um reduzieren Sie die bus-Geschwindigkeit. Der master auf der anderen Seite ist erforderlich, um wieder zu Lesen das clock-signal nach der Freigabe auf high-Status und warten Sie, bis die Zeile eigentlich Weg hoch.
Wie funktioniert die I2C-Taktrate auf die Dauer der clock-stretching-eingeführt durch die I2C-slave?
Uhr stretching ist ein Phänomen, wo der I2C slave zieht die SCL Leitung low auf der 9 Uhr von jedem I2C-Datenübertragung (vor der ACK-Phase). Die Uhr ist auf low gezogen, wenn die CPU die Verarbeitung der I2C-interrupt auswerten, entweder die Adresse oder Bearbeiten empfangene Daten von der Master-oder der Vorbereitung der nächsten Daten, wenn der Master liest vom slave.
Die Zeit der Uhr ist pull low ist abhängig von der Zeit die die CPU braucht um die interrupt-und ist somit abhängig von der CPU-Geschwindigkeit und nicht die I2C-clock-speed.
Als der Sklave bekommt der read-Befehl von der master-hält-die-Uhr-Linie niedrig. Die CPU/MCU bekommt dann die angeforderten Daten, legt Sie in die übertragungs-register und stellt die Uhr line ermöglicht den pull-up-Widerstand, um schließlich ziehen Sie es hoch. Von den meistern Sicht, es wird Thema der ersten Taktflanke von dem Lesen, indem SCL high und dann überprüfen, um zu sehen, ob es wirklich gegangen ist hoch. Wenn es noch niedrig ist, dann seine slave, halten Sie es low und der master warten soll, bis es geht hoch, bevor Sie fortfahren. Zum Glück ist der hardware-I2C-ports auf den meisten Mikroprozessoren verarbeiten diese automatisch.
Beachten Sie, dass ein slave kann die Strecke jedem Zyklus, nicht nur die 9. Uhr.
InformationsquelleAutor Ruslan Gerasimov
Warum müssen wir das clock stretching? Das gleiche kann erreicht werden zum Zeitpunkt der Bestätigung des slave auf 9. bit die Uhr.
Die Dinge, die erreicht werden kann durch halten von Daten, die Linie, bis die slave-interne Prozess kommen über.
InformationsquelleAutor Navneet Tripathi