Forum: Mikrocontroller und Digitale Elektronik I2C Theorie-Fragen


von Michael H. (rasler)


Lesenswert?

Erst mal Hallo an alle.

Da ich nächstes Semester den I2C Bus in der Schule brauche hab ich mich 
jetzt schon mal ein paar Tage damit beschäftigt. Dabei sind aber ein 
paar Fragen aufgetaucht bei denen ich mich über Hilfe sehr freuen würde.

Also dann fang ich mal an.

Was genau ist das Acknowledgmen?
Soweit ich das verstanden habe wird damit die Übertragung von einem Byte 
(egal ob Daten oder Adresse) beendet und danach können weitere Bytes 
gesendet (empfangen) werden. Somit wird quasi nach jedem Byte ein 
Acknowledgmen erzeugt.

Wer erzeugt dieses Acknowledgmen? Sender oder Empfänger?
Sagt damit der Sender dem Empfänger, dass das Byte nun zu Ende ist oder 
sagt der Empfänger dem Sender, dass er das Byte nun vollständig 
empfangen hat? Dies ist für mich das größte Verständnisproblem beim I2C 
Bus.

Wie genau sieht dieses Acknowledgmen aus?
Ein Acknowledgmen ist doch wenn des SDA Leitung auf 0 (GND) liegt und 
die SCL Leitung einen Takt erzeugt.
Warum wird dann aber kein Acknowledgmen erkannt wenn ich ein Bit mit dem 
Wert 0 übertrage?
Im Prinzip sieht die Übertragungen eines Bit mit dem Wert 0 und ein 
Acknowledgmen gleich aus.

Was ist der Unterschied zwischen Master und Slave?
Ist der Master derjenige der den Takt auf der SCL Leitung erzeugt egal 
ob er lesend oder schreibend ist oder ist der Master derjenige der 
schreibend auf ein anderes Bauteil zugreift. Folglich wäre der Slave das 
Bauteil welches Daten erhält.

Ich weis das sind einige Fragen aber das fehlt mir noch zum 
vollständigen Verständnis des I2C Buses.
Über ein paar Antworten oder nur Berichtigungen meiner Überlegungen 
würde ich mich sehr freuen.

Danke schon mal im voraus.

mfg
Michael

von Sven P. (Gast)


Lesenswert?

Es gibt wunderschöne Datenblätter zu den PCF-Bausteinen. Sogar eine 
Seite mit vielen Links gibts hier im Wiki.

von Bensch (Gast)


Lesenswert?

> Wer erzeugt dieses Acknowledgmen? Sender oder Empfänger?

Neben dem erneuten Hinweis, dass es sicher genügend Infos gibt und daher 
es völlig überflüssig ist, das sich hier einer hinsetzt und alles 
nochmal einzeln vorkaut:

