Hallo zusammen,
ich habe eine Schaltung entworfen, bei der ich zwei I2C-Busse nutzen
möchte, eine interne (wo ich Master bin) und eine zur externen
Kommunikation (dort bin ich Slave). Jetzt habe ich festgestellt, dass im
Datenblatt beide mit I2C1 bezeichnet sind, einmal auf Pin 46,47 und
einmal auf Pin 58,59 meines LPC2362. (einfach im Datenblatt nach SDA1
suchen).
Heißt dass, dass ich nur ein I2C1-Interface habe, das ich auf
verschiedene Pins mappen kann? Oder stecken da 2 Interfaces dahinter?
Muss ich jetzt einen Bus umlöten auf ein anderes I2C-Interface, oder
gibt es da eine Softwareseitige Lösung?
Und ist sowas üblich, so komische Doppelbelegungen zu machen? Dazu hab
ich nichtmal ne Fußnote gefunden...
Vielen Dank im Voraus für Infos!
Viele Grüße
Stefan
PS: Jetzt bitte nicht vorschlagen, dass ich den I2C auch manuell auf
GPIO-Pins umsetzen kann...
Im Datenblatt steht 3x I2C. mehrfaches mapping ist üblich, sonst
schließen sich zu vile funktionen gegenseitig aus. es gibt noch I2C0 und
I2C2, wobei nur I2C wirklich I2C ist und nur dort sichergestellt ist,
dass der Bus nicht gestört wird, wenn der Controller ohne Versorgung
ist.
Steht ALLES im Datenblatt.
Also gibt es wohl keinen Workaround :(
Da ich zuerst die HW und dann SW entwickele, blende ich solche Details
(ob ich jetzt konkret an I2C0, 1 oder 2 hänge) aus, die sind ja erst bei
der SW relevant.
Aber wenn diese Doppelbelegungen üblich sein sollten, dann kann ich auch
irgendwo verstehen dass dafür keine Fußnote spendiert wird, und muss in
den sauren Apfel beißen. Schade.
Ein schönes Restwochenende und danke für die fixe Antwort!
Und beim Uart hatte ich übrigens Glück ;)
gurkenking schrieb:> Heißt dass, dass ich nur ein I2C1-Interface habe, das ich auf> verschiedene Pins mappen kann?
Ja, genau das heisst das.
Ausserdem sind die Pins 58,59 nur eingeschränkt für I2C brauch bar, da
nicht open drain.
Wenn du es nicht per GPIO implementieren möchtest, bleibt dir nur
umverdrahten, z.B. 48,49 (I2C2) statt 58,59.
Ich werde dann umverdrahten, ist zum Glück nebeneinander und unbelegt...
Wenn ich das richtig gelesen habe, muss ich das mit dem Open Drain
beachten, wenn mein LPC2362 nicht gepowert ist, und somit "tot" am Bus
hängt.
In diesem Fall hat er 10k zwischen GND und I2C-Bus (gerade gemessen).
Das sollte doch die anderen Pegel auf dem Bus dann nicht weiter
stören...
wie sehr muss der hersteller dir das denn vorkauen? Es gibt SCL0/SDA0,
SCL1/SDA1 und SCL2/SDA2, eben für I2C0 bis I2C2. Das sollte man schon
merken. Dann erstmal HW machen, ohne sich zumindest Gedanken über die SW
zu machen, kann nur schief gehen.
NUR I2C0 an 25 und 24 ist richtiges I2C. Die Portpins besitzen gar keine
Push/Pull-Stufe und können auch als GPIO kein Vcc ausgeben. I2C1 und
I2C2 sind identisch.
>> Dann erstmal HW machen, ohne sich zumindest Gedanken über die SW>>zu machen, kann nur schief gehen.
Ja Mist, selbstverständlich habe ich mir zu nix vorher Gedanken gemacht!
>> "Aber wenn diese Doppelbelegungen üblich sein sollten"
- damit hatte ich halt nicht gerechnet, nicht mehr und nicht weniger.
Für einen Insider mag das alles selbstverständlich sein, aber für einen
Neuling? Das demotiviert, wenn für Dich sowieso klar ist, dass alles
schief gehen muss...