SPI über normale Pins

OP #5834672
Lesenswert?

Guten Morgen!

Ich hab eine Frage zu SPI.
Wenn ich über SPI Daten empfangen möchte, muss ich die dafür 
vorgesehenen Pins vom uC benutzen, da hier die Daten erwartet werden. 
Sonst geht´s nicht.
Wenn ich aber über SPI Daten senden möchte: Beim Master würde ich Clock 
und Chip Select wieder wie vorgesehen verwenden, aber kann ich einen 
normalen Ausgangspin (nicht den MOSI) verwenden?
Meine Idee ist, dass ich mehrere Slaves gleichzeitig (!!!) mit Daten 
versorgen kann. Alle Slaves hängen parallel an Clock und CS vom Master, 
aber weil der Master nur einen MOSI hat, benutze ich für die anderen 
Slaves einfach normale Ausgangspins.
Geht das, oder gibt es irgendwas, das ich nicht bedacht habe?
Danke für eure Hinweise!!
Sebastian
#5834679
Lesenswert?

Die meisten ICs haben keine Mindest-Geschwindigkeit bei SPI, daher 
könntest du ein Soft-SPI implementieren.
Das Problem ist, dass die reguläre CLOCK-Leitung (normalerweise) 
hardwaremäßig an MISO bzw MOSI gekoppelt ist.

Bei Soft-SPI machst du eben alles "händisch":
- CS-Pin manuell auf Low setzen,
- (MOSI)-Datenpin entweder High oder Low schalten,
- Clock-Pin manuell toggeln (high-low-Übergang)
- (ggf. Daten einlesen)
- Clock-Pin wieder toggeln (low-high-Übergang)
- Repeat.
#5834681
Lesenswert?

Sebastian R. schrieb:
> Guten Morgen!
>
> Ich hab eine Frage zu SPI.
> Wenn ich über SPI Daten empfangen möchte, muss ich die dafür
> vorgesehenen Pins vom uC benutzen, da hier die Daten erwartet werden.
> Sonst geht´s nicht.

Das kann man so allgemein gar nicht sagen. Man kann SPI als Master 
problemlos in Software nachbilden, dann kann man an jedem uC x-beliebige 
Pins nutzen. Als Slave geht das meistens nicht, weil der SPI-Takt zu 
hoch für eine softwarebasierte Auswertung ist.

> Wenn ich aber über SPI Daten senden möchte: Beim Master würde ich Clock
> und Chip Select wieder wie vorgesehen verwenden, aber kann ich einen
> normalen Ausgangspin (nicht den MOSI) verwenden?

Nur, wenn man SPI komplett in Software generiert.

> Meine Idee ist, dass ich mehrere Slaves gleichzeitig (!!!) mit Daten
> versorgen kann. Alle Slaves hängen parallel an Clock und CS vom Master,
> aber weil der Master nur einen MOSI hat, benutze ich für die anderen
> Slaves einfach normale Ausgangspins.

Das ist nicht sinnvoll und praktikabel, denn dann müßtest du per 
Software synchron zum SPI-Takt, welcher in der Hardware generiert wird, 
die Daten ausgeben. Das ist arg aufwändig, da kann man SPI gleich 
komplett in Software machen.

> Geht das, oder gibt es irgendwas, das ich nicht bedacht habe?

Wozu der Aufriß? Warum nutzt du SPI nicht so wie der Rest der Welt? 
Entweder bekommen verschiedene Slaves je ein CS-Signal oder wie im Fall 
von Schieberegistern hängt man alle Slaves nacheinander in eine Kette an 
ein CS (daisy chain)
Gast #5834682
Lesenswert?

Das Ganze ist eh sinnfrei, weil dein µC in der Regel nicht gleichzeitig 
auf mehreren Pins Software SPI machen kann. Nacheinander ja aber:

Entweder du hast mehrere SPI Busse, samt DMA oder es macht keinen 
Unterschied, ob du nacheinander über die selben SPI Leitungen mit 
separaten CS Leitungen oder nacheinander über Software SPI sendest.
Gast #5834685
Lesenswert?

Sebastian R. schrieb:
> Meine Idee ist, dass ich mehrere Slaves gleichzeitig (!!!) mit Daten
> versorgen kann.

Mit verschiedenen Daten?
Die Datensätze müssten ja zumindest mal gleich lang sein. Sonst passt ja 
die Anzahl der Clock-Cycles nicht.

Gefühlt bringt dir die Nutzung der Hardware-SPI-Einheit hier nichts 
außer (vmtl. unlösbaren) Problemen.
Die SPI-Hardware kann i.d.R. nur ihren eigenen MOSI ansteuern. Das heißt 
du müsstest du die Daten auf deinen zusätzlichen MOSI-Leitungen "von 
Hand" (in Software) raus takten. Wie soll das Taktsynchron geschehen?

Kurz: Mach Soft-SPI.
#5834697
Lesenswert?

Hallo,

Peter D. schrieb:
> Bimbo. schrieb:
>> Das Ganze ist eh sinnfrei, weil dein µC in der Regel nicht gleichzeitig
>> auf mehreren Pins Software SPI machen kann.
>
> Es gibt sehr wohl MCs, die auf 4 Datenpins gleichzeitig SPI machen
> können, z.B. für SD-Karten oder serielle Flash-ICs.

