Frage

Wir hatten einige Probleme mit TWI / I2C, nachdem Sie mit dem Atmel Xmega256A3 im Schlaf aufgewacht wurden. Anstatt in die Details von TWI / I2C zu graben, haben wir uns entschieden, den mitgelieferten TWI_MASTER_DRIVER von ATMEL an der Anwendungsanwendung von AVR1308 zu verwenden.

Das Problem ist ein- oder ein paar fehlgeschlagene TWI-Transaktionen kurz nach dem Aufwachen aus dem Schlaf. Auf dem I2C-Bus, der mit der Xmega verbunden ist, haben wir ein paar Potentiometer, ein Thermometer und ein RTC. Die Xmega fungiert als einziger Meister im Bus.

Wir verwenden die in Avrlibc gefundenen Schlaffunktionen: generasacodicetagpre.

Die Xmega, wie vom RTC aus dem Schlaf geweckt, der einen Pin hoch setzt. Nachdem der Xmega aus dem Schlaf geweckt ist, möchten wir einen Wert auf einem der Potentiometer einstellen, aber das fehlschlägt. Aus irgendeinem Grund ist das TWI-Transaction-Ergebnis TWIM_RESULT_NACK_RECEIVE anstelle von TWIM_RESULT_OK in der ersten Transaktion. Danach scheint alles wieder zu funktionieren.

Haben wir hier etwas vermisst? Gibt es bekannte Probleme mit dem Xmega, dem Schlaf und dem Twi? Müssen wir den Twi von klaren Flaggen zurücksetzen, nachdem Sie aus dem Schlaf aufgewacht sind?

beste Grüße Fredrik

War es hilfreich?

Lösung

There is a common problem on I2C/TWI where the internal state machine gets stuck in an intermediate state if a transaction is not completed fully. The slave then does not respond correctly when addressed on the next transaction. This commonly happens when the master is reset or stops outputting the SCK signal part way through the read or write. A solution is to toggle the SCK line manually 8 or 9 times before starting any data transactions so the that the internal state machines in the slaves are all reset to the start of transfer point and they are all then looking for their address byte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top