Frage steht im Betreff,
Bin SPI gerade nur theorethisch durchgegangen (arbeite eig immer mit
I²C) und da stellte sich mir die obengenannte Frage. Hab ich irgendwas
wichtiges übersehen? Oder könnte man nicht THEORETHISCH das ganze auf 3
Leitungen reduzieren? Es ist nur ein Gedankengang, habe nicht vor das
ganze Umzusetzen.
LG
SPI-Fragensteller schrieb:> Warum wird bei SPI nicht die SS Leitung gleichzeitig als SCK Leitung genutzt?
Weil es die SCK Leitung schon gibt? Oder vielleicht solltest du deinen
Gedanken noch detaillierter ausführen.
Nein, dann hast du es nicht verstanden.
Es gibt einige IC-Bausteine, die keinen Latch/CS/SS haben. Hier muss du
dich dann selbst darum kümmern, dass die SCK abgeschaltet wird.
Was heißt für dich 3 Leitungen?
VCC kannst du weglassen, wenn das IC fremdgespeisst wird mit einer
identischen Spannung. GND sollte immer mitgenommen werden. Dazu dann
noch mindestens MOSI und SCK. MISO wird nur benötigt, wenn man auch eine
Antwort von dem Gerät zu erwarten hat. Latch/CS/SS wie oben beschrieben.
SPI-Fragensteller schrieb:> Oder könnte man nicht THEORETHISCH das ganze auf 3> Leitungen reduzieren?
Ja, wenn du nur einen IC hast, dann kannst du auf SS verzichten
bei I2C sendest du eine Device-Adresse mit, um eins von mehreren
Bauteilen am Bus auszuwählen.
Bei SPI ist das nicht der Fall. Deswegen brauchst du (sofern du mehrere
Bauteile am selben MOSI, MISO-Paar betreiben willst), irgendeine andere
Art, um die Bauteile zu unterscheiden. Das geht über individuelle
SS-Signale (je eins pro SPI-Slave).
Karl schrieb:> Weil man mit SCK den Takt ausgibt und mit SS den anzusprechenden Chip> wählt? Im Gegensatz zu I2C gibt es bei SPI keine Adressen.
Hallo Karl,
ganz richtig ist das nicht. Auch wenn es nur wenige ICs sind, die
Adressen unterstützen. Zum Beispiel können die MCP23S17/08
SPI-Portexpander auch über eine Adresse angesprochen werden. Aber vom
Funktionsprinzip SPI ist es schon richtig, dass die Geräte per CS
gewählt werden sollen.
Ahhhhh... Sorry doof formuliert,
Warum wird bei SPI nicht die SS Leitung als SCK Leitung genutzt.
Ergo keine SCK Leitung und die Clock halt über die Select Leitung. Ich
seh nicht so ganz den Sinn der Clock Leitung wenn man das ganze doch
auch über die Select Leitung schicken könnte. würde man sich Halt eine
Leitung sparen.
Sicherlich ist mein Gedanke falsch, doch ich wüsste gerne warum
SPI-Fragensteller schrieb:> Ergo keine SCK Leitung und die Clock halt über die Select Leitung. Ich> seh nicht so ganz den Sinn der Clock Leitung wenn man das ganze doch> auch über die Select Leitung schicken könnte. würde man sich Halt eine> Leitung sparen.>> Sicherlich ist mein Gedanke falsch, doch ich wüsste gerne warum
Man müsste dann für jeden Slave eine eigene Taktquelle am µC haben. Bei
der bestehenden Lösung hat man eine an drei Pins realisierte (und
synchronisierte!) SPI-Schnittstelle und kann dann einfache I/O-Ports für
das SS nehmen.
Das wäre zumindest mein Erklärungsversuch :-)
SPI-Fragensteller schrieb:> Sicherlich ist mein Gedanke falsch, doch ich wüsste gerne warum
Ich würde jetzt mal annehmen, weil mit der CS-Leitung der Chip "häufig"
nicht nur ausgewählt, sondern auch aktiviert wird. Und das wäre mit
einem Pegel deutlich einfacher, als mit einer Flanke zu erreichen.
Die Frage ist aber gut :-)
SPI-Fragensteller schrieb:> Ergo keine SCK Leitung und die Clock halt über die Select Leitung.
Ein Chip wird also abgewählt, indem ihm die Clock-Leitung geklaut wird?
Machen zum Beispiel APA102 so. Vermutlich ist es aber für die Hardware
des Masters einfacher, die Taktung immer auf den gleichen Pin zu legen.
Außerdem hat SS/CS keine hohen Anforderungen an die Signalqualität, SCK
schon höhere.
SPI-Fragensteller schrieb:> Ahhhhh... Sorry doof formuliert,>> Warum wird bei SPI nicht die SS Leitung als SCK Leitung genutzt.>> Ergo keine SCK Leitung und die Clock halt über die Select Leitung. Ich> seh nicht so ganz den Sinn der Clock Leitung wenn man das ganze doch> auch über die Select Leitung schicken könnte. würde man sich Halt eine> Leitung sparen.>> Sicherlich ist mein Gedanke falsch, doch ich wüsste gerne warum
Wie sollen da mehrere Geräte ausgewählt/unterschieden werden?
I2C ist physikalische Schnittstelle + Protokoll, SPI hat dagegen kein
definiertes Protokoll.
SS setzt auch die SPI Logik auf einen definierten
Zustand. Wenn man z.B. aus irgend einem Grund nur
drei Takte reingegeben hat und dann SS high, SS low
macht, werden diese drei Takte quasi verworfen und
man kann einfach wieder 8 Bits schicken. Bei SPI
Flash wird z.B. ein Schreibzyklus erst gestartet
wenn die CS Leitung wieder high wird.
Man muss auch bedenken, dass SPI aus einer Zeit stammt, als RAM und
EPROM noch getrennte Chips waren, mit je 28 oder mehr Pins. Da kam es
auf den einen SPI-SS wirklich nicht an.
Der Motorola MC68332 hat z.B. 132 Pins, davon 1 UART, 1 SPI (allerdings
mit 4 SS) und 17 Timer-Pins - der Rest wird hauptsächlich für Speicher
gebraucht, z.B. 11 Chip-Select.
dummy schrieb:> SS setzt auch die SPI Logik auf einen definierten> Zustand. Wenn man z.B. aus irgend einem Grund nur> drei Takte reingegeben hat und dann SS high, SS low> macht, werden diese drei Takte quasi verworfen und> man kann einfach wieder 8 Bits schicken. Bei SPI> Flash wird z.B. ein Schreibzyklus erst gestartet> wenn die CS Leitung wieder high wird.
Oder auch die einfachste Form von SPI-Peripherie, Schieberegister. CS
fungiert hier als Latch - denn das Schieberegister schiebt bei jedem
SPI-Transfer mit, übernimmt aber nur durch CS-Flanken den Registerinhalt
ins Ausgangsregister. Das wäre ohne CS alles deutlich komplexer.
Chris D. schrieb:> Man müsste dann für jeden Slave eine eigene Taktquelle am µC haben. Bei> der bestehenden Lösung hat man eine an drei Pins realisierte (und> synchronisierte!) SPI-Schnittstelle und kann dann einfache I/O-Ports für> das SS nehmen.>> Das wäre zumindest mein Erklärungsversuch :-)Jan H. schrieb:> Ein Chip wird also abgewählt, indem ihm die Clock-Leitung geklaut wird?> Machen zum Beispiel APA102 so. Vermutlich ist es aber für die Hardware> des Masters einfacher, die Taktung immer auf den gleichen Pin zu legen.> Außerdem hat SS/CS keine hohen Anforderungen an die Signalqualität, SCK> schon höhere.
Das Klingt für mich beides danach als wenn SPI eine Hardware Clock
nutzt.
Ich gehe von einer SW gesteuerten Clock aus, bin ich damit auf dem
falschen Dampfer? Bei einer SW gesteuerten Clock dürfte ihm doch Piep
egal sein welcher I/O Pin genutzt wird oder?
Torsten R. schrieb:> Ich würde jetzt mal annehmen, weil mit der CS-Leitung der Chip "häufig"> nicht nur ausgewählt, sondern auch aktiviert wird. Und das wäre mit> einem Pegel deutlich einfacher, als mit einer Flanke zu erreichen.>> Die Frage ist aber gut :-)
Das stimmt!
dummy schrieb:> SS setzt auch die SPI Logik auf einen definierten> Zustand. Wenn man z.B. aus irgend einem Grund nur> drei Takte reingegeben hat und dann SS high, SS low> macht, werden diese drei Takte quasi verworfen und> man kann einfach wieder 8 Bits schicken. Bei SPI> Flash wird z.B. ein Schreibzyklus erst gestartet> wenn die CS Leitung wieder high wird.
Auch logisch, aber wie oft verwirft man schon seine eigenen Daten?!
eagle user schrieb:> Man muss auch bedenken, dass SPI aus einer Zeit stammt, als RAM und> EPROM noch getrennte Chips waren, mit je 28 oder mehr Pins. Da kam es> auf den einen SPI-SS wirklich nicht an.>> Der Motorola MC68332 hat z.B. 132 Pins, davon 1 UART, 1 SPI (allerdings> mit 4 SS) und 17 Timer-Pins - der Rest wird hauptsächlich für Speicher> gebraucht, z.B. 11 Chip-Select.
Also ich kämpfe hin und wieder schon um eine Leitung mehr oder weniger
:)
Also:
Wenn ich weder vorhabe meine eigenen Daten eventuell beim Senden zu
verwerfen oder ein IC "zu wecken" gibt es keinen Grund eine SCK Leitung
zu legen? Vorausgesetzt man schreibt sich die Datenübertragen etwas
zurecht?
Ist wie gesagt nur eine theorethische Fragestellung die mir so durch den
Kopf gegangen ist. Wer weiß vielleicht kann ich irgendwann kein I²C
nutzen und hab auch nur 3 I/O's offen :-)
Vielen Dank für eure Antworten!
LG
SPI-Fragensteller schrieb:> Das Klingt für mich beides danach als wenn SPI eine Hardware Clock> nutzt.> Ich gehe von einer SW gesteuerten Clock aus, bin ich damit auf dem> falschen Dampfer? Bei einer SW gesteuerten Clock dürfte ihm doch Piep> egal sein welcher I/O Pin genutzt wird oder?
Es geht beides.
SPI ist in Hardware recht einfach zu realisieren.
> Auch logisch, aber wie oft verwirft man schon seine eigenen Daten?!
Es soll auch schon einmal vorgekommen sein, dass Kabel gebrochen sind,
Stecker rausgefallen sind etc.
>> Also ich kämpfe hin und wieder schon um eine Leitung mehr oder weniger> :)
Niemand hindert dich, dir aus dem SS und dem SCLK dir dein eigenes
Kombisignal zu basteln. 2 Signale zu kombinieren ist einfacher als aus
einem Kombisignal die Einzelteile wieder zu extrahieren.
> Wenn ich weder vorhabe meine eigenen Daten eventuell beim Senden zu> verwerfen oder ein IC "zu wecken" gibt es keinen Grund eine SCK Leitung> zu legen? Vorausgesetzt man schreibt sich die Datenübertragen etwas> zurecht?
Das kommt auf die Gegenstelle an.
Wenn die mit dem, was du ihr gibst etwas anfangen kann, dann mach es so.
Aber für die meisten Slaves ist es halt um einiges einfacher einen
'Master-Eingang' zu haben (den Chip Select). Solange der nicht richtig
steht, ignoriert das IC alles an seinen Pins und hält sich aus allem
anderen raus (aktiviert also auch nicht seinen MISO Ausgang).
CS ist vor allem auch für die Synchronisation zwischen den ICs. Das was
bei I2C eine Startcondition ist, entspricht bei SPI der CS-Leitung. Man
könnte diese auch weglasssen und ein CLK/Slave verlegen, aber sobald aus
irgendeinem Grund ein Takt nicht beim Slave ankommt, kannst du dich mit
diesem nicht mehr synchronisieren.
Es gibt SPI-ICs, wo man /CS dauerhaft auf GND legen kann.
Z.B. der MM5450 synchronisiert auf das erste 1-Bit, d.h. man kann ihn
mit 2 Leitungen ansteuern.
http://www.farnell.com/datasheets/57504.pdf