I²C master an anderen master anbinden

Gast #5511007
Lesenswert?

Hallo,

Ich habe ein I²C Gerät (SCL ~5kHz) das etwa sekündlich ein paar Werte 
ausgibt. Dieses arbeitet ausschließlich als Master. Der μC der die Werte 
empfangen soll arbeitet auch als Master da da noch diverse Sensoren 
dranhängen. Der Empfänger ist zwar ein SAMD21, ich habe jedoch keine 
SERCOMs mehr frei zum als Slave konfigurieren.

Wie kriege ich die Werte in den μC rein? Gibt es Umsetzer die einfach 
alles auf ner Slave Adresse Empfangene wieder auf einem anderen I²C Bus 
als Slave verfügbar machen können?

Oder muss ich selbst einen Umsetzer mittels zusätzlichem μC realisieren? 
Andere Ideen?

Vielen Dank,
MfG,
Lex
#5511097
Lesenswert?

Lex schrieb:
> Oder muss ich selbst einen Umsetzer mittels zusätzlichem μC realisieren?

Wenn du in deinem SAMD noch zwei Pins frei hast, könntest du eine 
Software-I2C implementieren, entweder für den Master oder den Slave.

Du könntest auch zwei I2C-Portexpander (z.B. PCF8574) Rücken-an-Rücken 
zusammenschalten, dann hättest du zwei Slave-Interfaces mit den gleichen 
Daten, welches du vom µC aus sekündlich pollen kannst. Hängt aber davon 
ab, ob du die Slave-Adresse deines Gerätes konfigurieren kannst.
Gast #5511953
Lesenswert?

Oliver S. schrieb:
> Wenn es ein echter I2C ist, dann sollten beide Master Multimastermode
> kennen. Da kann dann einer der Master zum Slave werden, falls
> erforderlich.

Nein, ein I2C Device kann Slave, Master oder Master/Slave sein. Ein 
Master sollte zwar multimaster-fähig sein, das hat aber nichts damit zu 
tun, ob er auch als Slave laufen kann, das ist völlig 
implementierungsabhängig.
#5512547
Lesenswert?

Oliver S. schrieb:
> Wenn es ein echter I2C ist, dann sollten beide Master Multimastermode
> kennen.

Leider habe ich die Erfahrung gemacht, daß außer Philips/NXP keiner den 
I2C-Multimastermode wirklich verstanden hat.
Die Atmel AVR/8051 hatten schwerwiegende Bugs. Ohne Timeout mit Retry 
geht da garnichts.
Auch hatte ich mal versucht, den P89C668 durch den Tekmos Nachbau 
TK89C668 zu ersetzen, dessen I2C hängte sich schon im Slave-Scan auf.

Wenn es aber läuft, ist Multimaster-I2C eine feine und elegante Lösung.

Guido Körber schrieb:
> Ein
> Master sollte zwar multimaster-fähig sein, das hat aber nichts damit zu
> tun, ob er auch als Slave laufen kann, das ist völlig
> implementierungsabhängig.

Ein I2C-Multimaster wird automatisch Slave, sobald er die Arbitration 
verliert. Etwas anderes ergäbe auch keinen Sinn.
#5512635
Lesenswert?

Moin,

Ich weiss nicht, ob's ein Einzelfall war, aber ich hab' mal ziemlich 
Malheur mit I2C Multimaster gehabt. Wuerde ich nicht einsetzen. Das war 
so ein oller Coldfire, bei dem muss wohl irgendein SAP-Informatiker die 
I2C Hardware gestrickt haben.
IIRC war da die Multimasterfaehigkeit nicht abschaltbar. Und leider 
irgendwie auch arg nervoes, d.h. der hat andauernd gedacht, ein anderer 
(tatsaechlich nicht vorhandener) Master haette den Bus uebernommen und 
er muesste jetzt warten, bis er ihn wieder kriegt (Was natuerlich nie 
passiert ist...).
Deshalb wuerd' ich auch fuer den schon vorgeschlagenen Zweit-µC aus dem 
Zweit-Post plaedieren.

Gruss
WK
Gast #5513151
Lesenswert?

S. R. schrieb:
> Du könntest auch zwei I2C-Portexpander (z.B. PCF8574) Rücken-an-Rücken
> zusammenschalten, dann hättest du zwei Slave-Interfaces mit den gleichen
> Daten, welches du vom µC aus sekündlich pollen kannst.

Das wäre elegant, gute Idee! Mein Slave muss die Adresse 0x34 haben, den 
PCF8574 kann ich leider nicht darauf konfigurieren. Ich werde mal 
nachforschen ob es sonstige Port Expander gibt die ich auf die Adresse 
einstellen kann.

Fabian F. schrieb:
> Am einfachsten wäre es den I2C
> zu muxen und einfach alle paar Sekunden umzukonfigurieren zwischen
> Master/Slave

Auch eine Idee, danke!


Vielen Dank euch, das hilft mir schon mal weiter :)

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