Forum: Mikrocontroller und Digitale Elektronik Mehrere SPI Geräte nur ein CS


von Schorsch (Gast)


Lesenswert?

Hallo,

mir kam da gerade so ein Gedanke, sagt mir mal ob das Unsinn ist.

Ich habe in der Vergangenheit gerne, wenn ich SPI über große Distanzen 
übertragen musste SPI auf Differentiell gewandelt. Das ist super, denn 
dann hat man 2x4 Strippen, die gehen genau durch ein Ethernetkabel. 
Kabellängen von 50m sind hierbei kein Problem.

Offenkundig hat man in diesen 4 Leitungen (MISO, MOSI, SCK, CS) nur ein 
chip select, will sagen, ich kann nur ein SPI Gerät anschießen. Jetzt 
hatte ich gestern zufällig ein Datenblatt von einem doppelten DAC-IC in 
der Hand, der ließ sich durch die ersten SPI-bits multiplexen.

Da frage ich mich, ob man sowas nicht händisch nachbauen könnte? Hat 
jemand ne Idee? Das fänd ich ziemlich sexy.

Spontan fallen mir zwei Lösungen ein
1. Controllbits am Anfang
2. seriellisieren aller SPI Kommandos (CLK geht erst zu Gerät A, dann zu 
B, CS für alle gleich)

Man könnte zum Beispiel mit nem Counterbaustein die CS der einzelnen 
Geräte auslösen lassen.

Vielleicht habt ihr ja bessere Ideen

Schorsch

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Je nach Geschwindigkeit kannste doch nen Prozessor zwischenschalten.
Der bekommt über die Diffleitung seine Befehle und befragt dann die SPI 
Geräte hinter ihm.

von Arne (Gast)


Lesenswert?

In der Firma machen wir das so:
ein /CS an SPI-Flash und über Inverterstufe an SPI-EEPROM, d.h. es ist 
immer genau ein Device selektiert. Wenn keine Daten kommen, ist es ja 
auch egal.
Mussten wir so machen, da alle µC GPIOs schon verbraucht waren.

von Schorsch (Gast)


Lesenswert?

Hallo,

klar n atmega8 im slave betrieb geht, ich hatte gehofft, dass es eine 
einfachere Lösung gäbe.

Könnte man zB nicht einfache einen hc595 (8bit output shift-register) 
dranhängen und über seine Leitungen die CS steuern. Ich denke, das würde 
gehen, nur die Programmierung wird dann häßlich - schöner wäre es statt 
8bit immer 16 rauszuschicken, oder statt 8bit 9bit.

@Arne:
CS einmal auf High und einmal auf Low gehen zu lassen finde ich nicht so 
schön. Lässt sich, denke ich, nicht universell einsetzen, nicht alle 
Geräte mögen dauerhaftes CS Low. Oder, was ist wenn ich mehrere von 
diesen SPI Slave-boards habe....


Danke

von Arc N. (arc)


Lesenswert?

So was http://ww1.microchip.com/downloads/en/DeviceDoc/21952b.pdf 
vielleicht?
Ist ein SPI IO-Expander...

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Den Expander kombiniert mit der low/high Methode und schon hat mans:
CS low spricht den Expander an, hinter den Expander kommt nen NAND und 
schon is bei CS high und gesetztem Ausgang der Slave aktiviert.

von Schorsch (Gast)


Lesenswert?

Ich ralls nicht,

macht der hc595 nicht genau das gleiche? Nur in billiger

Gibts nicht vielleicht einen SPI-Multiplexter-IC?

Schorsch

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Nö, der 595 bräuchte noch ne Taktflanke am RCK um den Inhalt des 
Schieberegisters ins Ausgangslatch zu übernehmen.
Könnte man die CS TFlanke für missbrauchen.
-> machts gleiche nur anders beschalten und warscheinlich unsicherer

Der verlinkte IC ist doch SPI, steht eben nur was von I2C weils den in 2 
Varianten gibt.

von Eumel (Gast)


Lesenswert?

Außerdem ist es ein I/O Expander. Ein 595 kann ja nur Ausgänge bereit 
stellen.

von Schorsch (Gast)


Lesenswert?

> Der verlinkte IC ist doch SPI, steht eben nur was von I2C weils den in 2
Varianten gibt.

Jaja, das kapier ich schon....

vielleicht versteht ihr noch nicht, was ich gerne hätte.

Normalerweise, mit 2CS Leitung würde ich machen

CS1 Low
MOSI laufen lassen 11001100
CS1 High
CS2 Low
MOSI laufen lassen 10101010
CS2 High

Ich würde jetzt gerne mit Hilfe der oben beschriebenen Anschlußvariante 
(Ethernetkabel, nur ein CS):
CS Low
MOSI laufen lassen 1100110010101010
CS High

Auf dem Satelite Board müsse alles von Selbst gemuxt werden

alternativ könnte man auch ein select-bit mitschicken

CS Low
MOSI laufen lassen 011001100 (0 vorweg, der erste ist selektiert)
CS High

CS Low
MOSI laufen lassen 110101010 (1 vorweg, der zweite ist selektiert)
CS High


Schorsch

von asd (Gast)


Lesenswert?

Du kannst ja die CS Leitung umwidmen und einen uC dran hängen der per 
RS232-Protokoll (braucht nur eine Leitung) die Anweisung kriegt welches 
CS er aktivieren soll.

von Schorsch (Gast)


Lesenswert?

asd schrieb:
> Du kannst ja die CS Leitung umwidmen und einen uC dran hängen der per
> RS232-Protokoll (braucht nur eine Leitung) die Anweisung kriegt welches
> CS er aktivieren soll.

Ich denke, die Lösung die weiter oben beschrieben wurde, einen µC als 
Slave anzuschlißen ist deutlich performanter.

Ohne das jetzt im detail ausrechnen zu wollen, aber mit SPI kannst Du 
bei halber CLK rate arbeiten, ein asynchrones Protokoll schafft das 
nicht

Schorsch

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.