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
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. :)
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.
Ein repeated Start ist für langsame i2c slaves gedacht, sowie wenn Slaves aus einem power-down modus etwas Zeit brauchen, aufwachen.
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,
schau mal hier: http://i2c-interface.com/RepeatedStartCondition/ da wird die Aussage von Mike bestätigt das der Bus nicht freigegeben wird vom Master.
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.