Das ist dann aber kein SPI, meist wird es SDIO genannt und dazu gehört 
die passende Hardware im µC. Ich habe aber den Sinn und Zweck des 
Vorhaben vom TO ohnehin nicht ganz verstanden.

Gruß aus Berlin
Michael
#5834698
Lesenswert?

Walter T. schrieb:
> Sebastian R. schrieb:
>> Meine Idee ist, dass ich mehrere Slaves gleichzeitig (!!!) mit Daten
>> versorgen kann.
>
> Bei einer MCU mit mehreren Kernen sollte das gehen (z.B. Propeller). Bei
> einer MCU mit nur einem Kern mußt Du eh alles hintereinander senden.

Jajaja, da hat mal wieder Einer was gehört. Auch ein popeliger AVR kann 
mehrere Datenströme gleichzeitig per SPI ausgeben.
Gast #5834743
Lesenswert?

moep schrieb:
> Es ist denke ich Dual- bzw. Quad-SPI gemeint.
> Ist wie normales SPI nur mit 4 Datenleitungen statt einer. Wird wie
> gesagt z.B. für die schnelle Anbindung von Flash-Speicher genutzt.

Wie auch immer, das ist dann eine speziell dafür ausgelegte Hardware 
Peripherie.

Falk B. schrieb:
> Jajaja, da hat mal wieder Einer was gehört. Auch ein popeliger AVR kann
> mehrere Datenströme gleichzeitig per SPI ausgeben.

Wie denn, wenn nur eine SPI vorhanden? Alle Bausteine in Daisy Chain? 
Das ist  dann strenggenommen auch nicht gleichzeitig, sondern 
hintereinander. Lediglich wird alles mit der selben CS Leitung 
gleichzetig übernommen.

Aber ich vermute, dass der TO Anforderungen stellt, die so absolut gar 
nicht nötig sind. Vermutlich aus Unwissen heraus.
OP #5834754
Lesenswert?

Der TO hat überlegt, wie er 4 DACs möglichst schnell mit 
unterschiedlichen aber immer gleich langen Werten versorgen kann. Sagen 
wir mal 8 bit. Bei daisy chain braucht er dann ja 4x8 Zyklen.
Schreibt er aber, wie beschrieben, die Werte über 4 Ausgänge raus, 
können die 4 DACs (ungefähr) gleichzeitig versorgt werden. Also nur 1x8 
Zyklen.
Soweit die Theorie. Die Praxis wurde ja netterweise von den anderen 
bereits erklärt.

Der TO
#5834791
Lesenswert?

Bimbo. schrieb:

> Falk B. schrieb:
>> Jajaja, da hat mal wieder Einer was gehört. Auch ein popeliger AVR kann
>> mehrere Datenströme gleichzeitig per SPI ausgeben.
>
> Wie denn, wenn nur eine SPI vorhanden? Alle Bausteine in Daisy Chain?

Nö. Das kann man problemlos in Software nachbilden, wenn es sein muss in 
Assembler. Um wieviel das dann schneller als Hardware SPI mit einer 
Leitung ist, sei mal dahingestellt.

> Das ist  dann strenggenommen auch nicht gleichzeitig, sondern
> hintereinander.

Nö.

> Lediglich wird alles mit der selben CS Leitung
> gleichzetig übernommen.
>
> Aber ich vermute, dass der TO Anforderungen stellt, die so absolut gar
> nicht nötig sind. Vermutlich aus Unwissen heraus.

Diese Diagnose ist nur allzu oft richtig ;-)
Aber dafür sind die Fragen in einem Forum wie diesem ja da.
Gast #5835559
Lesenswert?

Du kannst theoretisch auch eine soft-SPI bauen, die quasi gleichzeitig 
auf 4 Ports schreibt.

Pseudocode:

Clk1 = high
SDO1 = D1(0)
Clk2 = high
SDO2 = D2(0)
....
Warten
...
Clk1 = low
....
usw

Das ist nicht 100% gleichzeitig, aber nahezu.
Gast #5835579
Lesenswert?

Wählt man die Pins geschickt, kann sogar wirklich gleichzeitig 
gearbeitet werden.
Dann kann zB mit

PortA=0x0F

Alle Clk gleichzeitig gesetzt werden, wenn diese auf PortA(0...3) 
gemappt sind.

Analog dazu MISO, MOSI und CS
#5835608
Lesenswert?

Hallo,

einen Port als MOSI, einen Port als MISO, 1x Clock parallel an alle 
Slaves, 1x CS parallel an alle Slaves.
CS aktiv, damit warten alle Slaves auf Daten.
Bitmuster des 2. Bits für die Slaves auf den MOSI-Port.
Clock zur Übernahme durch die Slaves setzen und wieder zurück. Zur 
richtigen Zeit je nach SPI-Mode den MISO-Port lesen.
Daten direkt aufbereitet aus einem Buffer holen und in einen Buffer 
schreiben. Das für alle Bits, die gesendet werden sollen.
CS wieder inaktiv zur Übernahme.
Das Zusammensortieren der Bits aus den Datenbytes auf die Portpins 
vorher erledigen und in den Buffer legen, genauso, wenn nötig, die 
empfangenen Daten später umsortieren.
Damit wären 8 Slaves auch praktisch absolut parallel zu bedienen.

Gruß aus Berlin
Michael

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