Forum: Mikrocontroller und Digitale Elektronik STM32 I2C auf mehrere Pins


von Andreas A. (Firma: Embedded Microtec) (andi) Flattr this


Lesenswert?

Hallo.
Ich hab eine Frage, ob es möglich ist, ein und dasselbe I2C Peripheral 
auf mehrere Pins zu mappen und zu benutzen.
Und zwar hab ich konkret einen STM32F401. Auf den Pins PB8 und PB9 
verwende ich I2C1. Auf den Pins PB6 und PB7 ist I2C1 auch verfügbar. Die 
Frage ist, wenn ich es auch dort konfiguriere, ob ich dann auch dort 
Geräte ansprechen kann. Also (fast) wie wenn das Gerät am Bus von PB8 
und PB9 hängen würde.

Der Grund für die Überlegung ist, dass wir eine Platine haben, die 
fertig produziert ist und bei der die Pins PB6 und PB7 auf einem 
Erweiterungssteckplatz geroutet sind. Ursprünglich nur als GPIOs 
vorgesehen. Und jetzt wärs interessant, ob wir sie nicht auch als I2C 
verwenden könnten. Aber es ist eben der selbe I2C Bus, den wir schon auf 
den anderen Pins in Verwendung haben.

Eigentlich würde ich vermute, dass das trotzdem funktionieren sollte, 
oder?

Danke schonmal,
Andreas

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Probierts doch aus :-P Ich denke, das es nicht geht, aber hinterher seid 
ihr klüger. Kaputt geht jedenfalls nichts.

von Ben S. (bensch123)


Lesenswert?

Gleichzeitig sollte das nicht gehen. Umschalten sollte funktionieren.

von Stefan F. (Gast)


Lesenswert?

Das geht nicht, nur entweder die primäre Zuordnung oder die Sekundäre.
Schau dir die entsprechenden Register an, wo man das einstellt. Dann 
siehst du dass beides gleichzeitig unmöglich ist.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Stefan ⛄ F. schrieb:
> Dann
> siehst du dass beides gleichzeitig unmöglich ist.

Umgekehrt ists richtig. Du kannst nicht mehrere AFs auf einen Pin 
mappen. Aber es steht nirgends, das man ein Peripheral AF nicht auf 
mehrere Pins mappen kann (siehe z.B. Figure 26 und 27 im RM0090 
Dokument). Also doch ausprobieren.
Der TE möchte ja I2C1 auf z.B. PB8 und PB9, sowie zusätzlich auf PB6 und 
PB7 mappen. Klar, man kann dann nicht z.B. USART1 auch noch auf PB6 und 
PB7 haben, aber das weiss der TE ja.

: Bearbeitet durch User
von Ben S. (bensch123)


Lesenswert?

Aber i²c auf mehreren Pins ergibt doch absolut keinen Sinn. Wie soll das 
funktionieren? Dafür ist die Peripherie nicht konzipiert.

von Stefan F. (Gast)


Lesenswert?

Matthias S. schrieb:
> Aber es steht nirgends, das man ein Peripheral AF nicht auf
> mehrere Pins mappen kann

Das würde aber intern zu einem Kurzschluss führen. Siehe Figure 20 in 
https://www.st.com/resource/en/reference_manual/dm00096844-stm32f401xb-c-and-stm32f401xd-e-advanced-arm-based-32-bit-mcus-stmicroelectronics.pdf

Jeder I/O Pin hat seinen eigenen Schmitt Trigger. Wenn der eine ein HIGH 
liefert und der andere ein LOW, dann hast du einen Kurzschluss.

Ich vermute, dass der Chip diese Konfiguration verhindert. Egal ob er es 
tut, oder nicht: es kann nicht funktionieren - falls dieses Diagramm 
stimmt.

von Andreas A. (Firma: Embedded Microtec) (andi) Flattr this


Lesenswert?

Also im Grunde möchte ich nur erreichen, dass die I2C Signalisierung 
auch auf den beiden anderen Pins rauskommt.
Im Endeffekt wäre es so, als würde ich einen zusätzlichen I2C Slave an 
den selben Bus hängen (also Microcontroller soll Master sein), nur dass 
die "Verkabelung" nicht direkt auf der Platine erfolgt sondern einmal 
über den Controller geht.

Durch die verschiedenen I2C Adressen sollte es auch zu keinen Konflikten 
kommen. Einziges Problem das ich momentan sehe, ist, welches 
Eingangsignal kriegt das I2C Peripheral im Controller. Das von den 
zuletzt konfigurierten Pins?

Dachte nur, vielleicht hat das schonmal jemand versucht.

von Stefan F. (Gast)


Lesenswert?

Andreas A. schrieb:
> Also im Grunde möchte ich nur erreichen, dass die I2C Signalisierung
> auch auf den beiden anderen Pins rauskommt.

Die beiden Pins arbeiten bidirektional.

> Einziges Problem das ich momentan sehe, ist, welches Eingangsignal
> kriegt das I2C Peripheral im Controller. Das von den zuletzt
> konfigurierten Pins?

Das meine ich doch! Es kann nur einer sein oder gar keine Funktion.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Stefan ⛄ F. schrieb:
> Die beiden Pins arbeiten bidirektional.

Sind aber, wenn man es richtig macht, auf Open Drain konfiguriert. Ein 
Kurzschluss kommt also nicht vor, höchstens ein Konfilkt, bei dem man 
den Pegel falsch lesen würde.

von Stefan F. (Gast)


Lesenswert?

Matthias S. schrieb:
> Kurzschluss kommt also nicht vor

Doch, weil zwischen jedem I/O Pin und dem internet Alternate-Function 
Umschalter ein Schmitt-Trigger liegt.

Siehe Figure 20 in 
https://www.st.com/resource/en/reference_manual/dm00096844-stm32f401xb-c-and-stm32f401xd-e-advanced-arm-based-32-bit-mcus-stmicroelectronics.pdf 
(wie ich bereits schrieb).

von Andreas A. (Firma: Embedded Microtec) (andi) Flattr this


Lesenswert?

Ok. Ich hab das jetzt mal kurz so konfiguriert und es hat sich gezeigt, 
dass auch der I2C Slave der auf den ursprünglichen Pins hängt dann nicht 
mehr antworten mag.
Ich bin hier aber nicht ins Detail gegangen. Eventuell, fehlt ihm das 
Acknowledge vom Slave, das er dann vielleicht auf dem anderen Eingang 
erwartet und nicht bekommt. Aber wie gesagt... ich habs nicht im Detail 
angeschaut. Gehen tuts wie es ausschaut tatsächlich nicht.

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.