Was heisst denn "Acknowledgement" (so schreibt man's richtig..)? Aus der 
Übersetzung sollte eigentlich schon die Antwort hervorgehen.

von Michael H. (rasler)


Lesenswert?

@Sven
Es geht hier nicht speziell um ein Bauteil sondern über die Theorie des 
I2C Buses. Es ist mir schon klar das es hier viele Links zum I2C Bus 
gibt und das in den Datenblättern der PCF Bauteile der I2C Bus erklärt 
wird nur wenn ich es schon aus den ganzen Links und Datenblättern 
verstanden hätte würde ich ja nicht in dieses Forum schreiben.

@Bensch
Mir ist schon klar das man Acknowledgement mit t schreibt, wollte nur 
das Wort nicht immer schreiben und habs einfach kopiert, leider falsch 
geschrieben.

Danke auf die Idee das Wort einfach zu übersetzten bin ich nicht 
gekommen, hab wohl den Wald vor lauter Bäumen nicht mehr gesehen. 
Immerhin weis ich jetzt, dass das Acknowledgement vom Empfänger erzeugt 
wird um dem Sender mitzuteilen, dass das Byte vollständig empfangen 
wurde.

Die anderen Fragen sind mir dennoch noch nicht vollständig klar.

von Sven P. (Gast)


Lesenswert?

Michael H. wrote:
> @Sven
> Es geht hier nicht speziell um ein Bauteil sondern über die Theorie des
> I2C Buses.
Jo, das hab ich schon verstanden. Und die ist in ebendiesen 
Datenblättern bis zum Erbrechen behandelt.
Ansonsten verstehe ich nicht, was du mehr willst, als die vollständigen 
Spezifikationen von I2C, die sich im Wiki-Artikel als Link finden.

> Was genau ist das Acknowledgmen?
Eine Empfangsbestätigung. Kann man auch benutzen, um festzustellen, ob 
auf einer Adresse überhaupt jemand lauscht.

> Soweit ich das verstanden habe wird damit die Übertragung von einem
> Byte (egal ob Daten oder Adresse) beendet
Nein, beendet wird die mit dem 9. Taktpuls.

> und danach können weitere Bytes
> gesendet (empfangen) werden. Somit wird quasi nach jedem Byte ein
> Acknowledgmen erzeugt.
Nein, ein Empfänger kann die ACK auch aussetzen, wenn es beispielsweise 
noch beschäftigt ist.

> Wer erzeugt dieses Acknowledgmen? Sender oder Empfänger?
Der Empfänger.

> Sagt damit der Sender dem Empfänger, dass das Byte nun zu Ende ist
Das Byte ist nach acht Takten zu Ende.

> oder sagt der Empfänger dem Sender, dass er das Byte nun vollständig
> empfangen hat? Dies ist für mich das größte Verständnisproblem beim
> I2C Bus.
Jein. ACK meldet dem Sender, dass der Empfänger mit dem Byte etwas 
anfangen konnte, was auch immer. Ein Speicher-Chip würde ACK zum 
Beispiel NICHT senden, wenn er gerade keine Daten mehr aufnehmen kann, 
näheres dazu sagt das Datenblatt des Empfängers.

> Wie genau sieht dieses Acknowledgmen aus?
ACK ist, wenn ein Empfänger die Datenleitung während des 9. Taktpulses 
drückt (auf Masse legt). Drum sollte der Sender vor dem 9. Puls seinen 
Daten-Pin auf EINGANG stellen.

> Ein Acknowledgmen ist doch wenn des SDA Leitung auf 0 (GND) liegt und
> die SCL Leitung einen Takt erzeugt.
Ja.

> Warum wird dann aber kein Acknowledgmen erkannt wenn ich ein Bit mit
> dem Wert 0 übertrage?
Ein ACK ist ein Bit mit dem Wert Null.

> Im Prinzip sieht die Übertragungen eines Bit mit dem Wert 0 und ein
> Acknowledgmen gleich aus.
Ja, tun se. Aber nur ein Bit der Übetragung ist gleichzeitig auch das 9. 
Bit, das ACK-Bit eben. Zählen müssen Sender und Empfänger schon 
können...

> Was ist der Unterschied zwischen Master und Slave?
Master macht Takt und initiiert Übertragungen (Sender). Slave antwortet 
(Empfänger).
Ausnahmen sind Clock-stretching, dabei verlängert der Empfänger die 
Taktpulse des Masters, wenn sie zu schnell sind. Beim Multi-Master-Mode 
nehmen die Geräte am Bus dynamisch Master/Sender- und 
Slave/Empfänger-Rollen ein, dazu gibts Arbitration.

> Ist der Master derjenige der den Takt auf der SCL Leitung erzeugt
Ja.

> egal ob er lesend oder schreibend ist oder ist der Master derjenige
> der schreibend auf ein anderes Bauteil zugreift.
S.o. Derjenige, der von sich aus einen andren anquatscht, ist Master.

> Folglich wäre der Slave das Bauteil welches Daten erhält.
Kommt aufs Bauteil an, s.o.

von Michael H. (rasler)


Lesenswert?

Danke Sven.

Jetzt wird mir einiges klarer.

So nur zur Kontrolle das ich das jetzt alles richtig Verstanden habe.

Der Master erzeugt den Takt auf der SCL Leitung (Clock-stretching 
ausgenommen). Die Übertragung startet nach der Startsequenz die der 
Master erzeugt. Danach wird mit jedem Takt ein Bit übertragen, nach 8 
Takten (oder 8 übertragenen Bits) sendet der Empfänger beim 9. Takt ein 
Acknowledgement (Bestätigung) an den Sender, um diesem mitzuteilen, dass 
er mit den eben übertragenem Byte etwas anfangen kann. Mit weiteren 8 
Takten kann nun wieder ein Byte übertragen werden und am 9. Takt folgt 
nun wieder ein Acknowledgement des Empfängers (Soweit dieser mit dem 
Byte etwas anfangen kann).
Sollte nun nach 8 Takten auf dem 9. Takt kein Acknowledgement folgen, 
kann der Empfänger dieses eben übertragene Byte nicht verwerten.
Beendet wird der gesamte Übertragungsvorgang mit einer Stopsequenz 
welche vom Master erzeugt wird, somit ist der Bus wieder frei für andere 
Bauteile.

Sorry das ich noch mal nachfrage aber ich will einfach sicher gehen ob 
ich das jetzt auch richtig verstanden habe.
Über eine Bestätigung oder korrektur eines falschen Teiles würde ich 
mich schon sehr freuen.

mfg
Michael

von Eugen K. (kannsnet)


Lesenswert?

Servus,
schau dir mal die Seiten hier an:
http://www.elektronik-magazin.de/page/der-i2c-bus-was-ist-das-21
und die hier:
http://www.roboternetz.de/wissen/index.php/TWI#Bit_Rate_Generator

Also wenn der Master zB eine Adresse sendet muss der Empfänger(Slave) 
ein Ack schicken um die erfolgreiche Übertragung zu bestätigen.
Man kann auch stets die Statuscodes überprüfen um zu sehen ob die 
Übertragung erfolgreich war.

Aber les dir mal die Seiten durch und frag bei unklarheiten.

Gruß Eugen

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
Noch kein Account? Hier anmelden.