Forum: Mikrocontroller und Digitale Elektronik TWI-Slave soll Wartezyklen erzwingen können


von Daniel Roth (Gast)


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

von Peter D. (peda)


Lesenswert?

Beim Hardware I2C geht alles vollautomatisch.

Der Slave hält SCL solange auf 0 bis Du es im Interrupthandler wieder
freigibst.

Und der Master bleibt solange hängen bis er wieder eine 1 auf dem SCL
sieht.


Peter

von Daniel Roth (Gast)


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

von Peter D. (peda)


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

von Daniel Roth (Gast)


Lesenswert?

ok, Danke !

ich schreibe meinen Master um..

Daniel

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.