TWI-Slave soll Wartezyklen erzwingen können

Gast #95750
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
#95751
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
Gast #95752
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
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

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.