Forum: Mikrocontroller und Digitale Elektronik SPI mit 2 Leitungen


von Hans W. (hans_w30)


Lesenswert?

Hy,
ich möchte zwei XMegas per SPI verbinden aus platzgründen auf meinem Bus 
will ich hierzu aber nur 2 Leitungen benutzen. Also Miso und Mosi auf 
einer Leitung. Die Zweite Leitung soll mein Clk sein.

Wie mache ich das am geschicktesten?
Soll ich Miso und Mosi mit nem Multiplexer vor dem Bus realisieren ? 
Oder kann ich einfach Miso und Mosi verbinden und das ganze Software 
technisch lösen? Oder gibts einfachere Wege?

Schon mal danke für die Hilfe im Vorraus

von Floh (Gast)


Lesenswert?

Hans W. schrieb:
> ich möchte zwei XMegas per SPI verbinden aus platzgründen auf meinem Bus
> will ich hierzu aber nur 2 Leitungen benutzen. Also Miso und Mosi auf
> einer Leitung. Die Zweite Leitung soll mein Clk sein.

Verdrahtest du dann auch das Schieberegister im uC um?

Warum nimmste nicht einfach eine zusätzliche Leitung oder gleich i2c?

von Pascal H. (pase-h)


Lesenswert?

Warum benutzt du, wenn du nur 2 Pins frei hast, nicht I²c?

Mfg

von Hans W. (hans_w30)


Lesenswert?

Das Problem ist das I2C beim XMega nur maximal 400kHz kann.Ich brauche 
aber da über den Bus z.b USB Daten sollen einen größeren Datendurchsatz.
Zusatzliche Leitung wäre das einfachste, ich habe aber Leider auf meinem 
Bus keinen Platz mehr.

von BusZuKlein (Gast)


Lesenswert?

Dann gibt den beiden Leitungen die Namen TX und RX nenn das ganze RS232.
Der UART ist es egal ;-)

von Floh (Gast)


Lesenswert?

Hans W. schrieb:
> Ich brauche
> aber da über den Bus z.b USB Daten sollen einen größeren Datendurchsatz.

Nimm doch gleich D+ und D-.
Am besten, du erklärst mal genauer, was du für ein Problem hast.
Sonst wird das hier nur ein Rumgerate.

von Kevin K. (nemon) Benutzerseite


Lesenswert?

Ich habe es bislang noch nie ausprobiert und hatte bislang nur mit 
ATMegas zu tun, aber du kannst doch bei einem genügend hohen Grundtakt 
die Register so setzen, dass sich ein I²C-Takt über 400kHz ergibt.

von Wolfgang (Gast)


Lesenswert?

Hans, schielst Du nach den ARMs, die eine 2-Draht-SPI-Leitung 
unterstützen? Schau Dir mal STM32F107VCT6 o.ä. an - SPI u.a. ist im 
RM0008 erklärt. Die Steuerung von Eingang/Ausgang ist aber tückisch, 
weil sie synchron auf allen angeschlossenen Geräten stattfinden muß!

Gruß - WPö

von Hans W. (hans_w30)


Lesenswert?

Die Grundvorrausetzungen sind schwer zu erklären ich versuchs aber mal:
-> Ich werde ein 19" Gehäuse benutzen in die ich alle Einschübe die ich 
baue reinkommen.
-> Es soll so sein das ich z.B später einfach Module miteinander 
verbinde und dann einen Wandler habe z.b USB to xyz. Wenn ich jetzt ein 
Modul brauche das USB to I2C können soll, ist USB schon als SPI 
vorhanden und muss nurnoch in I2C gewandelt werden.
-> Es gibt einen I2C-Bus der als Service Bus funktioniert.
-> XMegas sind schon einige beschafft deshalb probier ich es mit denen.

Ich habe auch schon probiert I2C hochzutakten, ging auch bis 600kHz 
problemfrei, aber ab 600kHz wurde es problematisch und die Daten wurden 
nicht mehr einwandfrei interpretiert.

von Hans W. (hans_w30)


Lesenswert?

So, also hab das ganze dann jetzt auch hinbekommen. Und zwar indem ich 
MISO und MOSI einfach verbunden habe und Software mäßig immer nur bei 
einem (Mast oder Slave) einen Ausgang habe. Ist zwar einiges an 
Umschalten und ein ziehmliches gefriemel, aber es funktioniert.

Danke für eure Hilfe

von Martin R. (Gast)


Lesenswert?

Hallo Hans,

könntest du vielleicht deinen Code für die SPI Verbindung mal hier 
reinstellen, bin nämlich auch verzweifelt am basteln. Will über diese 
Halbduplex Verbindung einen Maussensor auslesen.

Danke.
Gruß Martin

von Hans W. (hans_w30)


Angehängte Dateien:

Lesenswert?

Hab hier mal meine Ausführung. Bin mir aber nicht mehr sicher ob diese 
hundert Prozentig geht. Hab noch weiter dran herumgebastelt mit DMA 
Controller und so späsen.
Wenn ich mich noch recht entsinne schicke ich als erstes Byte die Anzahl 
der folgenden Bytes, dies müsstest du dann herausnehmen. Mein Code 
basiert auf den Atmel Treibern (twi_driver.h).

Gruß Hans

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.