TWI-Slave soll Wartezyklen erzwingen können

Gast #95750
Lesenswert?

Hallo,

wie kann ein I2C-Slave unter Verwendung des Hardware-TWI (z.B. Mega8)
Wartezyklen erzwingen, um beispielsweise nach dem Empfang eines
Datenbytes genügend Zeit zur Verarbeitung zu haben ?

Normalerweise wird ja bei I2C beim Acknowledge-Takt die Clockleitung
vom Slave auf low gehalten, um einen Waitstate einzufügen, nur hat man
beim Hardware-TWI keinen Einfluss auf die Zeitdauer des
Acknowledge-Taktes, oder doch ?

Im Datenblatt des Mega 8 steht, der Master soll dem Slave genügend Zeit
geben (was wenn diese Zeit variiert?) bzw. soll der Slave mit NoAck
antworten, wenn er noch beschäftigt ist (was mir nicht gefällt, da
NoAck für Fehler vorbehalten bleiben soll)..

Habt ihr eine Idee ? Danke
Daniel
Gast #95752
Lesenswert?

Hallo Peter

Ja, das Clock-auf-low-halten macht der Slave, bis das Interrupt-Flag
wieder gelöscht wird.. nur kommt der Interrupt an einer ungünstigen
Stelle vor dem Acknowledge. Man hat also keine Möglichkeit, den
Acknowledge-Zyklus zu verlängern !?

Ich dachte immer, ein Großteil der I2C-Master-(Hardware)Bausteine prüft
nur beim Acknowledge, ob der Clock von Slave länger auf low gehalten
wird. Somit wäre das TWI-Interface nicht so ganz "kompatibel" dazu.

Notfalls werde ich meinen Master (in Software) etwas aufwendiger machen
und nicht nur beim Acknowledge die Clock-Leitung überprüfen..

Grüße
Daniel
#95753
Lesenswert?

Laut I2C Spezifikation kann jeder SCL = 0 gestreckt werden, deshalb
prüft jedes Hardware I2C auch bei jedem Bit.
Sonst könnte ja auch die Arbitrierung (Multi-Master) nicht
funktionieren.

Das ACK / NACK dient nur dazu, die Übertragung abzusichern.
Bei einem Hardware I2C Slave mußt Du also vorher setzen, ob Du bereit
bist, das Byte anzunehmen oder nicht.


Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren