Hallo, ich habe erfolgreich eine I2C Kommunikation zwischen einem Xmega256(Master) und einem mega32(Slave) aufbauen können. Weiterhin funktioniert master_read, master_write und auch master_writeread. Nun möchte ich mittels master_writeread dem Slave 4byte senden. Der Slave wertet diese Bytes aus und schreibt dann entsprechend neue Daten(10Byte) in den Sendepuffer. Da der Master aber sofort Daten empfangen möchte kann es vorkommen, dass der Slave noch nicht alle Daten in seinem Sendepuffer aktualisiert hat und daher der Master zwar etwas empfängt aber eben nicht die aktuellsten Daten. Wie würde sich so etwas umsetzen lassen? Gruß Thomas
Der Slave muss nach dem ACK-Bit SCL low halten (clock stretching), solange er noch mit der Vorbereitung der Sendung beschäftigt ist. Bevor der Master weitere Clocks sendet, muss er prüfen, ob SCL high ist.
Kann ich das nicht auch irgendwie lösen dass ich in meinem TWI-Interupt ein I2C Statusflag überprüfe und dann entsprechend das senden von ACK bzw. NACK beeinflusse. Das I2C Statusflag wird in der Hauptschleife dann zu beginn der Datenaufbereitung auf FALSE gesetzt und nachdem alle Daten im Sendepuffer sind auf TRUE gesetzt. Würde soetwas irgendwie gehen?
TWI beachtet clock-stretching automatisch. Du darft nur auf der Slave-Seite TWINT=1 erst setzen, wenn die Lese-Daten zur Verfügung stehen.
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.