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
Es gibt wunderschöne Datenblätter zu den PCF-Bausteinen. Sogar eine Seite mit vielen Links gibts hier im Wiki.
> 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.
@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.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.