Forum: Mikrocontroller und Digitale Elektronik I²C - Wer ist Master?


von Martin (Gast)


Lesenswert?

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!

von Falk B. (falk)


Lesenswert?

@ 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

von Der M. (steinadler)


Lesenswert?

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.

von peter-neu-ulm (Gast)


Lesenswert?

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.

von Miu (Gast)


Lesenswert?

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

von let (Gast)


Lesenswert?

> 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

von peter-neu-ulm (Gast)


Lesenswert?

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