Hallo allerseits ! Was passiert eigentlich, wenn eine Sendesequenz auf dem I2C-Bus durch einen Interrupt unterbrochen wird ? Sind die Slaves ohne weiteres in der Lage beim nächsten Clock zu erkennen, dass es weitergeht oder muss hierzu ein bestimmtes Timing eingehalten werden? Sollten IRs generell deaktiviert werden, wenn auf dem I2C-Bus gesendet wird ? Viele Grüsse Jan
I2C ist timingunkritisch, d.h. du kannst die Übertragung komplett einstellen und später fortsetzen. Die Slaves werten nur die Daten bei Flankenwechsel der Clockleitung aus. Diese können beliebig langsam kommen. IRQs deaktivieren nicht notwendig. ----, (QuadDash).
Das Timing ist schon kritisch, d.h. die Minimalzeiten dürfen nicht unterschritten werden. Aber es gibt keine Maximalzeiten, Du kannst also ein Start senden und ein Jahr später das Adreßbyte. Allerdings wird in Multimasternetzen gerne ein Timeout von 1ms eingebaut. D.h. wenn der Bus länger als 1ms belegt ist, ohne das sich SCL geändert hat, wird davon ausgegangen, daß was schief gelaufen ist und alle Teilnehmer resetten ihr I2C-Interface. Und 1ms ist ja für Interrupts eine wahnsinnig lange Zeit, d.h. solange sollten auch Interrupts den I2C nicht verzögern dürfen. Peter
Wie meinst du das Peter, SCL ruht stille vor sich hin und die Datenleitung flattert? Michael
Genau wie ichs sagte, der Bus befindet sich irgendwo zwischen Start und Stop, aber auf SCL tut sich nichts >1ms. Aber das ist nur ne reine Softwarefrage, ob man das implementiert oder nicht. Z.B. der P87C751 hat dafür extra einen 1ms Timeoutzähler. Peter
Mir ging's genau um die Sache mit den Maximalzeiten. Danke für Eure schnellen Antworten ;-) Jan
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.