Forum: Mikrocontroller und Digitale Elektronik AVR: TWI abort/reset wärend ich im read bin


von Martin S. (msperl)


Angehängte Dateien:

Lesenswert?

Hallo!

ich habe da das Problem dass ich unter bestimmten Randbedingungen eine 
schon gestartete TWI verbindung - ein read abbrechen muss.

Sprich ich mache ein:
* START
* Write Addresse
* Write Register
* START
* WRITE addresse|1 (=READ)

und hier will ich abbrechen.

Wenn ich dann einfach ein STOP sende, so geht mir nur SCL auf high.
SDA bleibt low.

Siehe auch Angefügtes Bild - SCL geht am Schluss auf high kurz nach dem 
STOP.

Die einzige Möglichkeit, die ich gefunden habe, ist einen Read zu 
triggern - nur dann funktioniert es.

Gibt es irgendeine bessere Möglichkeit SDA auf High zu bringen (TWI 
reset zu resetten oder ähnliches), denn der Fehlerfall (=Randbedingung) 
kann grundsätzlich auch bei einem Write auftreten.

Danke,
       Martin

von Martin S. (msperl)


Angehängte Dateien:

Lesenswert?

Hier zum Vergleich noch wenn ich vor dem STOP ein read triggere.
Man sieht, dass SDA nach dem read beim Stop auch auf high geht...

von Klaus (Gast)


Lesenswert?

Martin Sperl schrieb:
> Gibt es irgendeine bessere Möglichkeit SDA auf High zu bringen (TWI
> reset zu resetten oder ähnliches), denn der Fehlerfall (=Randbedingung)
> kann grundsätzlich auch bei einem Write auftreten.

Mit deinem Master kannst du alles machen, wenn aber der Slave SDA auf 
Low zieht, und das passiert nur bei einem Read, mußt du den Read zuende 
bringen und ihn mit NACK quitieren. Alternativ kann man ein HW-Reset 
oder ein Power-Cycle beim Slave erzeugen.

MfG Klaus

von vianCede (Gast)


Lesenswert?

home

von Martin S. (msperl)


Lesenswert?

Danke Klaus - das erklärt es.

Dann bleibt mir nichts anderes übrig als mir den letzten Zustand 
(read/write) zu merken und dementsprechend mit einem read zu 
reagieren...

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.