Hallo zusammen,
ich schreib gerade meine Abschlussarbeit, unter anderem behandel ich den
SPI-Bus im Grundlagenkapitel.
Ich habe gelesen, dass beispielsweise der MC68HC11 von Motorola eine
hardwaremäßige Fehlererkennung besitzt, die mit dem CRC-Prüfverfahren
realisiert ist.
Ich habe auch gelesen, dass für das SPI ein Multimaster-Protokoll
existiert.
Wie wird denn ein Fehler erkannt, wenn z. B. zwei Busteilnehmer
gleichzeit Master sein möchten? Gibt es da eine Fehlererkennung? Und was
passiert wenn beide gleichzeitig auf den Bus zugreifen möchten?
Ein SPI mit hardwaregernerierte CRC? Hast Du den Link zum Datenblatt.
Das habe ich noch nicht gesehen.
SPI-Multimaster Protokoll? Vermutlich wird das aber wohl über Slave
Select bzw. Chip Select gesteuert.
Und zu deiner Frage. Nein. Du kannst höchstens selber auf den
Bus-Leitungen lauschen...
coder schrieb:> Ein SPI mit hardwaregernerierte CRC? Hast Du den Link zum Datenblatt.> Das habe ich noch nicht gesehen.
Gibts beispielsweise bei STM32.
> SPI-Multimaster Protokoll? Vermutlich wird das aber wohl über Slave> Select bzw. Chip Select gesteuert.
Yep. Wenn ein Slave als Master und als Slave agieren kann und der
SS-Input aktiv wird während der Controller selber als Master aktiv
werden will, dann gab es eine Kollision.
Daniel schrieb:> Ich habe gelesen, dass beispielsweise der MC68HC11 von Motorola eine> hardwaremäßige Fehlererkennung besitzt, die mit dem CRC-Prüfverfahren> realisiert ist.
Vom Cortex hast Du nicht geschrieben.
A. K. schrieb:> Yep. Wenn ein Slave als Master und als Slave agieren kann und der> SS-Input aktiv wird während der Controller selber als Master aktiv> werden will, dann gab es eine Kollision.
Nächster Versuch: ;-)
Wenn ein Controller als Master und als Slave arbeiten kann und der
SS-Input aktiv wird während der Controller selber als Master agiert,
dann wird eine Kollision erkannt.
A. K. schrieb:
> Wenn ein Controller als Master und als Slave agieren kann und der> SS-Input aktiv wird während der Controller selber als Master aktiv> werden will, dann wird eine Kollision erkannt.
Und wie wird diese Kollision erkannt? Mittels CRC?
Hab ich ja eben geschrieben. Ob er grad Master oder Slave sein will
steht im Steuerregister. Die Hardware kann also Krach schlagen, wenn im
Master Modus SS aktiv wird. Wer jemals versucht hat, die Mysterien des
SS-Signals vom STM32 zu verstehen, der sollte ebendies im Auge behalten.
Daniel schrieb:> Wie wird denn ein Fehler erkannt, wenn z. B. zwei Busteilnehmer> gleichzeit Master sein möchten? Gibt es da eine Fehlererkennung? Und was> passiert wenn beide gleichzeitig auf den Bus zugreifen möchten?
Also zwei Master möchten gleichzeig auf einen z.B. Dritten
SPI-Teilnehmer, welcher als Slave arbeitet, zugreifen. Interpretiere
ich das richtig?
SPI ist kein Multimaster-Bus!
Und wenn man einen Slave an mehrere Master anschliessen will, dann
muß man sich sich schon mal was für die Zuteilung der
Slave-Select-Leitung ausdenken.
Vielleicht erbarmt sich der Threadersteller und formuliert ein konkretes
Beispiel zu seiner Frage. Wie viele Busteilnehmer und wie sie verbunden
sind. So ratet man nur.
A. K. schrieb:>> SPI ist kein Multimaster-Bus!> Geht:
Klar geht das. Nur hat das mit SPI an sich nicht mehr viel zu tun...
> Wie sich das bei mehr als 2 Devices darstellt habe ich grad nicht parat.
Aber genau das wäre interessant: 1 Speicher-IC und 2 uC, die darauf
zugreifen können.
Lothar Miller schrieb:> Aber genau das wäre interessant: 1 Speicher-IC und 2 uC, die darauf> zugreifen können.
Controller-1 SS-raus => Controller-2 SS-rein.
Controller-2 SS-raus => Controller-1 SS-rein.
Beide SS-raus gehen zusätzlich entkoppelt an SS vom Speicher. SO vom
Speicher geht an die SIs beider Controller.
Zum prinzipiellen Verfahren siehe verlinken Thread grad eben. Die
Controller kriegen natürlich den Traffic zwischen dem Kollegen und dem
Speicher ebenfalls mit, weil selber grad Slave, zum wegwerfen.
Ist mittel Diodengattern (AND-Funktion) auf beliebig viele Masters und
Slaves ausbaufähig.
A. K. schrieb:> Controller-1 SS-raus => Controller-2 SS-rein.> Controller-2 SS-raus => Controller-1 SS-rein.> ....
SPI ist nicht sehr genau standardisiert, von 3 bis 4 oder 5 Leitungen,
von 8 Bit bis 32 und mehr Bit, von durchlaufender Clock auch bei
inaktivem Select gibts fast alles. Ich kenne auch Bausteine, von denen
mehrere mit einem Select adressiert werden können.
Es ist eigentlich nur eine synchrone serielle Übertragung, und jedem
steht natürlich frei, da noch etwas dazu zu erfinden. Ob man das dann
noch SPI nennt ???
MfG Klaus
Klaus schrieb:> Es ist eigentlich nur eine synchrone serielle Übertragung, und jedem> steht natürlich frei, da noch etwas dazu zu erfinden. Ob man das dann> noch SPI nennt ???
Nein. Dann kommt die Spi-PolizeI und nimmt dich fest. ;-)
SPI ist kein echter Standard. Mach damit was du willst, nenn es wie du
willst und sei glücklich wenn es funktioniert. Vermutlich ist nicht
einmal der Name geschützt.
A. K. schrieb:> SPI ist kein echter Standard.
Es hilft nur manchmal bei der Kommunikation, wenn beide Seiten (Menschen
wie Maschienen) unter den gleichen Begriffen das selbe verstehen.
MfG Klaus
Klaus schrieb:> Es hilft nur manchmal bei der Kommunikation, wenn beide Seiten (Menschen> wie Maschienen) unter den gleichen Begriffen das selbe verstehen.
Tun sie meistens auch. Immerhin ist mir der Kern des beschriebenen
Verfahrens schon bei diversen Controllernfamilien in ähnlicher Form über
den Weg gelaufen, bisher allerdings ohne dass ich mir darüber viel
Gedanken machte: nämlich der Erkennung von aktivem SS-rein bei aktivem
Master-Modus als Buskollision.
Das ist also kein Missbrauch von SPI für seltsame Umgebungen, sondern in
solcher oder ähnlicher Form offenbar tatsächlich vorgesehen. Daraus
erklärt sich auch der Bug früher LPC2000 beim SS im Master-Modus und die
arg verwirrende Konfigurationsmimik der STM32 beim NSS-Pin.
Okay, gehen wir mal weg vom Muli-Master.
Folgendes Szenario:
SPI-Bus mit einem Master und 3 Slaves, kaskadiert, also alle Slaves
werden über eine CS-Leitung gesteuert.
Master schickt Anfrage, alle 3 Slaves empfangen die Botschaft, führen
eine Aktion durch und alle 3 geben gleichzeitig eine Antwort auf den Bus
raus (MISO).
Was passiert?
Besitzt der Bus Wired-AND Funktionalität, so dass die Slaves ihre
sendende Daten gleichzeit abhören und sich zurückziehen, wenn ihre Daten
überschrieben wurden (Prinzip wie beim I2C)?
Daniel schrieb:> SPI-Bus mit einem Master und 3 Slaves, kaskadiert, also alle Slaves> werden über eine CS-Leitung gesteuert.
Wenn du Slaves kaskadierst, dann kaskadierst du sowohl MOSI als auch
MISO, d.h. MISO vom ersten Slave geht an MOSI vom zweiten. Und nur das
MISO vom dritten geht an den Master. Solche kaskadierten Slaves sind im
SPI Sinn ein einziger Slave mit dreifacher Tiefe.
Wenn du mehrere Slaves parallel anschliesst und gleichzeitig aktivierst,
aber die nicht alle nur lesend operieren, sondern ein MISO besitzen,
dann hast du SPI missverstanden.
Daniel schrieb:> Master schickt Anfrage, alle 3 Slaves empfangen die Botschaft, führen> eine Aktion durch und alle 3 geben gleichzeitig eine Antwort auf den Bus> raus (MISO).
Die Denkweise ist falsch. Slaves "geben" da nichts "raus". SPI sind
gekoppelte Schieberegister. Mit jedem Takt wird ein Bit vom und zum
Master übertragen.
Als Tipp: sieh dir mal Queued SPI (QSPI) an. Da werden die Slaves
/hintereinander geschaltet, die Daten durch jeden durchgetaktet und dann
mit steigenden SS übernommen.
Daniel schrieb:> SPI-Bus mit einem Master und 3 Slaves, kaskadiert, also alle Slaves> werden über eine CS-Leitung gesteuert.
Mist, ich meinte damit die Sternförmige Struktur! nicht kaskadiert....
sorry.
>SPI sind gekoppelte Schieberegister.>Mit jedem Takt wird ein Bit vom und zum Master übertragen.
Kann sein, muss aber nicht. Es spricht nichts dagegen, sich sein eigenes
Protokoll zu definieren. Und solange min. 1 Data u. 1 Clk-Ltg da ist
(und Data mit Clk übernommen wird, schon dann ist es SPI), kann man da
alles mögliche machen.
>Als Tipp: sieh dir mal Queued SPI (QSPI) an. Da werden die Slaves>/hintereinander geschaltet, die Daten durch jeden durchgetaktet und dann>mit steigenden SS übernommen.
QSPI wird auch von manchen CPU-Herst. benutzt, als Hinweis für
Queued-SPI-Register (das längere Bitfolgen ein/aus-getaktet werden
können).
Das hat dann nichts mit Hintereinander-Schaltung mehrerer uCs zu tun.
Ausserdem ist da der Nachteil, dass, wenn Einer in der Kette ausfällt,
Diese gestört ist.
>> SPI-Bus mit einem Master und 3 Slaves, kaskadiert, also alle Slaves>> werden über eine CS-Leitung gesteuert.>Mist, ich meinte damit die Sternförmige Struktur! nicht kaskadiert....>sorry.
Also alles parallel mit einem CS? Das geht nicht. Damit
kannst du dir die MISO Pins zerschiessen. Das sind Push/Pull
Ausgänge. Der stärkere gewinnt;)
>Also alles parallel mit einem CS? Das geht nicht. Damit>kannst du dir die MISO Pins zerschiessen. Das sind Push/Pull>Ausgänge. Der stärkere gewinnt;)
Das geht, wenn jeder Slave, wenn adressiert, (mit zus. Gatter) die
Verbindung MISO zum Bus enable schalten kann.
>Das geht, wenn jeder Slave, wenn adressiert, (mit zus. Gatter) die>Verbindung MISO zum Bus enable schalten kann.
Er hat gesagt ein CS. Also keine zusätzlichen Gatter.
Es gibt SPI Chips die man über externe Pins plus interner Adresse
ähnlich wie bei I2C adressieren kann. Die kann man dann auch
komplett parallel schalten. Das ist aber eher die Ausnahme.
>Er hat gesagt ein CS. Also keine zusätzlichen Gatter.
Ja, ein CS an alle.
Das Gatter (kostet paar cent) meine ich zwischen MISO und Bus-Leitung.
>Es gibt SPI Chips die man über externe Pins plus interner Adresse>ähnlich wie bei I2C adressieren kann.
braucht man nicht, zu speziell.
>>Er hat gesagt ein CS. Also keine zusätzlichen Gatter.>Ja, ein CS an alle.>Das Gatter (kostet paar cent) meine ich zwischen MISO und Bus-Leitung.
Ja, ok ein Multiplexer. Kostet aber mindestens einen Pin mehr.
>>Es gibt SPI Chips die man über externe Pins plus interner Adresse>>ähnlich wie bei I2C adressieren kann.>braucht man nicht, zu speziell.
Ich brauch die. Spart Pins;)
>>>Es gibt SPI Chips die man über externe Pins plus interner Adresse>>>ähnlich wie bei I2C adressieren kann.>>braucht man nicht, zu speziell.>Ich brauch die. Spart Pins;)
Viel zu ununiversell.
>>>>Es gibt SPI Chips die man über externe Pins plus interner Adresse>>>>ähnlich wie bei I2C adressieren kann.>>>braucht man nicht, zu speziell.>>Ich brauch die. Spart Pins;)>Viel zu ununiversell.
Und man kann mit Volldampf drauf. Die Durchlaufzeit
vom Multiplexer fällt weg.
Ja, SPI gibts schon solange es Computer gibt.
>Und man kann mit Volldampf drauf.
Mit 120 atü?
Der Skew mindert dem 'Volldampf'.
Bei der max (durch Skew limitierten) Bus-frequenz fällt die
Durchlaufzeit fast nicht ins Gewicht. (Ausserdem hat ja auch das IC eine
Durchlaufzeit drin.) Die man aber auch mit versch. Mitteln eleminieren
kann.
Und bei Source-Synchr. wird Durchlaufzeit auch eleminiert.