I2C Bus und mehrere Controller

Gast #3456074
Lesenswert?

Ich bezweifel, dass mehrere Master gut sind und richtig gehen.
Wie funktioniert da die Synchronisation, wenn 2 Master gleichzeitig den 
Bus benutzen möchten? Wie geht da eine Kollisionserkennung?
AFAIK gibt es da nichts.
#3456102
Lesenswert?

PittyJ schrieb:
> Wie geht da eine Kollisionserkennung?

SDA und SCL überwachen. Wenn ich die Leitung loslasse und sie geht nicht 
auf High, ist jemand anderes im Spiel und es gab eine Kollision.

Also muss ich warten (Zufallszeit). Wenn ich dann den Bus als frei 
erkenne (für x-ms keine Aktivität), versuche ich mein Glück erneut.

Das Ganze funktioniert dann natürlich nicht mehr mit den Standard 
Treiber. Das wird eine reine Bitbangerei.
Gast #3456212
Lesenswert?

Georg G. schrieb:
> PittyJ schrieb:
>> Wie geht da eine Kollisionserkennung?
>
> SDA und SCL überwachen. Wenn ich die Leitung loslasse und sie geht nicht
> auf High, ist jemand anderes im Spiel und es gab eine Kollision.
>
> Also muss ich warten (Zufallszeit). Wenn ich dann den Bus als frei
> erkenne (für x-ms keine Aktivität), versuche ich mein Glück erneut.
>
> Das Ganze funktioniert dann natürlich nicht mehr mit den Standard
> Treiber. Das wird eine reine Bitbangerei.

Das bedeutet, dass ich SDA und SCL resamplen muss, und mit dem 
gewünschtem Resultat vergleichen muss. Ähnlich wie damals das 
BNC-Ethernet.
Also noch mal 2 GPIO-Eingänge zum Überwachen.
Nee, dann muss nicht sein, das führt doch nur zu Problemen.
Gast #3456254
Lesenswert?

PittyJ schrieb:

> Ich bezweifel, dass mehrere Master gut sind und richtig gehen.
> Wie funktioniert da die Synchronisation, wenn 2 Master gleichzeitig den
> Bus benutzen möchten? Wie geht da eine Kollisionserkennung?

Man macht sich zunutze, daß es sich um einen Bus vom OpenDrain-Typ 
handelt.

> AFAIK gibt es da nichts.

Doch. Bei den AVR der Mega-Klasse z.B. ist die Kollisionserkennung 
bereits in die Hardware eingebaut. Natürlich muß man sie auch benutzen 
und das Verhalten modifizieren, von alleine läuft nur die 
Kollisionserkennung, nicht aber die Bereinigung der Situation.
#3456262
Lesenswert?

PittyJ schrieb:
> Ich bezweifel, dass mehrere Master gut sind und richtig gehen.
> Wie funktioniert da die Synchronisation, wenn 2 Master gleichzeitig den
> Bus benutzen möchten? Wie geht da eine Kollisionserkennung?
> AFAIK gibt es da nichts.

Na dann lies einfach mal die I2C-Spezifikation.
Multimaster ist natürlich möglich.
Oder wozu denkst Du, ist die SCL-Synchronisation und die 
Arbitration-Lost-Erkennung sonst gedacht?

Mit den 8051 von Philips hat das auch super gut funktioniert, leider hat 
die NXP aber alle eingestampft.

Atmel hat versucht, das zu kopieren, aber leider mehrere Bugs eingebaut:
http://www.robotroom.com/Atmel-AVR-TWI-I2C-Multi-Master-Problem.html
#3456265
Lesenswert?

Georg G. schrieb:
> Also muss ich warten (Zufallszeit).

Nö, nach der Stop-Erkennung kann jeder Master sofort versuchen, ein 
Start zu senden und der mit den meisten 0-Bits am Anfang der Adresse 
gewinnt die Arbitration. Alle anderen warten einfach auf das nächste 
Stop.
Und das Warten geschieht voll automatisch, ein gesetztes Startbit wartet 
erst auf die Stop-Erkennung.

Georg G. schrieb:
> Das Ganze funktioniert dann natürlich nicht mehr mit den Standard
> Treiber. Das wird eine reine Bitbangerei.

