STM32 I2C auf mehrere Pins

OP (Firma: Embedded Microtec) #6654481
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
(Firma: matzetronics) #6654546
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.
Gast #6654560
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.
OP (Firma: Embedded Microtec) #6654561
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.
Gast #6654571
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.
OP (Firma: Embedded Microtec) #6654595
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.

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