Hallo, gibt es einen Mikrocontroller der zwei I2C Schnittstellen hat und diese für einen speziellen Fall einfach durchschleifen kann? Der Mikrocontroller soll als Master Daten von 3 Slaves sammeln und im Haupsystem als Slave eingebunden werden. Es gibt jetzt den Spezialfall das ein Slave manchmal ein Firmware-Update braucht. Da ich dies nicht im µC nachbauen will ist meine Frage eben ob es diese Funktion gibt, wenn nicht gibt es einen Baustein der mir die I2C Leitungen brücken kann? Danke und Gruß
Da hast Du wohl den Zweck eines I2C-Bus nicht begriffen. An dem hängen viele Teilnehmer. Wenn einer dieser Teilnehmer etwas zu sagen hat, gibt er als master den Takt aus und stellt die Verbindung zu einem slave her. Zwei Master gleichzeitig gibts nicht. Mehrere slaves gleichzeitig könnten evtl. funktonieren, nur fällt das acknowlegment aus, die wichtigeste Kontrolle zur Richtigkeit des Busmanagments, also wie master und slave zu-bzw. weggeschaltet werden.
Peter R. schrieb: > Zwei Master gleichzeitig gibts nicht. Prinzipiell schon, die müssen dann aber multimaster -fähig sein. http://www.i2c-bus.org/multimaster/ Beitrag "TWI-Multi-Master für ATMEGA in C"
:
Bearbeitet durch User
Das macht nur Sinn, wenn vielleicht der "Zwischen-uC" die Daten buffern oder sonstwas mit machen soll... Und der Bus zum "Haupmaster" sollte dann eine höhere Baudrate haben... Anderenfalls, richtige vernünftige Architektur bauen. Dann reicht 1x IIC. Und wenn's zum Spass doch mit 2 IIC gemacht werden soll... Infineon XMC's haben bis zu 6 USIC's, da kann man das mit machen.
Wenn die CPU schnell genug ist könnte ich mir einen selbst gebastelten BYPASS-Mode nach folgendem Pseudocode-Ansatz vorstellen:
1 | while (BYPASS_MODE_PIN) |
2 | {
|
3 | if (SDA_SLAVE_PIN == LOW) { |
4 | SDA_MASTER_PIN_DIR = OUTPUT; |
5 | SDA_MASTER_PIN = LOW; |
6 | }
|
7 | else { |
8 | SDA_MASTER_PIN_DIR = INPUT; //mit pull up Logik falls Schaltung keine hat |
9 | }
|
10 | if (SCL_SLAVE_PIN == LOW) { |
11 | SCL_MASTER_PIN_DIR = OUTPUT; |
12 | SCL_MASTER_PIN = LOW; |
13 | }
|
14 | else { |
15 | SCL_MASTER_PIN_DIR = INPUT; //mit pull up Logik falls Schaltung keine hat |
16 | }
|
17 | }
|
Leicht verspäteter Beitrag, außerdem Unsinn. Wenn jemand einen I2C Bus trennen und durchschleifen will, nimmt er dazu passende I2C MUX. Fertig.
Schau Dir mal den PDA9540 an, ein 2 way Multiplexer. Damit wäre sowas machbar.
Beitrag #5273641 wurde von einem Moderator gelöscht.
Peter R. schrieb: > Zwei Master gleichzeitig gibts nicht. Mehrere slaves gleichzeitig > könnten evtl. funktonieren, nur fällt das acknowlegment aus, die > wichtigeste Kontrolle zur Richtigkeit des Busmanagments, also wie master > und slave zu-bzw. weggeschaltet werden. Zwei Master im I2C gibts schon, ist aber selten. Mehrer Slaves sind nicht die Ausnahme in I2C sondern die Regel, IMO gibts nämlich keinen (bzw. kaum einen) Grund I2C mit nur einem Master und einem Slave zu betreiben. ACK und NACK sind für die Kommunikation zwar wichtig aber noch wichtiger ist die Adresse, damit auch jeder im Bus weis, wer gemeint ist wenn der Master fragt.
Falk B. schrieb: > Leicht verspäteter Beitrag, außerdem Unsinn. Wenn jemand einen I2C Bus > trennen und durchschleifen will, nimmt er dazu passende I2C MUX. Fertig. Ich gebs ja zu, UNSINN. zu dem ich mich habe hinreissen lassen, weil ich auf diese Art mal erfolgreich einen UART-Bypass für bestehende Hardware implementiert hab. Mein Ansatz berücksichtigt auf keinste Weise die Bidirektionalität der I2C-Leitungen. Eine dumme Pegelweitereichung wie beim UART funktioniert hier nicht. Schon ein ACK oder von Slave getriebene Daten bei Lesevorgänegen kämen hier nicht durch. Und dann noch Clock-Stretching .... OMG Schäm :(
:
Bearbeitet durch User
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.