Das ist Quatsch.
Mit Bit-Banging ist Multimaster nicht möglich, nur mit Hardware-I2C.
Gast #3456419
Lesenswert?

Hallo,

Es geht darum das mehrere Controller ihr eigenes Programm abarbeiten.
Es gibt aber I2C Peripherien wo jeder Controller mal nachfragen will was 
habt ihr für Daten oder wie sind eure Ausgänge geschaltet.
Warte mal in meinen Programm muss der Ausgang aber nun eingeschaltet 
werden sagt ein Controller.

Ich setze mir ja auch z.B. nicht 10 (übertrieben) Uhrzeit/DCF Chips 
auf'n Board mit 10 Antennen.
Oder nachfragen nach einen EEprom Chip, welche Daten jetzt in dir sind. 
Was hat der andere Controller in dir reingeschrieben.

MfG
Bismar
#3456422
Lesenswert?

Bismar schrieb:
> Hallo,
>
> Es geht darum das mehrere Controller ihr eigenes Programm abarbeiten.
> Es gibt aber I2C Peripherien wo jeder Controller mal nachfragen will was
> habt ihr für Daten oder wie sind eure Ausgänge geschaltet.
> Warte mal in meinen Programm muss der Ausgang aber nun eingeschaltet
> werden sagt ein Controller.
>
> Ich setze mir ja auch z.B. nicht 10 (übertrieben) Uhrzeit/DCF Chips
> auf'n Board mit 10 Antennen.
> Oder nachfragen nach einen EEprom Chip, welche Daten jetzt in dir sind.
> Was hat der andere Controller in dir reingeschrieben.

Was redest du da für wirres Zeug? Wurde jetzt alles haarklein erklärt 
wie Multimaster I2C geht.
Gast #3456460
Lesenswert?

Stell dir eine Straße vor an der mehrere Parkplätze abgehen.
Am Anfang und Ende ist ein Parkwächter. Die benutzen die Parkplätze 
gemeinsam !!
Du kommst mit deinem Auto und möchtest einen Parkplatz haben.
Da muss doch dein Parkplatzwächter erst mal nachfragen wo noch einer 
frei ist. Was hat sein Kollege am anderen Ende der Straße schon besetzt.
Bevor er zum Kollegen am anderen Ende der Straße geht und sich mit einer 
anderen Sprache ( Damit meine ich ein anderes Bussystem)erkundigt wo ist 
noch was frei ist (Wobei er erst wieder nachschauen muss !!), da schaue 
ich doch selber nach...


ICH BAUE NICHT FÜR JEDEN PARKPLATZWÄCHTER EINE EIGENE STRAßE MIT 
PARKPLATZ

Hast du das jetzt besser verstanden Cyblord ?
#3456528
Lesenswert?

Bismar schrieb:
> Stell dir eine Straße vor an der mehrere Parkplätze abgehen.
> Am Anfang und Ende ist ein Parkwächter. Die benutzen die Parkplätze
> gemeinsam !!
> Du kommst mit deinem Auto und möchtest einen Parkplatz haben.
> Da muss doch dein Parkplatzwächter erst mal nachfragen wo noch einer
> frei ist. Was hat sein Kollege am anderen Ende der Straße schon besetzt.
> Bevor er zum Kollegen am anderen Ende der Straße geht und sich mit einer
> anderen Sprache ( Damit meine ich ein anderes Bussystem)erkundigt wo ist
> noch was frei ist (Wobei er erst wieder nachschauen muss !!), da schaue
> ich doch selber nach...

Rede doch mal Klartext. Ich glaube hier im Forum sind einige Experten 
die dann damit etwas anfangen können.
Klaus.
Gast #3456603
Lesenswert?

Hör auf Peter Dannegger.

Es geht, aber bei AVR ATMega solltest du es vermeiden.

Ich habs versucht. Meine Motivation für Mult-Master war: Ich wollte 
einzelne Platinen (mit je einem ATMega) vom Bus abstecken können, und 
das System sollte weiter funktionieren. Habs aufgegeben und lebe jetzt 
damit, dass der Master am Bus bleiben muss.

Wenn du die oben genannte Anforderung nicht hast, geht es auch mit einem 
einzigen Master - der kann Nachrichten von einem Slave zum anderen 
weiterleiten.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren