I²C Verständnisfrage: Repeated Start

OP #1060044
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.