Fehlerkennenung bei SPI - Mulit-Master-Protokoll

Gast #2277899
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?
Gast
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.
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.
Gast
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.
Gast
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?
Gast
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.
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.
Gast
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.
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.
Gast
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.
Moderator (Firma: Titel) Persönliche Seite
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.
Gast
>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.
Gast
>> 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;)
Gast
>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.
Gast
>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.
Gast
>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.
Gast
>>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;)
Gast
>>>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.
Gast
>>>>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.
Gast
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.