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
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
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
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
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.