Mehrere SPI Geräte nur ein CS

Gast #3036233
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
Gast #3036249
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.
Gast #3036279
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
(Firma: fritzler-avr.de) #3036331
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.
Gast #3036343
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
Gast #3036408
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

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