PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Takt beim I2C-Bus



Frank
17.10.2004, 21:16
Na dann mal zwischendurch noch eine leichte praxisnahe Aufgabe, Forum Leser müßten es wissen

Beim I2C-Bus im sogenannten Master Slave Betrieb gibt ja der Master den Takt vor. Ist es dennoch möglich das der Slave den Master bremst oder beschleunigt? Wenn ja, wie geht das?

x-ryder
17.10.2004, 23:45
Ich denke ja mal, das man das was du schreibst, in den Artikeln des Roboternetz-forums nachlesen kann :-)

Also habe ich da mal geguckt und rausgefunden, das wenn der Slave die Clockleitung länger auf Low hält, das der Master dann folgen muss.

Somit wird das ganze System verlangsamt...

Ich hoffe das ist richtig :cheesy:

Martin

Frank
18.10.2004, 00:25
Ja so stimmts, soweit, gut mitgelesen ;-) Es müsste nur noch erklärt werden wie es gehen kann das der Master die Clock gleichzeitig auf High legt und der Slave die Leitung auf Low. Weshalb geht der Port nicht dadurch kaputt?

avatar
18.10.2004, 10:46
Weshalb geht der Port nicht dadurch kaputt?Weil beim I²C "open-Collector-" oder "open Drain" -Ausgänge verwendet werden (die nur nach Masse schalten können). Der Master legt die Clock-Leitung nicht auf HIGH. Er verhält sich statt dessen (bei HIGH) hochohmig. Der HIGH-Pegel auf der Clock-Leitung (SCL) kommt durch den Pull-Up-Widerstand zustande. Bei der Datenleitung (SDA) ist es genau so.

Diese Schaltungsart nennt man: "wired and Schaltung"

http://home.t-online.de/home/0722576845-0001/i2c1.jpg

Frank
18.10.2004, 11:07
Genau so ist es.

Wie schon gesagt: Weder Master noch Busteilnehmer schalten die Clock-Leitung auf High. Diese wird nur durch die Pullup´s auf High gelegt. Um ein Low Signal zu erzeugen wird dieser geringe Ruhestrom des Pullups auf Masse gezogen.
Um High zu erzeugen, schaltet der Master also quasi nur auf den Eingangsmode, dadurch wird er hochohmig.

Beim I2C Bus prüft der Master, nach der Umschaltung auf Eingang, ob denn nun die Leitung auch wirklich auf High ist. Wenn dies nicht der Fall ist weil ein Slave die Leitung ebenfalls auf Masse zieht, hängt er in einer Warteschleife, solange bis alle Slaves die Leitung frei geben (also ebenfalls auf High/hochomig) schalten.

Dadurch kann ein etwas langsamer Slave den Bus bremsen.

Die Frage ist somit perfekt gelöst