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
Je nach Geschwindigkeit kannste doch nen Prozessor zwischenschalten.
Der bekommt über die Diffleitung seine Befehle und befragt dann die SPI
Geräte hinter ihm.
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.
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
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.
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.
> 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
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.
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