Hallo, ich habe ein Verständnisproblem bei I²C. Wer legt denn fest wer der Master bei I²C ist? Z.B. mein VIA Epia Board hat einen I²C Connector. Wenn ich da jetzt was dran anshcließe, dann schließe ich ja einen Slave an... ist das richtig? Also sitzt der Master irgendwo auf dem Board und wird von einem Treiber gesteuert? Was ist aber, wenn ich selbst einen Master stellen wöllte? Danke für eure Hilfe!
@ Martin (Gast) >Wer legt denn fest wer der Master bei I²C ist? Der Entwickler des Boards. >Z.B. mein VIA Epia Board hat einen I²C Connector. Wenn ich da jetzt was Was ist das für ein Board? Ein Mainboard von nem PC? Oder ein Evaluationboard mit einem uC? >dran anshcließe, dann schließe ich ja einen Slave an... ist das richtig? Kann auch ein Master sein, I2C ist multimasterfähig. >Also sitzt der Master irgendwo auf dem Board und wird von einem Treiber >gesteuert? Hoffentlich. >Was ist aber, wenn ich selbst einen Master stellen wöllte? Dann tu das doch einfach. MfG Falk
Falk Brunner wrote: >>Wer legt denn fest wer der Master bei I²C ist? > > Der Entwickler des Boards. Der Master hat die Aufgabe das Clock-Signal zu liefern und Adressen rauszusenden. Bei einem uC wird das beim I2C-Modus angegeben. Der herkömmliche Slave bekommt nur mit, ob etwas an seine Adresse gesendet wurde.
Dasjenige der ICs, das sich durch Abgabe der Stopbedingung an den bereiten Bus schaltet, wird zum Master und liefert den Takt des Systems. Nach der Stopbedingung kann jedes andere IC sich als Master ins System einklinken.
@peter-neu-ulm Ganz komische Aussage... Es können jederzeit mehrere Master auf den I2C Bus zugreifen. Der jenige Master, der ein langsameres Taktsignal erzeugt, oder über SDA mehr Nullen auf den Bus legt gewinnt und kann seine Datenübertragung fortsetzen. Der zweite Master muss sein Senden sofort unterbrechen. Deswegen überprüfen die Hardware-I2C-Implementation in UCs immer auch wenn sie senden, welcher Pegel auf SDA und SCL anliegt. Es gibt auch manche Single-Master-Devices die obigen Algo nicht verstehen und so für unvorhersehbare Ereignisse auf dem Bus sorgen. Derjenige Master der eine START-Bedinung erzeugt und obige Bedingung gewinnt, kann den Bus belegen. Z.B. kann es passieren, dass zwei Master gleichzeitig auf ein EEPROM zugreifen wollen, der eine lesend, der andere schreibend. Bei gleicher Geschwindigkeit wird der Master, der schreiben will gewinnnen, da er eine 0 als letztes Bit in der Adresse sendet. Der zweite Master merkt dies erst beim letzen Byte uns muss hier seine Datenübertragung unterbrechen. Das ganze funktioniert, da alle I2C auf Open-Kollektor bzw. Open-Drain basieren. Deswegen ist dieser Bus auch nicht der schnellste. Ladezeit zwischen Pull-Up und Kapazität... Der Slave kann zusätzlich im System für "Clock-Stretching" sorgen, wenn ihm das Taktsignal zu "schnell" ist...
> Was ist aber, wenn ich selbst einen Master stellen wöllte?
Wenn du dich hier auf das VIA-Board beziehst hast du schlechte
Karten. Das Board ist der Master und es duldet auch keine anderen
neben sich.
Generell solltest du diese 'multiple master' Sache meiner Meinung
nach vergessen. Das ist zu anfällig. Viele Chip-Hersteller haben
bereits mit dem einfachen, 7-bit, single-master Bus Schwierigkeite
(z.B. TI).
Also: Ein Master und ein oder mehrere Slaves.
- Michael
@Miu Jo, ich habe mich verschrieben: Das IC, das eine START-Bedingung auf den Bus gibt, macht sich zum Master. Um Kollisionen zu vermeiden, sollte natürlich jedes andere IC vorher prüfen, ob der Bus frei ist. Anders gesagt: Jedes IC kann sich zum Master machen. Dass es dabei keine Konflikte im Ablauf gibt, muss der Programmierer des IC oder des Prozessors Sorge tragen. -Peter
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.