Forum: Mikrocontroller und Digitale Elektronik I²C Verständnisfrage: Repeated Start


von Rene M. (gozu)


Lesenswert?

Hi,

bei meinem aktuellen Projekt muss ich eine Busverbindung über TWI/I2C 
vom atmega32 zu einem RTC ( DS1340 ) herstellen. Hab mich dazu in I2C 
Thematik eingelesen und auch Datenblätter usw. gelesen, aber da das mein 
erstes uC Projekt ist, kenne ich mich noch nicht so gut aus. Habe nicht 
so wirklich verstanden, für was das Repeated Start wirklich gut ist. 
Dient das ganze nur dazu, dass man vom MR- zum MT-Modus und umgekehrt 
wechseln kann? Also würde das bei mir so funktionieren: Ich muss beim 
RTC zuerst den Register Pointer beschreiben, z.b. auf das Register für 
Minuten, danach muss ich von dort den Wert auslesen. Also würde ich dann 
START senden, dann SLA+W , danach Register Pointer und anschließend ein 
Repeated Start mit SLA+R? Was wäre der Unterschied dazu, wenn ich statt 
Repeated Start ein STOPP und anschließend ein START sende? Einfach nur, 
dass es 1 Befehl statt 2 ist oder steckt da noch mehr dahinter?

Danke schonmal

von Eugen K. (kannsnet)


Lesenswert?

Es geht nicht darum das du einen Befehl einsparst, so sprichst du nur 
deinen RTC an. In dem du zunächst eine bestimmte Register Adresse 
sendest und dann durch ein Repeated Start das Register ausliest. Wenn du 
Start > Send > Stopp > Start > Read ... machen würdest, wird der 
Baustein den du ansprechen willst, voraussichtlich nicht reagieren.

Ich hoffe ich erzähl kein Quatsch. :)

von Mike R. (thesealion)


Lesenswert?

Probiert habe ich das ganze noch nicht, aber ich glaube der 
Hauptunterschied ist, das der Bus bei einem Repeated Start für ander 
Teilnehmer nicht wieder freigegeben wird.
Ist eigentlich nur bei Multimaster System interessant, da hier ein 
anderer Master anfangen könnte zu senden und so deine Kommunikation 
stören würde.

von Chris S. (schris)


Lesenswert?

Ein repeated Start ist für langsame i2c slaves gedacht, sowie wenn
Slaves aus einem power-down modus etwas Zeit brauchen, aufwachen.

von Mark de Jong (Gast)


Lesenswert?

Hallo,

Der Repeated Start ist dafür da das ein Master ohne unterbrechung bytes 
schreiben und anschliessend lesen kann von einen Slave.

Weil der I2C einen Multi-Master bus ist könnte sonnst einen andere 
Master zwischen das schreiben und lesen, denn internen register vom 
slave ändern.

Master1 -> start
Master1 -> setzt register auf 4
Master1 -> stop

Master2 -> start
Master2 -> setzt register auf 6
Master2 -> stop

Master1 -> start
Master1 -> liest register 6, denkt aber es währe register 4
Master1 -> stop

Durch denn repeated start kann kein andere Master etwas auf der bus 
machen, der sequence is quassie nicht unterbrechbar.

Master1 -> start
Master1 -> setzt register auf 4
Master1 -> repeated start
Master1 -> liest register 4
Master1 -> stop

Ich hoffe ich habe es deutlich beschrieben.

Grüße Mark,

von Eugen K. (kannsnet)


Lesenswert?

schau mal hier: http://i2c-interface.com/RepeatedStartCondition/
da wird die Aussage von Mike bestätigt das der Bus nicht freigegeben 
wird vom Master.

von GoZu (Gast)


Lesenswert?

Danke, ist ja eigentlich ganz logisch :)

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.