I²C Verständnisfrage: Repeated Start

OP #1060044
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
#1060060
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. :)
#1060064
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.
Gast #1060075
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,

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren