Hallo Leute! Ich habe mal eine Frage zur Benutzung von SPI und I²C. Mit SPI bin ich bestens vertraut, ich habe aber noch nie ein I²C-IC verwendet. Jetzt wird es Zeit, bzw. jetzt muss ich nen I²C-ADC einsetzen. Als uC verwende ich einen MSP430. Dessen Pins teilen sich beide Funktionen für SPI und I²C. P1.5 SCLK (SPI) P1.6 SDO (SPI) / SCL (I²C) P1.7 SDI (SPI) / SDA (I²C) Jetzt habe ich das Problem, dass ich SPI ebenfalls benötige. Das SFR kann ich ja zwischendruch umschalten. Beim SPI-Device mache ich mir keine Sorgen, da sorgt erst ein Latch für die Datenübernahme. Es ist also egal, was vorher auf den Leitungen passiert ist, solange ich danach 16 gültige Bits reintakte und latche. Aber wie ist es mit dem I²C-Device? Da wird ja adressiert. SCLK vom SPI ist seperat, aber der Datenausgang des SPI ist gleichzeitig das CLK-Signal vom I²C - es werden also bei einem SPI-Schreibvorgang 16Bit an das I²C-Device übertragen. Der Pegel ist dann immer 'high', da die Pull-Ups vom I²C den Signalpegel oben halten (ich bekomme keine Daten über SDI rein, es ist ein reiner Datenausgang). Kann ich da jetzt Probleme bekommen? Oder mache ich mir gerade Sorgen, wo keine sind?
Gerdohard schrieb: > gleichzeitig das > CLK-Signal vom I²C - es werden also bei einem SPI-Schreibvorgang 16Bit > an das I²C-Device übertragen Ich revidiere...müssen ja garnicht 16 sein, da es ja vom Dateninhalt abhängt. Wie verhält sich also ein I²C-Device bei einer beliebigen Anzahl von Takten?
Gerdohard schrieb: > Wie verhält sich also ein I²C-Device bei einer beliebigen > Anzahl von Takten? Wenn du Pech hast, schlecht. Ich würde mit der Select-Leitung vom SPI den I2C Bus schalten. MfG Klaus
Das Problem klingt interessant. Ich würde den I²C-Clock mit 'nem Oder-Gatter auf High halten, wenn SPI benutzt wird, hab's aber noch nicht ausprobiert. Gerdohard schrieb: > ich bekomme keine Daten über SDI rein Das wär schön, wenn wir im Wiki eine Lösung beschreiben könnten, die auch geht, wenn über SDI Daten reinkommen.
Das Problem ist keines mehr, wenn man einen Typen eisetzt, der USCI_A0 UND UCCI_B0 separat hat- z.B. Launchpad 1.5 mit MSP430G2553.
DS aus W schrieb: > Das Problem ist keines mehr, wenn man … Tja, wenn man dies oder das macht. Aber das war nicht die Frage. Man kann den SPI auch über Timer-Interrups und separate Pins ansteuern, statt die dafür vorgesehenen Pins zu nehmen. Eine generelle Lösung für die o.g. Konstellation wäre m.E. trotzdem interessant, allein um zu beurteilen, welcher Aufwand das wäre und ob sich der Aufwand im Einzelfall lohnt.
Klaus schrieb: > Ich würde mit der Select-Leitung vom SPI > den I2C Bus schalten. Ne CS-Leitung habe ich ja garnicht. Ich toggle nur ein Latch am Ende der Daten, also einmal high, dann wieder low. Torsten C. schrieb: > Ich würde den I²C-Clock mit 'nem Oder-Gatter auf High halten, wenn SPI > benutzt wird, hab's aber noch nicht ausprobiert. Ist natürlich ne Möglichkeit, aber eben halt ein extra Bauteil. Wäre nicht schlimm aber: Torsten C. schrieb: > Man kann den SPI auch über Timer-Interrups ansteuern dann würde ich im schlimmsten Fall eben bitbangen, da brauche ich ja nichtmal nen Timer für, auch wenn es dann nicht mehr Interrupt-gesteuert ist. Den SPI würde ich halt nur gerne verwenden, damit das im Hintergrund läuft (also evtl. wirklich mit Timer). DS aus W schrieb: > Das Problem ist keines mehr, wenn man einen Typen > eisetzt, der USCI_A0 UND UCCI_B0 separat hat- > z.B. Launchpad 1.5 mit MSP430G2553. Da ist natürlich die Lösung des Tages. Da hätt ich noch eine: Einfach nen SPI-ADC, oder das SPI-Teil gegen eines mit I²C austauschen....:-\ Trotzdem danke!
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.