I2C-Bus Protokoll

  • Thread starter Michael Schlegel
  • Start date
M

Michael Schlegel

Guest
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
 
Michael Schlegel schrieb:

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?
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)
 
Tilmann Reh <tilmann.reh@autometer.de> wrote in
news:401FCAEF.C51DD3AC@autometer.de:

Michael Schlegel schrieb:

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?

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

Welcome to EDABoard.com

Sponsor

Back
Top