I2C-Bus Protokoll

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From German to

Threaded View
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
We've slightly trimmed the long signature. Click to see the full one.
Re: I2C-Bus Protokoll
Michael Schlegel schrieb:

Quoted text here. Click to load it

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ß.
We've slightly trimmed the long signature. Click to see the full one.
Re: I2C-Bus Protokoll

Quoted text here. Click to load it

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 snipped-for-privacy@pentax.boerde.de antworten.

Site Timeline