I2C-Bus Protokoll

Hallo,

ich habe folgendes Verständnisproblem mit dem I2C-Bus Protokoll:

Wenn der Master Transmitter und der Slave Receiver ist kann der Slave, wenn er keine Daten mehr empfangen kann, ein NoAcknowledge senden und der Master, wenn er nicht mehr senden mag, ein Stop-Bit. Wenn aber der Master Receiver und der Slave Transmitter ist kann nur der Master durch ein NoAcknowledge oder Stop-Bit die Übertragung beenden. Was macht aber der arme Sklave wenn der Meister mit Acknowledge immer mehr Daten haben will, der Sklave aber keine mehr zum Senden hat? SCL solange auf Low ziehen und damit den ganzen Bus blockieren bis wieder Daten zum Senden da sind kann ja eigentlich nicht die Lösung sein. Aber selbst die I2C-Spec von Philips schweigt sich genau zu diesem Fall aus.

MfG Michael

--
Michael Schlegel
Faculty of Electrical Engineering and Information Technology
Chemnitz University of Technology, Germany
http://www.tu-chemnitz.de/~micsch
Reply to
Michael Schlegel
Loading thread data ...

Michael Schlegel schrieb:

Dem armen Sklaven wird in diesem Fall nichts anderes übrig bleiben, als brav weiter Daten zu senden (egal welche, aber meistens ist das definiert). Schließlich ist er nur der Sklave und nicht der Meister...

Über Start und Ende einer Kommunikation entscheidet aber per Definition der Master. Außer der Sklave legt den Bus lahm :-/

Das von Dir beschriebene "Problem" wird übrigens m.W. z.B. beim PCF 8574 dazu benutzt, kontinuierlich die Ports auslesen zu können - einfach lesen, lesen, lesen....

--
Dipl.-Ing. Tilmann Reh
Autometer GmbH Siegen - Elektronik nach Maß.
http://www.autometer.de

==================================================================
In a world without walls and fences, who needs Windows and Gates ?
(Sun Microsystems)
Reply to
Tilmann Reh

Tilmann Reh wrote in news: snipped-for-privacy@autometer.de:

Beispiel I2C EEPRom programmieren. Der Slave meldet sich einfach vom Bus ab, d.h. schon auf die Deviceadresse gibt er kein ACK. D.h. ein nächster Datentransfer (lesen oder schreiben) findet deshalb nicht statt, weil das das Device einfach nicht "da" ist. Wenn der Slave während einer Übertragung keine Daten senden kann, dann bleibt ihm wirklich nur "clock stretching" übrig, SCL so lange unten halten, bis er wieder kann (nur sehr selten zu finden, meisten wenn der Slave ein Mikrokontroller ist; nicht so die feine Art). Meistens ist es aber so, das es ein Status-Flag gibt, d.h. der Slave kann immer antworten - zumindest mit dem Statusregister und erst wenn dort das "busy"-Flag gewechselt hat, sind die Daten in den anderen Registern gültig. Und dann gibt es noch die Möglichkeit, das der Master mehr Daten anfordert, als im Slave vorhanden sind (z.B. ein Video-IC hat 16 Steuerregister, der Master will aber 17 auslesen). Was dann passiert sollte im Datenblatt stehen; vermutlich kommt einfach Müll zurück oder das Register 1 oder 16 oder der Chip stürzt ab ;-).

M.

--
Bitte auf mwnews2@pentax.boerde.de antworten.
Reply to
Matthias Weingart

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.